diff --git a/.rustfmt.toml b/.rustfmt.toml
index 0c2edf5f..b0be008 100644
--- a/.rustfmt.toml
+++ b/.rustfmt.toml
@@ -22,4 +22,5 @@
 # Third party code is formatted upstream.
 ignore = [
   "third_party/rust/**/crate",
+  "third_party/rust/chromium_crates_io/vendor",
 ]
diff --git a/DEPS b/DEPS
index 95f01ca..284e4b1 100644
--- a/DEPS
+++ b/DEPS
@@ -305,11 +305,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'src_internal_revision': '66690edc601db6694434d7be268b39275daf9ba4',
+  'src_internal_revision': 'f62985a32f0c92053e73ebb03c3f801005933bb3',
   # 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': '5fbacd5d68a5e722eb516ed91301d894f57ac00c',
+  'skia_revision': 'bd8546dab41cf13042af58117a6b588cbad14085',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
@@ -317,7 +317,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': 'a75659eb40cc887619bb1e4d4efb91030891ced7',
+  'angle_revision': '95bacc28b87bf1ea639891b7fb7e17d2afc868a1',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -400,7 +400,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': 'bac5f4964ab90c18db43d5ab2bcbc427f7227ad4',
+  'devtools_frontend_revision': '38dbfd6ebfcc88a082cb696ed4c0f856dcf70064',
   # 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.
@@ -424,7 +424,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': '235d4e59cb461ae67751d591d10315e427b0a934',
+  'dawn_revision': '677226ee5e87716621909c237927b74e2d741896',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -444,7 +444,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libavif
   # and whatever else without interference from each other.
-  'libavif_revision': '622336e419de70bc1cf32d08fade6ef0fa58a547',
+  'libavif_revision': '026096bebdbe8bfe33d5037598bbb916558021d9',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libavifinfo
   # and whatever else without interference from each other.
@@ -824,12 +824,12 @@
 
   'src/clank': {
     'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' +
-    '0f952cb0548617cdb61a432963ef1b3b57beac10',
+    'cde03d6fb6898bc89e52452e83bacabb47e3f05d',
     'condition': 'checkout_android and checkout_src_internal',
   },
 
   'src/docs/website': {
-    'url': Var('chromium_git') + '/website.git' + '@' + '74217e7dc033f862d09ed172eb52299e5062640d',
+    'url': Var('chromium_git') + '/website.git' + '@' + '391560ed8ad527f3e8a778a1422f5c221cd9266e',
   },
 
   'src/ios/third_party/earl_grey2/src': {
@@ -1183,7 +1183,7 @@
   # Tools used when building Chrome for Chrome OS. This affects both the Simple
   # Chrome workflow, as well as the chromeos-chrome ebuild.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '955a67be684c4a95541ef7ee31e14ae860cd2d59',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '74e55f68b5d4e5e0e958a02b306cc062caf1c7ca',
       'condition': 'checkout_chromeos',
   },
 
@@ -1218,13 +1218,13 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'b0cfbe504be43b05745de4ddff41ffba7feea706',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'fba0ae4a3815f379514572b04e9cd215eaf54849',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
 
   'src/third_party/devtools-frontend-internal': {
-      'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '7622fc040bfb73ebf8f196260dbe70d725310f33',
+      'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '1d8f26cd37329b727cc509ee2ab8414b6412317e',
     'condition': 'checkout_src_internal',
   },
 
@@ -1871,10 +1871,10 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'f4bf599a8b575df685c31d9c4729a70a04e377ed',
 
   'src/third_party/webgpu-cts/src':
-    Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '0e06340de1e50169093ea5951d55a4dce983f719',
+    Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'd3e4c5300efaec139cc5728c3455508386fe4db2',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '5a6f022c934ce54f9fe58a511e5a30aa02b70888',
+    Var('webrtc_git') + '/src.git' + '@' + '25c2344b06a3c76893930613b957d2468df6c3a3',
 
   # 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.
@@ -2008,7 +2008,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': 'ibCF1w0dOsDFr-_D5PL2o9imremOL1sOmYB_iwxwNJYC',
+        'version': 'FvLaeQSoWZuGaOhPguxDbSLl5gvzTt6_ekzGbEVwj6YC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -3789,7 +3789,7 @@
   # Dependencies from src_internal
   'src/chromeos/assistant/internal': {
       'url': Var('chrome_git') + '/chrome/assistant.git' + '@' +
-        'bb135af4b5a8c4dac961301673e90dc572c597c5',
+        'a37ceadae42f6bff3e3f7cb519c509c4037cd8f2',
       'condition': 'checkout_src_internal and checkout_chromeos',
     },
 
@@ -4031,7 +4031,7 @@
 
   'src/ios_internal':  {
       'url': Var('chrome_git') + '/chrome/ios_internal.git' + '@' +
-        'ffad5e3cdc70181d9913574cd90ede7b9be515da',
+        'efe7eeeaf4dbd8c81218e61413c847859fe081f9',
       'condition': 'checkout_ios and checkout_src_internal',
   },
 
diff --git a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
index c0297c2c2..0e62d090 100644
--- a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
+++ b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
@@ -492,6 +492,7 @@
         Flag.baseFeature(BlinkFeatures.HIT_TEST_OPAQUENESS),
         Flag.baseFeature(BlinkFeatures.INTERSECTION_OPTIMIZATION),
         Flag.baseFeature(BlinkFeatures.SOLID_COLOR_LAYERS),
+        Flag.baseFeature(BlinkFeatures.EXPAND_COMPOSITED_CULL_RECT),
         Flag.baseFeature(BlinkFeatures.SCROLLBAR_COLOR),
         Flag.baseFeature(
                 BlinkFeatures.DELAY_OUT_OF_VIEWPORT_LAZY_IMAGES,
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index e125fe3..316a2cd 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -3190,6 +3190,7 @@
     "assistant/ui/main_stage/assistant_query_view_unittest.cc",
     "assistant/ui/main_stage/assistant_text_element_view_unittest.cc",
     "assistant/ui/main_stage/assistant_zero_state_view_unittest.cc",
+    "assistant/ui/main_stage/launcher_search_iph_view_unittest.cc",
     "assistant/ui/main_stage/suggestion_chip_view_unittest.cc",
     "assistant/ui/main_stage/ui_element_container_view_unittest.cc",
     "assistant/util/deep_link_util_unittest.cc",
diff --git a/ash/app_list/views/assistant/assistant_dialog_plate.cc b/ash/app_list/views/assistant/assistant_dialog_plate.cc
index 9cdb171d..94e0e39f 100644
--- a/ash/app_list/views/assistant/assistant_dialog_plate.cc
+++ b/ash/app_list/views/assistant/assistant_dialog_plate.cc
@@ -24,6 +24,7 @@
 #include "chromeos/ui/vector_icons/vector_icons.h"
 #include "components/vector_icons/vector_icons.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/chromeos/styles/cros_tokens_color_mappings.h"
 #include "ui/color/color_provider.h"
@@ -63,6 +64,8 @@
 
 // Textfield used for inputting text based Assistant queries.
 class AssistantTextfield : public views::Textfield {
+  METADATA_HEADER(AssistantTextfield, views::Textfield)
+
  public:
   AssistantTextfield() { SetID(AssistantViewID::kTextQueryField); }
 
@@ -70,6 +73,9 @@
   const char* GetClassName() const override { return "AssistantTextfield"; }
 };
 
+BEGIN_METADATA(AssistantTextfield)
+END_METADATA
+
 void ShowKeyboardIfEnabled() {
   auto* keyboard_controller = KeyboardUIController::Get();
 
diff --git a/ash/app_list/views/contents_view.cc b/ash/app_list/views/contents_view.cc
index d4f6013..e96122b 100644
--- a/ash/app_list/views/contents_view.cc
+++ b/ash/app_list/views/contents_view.cc
@@ -22,6 +22,7 @@
 #include "base/check_op.h"
 #include "base/functional/bind.h"
 #include "base/notreached.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/compositor/layer.h"
 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
 #include "ui/compositor/scoped_layer_animation_settings.h"
@@ -492,10 +493,6 @@
   search_box->layer()->SetTransform(gfx::Transform());
 }
 
-const char* ContentsView::GetClassName() const {
-  return "ContentsView";
-}
-
 void ContentsView::TotalPagesChanged(int previous_page_count,
                                      int new_page_count) {}
 
@@ -606,4 +603,7 @@
   return widget_rect;
 }
 
+BEGIN_METADATA(ContentsView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/app_list/views/contents_view.h b/ash/app_list/views/contents_view.h
index 282cc4a9..bbb9fae1 100644
--- a/ash/app_list/views/contents_view.h
+++ b/ash/app_list/views/contents_view.h
@@ -16,6 +16,7 @@
 #include "ash/public/cpp/pagination/pagination_model_observer.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/raw_ptr_exclusion.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/view.h"
 
 namespace gfx {
@@ -45,6 +46,8 @@
 // between them.
 class ASH_EXPORT ContentsView : public views::View,
                                 public PaginationModelObserver {
+  METADATA_HEADER(ContentsView, views::View)
+
  public:
   // Used to SetActiveState without animations.
   class ScopedSetActiveStateAnimationDisabler {
@@ -165,7 +168,6 @@
 
   // Overridden from views::View:
   void Layout() override;
-  const char* GetClassName() const override;
 
   // Overridden from PaginationModelObserver:
   void TotalPagesChanged(int previous_page_count, int new_page_count) override;
diff --git a/ash/app_list/views/folder_header_view.cc b/ash/app_list/views/folder_header_view.cc
index 1457e00a..b960cc8 100644
--- a/ash/app_list/views/folder_header_view.cc
+++ b/ash/app_list/views/folder_header_view.cc
@@ -23,6 +23,8 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "ui/base/cursor/cursor.h"
+#include "ui/base/metadata/metadata_header_macros.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/compositor/layer.h"
 #include "ui/gfx/canvas.h"
@@ -79,6 +81,8 @@
 
 class FolderHeaderView::FolderNameView : public views::Textfield,
                                          public views::ViewTargeterDelegate {
+  //  METADATA_HEADER(FolderNameView, views::Textfield)
+
  public:
   explicit FolderNameView(FolderHeaderView* folder_header_view)
       : folder_header_view_(folder_header_view) {
@@ -257,9 +261,14 @@
   bool has_mouse_already_entered_ = false;
 };
 
+// BEGIN_METADATA(FolderHeaderView, FolderNameView, views::Textfield)
+// END_METADATA
+
 class FolderHeaderView::FolderNameJellyView
     : public ash::SystemTextfield,
       public views::ViewTargeterDelegate {
+  METADATA_HEADER(FolderNameJellyView, ash::SystemTextfield)
+
  public:
   explicit FolderNameJellyView(bool tablet_mode)
       : ash::SystemTextfield(ash::SystemTextfield::Type::kMedium),
@@ -330,6 +339,9 @@
   std::u16string starting_name_;
 };
 
+BEGIN_METADATA(FolderHeaderView, FolderNameJellyView, ash::SystemTextfield)
+END_METADATA
+
 class FolderHeaderView::FolderNameViewController
     : public SystemTextfieldController {
  public:
@@ -471,10 +483,6 @@
                    folder_name_view_->GetPreferredSize().height());
 }
 
-const char* FolderHeaderView::GetClassName() const {
-  return "FolderHeaderView";
-}
-
 void FolderHeaderView::OnBoundsChanged(const gfx::Rect& previous_bounds) {
   Update();
 }
@@ -601,4 +609,7 @@
   Update();
 }
 
+BEGIN_METADATA(FolderHeaderView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/app_list/views/folder_header_view.h b/ash/app_list/views/folder_header_view.h
index be768e31..25bfc4d 100644
--- a/ash/app_list/views/folder_header_view.h
+++ b/ash/app_list/views/folder_header_view.h
@@ -11,6 +11,7 @@
 #include "ash/app_list/model/app_list_item_observer.h"
 #include "ash/ash_export.h"
 #include "base/memory/raw_ptr.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/controls/textfield/textfield_controller.h"
 #include "ui/views/view.h"
@@ -24,6 +25,8 @@
 class ASH_EXPORT FolderHeaderView : public views::View,
                                     public views::TextfieldController,
                                     public AppListItemObserver {
+  METADATA_HEADER(FolderHeaderView, views::View)
+
  public:
   FolderHeaderView(FolderHeaderViewDelegate* delegate, bool tablet_mode);
 
@@ -40,7 +43,6 @@
 
   // views::View:
   gfx::Size CalculatePreferredSize() const override;
-  const char* GetClassName() const override;
   void OnBoundsChanged(const gfx::Rect& previous_bounds) override;
 
   views::Textfield* GetFolderNameViewForTest() const;
diff --git a/ash/app_list/views/page_switcher.cc b/ash/app_list/views/page_switcher.cc
index acd2d99c..624b1b3 100644
--- a/ash/app_list/views/page_switcher.cc
+++ b/ash/app_list/views/page_switcher.cc
@@ -19,6 +19,7 @@
 #include "third_party/skia/include/core/SkPath.h"
 #include "ui/accessibility/ax_enums.mojom.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/gfx/animation/throb_animation.h"
 #include "ui/gfx/canvas.h"
diff --git a/ash/app_list/views/pulsing_block_view.cc b/ash/app_list/views/pulsing_block_view.cc
index 435670b..93f4f84 100644
--- a/ash/app_list/views/pulsing_block_view.cc
+++ b/ash/app_list/views/pulsing_block_view.cc
@@ -13,6 +13,7 @@
 #include "ash/style/dark_light_mode_controller_impl.h"
 #include "base/check_op.h"
 #include "third_party/skia/include/core/SkColor.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/compositor/layer.h"
 #include "ui/compositor/layer_animation_element.h"
 #include "ui/compositor/layer_animation_sequence.h"
@@ -125,4 +126,7 @@
   return true;
 }
 
+BEGIN_METADATA(PulsingBlockView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/app_list/views/pulsing_block_view.h b/ash/app_list/views/pulsing_block_view.h
index 036f208..21ec3cd 100644
--- a/ash/app_list/views/pulsing_block_view.h
+++ b/ash/app_list/views/pulsing_block_view.h
@@ -8,6 +8,7 @@
 #include "base/compiler_specific.h"
 #include "base/memory/raw_ptr.h"
 #include "base/timer/timer.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/view.h"
 
 namespace gfx {
@@ -18,6 +19,8 @@
 
 // PulsingBlockView shows a pulsing white circle via layer animation.
 class PulsingBlockView : public views::View {
+  METADATA_HEADER(PulsingBlockView, views::View)
+
  public:
   // Constructs a PulsingBlockView of |size|. Starts the pulsing animation after
   // a |animation_delay|.
diff --git a/ash/app_list/views/search_box_view.cc b/ash/app_list/views/search_box_view.cc
index 41ea1363..1649bfa8 100644
--- a/ash/app_list/views/search_box_view.cc
+++ b/ash/app_list/views/search_box_view.cc
@@ -54,6 +54,8 @@
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/base/ime/composition_text.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_header_macros.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/models/simple_menu_model.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/chromeos/styles/cros_tokens_color_mappings.h"
@@ -264,6 +266,8 @@
 }  // namespace
 
 class CheckBoxMenuItemView : public views::MenuItemView {
+  METADATA_HEADER(CheckBoxMenuItemView, views::MenuItemView)
+
  public:
   CheckBoxMenuItemView(views::MenuItemView* parent,
                        int command,
@@ -293,6 +297,9 @@
   raw_ptr<AppListViewDelegate> view_delegate_ = nullptr;
 };
 
+BEGIN_METADATA(CheckBoxMenuItemView)
+END_METADATA
+
 class FilterMenuAdapter : public views::MenuModelAdapter {
  public:
   FilterMenuAdapter(ui::SimpleMenuModel* menu_model,
@@ -752,10 +759,6 @@
   }
 }
 
-const char* SearchBoxView::GetClassName() const {
-  return "SearchBoxView";
-}
-
 void SearchBoxView::OnThemeChanged() {
   SearchBoxViewBase::OnThemeChanged();
 
@@ -1731,4 +1734,7 @@
   return view_delegate_->GetToggleableCategories();
 }
 
+BEGIN_METADATA(SearchBoxView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/app_list/views/search_box_view.h b/ash/app_list/views/search_box_view.h
index b9a9279..df78b849 100644
--- a/ash/app_list/views/search_box_view.h
+++ b/ash/app_list/views/search_box_view.h
@@ -24,6 +24,7 @@
 #include "base/scoped_observation.h"
 #include "base/time/time.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace views {
 class MenuItemView;
@@ -48,6 +49,8 @@
                                  public SearchBoxModelObserver,
                                  public LauncherSearchIphView::Delegate,
                                  public AssistantViewDelegateObserver {
+  METADATA_HEADER(SearchBoxView, SearchBoxViewBase)
+
  public:
   enum class PlaceholderTextType {
     kShortcuts = 0,
@@ -106,7 +109,6 @@
   void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
   void OnPaintBackground(gfx::Canvas* canvas) override;
   void OnPaintBorder(gfx::Canvas* canvas) override;
-  const char* GetClassName() const override;
   void OnThemeChanged() override;
   void OnBoundsChanged(const gfx::Rect& previous_bounds) override;
   void AddedToWidget() override;
diff --git a/ash/app_list/views/search_result_container_view.cc b/ash/app_list/views/search_result_container_view.cc
index 4d176c3..e2c418d 100644
--- a/ash/app_list/views/search_result_container_view.cc
+++ b/ash/app_list/views/search_result_container_view.cc
@@ -8,6 +8,7 @@
 #include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/task/single_thread_task_runner.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/compositor/layer.h"
 #include "ui/views/animation/animation_builder.h"
 #include "ui/views/controls/label.h"
@@ -181,10 +182,6 @@
   return update_factory_.HasWeakPtrs();
 }
 
-const char* SearchResultContainerView::GetClassName() const {
-  return "SearchResultContainerView";
-}
-
 void SearchResultContainerView::AddObservedResultView(
     SearchResultBaseView* result_view) {
   result_view_observations_.AddObservation(result_view);
@@ -283,4 +280,7 @@
   }
 }
 
+BEGIN_METADATA(SearchResultContainerView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/app_list/views/search_result_container_view.h b/ash/app_list/views/search_result_container_view.h
index 0ba578e..f94dd15 100644
--- a/ash/app_list/views/search_result_container_view.h
+++ b/ash/app_list/views/search_result_container_view.h
@@ -18,6 +18,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_multi_source_observation.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/view.h"
 #include "ui/views/view_observer.h"
 
@@ -31,6 +32,8 @@
 class ASH_EXPORT SearchResultContainerView : public views::View,
                                              public views::ViewObserver,
                                              public ui::ListModelObserver {
+  METADATA_HEADER(SearchResultContainerView, views::View)
+
  public:
   class Delegate {
    public:
@@ -134,9 +137,6 @@
   // Returns whether an update is currently scheduled for this container.
   bool UpdateScheduled();
 
-  // Overridden from views::View:
-  const char* GetClassName() const override;
-
   // Functions to allow derivative classes to add/remove observed result views.
   void AddObservedResultView(SearchResultBaseView* result_view);
   void RemoveObservedResultView(SearchResultBaseView* result_view);
diff --git a/ash/app_list/views/search_result_inline_icon_view.cc b/ash/app_list/views/search_result_inline_icon_view.cc
index 1428508..83d8e6f 100644
--- a/ash/app_list/views/search_result_inline_icon_view.cc
+++ b/ash/app_list/views/search_result_inline_icon_view.cc
@@ -12,6 +12,7 @@
 #include "ash/public/cpp/ash_typography.h"
 #include "ash/public/cpp/style/color_provider.h"
 #include "ash/style/ash_color_provider.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/chromeos/styles/cros_tokens_color_mappings.h"
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/paint_vector_icon.h"
@@ -132,4 +133,7 @@
   canvas->DrawRoundRect(bounds, kFocusRingCornerRadius, paint_flags);
 }
 
+BEGIN_METADATA(SearchResultInlineIconView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/app_list/views/search_result_inline_icon_view.h b/ash/app_list/views/search_result_inline_icon_view.h
index 24a31d7..3ce1359 100644
--- a/ash/app_list/views/search_result_inline_icon_view.h
+++ b/ash/app_list/views/search_result_inline_icon_view.h
@@ -9,6 +9,7 @@
 
 #include "ash/ash_export.h"
 #include "base/memory/raw_ptr.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/gfx/vector_icon_types.h"
 #include "ui/views/view.h"
 
@@ -21,6 +22,8 @@
 
 // Displays a rounded rect bubble containing styled text xor a vector icon.
 class ASH_EXPORT SearchResultInlineIconView : public views::View {
+  METADATA_HEADER(SearchResultInlineIconView, views::View)
+
  public:
   explicit SearchResultInlineIconView(bool use_modified_styling);
   SearchResultInlineIconView(const SearchResultInlineIconView&) = delete;
diff --git a/ash/app_list/views/search_result_list_view.cc b/ash/app_list/views/search_result_list_view.cc
index 32b33b2..de79cd4 100644
--- a/ash/app_list/views/search_result_list_view.cc
+++ b/ash/app_list/views/search_result_list_view.cc
@@ -27,6 +27,7 @@
 #include "chromeos/constants/chromeos_features.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/chromeos/styles/cros_tokens_color_mappings.h"
 #include "ui/compositor/layer.h"
 #include "ui/gfx/geometry/insets.h"
@@ -334,10 +335,6 @@
   return results_container_->GetPreferredSize();
 }
 
-const char* SearchResultListView::GetClassName() const {
-  return "SearchResultListView";
-}
-
 int SearchResultListView::GetHeightForWidth(int w) const {
   return results_container_->GetHeightForWidth(w);
 }
@@ -481,4 +478,7 @@
          result.display_type() == SearchResultDisplayType::kList;
 }
 
+BEGIN_METADATA(SearchResultListView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/app_list/views/search_result_list_view.h b/ash/app_list/views/search_result_list_view.h
index c10e9626..eaf5269 100644
--- a/ash/app_list/views/search_result_list_view.h
+++ b/ash/app_list/views/search_result_list_view.h
@@ -16,6 +16,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/view.h"
 
 namespace views {
@@ -34,6 +35,8 @@
 // SearchResultListView displays SearchResultList with a list of
 // SearchResultView.
 class ASH_EXPORT SearchResultListView : public SearchResultContainerView {
+  METADATA_HEADER(SearchResultListView, SearchResultContainerView)
+
  public:
   enum class SearchResultListType {
     // kAnswerCard list view contains a single result that has an extremely high
@@ -93,7 +96,6 @@
 
   // Overridden from views::View:
   gfx::Size CalculatePreferredSize() const override;
-  const char* GetClassName() const override;
 
   // Overridden from SearchResultContainerView:
   SearchResultView* GetResultViewAt(size_t index) override;
diff --git a/ash/app_list/views/search_result_view.cc b/ash/app_list/views/search_result_view.cc
index 223029e8..2afb090 100644
--- a/ash/app_list/views/search_result_view.cc
+++ b/ash/app_list/views/search_result_view.cc
@@ -34,6 +34,7 @@
 #include "chromeos/constants/chromeos_features.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/chromeos/styles/cros_tokens_color_mappings.h"
 #include "ui/color/color_id.h"
@@ -365,6 +366,8 @@
 // An ImageView that optionally masks the image into a circle or rectangle with
 // rounded corners.
 class MaskedImageView : public views::ImageView {
+  METADATA_HEADER(MaskedImageView, views::ImageView)
+
  public:
   MaskedImageView() = default;
 
@@ -412,6 +415,9 @@
   SearchResult::IconShape shape_;
 };
 
+BEGIN_METADATA(MaskedImageView)
+END_METADATA
+
 SearchResultView::LabelAndTag::LabelAndTag(views::Label* label,
                                            SearchResult::Tags tags)
     : label_(label), tags_(tags) {}
diff --git a/ash/assistant/ui/main_stage/launcher_search_iph_view.cc b/ash/assistant/ui/main_stage/launcher_search_iph_view.cc
index 156abc6..57ce042 100644
--- a/ash/assistant/ui/main_stage/launcher_search_iph_view.cc
+++ b/ash/assistant/ui/main_stage/launcher_search_iph_view.cc
@@ -145,22 +145,7 @@
   actions_container->SetBetweenChildSpacing(
       kActionContainerBetweenChildSpacing);
 
-  // In Launcher zero state, we show 3 query chips + Assistant chip.
-  // In Assistant zero state, we show 4 query chips.
-  int num_of_chips = show_assistant_chip_
-                         ? kNumberOfQueryChipsWithAssistantChip
-                         : kNumberOfQueryChipsWithoutAssistantChip;
-  int query_chip_view_id = ViewId::kChipStart;
-  for (const std::u16string& query : GetQueryChips(num_of_chips)) {
-    ChipView* chip = actions_container->AddChildView(
-        std::make_unique<ChipView>(ChipView::Type::kLarge));
-    chip->SetText(query);
-    chip->SetCallback(
-        base::BindRepeating(&LauncherSearchIphView::RunLauncherSearchQuery,
-                            weak_ptr_factory_.GetWeakPtr(), query));
-    chip->SetID(query_chip_view_id);
-    query_chip_view_id++;
-  }
+  CreateQueryChips(actions_container);
 
   if (show_assistant_chip_) {
     views::View* spacer =
@@ -191,6 +176,17 @@
 
 LauncherSearchIphView::~LauncherSearchIphView() = default;
 
+void LauncherSearchIphView::VisibilityChanged(views::View* starting_from,
+                                              bool is_visible) {
+  if (is_visible) {
+    ShuffleChipsQuery();
+  }
+}
+
+std::vector<raw_ptr<ChipView>> LauncherSearchIphView::GetChipsForTesting() {
+  return chips_;
+}
+
 void LauncherSearchIphView::RunLauncherSearchQuery(
     const std::u16string& query) {
   if (scoped_iph_session_) {
@@ -206,6 +202,41 @@
   delegate_->OpenAssistantPage();
 }
 
+void LauncherSearchIphView::CreateQueryChips(views::View* actions_container) {
+  // In Launcher zero state, we show 3 query chips + Assistant chip.
+  // In Assistant zero state, we show 4 query chips.
+  int num_of_chips = show_assistant_chip_
+                         ? kNumberOfQueryChipsWithAssistantChip
+                         : kNumberOfQueryChipsWithoutAssistantChip;
+  int query_chip_view_id = ViewId::kChipStart;
+  for (const std::u16string& query : GetQueryChips(num_of_chips)) {
+    ChipView* chip = actions_container->AddChildView(
+        std::make_unique<ChipView>(ChipView::Type::kLarge));
+    chip->SetText(query);
+    chip->SetCallback(
+        base::BindRepeating(&LauncherSearchIphView::RunLauncherSearchQuery,
+                            weak_ptr_factory_.GetWeakPtr(), query));
+    chip->SetID(query_chip_view_id);
+    query_chip_view_id++;
+    chips_.emplace_back(chip);
+  }
+}
+
+void LauncherSearchIphView::ShuffleChipsQuery() {
+  int num_of_chips = show_assistant_chip_
+                         ? kNumberOfQueryChipsWithAssistantChip
+                         : kNumberOfQueryChipsWithoutAssistantChip;
+  size_t chip_index = 0;
+  for (const std::u16string& query : GetQueryChips(num_of_chips)) {
+    CHECK_LT(chip_index, chips_.size());
+    auto chip = chips_[chip_index++];
+    chip->SetText(query);
+    chip->SetCallback(
+        base::BindRepeating(&LauncherSearchIphView::RunLauncherSearchQuery,
+                            weak_ptr_factory_.GetWeakPtr(), query));
+  }
+}
+
 BEGIN_METADATA(LauncherSearchIphView)
 END_METADATA
 
diff --git a/ash/assistant/ui/main_stage/launcher_search_iph_view.h b/ash/assistant/ui/main_stage/launcher_search_iph_view.h
index 6e3ae46..2e314e5 100644
--- a/ash/assistant/ui/main_stage/launcher_search_iph_view.h
+++ b/ash/assistant/ui/main_stage/launcher_search_iph_view.h
@@ -9,6 +9,7 @@
 #include <string>
 
 #include "ash/public/cpp/app_list/app_list_client.h"
+#include "base/memory/raw_ptr.h"
 #include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/events/event.h"
 #include "ui/views/controls/link.h"
@@ -17,6 +18,8 @@
 
 namespace ash {
 
+class ChipView;
+
 class LauncherSearchIphView : public views::View {
   METADATA_HEADER(LauncherSearchIphView, views::View)
 
@@ -53,18 +56,29 @@
       bool show_assistant_chip = true);
   ~LauncherSearchIphView() override;
 
+  // views::View:
+  void VisibilityChanged(views::View* starting_from, bool is_visible) override;
+
+  std::vector<raw_ptr<ChipView>> GetChipsForTesting();
+
  private:
   // TODO(b/272370530): Use string id for internationalization.
   void RunLauncherSearchQuery(const std::u16string& query);
 
   void OpenAssistantPage();
 
-  raw_ptr<Delegate> delegate_;
+  void CreateQueryChips(views::View* actions_container);
+
+  void ShuffleChipsQuery();
+
+  raw_ptr<Delegate> delegate_ = nullptr;
 
   std::unique_ptr<ScopedIphSession> scoped_iph_session_;
 
   bool show_assistant_chip_ = false;
 
+  std::vector<raw_ptr<ChipView>> chips_;
+
   base::WeakPtrFactory<LauncherSearchIphView> weak_ptr_factory_{this};
 };
 
diff --git a/ash/assistant/ui/main_stage/launcher_search_iph_view_unittest.cc b/ash/assistant/ui/main_stage/launcher_search_iph_view_unittest.cc
new file mode 100644
index 0000000..8e4ad15e
--- /dev/null
+++ b/ash/assistant/ui/main_stage/launcher_search_iph_view_unittest.cc
@@ -0,0 +1,68 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/assistant/ui/main_stage/launcher_search_iph_view.h"
+
+#include "ash/assistant/test/assistant_ash_test_base.h"
+#include "ash/assistant/ui/assistant_view_ids.h"
+#include "ash/assistant/ui/main_stage/chip_view.h"
+#include "base/memory/raw_ptr.h"
+#include "base/test/scoped_feature_list.h"
+#include "chromeos/ash/services/assistant/public/cpp/features.h"
+
+namespace ash {
+
+namespace {
+
+using LauncherSearchIphViewTest = AssistantAshTestBase;
+
+}  // namespace
+
+TEST_F(LauncherSearchIphViewTest,
+       ShouldShuffleQueriesWhenShowingAssistantPage) {
+  base::test::ScopedFeatureList scoped_feature_list(
+      assistant::features::kEnableAssistantLearnMore);
+
+  ShowAssistantUi();
+  LauncherSearchIphView* iph_view = static_cast<LauncherSearchIphView*>(
+      page_view()->GetViewByID(AssistantViewID::kLauncherSearchIph));
+  std::vector<std::u16string> queries_1;
+  for (auto chip : iph_view->GetChipsForTesting()) {
+    queries_1.emplace_back(chip->GetText());
+  }
+
+  // Close and show Assistant UI again.
+  CloseAssistantUi();
+  ShowAssistantUi();
+  std::vector<std::u16string> queries_2;
+  for (auto chip : iph_view->GetChipsForTesting()) {
+    queries_2.emplace_back(chip->GetText());
+  }
+
+  ASSERT_EQ(queries_1.size(), queries_2.size());
+  EXPECT_NE(queries_1, queries_2);
+}
+
+TEST_F(LauncherSearchIphViewTest, ShouldShuffleQueriesWhenVisible) {
+  auto iph_view = std::make_unique<LauncherSearchIphView>(
+      /*delegate=*/nullptr, /*is_in_tablet_mode=*/false,
+      /*scoped_iph_session=*/nullptr, /*show_assistant_chip=*/false);
+
+  std::vector<std::u16string> queries_1;
+  for (auto chip : iph_view->GetChipsForTesting()) {
+    queries_1.emplace_back(chip->GetText());
+  }
+
+  iph_view->SetVisible(false);
+  iph_view->SetVisible(true);
+  std::vector<std::u16string> queries_2;
+  for (auto chip : iph_view->GetChipsForTesting()) {
+    queries_2.emplace_back(chip->GetText());
+  }
+
+  ASSERT_EQ(queries_1.size(), queries_2.size());
+  EXPECT_NE(queries_1, queries_2);
+}
+
+}  // namespace ash
diff --git a/ash/constants/BUILD.gn b/ash/constants/BUILD.gn
index d1b0019..a0af295 100644
--- a/ash/constants/BUILD.gn
+++ b/ash/constants/BUILD.gn
@@ -25,6 +25,7 @@
     "ash_switches.h",
     "devicetype.cc",
     "devicetype.h",
+    "geolocation_access_level.h",
     "notifier_catalogs.h",
     "personalization_entry_point.h",
     "quick_settings_catalogs.h",
diff --git a/ash/constants/ash_pref_names.h b/ash/constants/ash_pref_names.h
index 205b11a..c8cd6865 100644
--- a/ash/constants/ash_pref_names.h
+++ b/ash/constants/ash_pref_names.h
@@ -1165,11 +1165,12 @@
 inline constexpr char kSpeakOnMuteOptInNudgeShownCount[] =
     "ash.user.speak_on_mute_opt_in_nudge_shown_count";
 
-// A boolean pref indicating whether the geolocation is allowed for the user.
-inline constexpr char kUserGeolocationAllowed[] =
-    "ash.user.geolocation_allowed";
+// An enum pref, indicating whether the geolocation is allowed inside user
+// session. Values are from `ash::GeolocationAccessLevel`.
+inline constexpr char kUserGeolocationAccessLevel[] =
+    "ash.user.geolocation_access_level";
 // An enum pref indicating whether the geolocation is allowed outside user
-// session. Values are from PrivacyHubController::AccessLevel.
+// session. Values are from `ash::GeolocationAccessLevel`.
 inline constexpr char kDeviceGeolocationAllowed[] =
     "ash.device.geolocation_allowed";
 
diff --git a/ash/constants/geolocation_access_level.h b/ash/constants/geolocation_access_level.h
new file mode 100644
index 0000000..a38d4c2
--- /dev/null
+++ b/ash/constants/geolocation_access_level.h
@@ -0,0 +1,24 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ASH_CONSTANTS_GEOLOCATION_ACCESS_LEVEL_H_
+#define ASH_CONSTANTS_GEOLOCATION_ACCESS_LEVEL_H_
+
+namespace ash {
+
+// This enum defines the access levels of the Privacy Hub Geolocation feature.
+// Affects the entire ChromeOS system and all client applications.
+// Don't modify or reorder the enum elements. New values can be added at the
+// end. These values shall be in sync with the
+// `DeviceLoginScreenGeolocationAccessLevelProto::GeolocationAccessLevel`.
+enum class GeolocationAccessLevel {
+  kDisallowed = 0,
+  kAllowed = 1,
+  kOnlyAllowedForSystem = 2,
+  kMaxValue = kOnlyAllowedForSystem,
+};
+
+}  // namespace ash
+
+#endif  // ASH_CONSTANTS_GEOLOCATION_ACCESS_LEVEL_H_
diff --git a/ash/public/cpp/wallpaper/sea_pen_image.cc b/ash/public/cpp/wallpaper/sea_pen_image.cc
index 53e4e1a..5470c0ec 100644
--- a/ash/public/cpp/wallpaper/sea_pen_image.cc
+++ b/ash/public/cpp/wallpaper/sea_pen_image.cc
@@ -11,7 +11,7 @@
 
 namespace ash {
 
-SeaPenImage::SeaPenImage(std::string&& jpg_bytes_in,
+SeaPenImage::SeaPenImage(std::string jpg_bytes_in,
                          uint32_t id_in,
                          const std::string& query_in,
                          manta::proto::ImageResolution resolution_in)
diff --git a/ash/public/cpp/wallpaper/sea_pen_image.h b/ash/public/cpp/wallpaper/sea_pen_image.h
index 202ec49..5da9d38c 100644
--- a/ash/public/cpp/wallpaper/sea_pen_image.h
+++ b/ash/public/cpp/wallpaper/sea_pen_image.h
@@ -16,7 +16,7 @@
 // for SeaPen wallpaper.
 // @see //components/manta
 struct ASH_PUBLIC_EXPORT SeaPenImage {
-  SeaPenImage(std::string&& jpg_bytes,
+  SeaPenImage(std::string jpg_bytes,
               uint32_t id,
               const std::string& query,
               manta::proto::ImageResolution resolution);
diff --git a/ash/search_box/search_box_view_base.cc b/ash/search_box/search_box_view_base.cc
index 3c267c78..622cb7c 100644
--- a/ash/search_box/search_box_view_base.cc
+++ b/ash/search_box/search_box_view_base.cc
@@ -19,6 +19,8 @@
 #include "third_party/skia/include/core/SkPath.h"
 #include "ui/base/ime/text_input_flags.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_header_macros.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/color/color_id.h"
 #include "ui/events/event.h"
 #include "ui/gfx/canvas.h"
@@ -130,6 +132,8 @@
 // To paint grey background on mic and back buttons, and close buttons for
 // fullscreen launcher.
 class SearchBoxImageButton : public views::ImageButton {
+  METADATA_HEADER(SearchBoxImageButton, views::ImageButton)
+
  public:
   explicit SearchBoxImageButton(PressedCallback callback)
       : ImageButton(std::move(callback)) {
@@ -186,14 +190,18 @@
 
  private:
   int GetButtonRadius() const { return width() / 2; }
-
-  const char* GetClassName() const override { return "SearchBoxImageButton"; }
 };
 
+BEGIN_METADATA(SearchBoxImageButton)
+END_METADATA
+
 // To show context menu of selected view instead of that of focused view which
 // is always this view when the user uses keyboard shortcut to open context
 // menu.
 class SearchBoxTextfield : public views::Textfield {
+  // TODO (kylixrd): Add metadata here once the Tast tests are updated.
+  // METADATA_HEADER(SearchBoxTextfield, views::Textfield)
+
  public:
   explicit SearchBoxTextfield(SearchBoxViewBase* search_box_view)
       : search_box_view_(search_box_view) {}
@@ -266,11 +274,19 @@
   const raw_ptr<SearchBoxViewBase, ExperimentalAsh> search_box_view_;
 };
 
+// TODO (kylixrd): Enable the following once tast-tests are fixed. Metadata
+// on this class causes failures since the return value of GetClassName() no
+// longer lies and returns the correct class name.
+// BEGIN_METADATA(SearchBoxTextfield)
+// END_METADATA
+
 // Used to animate the transition between icon images. When a new icon is set,
 // this view will temporarily store the layer of the previous icon and animate
 // its opacity to fade out, while keeping the correct bounds for the fading out
 // layer. At the same time the new icon will fade in.
 class SearchIconImageView : public views::ImageView {
+  METADATA_HEADER(SearchIconImageView, views::ImageView)
+
  public:
   SearchIconImageView() = default;
 
@@ -333,6 +349,9 @@
   base::WeakPtrFactory<SearchIconImageView> weak_factory_{this};
 };
 
+BEGIN_METADATA(SearchIconImageView)
+END_METADATA
+
 SearchBoxViewBase::InitParams::InitParams() = default;
 
 SearchBoxViewBase::InitParams::~InitParams() = default;
@@ -635,10 +654,6 @@
   }
 }
 
-const char* SearchBoxViewBase::GetClassName() const {
-  return "SearchBoxView";
-}
-
 void SearchBoxViewBase::OnGestureEvent(ui::GestureEvent* event) {
   HandleSearchBoxEvent(event);
 }
@@ -858,4 +873,7 @@
   }
 }
 
+BEGIN_METADATA(SearchBoxViewBase)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/search_box/search_box_view_base.h b/ash/search_box/search_box_view_base.h
index 81d37f3..60d956a9 100644
--- a/ash/search_box/search_box_view_base.h
+++ b/ash/search_box/search_box_view_base.h
@@ -12,6 +12,7 @@
 #include "base/functional/bind.h"
 #include "base/memory/raw_ptr.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/events/types/event_type.h"
 #include "ui/gfx/font_list.h"
 #include "ui/gfx/geometry/insets.h"
@@ -43,6 +44,8 @@
 // provides common functions for the search box view across Chrome OS.
 class SearchBoxViewBase : public views::View,
                           public views::TextfieldController {
+  METADATA_HEADER(SearchBoxViewBase, views::View)
+
  public:
   SearchBoxViewBase();
 
@@ -123,7 +126,6 @@
 
   // Overridden from views::View:
   gfx::Size CalculatePreferredSize() const override;
-  const char* GetClassName() const override;
   void OnGestureEvent(ui::GestureEvent* event) override;
   void OnMouseEvent(ui::MouseEvent* event) override;
   void OnThemeChanged() override;
diff --git a/ash/system/accessibility/autoclick_scroll_view.cc b/ash/system/accessibility/autoclick_scroll_view.cc
index ccc460b8..356593e 100644
--- a/ash/system/accessibility/autoclick_scroll_view.cc
+++ b/ash/system/accessibility/autoclick_scroll_view.cc
@@ -353,9 +353,8 @@
   return false;
 }
 
-const char* AutoclickScrollBubbleView::GetClassName() const {
-  return "AutoclickScrollBubbleView";
-}
+BEGIN_METADATA(AutoclickScrollBubbleView)
+END_METADATA
 
 // ------ AutoclickScrollView  ------ //
 
@@ -404,8 +403,7 @@
       kScrollButtonCloseSizeDips, kScrollButtonCloseSizeDips);
 }
 
-const char* AutoclickScrollView::GetClassName() const {
-  return "AutoclickScrollView";
-}
+BEGIN_METADATA(AutoclickScrollView)
+END_METADATA
 
 }  // namespace ash
diff --git a/ash/system/accessibility/autoclick_scroll_view.h b/ash/system/accessibility/autoclick_scroll_view.h
index f900c9e9..77d4982 100644
--- a/ash/system/accessibility/autoclick_scroll_view.h
+++ b/ash/system/accessibility/autoclick_scroll_view.h
@@ -8,6 +8,7 @@
 #include "ash/accessibility/autoclick/autoclick_controller.h"
 #include "ash/system/tray/tray_bubble_view.h"
 #include "base/memory/raw_ptr.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/controls/button/button.h"
 
 namespace ash {
@@ -18,6 +19,8 @@
 // View for the Automatic Clicks scroll bubble, which holds the Automatic Clicks
 // scroll menu.
 class AutoclickScrollBubbleView : public TrayBubbleView {
+  METADATA_HEADER(AutoclickScrollBubbleView, TrayBubbleView)
+
  public:
   explicit AutoclickScrollBubbleView(TrayBubbleView::InitParams init_params);
 
@@ -40,14 +43,13 @@
 
   // TrayBubbleView:
   bool IsAnchoredToStatusArea() const override;
-
-  // views::View:
-  const char* GetClassName() const override;
 };
 
 // View for the Automatic Clicks scroll menu, which creates and manages
 // individual buttons to control Automatic Clicks scrolling.
 class AutoclickScrollView : public views::View {
+  METADATA_HEADER(AutoclickScrollView, views::View)
+
  public:
   // Used for testing. Start at 1 because a view IDs should not be 0.
   enum class ButtonId {
@@ -69,9 +71,6 @@
 
   ~AutoclickScrollView() override = default;
 
-  // views::View:
-  const char* GetClassName() const override;
-
  private:
   // views::View:
   void Layout() override;
diff --git a/ash/system/camera/autozoom_toast_view.cc b/ash/system/camera/autozoom_toast_view.cc
index e7311573..9707046 100644
--- a/ash/system/camera/autozoom_toast_view.cc
+++ b/ash/system/camera/autozoom_toast_view.cc
@@ -10,6 +10,7 @@
 #include "ash/system/tray/tray_constants.h"
 #include "ash/system/unified/feature_pod_button.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/controls/label.h"
 #include "ui/views/layout/box_layout.h"
@@ -69,4 +70,7 @@
   controller_->StartAutoCloseTimer();
 }
 
+BEGIN_METADATA(AutozoomToastView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/camera/autozoom_toast_view.h b/ash/system/camera/autozoom_toast_view.h
index cd08b2a..3c94b435 100644
--- a/ash/system/camera/autozoom_toast_view.h
+++ b/ash/system/camera/autozoom_toast_view.h
@@ -7,6 +7,7 @@
 
 #include "ash/ash_export.h"
 #include "base/memory/raw_ptr.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/controls/label.h"
 #include "ui/views/view.h"
 #include "ui/views/view_observer.h"
@@ -19,6 +20,8 @@
 // The view shown inside the autozoom toast bubble.
 class ASH_EXPORT AutozoomToastView : public views::View,
                                      public views::ViewObserver {
+  METADATA_HEADER(AutozoomToastView, views::View)
+
  public:
   explicit AutozoomToastView(AutozoomToastController* controller);
   AutozoomToastView(AutozoomToastView&) = delete;
diff --git a/ash/system/channel_indicator/channel_indicator.cc b/ash/system/channel_indicator/channel_indicator.cc
index 4af9abbb..63cc211 100644
--- a/ash/system/channel_indicator/channel_indicator.cc
+++ b/ash/system/channel_indicator/channel_indicator.cc
@@ -20,6 +20,7 @@
 #include "ui/accessibility/ax_enums.mojom.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/size.h"
@@ -317,4 +318,7 @@
   return base::EmptyString16();
 }
 
+BEGIN_METADATA(ChannelIndicatorView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/channel_indicator/channel_indicator.h b/ash/system/channel_indicator/channel_indicator.h
index 722c5256..a0935741 100644
--- a/ash/system/channel_indicator/channel_indicator.h
+++ b/ash/system/channel_indicator/channel_indicator.h
@@ -14,6 +14,7 @@
 #include "base/memory/weak_ptr.h"
 #include "components/session_manager/session_manager_types.h"
 #include "components/version_info/channel.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace views {
 class BoxLayout;
@@ -28,6 +29,8 @@
 class ASH_EXPORT ChannelIndicatorView : public TrayItemView,
                                         public SessionObserver,
                                         public ShellObserver {
+  METADATA_HEADER(ChannelIndicatorView, TrayItemView)
+
  public:
   ChannelIndicatorView(Shelf* shelf, version_info::Channel channel);
   ChannelIndicatorView(const ChannelIndicatorView&) = delete;
diff --git a/ash/system/eche/eche_icon_loading_indicator_view.cc b/ash/system/eche/eche_icon_loading_indicator_view.cc
index 922fc0ad..b732a367d 100644
--- a/ash/system/eche/eche_icon_loading_indicator_view.cc
+++ b/ash/system/eche/eche_icon_loading_indicator_view.cc
@@ -7,6 +7,7 @@
 
 #include "base/scoped_observation.h"
 #include "base/time/time.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/color/color_id.h"
 #include "ui/color/color_provider.h"
 #include "ui/gfx/animation/throb_animation.h"
@@ -78,4 +79,7 @@
   SchedulePaint();
 }
 
+BEGIN_METADATA(EcheIconLoadingIndicatorView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/eche/eche_icon_loading_indicator_view.h b/ash/system/eche/eche_icon_loading_indicator_view.h
index 9a677e3..5278da2 100644
--- a/ash/system/eche/eche_icon_loading_indicator_view.h
+++ b/ash/system/eche/eche_icon_loading_indicator_view.h
@@ -9,6 +9,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/scoped_observation.h"
 #include "base/time/time.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/gfx/animation/animation_delegate.h"
 #include "ui/gfx/animation/throb_animation.h"
 #include "ui/views/view.h"
@@ -25,6 +26,8 @@
 class ASH_EXPORT EcheIconLoadingIndicatorView : public views::View,
                                                 public views::ViewObserver,
                                                 public gfx::AnimationDelegate {
+  METADATA_HEADER(EcheIconLoadingIndicatorView, views::View)
+
  public:
   explicit EcheIconLoadingIndicatorView(views::View* parent);
   EcheIconLoadingIndicatorView(const EcheIconLoadingIndicatorView&) = delete;
diff --git a/ash/system/geolocation/geolocation_controller.cc b/ash/system/geolocation/geolocation_controller.cc
index 7192efa0..a93daa9 100644
--- a/ash/system/geolocation/geolocation_controller.cc
+++ b/ash/system/geolocation/geolocation_controller.cc
@@ -84,7 +84,8 @@
 void GeolocationController::AddObserver(Observer* observer) {
   const bool is_first_observer = observers_.empty();
   observers_.AddObserver(observer);
-  if (is_first_observer && geolocation_provider_->IsGeolocationUsageAllowed()) {
+  if (is_first_observer &&
+      geolocation_provider_->IsGeolocationUsageAllowedForSystem()) {
     ScheduleNextRequest(base::Seconds(0));
   }
 }
@@ -121,14 +122,14 @@
 
   // On timezone changes, request an immediate geoposition if the system
   // geolocation allows.
-  if (geolocation_provider_->IsGeolocationUsageAllowed()) {
+  if (geolocation_provider_->IsGeolocationUsageAllowedForSystem()) {
     ScheduleNextRequest(base::Seconds(0));
   }
 }
 
 void GeolocationController::SuspendDone(base::TimeDelta sleep_duration) {
   if (sleep_duration >= kNextRequestDelayAfterSuccess &&
-      geolocation_provider_->IsGeolocationUsageAllowed()) {
+      geolocation_provider_->IsGeolocationUsageAllowedForSystem()) {
     ScheduleNextRequest(base::Seconds(0));
   }
 }
@@ -181,7 +182,7 @@
 void GeolocationController::OnGeoposition(const Geoposition& position,
                                           bool server_error,
                                           const base::TimeDelta elapsed) {
-  if (!geolocation_provider_->IsGeolocationUsageAllowed() ||
+  if (!geolocation_provider_->IsGeolocationUsageAllowedForSystem() ||
       observers_.empty()) {
     // The request might come after the user disabled the system geolocation
     // access or if all observers unsubscribed, in which case we should stop
@@ -250,7 +251,7 @@
 }
 
 void GeolocationController::ScheduleNextRequest(base::TimeDelta delay) {
-  CHECK(geolocation_provider_->IsGeolocationUsageAllowed());
+  CHECK(geolocation_provider_->IsGeolocationUsageAllowedForSystem());
   timer_->Start(FROM_HERE, delay, this,
                 &GeolocationController::RequestGeoposition);
 }
diff --git a/ash/system/geolocation/geolocation_controller_unittest.cc b/ash/system/geolocation/geolocation_controller_unittest.cc
index c2aad3927..83f375d 100644
--- a/ash/system/geolocation/geolocation_controller_unittest.cc
+++ b/ash/system/geolocation/geolocation_controller_unittest.cc
@@ -5,11 +5,13 @@
 #include "ash/system/geolocation/geolocation_controller.h"
 
 #include "ash/constants/ash_pref_names.h"
+#include "ash/constants/geolocation_access_level.h"
 #include "ash/session/session_controller_impl.h"
 #include "ash/session/test_session_controller_client.h"
 #include "ash/shell.h"
 #include "ash/system/geolocation/geolocation_controller_test_util.h"
 #include "ash/system/geolocation/test_geolocation_url_loader_factory.h"
+#include "ash/system/privacy_hub/privacy_hub_controller.h"
 #include "ash/system/time/time_of_day.h"
 #include "ash/test/ash_test_base.h"
 #include "ash/test/time_of_day_test_util.h"
@@ -195,12 +197,9 @@
     factory->set_position(position_);
   }
 
-  void UpdateUserGeolocationPermission(bool enabled) {
-    if (enabled) {
-      SimpleGeolocationProvider::GetInstance()->AllowGeolocationUsage();
-    } else {
-      SimpleGeolocationProvider::GetInstance()->DisallowGeolocationUsage();
-    }
+  void UpdateUserGeolocationPermission(GeolocationAccessLevel access_level) {
+    SimpleGeolocationProvider::GetInstance()->SetGeolocationAccessLevel(
+        access_level);
   }
 
  private:
@@ -333,12 +332,18 @@
   EXPECT_EQ(1, observer.position_received_num());
   EXPECT_TRUE(timer_ptr()->IsRunning());
 
+  // Block geolocation usage to apps only, shouldn't affect
+  // `GeolocationController`.
+  UpdateUserGeolocationPermission(
+      GeolocationAccessLevel::kOnlyAllowedForSystem);
+  EXPECT_TRUE(timer_ptr()->IsRunning());
+
   // Disable system geo permission. Scheduling should stop.
-  UpdateUserGeolocationPermission(false);
+  UpdateUserGeolocationPermission(GeolocationAccessLevel::kDisallowed);
   EXPECT_FALSE(timer_ptr()->IsRunning());
 
   // Re-enabling the system geo permission, should resume scheduling.
-  UpdateUserGeolocationPermission(true);
+  UpdateUserGeolocationPermission(GeolocationAccessLevel::kAllowed);
   EXPECT_TRUE(timer_ptr()->IsRunning());
 }
 
@@ -348,13 +353,14 @@
   // This will start scheduling.
   GeolocationControllerObserver observer;
   controller()->AddObserver(&observer);
+  EXPECT_TRUE(timer_ptr()->IsRunning());
 
   // Fire Geolocation request.
   timer_ptr()->FireNow();
   EXPECT_FALSE(timer_ptr()->IsRunning());
 
   // Disable user geolocation permission, this should stop scheduling.
-  UpdateUserGeolocationPermission(false);
+  UpdateUserGeolocationPermission(GeolocationAccessLevel::kDisallowed);
   EXPECT_FALSE(timer_ptr()->IsRunning());
 
   // Simulate server response and check it didn't resume scheduling.
@@ -362,7 +368,7 @@
   EXPECT_FALSE(timer_ptr()->IsRunning());
 
   // Re-enable user geolocation permission, this should resume scheduling.
-  UpdateUserGeolocationPermission(true);
+  UpdateUserGeolocationPermission(GeolocationAccessLevel::kAllowed);
   EXPECT_TRUE(timer_ptr()->IsRunning());
 
   // Unsubscribe the observer before being destroyed.
diff --git a/ash/system/holding_space/holding_space_tray_bubble.cc b/ash/system/holding_space/holding_space_tray_bubble.cc
index 57a47021..0283de2 100644
--- a/ash/system/holding_space/holding_space_tray_bubble.cc
+++ b/ash/system/holding_space/holding_space_tray_bubble.cc
@@ -32,6 +32,7 @@
 #include "ui/aura/env.h"
 #include "ui/aura/window.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/compositor/compositor.h"
 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
 #include "ui/gfx/animation/slide_animation.h"
@@ -241,6 +242,8 @@
 class HoldingSpaceTrayBubble::ChildBubbleContainer
     : public views::View,
       public views::AnimationDelegateViews {
+  METADATA_HEADER(ChildBubbleContainer, views::View)
+
  public:
   ChildBubbleContainer()
       : views::AnimationDelegateViews(this),
@@ -417,6 +420,9 @@
       view_bounds_changed_observers_by_view_;
 };
 
+BEGIN_METADATA(HoldingSpaceTrayBubble, ChildBubbleContainer, views::View)
+END_METADATA
+
 // HoldingSpaceTrayBubble ------------------------------------------------------
 
 HoldingSpaceTrayBubble::HoldingSpaceTrayBubble(
diff --git a/ash/system/holding_space/pinned_files_bubble.cc b/ash/system/holding_space/pinned_files_bubble.cc
index 159a4511..8e10d06 100644
--- a/ash/system/holding_space/pinned_files_bubble.cc
+++ b/ash/system/holding_space/pinned_files_bubble.cc
@@ -7,6 +7,7 @@
 #include "ash/public/cpp/holding_space/holding_space_constants.h"
 #include "ash/system/holding_space/pinned_files_section.h"
 #include "ash/system/holding_space/suggestions_section.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 
 namespace ash {
 
@@ -17,10 +18,6 @@
 
 PinnedFilesBubble::~PinnedFilesBubble() = default;
 
-const char* PinnedFilesBubble::GetClassName() const {
-  return "PinnedFilesBubble";
-}
-
 std::vector<std::unique_ptr<HoldingSpaceItemViewsSection>>
 PinnedFilesBubble::CreateSections() {
   std::vector<std::unique_ptr<HoldingSpaceItemViewsSection>> sections;
@@ -29,4 +26,7 @@
   return sections;
 }
 
+BEGIN_METADATA(PinnedFilesBubble)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/holding_space/pinned_files_bubble.h b/ash/system/holding_space/pinned_files_bubble.h
index 16f2eb2c..59472ac 100644
--- a/ash/system/holding_space/pinned_files_bubble.h
+++ b/ash/system/holding_space/pinned_files_bubble.h
@@ -9,11 +9,14 @@
 #include <vector>
 
 #include "ash/system/holding_space/holding_space_tray_child_bubble.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace ash {
 
 // Child bubble of `HoldingSpaceTrayBubble` for pinned files.
 class PinnedFilesBubble : public HoldingSpaceTrayChildBubble {
+  METADATA_HEADER(PinnedFilesBubble, HoldingSpaceTrayChildBubble)
+
  public:
   explicit PinnedFilesBubble(HoldingSpaceViewDelegate* delegate);
   PinnedFilesBubble(const PinnedFilesBubble& other) = delete;
@@ -21,7 +24,6 @@
   ~PinnedFilesBubble() override;
 
   // HoldingSpaceTrayChildBubble:
-  const char* GetClassName() const override;
   std::vector<std::unique_ptr<HoldingSpaceItemViewsSection>> CreateSections()
       override;
 };
diff --git a/ash/system/holding_space/pinned_files_section.cc b/ash/system/holding_space/pinned_files_section.cc
index 15aa716..572b46a 100644
--- a/ash/system/holding_space/pinned_files_section.cc
+++ b/ash/system/holding_space/pinned_files_section.cc
@@ -29,6 +29,7 @@
 #include "components/prefs/pref_service.h"
 #include "components/vector_icons/vector_icons.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/color/color_id.h"
 #include "ui/compositor/layer.h"
 #include "ui/gfx/color_palette.h"
@@ -188,10 +189,6 @@
 
 PinnedFilesSection::~PinnedFilesSection() = default;
 
-const char* PinnedFilesSection::GetClassName() const {
-  return "PinnedFilesSection";
-}
-
 gfx::Size PinnedFilesSection::GetMinimumSize() const {
   // The pinned files section is scrollable so can be laid out smaller than its
   // preferred size if there is insufficient layout space available.
@@ -299,4 +296,7 @@
   }
 }
 
+BEGIN_METADATA(PinnedFilesSection)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/holding_space/pinned_files_section.h b/ash/system/holding_space/pinned_files_section.h
index 886b4d97..1dc6b23a 100644
--- a/ash/system/holding_space/pinned_files_section.h
+++ b/ash/system/holding_space/pinned_files_section.h
@@ -8,11 +8,14 @@
 #include <memory>
 
 #include "ash/system/holding_space/holding_space_item_views_section.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace ash {
 
 // Section for pinned files in the `PinnedFilesBubble`.
 class PinnedFilesSection : public HoldingSpaceItemViewsSection {
+  METADATA_HEADER(PinnedFilesSection, HoldingSpaceItemViewsSection)
+
  public:
   explicit PinnedFilesSection(HoldingSpaceViewDelegate* delegate);
   PinnedFilesSection(const PinnedFilesSection& other) = delete;
@@ -21,7 +24,6 @@
 
  private:
   // HoldingSpaceItemViewsSection:
-  const char* GetClassName() const override;
   gfx::Size GetMinimumSize() const override;
   std::unique_ptr<views::View> CreateHeader() override;
   std::unique_ptr<views::View> CreateContainer() override;
diff --git a/ash/system/holding_space/recent_files_bubble.cc b/ash/system/holding_space/recent_files_bubble.cc
index d831a9a..3f195c0 100644
--- a/ash/system/holding_space/recent_files_bubble.cc
+++ b/ash/system/holding_space/recent_files_bubble.cc
@@ -13,6 +13,7 @@
 #include "ash/system/holding_space/holding_space_ui.h"
 #include "ash/system/holding_space/screen_captures_section.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/views/controls/image_view.h"
 #include "ui/views/controls/label.h"
@@ -67,4 +68,7 @@
   return sections;
 }
 
+BEGIN_METADATA(RecentFilesBubble)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/holding_space/recent_files_bubble.h b/ash/system/holding_space/recent_files_bubble.h
index 17edc32..b0a2c47 100644
--- a/ash/system/holding_space/recent_files_bubble.h
+++ b/ash/system/holding_space/recent_files_bubble.h
@@ -9,11 +9,14 @@
 #include <vector>
 
 #include "ash/system/holding_space/holding_space_tray_child_bubble.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace ash {
 
 // Child bubble of `HoldingSpaceTrayBubble` for recent files.
 class RecentFilesBubble : public HoldingSpaceTrayChildBubble {
+  METADATA_HEADER(RecentFilesBubble, HoldingSpaceTrayChildBubble)
+
  public:
   explicit RecentFilesBubble(HoldingSpaceViewDelegate* delegate);
   RecentFilesBubble(const RecentFilesBubble& other) = delete;
diff --git a/ash/system/holding_space/test_holding_space_tray_child_bubble.cc b/ash/system/holding_space/test_holding_space_tray_child_bubble.cc
index cbb3c642..160f17b2 100644
--- a/ash/system/holding_space/test_holding_space_tray_child_bubble.cc
+++ b/ash/system/holding_space/test_holding_space_tray_child_bubble.cc
@@ -5,6 +5,7 @@
 #include "ash/system/holding_space/test_holding_space_tray_child_bubble.h"
 
 #include "ash/system/holding_space/holding_space_item_views_section.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 
 namespace ash {
 
@@ -39,4 +40,7 @@
              : nullptr;
 }
 
+BEGIN_METADATA(TestHoldingSpaceTrayChildBubble)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/holding_space/test_holding_space_tray_child_bubble.h b/ash/system/holding_space/test_holding_space_tray_child_bubble.h
index c13d74e..e2df059 100644
--- a/ash/system/holding_space/test_holding_space_tray_child_bubble.h
+++ b/ash/system/holding_space/test_holding_space_tray_child_bubble.h
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "ash/system/holding_space/holding_space_tray_child_bubble.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace ash {
 
@@ -16,6 +17,8 @@
 // testing. Allows callers to pass in callbacks through `Params` to dictate what
 // sections and placeholder are created.
 class TestHoldingSpaceTrayChildBubble : public HoldingSpaceTrayChildBubble {
+  METADATA_HEADER(TestHoldingSpaceTrayChildBubble, HoldingSpaceTrayChildBubble)
+
  public:
   struct Params {
     using CreateSectionsCallback = base::OnceCallback<
diff --git a/ash/system/hotspot/hotspot_tray_view.cc b/ash/system/hotspot/hotspot_tray_view.cc
index b18a3d5..a435ef8 100644
--- a/ash/system/hotspot/hotspot_tray_view.cc
+++ b/ash/system/hotspot/hotspot_tray_view.cc
@@ -14,6 +14,7 @@
 #include "ash/system/tray/tray_constants.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/chromeos/devicetype_utils.h"
 #include "ui/chromeos/styles/cros_tokens_color_mappings.h"
 #include "ui/color/color_provider.h"
@@ -63,10 +64,6 @@
   Shell::Get()->hotspot_icon_animation()->RemoveObserver(this);
 }
 
-const char* HotspotTrayView::GetClassName() const {
-  return "HotspotTrayView";
-}
-
 void HotspotTrayView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
   // A valid role must be set prior to setting the name.
   node_data->role = ax::mojom::Role::kImage;
@@ -155,4 +152,7 @@
   }
 }
 
+BEGIN_METADATA(HotspotTrayView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/hotspot/hotspot_tray_view.h b/ash/system/hotspot/hotspot_tray_view.h
index b292fde..c9aa1a3b9 100644
--- a/ash/system/hotspot/hotspot_tray_view.h
+++ b/ash/system/hotspot/hotspot_tray_view.h
@@ -15,6 +15,7 @@
 #include "chromeos/ash/services/hotspot_config/public/mojom/cros_hotspot_config.mojom.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace ash {
 
@@ -25,6 +26,8 @@
       public SessionObserver,
       public HotspotIconAnimationObserver,
       public hotspot_config::mojom::CrosHotspotConfigObserver {
+  METADATA_HEADER(HotspotTrayView, TrayItemView)
+
  public:
   explicit HotspotTrayView(Shelf* shelf);
 
@@ -36,7 +39,6 @@
   std::u16string GetAccessibleNameString() const;
 
   // views::View:
-  const char* GetClassName() const override;
   void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
   views::View* GetTooltipHandlerForPoint(const gfx::Point& point) override;
   std::u16string GetTooltipText(const gfx::Point& p) const override;
diff --git a/ash/system/human_presence/snooping_protection_view.cc b/ash/system/human_presence/snooping_protection_view.cc
index 0a5ffe3d..8fcf09a 100644
--- a/ash/system/human_presence/snooping_protection_view.cc
+++ b/ash/system/human_presence/snooping_protection_view.cc
@@ -18,6 +18,7 @@
 #include "components/session_manager/session_manager_types.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/models/image_model.h"
 #include "ui/chromeos/styles/cros_tokens_color_mappings.h"
 #include "ui/gfx/image/image_skia.h"
@@ -75,4 +76,7 @@
   controller_observation_.Reset();
 }
 
+BEGIN_METADATA(SnoopingProtectionView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/human_presence/snooping_protection_view.h b/ash/system/human_presence/snooping_protection_view.h
index 5ddb8a5..af47bf9 100644
--- a/ash/system/human_presence/snooping_protection_view.h
+++ b/ash/system/human_presence/snooping_protection_view.h
@@ -9,6 +9,7 @@
 #include "ash/system/human_presence/snooping_protection_controller.h"
 #include "ash/system/tray/tray_item_view.h"
 #include "base/scoped_observation.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace ash {
 
@@ -17,6 +18,8 @@
 class ASH_EXPORT SnoopingProtectionView
     : public TrayItemView,
       public SnoopingProtectionController::Observer {
+  METADATA_HEADER(SnoopingProtectionView, TrayItemView)
+
  public:
   explicit SnoopingProtectionView(Shelf* shelf);
   SnoopingProtectionView(const SnoopingProtectionView&) = delete;
diff --git a/ash/system/message_center/ash_notification_view.cc b/ash/system/message_center/ash_notification_view.cc
index 5f45e9d4..106adf2a 100644
--- a/ash/system/message_center/ash_notification_view.cc
+++ b/ash/system/message_center/ash_notification_view.cc
@@ -345,6 +345,11 @@
   parent_notification_view_ = parent_notification_view;
 }
 
+BEGIN_METADATA(AshNotificationView,
+               GroupedNotificationsContainer,
+               views::BoxLayoutView)
+END_METADATA
+
 AshNotificationView::NotificationTitleRow::NotificationTitleRow(
     const std::u16string& title)
     : title_view_(AddChildView(GenerateTitleView(title))),
@@ -485,9 +490,6 @@
   }
 }
 
-// static
-const char AshNotificationView::kViewClassName[] = "AshNotificationView";
-
 AshNotificationView::AshNotificationView(
     const message_center::Notification& notification,
     bool shown_in_popup)
@@ -1146,10 +1148,6 @@
   }
 }
 
-const char* AshNotificationView::GetClassName() const {
-  return kViewClassName;
-}
-
 void AshNotificationView::UpdateViewForExpandedState(bool expanded) {
   // Grouped parent views should always use the expanded paddings, even if they
   // are collapsed.
@@ -2323,4 +2321,7 @@
   }
 }
 
+BEGIN_METADATA(AshNotificationView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/message_center/ash_notification_view.h b/ash/system/message_center/ash_notification_view.h
index 0934c86..a69630a 100644
--- a/ash/system/message_center/ash_notification_view.h
+++ b/ash/system/message_center/ash_notification_view.h
@@ -11,6 +11,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/message_center/message_center.h"
 #include "ui/message_center/message_center_observer.h"
 #include "ui/message_center/views/notification_input_container.h"
@@ -44,9 +45,9 @@
     : public message_center::NotificationViewBase,
       public message_center::MessageCenterObserver,
       public views::WidgetObserver {
- public:
-  static const char kViewClassName[];
+  METADATA_HEADER(AshNotificationView, message_center::NotificationViewBase)
 
+ public:
   // TODO(crbug/1241983): Add metadata and builder support to this view.
   explicit AshNotificationView(const message_center::Notification& notification,
                                bool shown_in_popup);
@@ -98,7 +99,6 @@
       const std::vector<const message_center::Notification*>& notifications)
       override;
   void RemoveGroupNotification(const std::string& notification_id) override;
-  const char* GetClassName() const override;
   // Called after `PreferredSizeChanged()`, so the current state is the target
   // state.
   base::TimeDelta GetBoundsAnimationDuration(
@@ -161,6 +161,8 @@
   // View containing all grouped notifications, propagates size changes
   // to the parent notification view.
   class GroupedNotificationsContainer : public views::BoxLayoutView {
+    METADATA_HEADER(GroupedNotificationsContainer, views::BoxLayoutView)
+
    public:
     GroupedNotificationsContainer() = default;
     GroupedNotificationsContainer(const GroupedNotificationsContainer&) =
diff --git a/ash/system/network/network_list_mobile_header_view_impl.cc b/ash/system/network/network_list_mobile_header_view_impl.cc
index f39db5c..33864586 100644
--- a/ash/system/network/network_list_mobile_header_view_impl.cc
+++ b/ash/system/network/network_list_mobile_header_view_impl.cc
@@ -9,6 +9,7 @@
 #include "ash/system/network/network_list_network_header_view.h"
 #include "ash/system/tray/hover_highlight_view.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 
 namespace ash {
 
@@ -35,4 +36,7 @@
   delegate()->OnMobileToggleClicked(is_on);
 }
 
+BEGIN_METADATA(NetworkListMobileHeaderViewImpl)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/network/network_list_mobile_header_view_impl.h b/ash/system/network/network_list_mobile_header_view_impl.h
index f6bb852e..44d7137 100644
--- a/ash/system/network/network_list_mobile_header_view_impl.h
+++ b/ash/system/network/network_list_mobile_header_view_impl.h
@@ -7,6 +7,7 @@
 
 #include "ash/ash_export.h"
 #include "ash/system/network/network_list_mobile_header_view.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace ash {
 
@@ -15,6 +16,8 @@
 // Implementation of NetworkListMobileHeaderView.
 class ASH_EXPORT NetworkListMobileHeaderViewImpl
     : public NetworkListMobileHeaderView {
+  METADATA_HEADER(NetworkListMobileHeaderViewImpl, NetworkListMobileHeaderView)
+
  public:
   explicit NetworkListMobileHeaderViewImpl(
       NetworkListNetworkHeaderView::Delegate* delegate);
diff --git a/ash/system/network/network_list_wifi_header_view_impl.cc b/ash/system/network/network_list_wifi_header_view_impl.cc
index 42c7dd9..37e8dfc 100644
--- a/ash/system/network/network_list_wifi_header_view_impl.cc
+++ b/ash/system/network/network_list_wifi_header_view_impl.cc
@@ -9,6 +9,7 @@
 #include "ash/system/network/network_list_wifi_header_view.h"
 #include "ash/system/tray/hover_highlight_view.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 
 namespace ash {
 
@@ -37,4 +38,7 @@
   delegate()->OnWifiToggleClicked(is_on);
 }
 
+BEGIN_METADATA(NetworkListWifiHeaderViewImpl)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/network/network_list_wifi_header_view_impl.h b/ash/system/network/network_list_wifi_header_view_impl.h
index 10f8ab3..6bf028c 100644
--- a/ash/system/network/network_list_wifi_header_view_impl.h
+++ b/ash/system/network/network_list_wifi_header_view_impl.h
@@ -11,6 +11,7 @@
 #include "ash/system/tray/tri_view.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/view.h"
 
 namespace ash {
@@ -18,6 +19,8 @@
 // Implementation of NetworkListWifiHeaderView.
 class ASH_EXPORT NetworkListWifiHeaderViewImpl
     : public NetworkListWifiHeaderView {
+  METADATA_HEADER(NetworkListWifiHeaderViewImpl, NetworkListWifiHeaderView)
+
  public:
   explicit NetworkListWifiHeaderViewImpl(
       NetworkListNetworkHeaderView::Delegate* delegate);
diff --git a/ash/system/network/network_tray_view.cc b/ash/system/network/network_tray_view.cc
index 2499f02..8c1734f1 100644
--- a/ash/system/network/network_tray_view.cc
+++ b/ash/system/network/network_tray_view.cc
@@ -16,6 +16,7 @@
 #include "ash/system/network/tray_network_state_model.h"
 #include "ui/accessibility/ax_enums.mojom.h"
 #include "ui/accessibility/ax_node_data.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/views/controls/image_view.h"
 
 namespace ash {
@@ -35,10 +36,6 @@
   Shell::Get()->session_controller()->RemoveObserver(this);
 }
 
-const char* NetworkTrayView::GetClassName() const {
-  return "NetworkTrayView";
-}
-
 void NetworkTrayView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
   // A valid role must be set prior to setting the name.
   node_data->role = ax::mojom::Role::kImage;
@@ -142,4 +139,7 @@
   return network_icon::ICON_TYPE_TRAY_REGULAR;
 }
 
+BEGIN_METADATA(NetworkTrayView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/network/network_tray_view.h b/ash/system/network/network_tray_view.h
index 0b7cce33..226fcfd 100644
--- a/ash/system/network/network_tray_view.h
+++ b/ash/system/network/network_tray_view.h
@@ -23,6 +23,8 @@
                                    public network_icon::AnimationObserver,
                                    public SessionObserver,
                                    public TrayNetworkStateObserver {
+  METADATA_HEADER(NetworkTrayView, TrayItemView)
+
  public:
   NetworkTrayView(const NetworkTrayView&) = delete;
   NetworkTrayView& operator=(const NetworkTrayView&) = delete;
@@ -33,8 +35,6 @@
 
   std::u16string GetAccessibleNameString() const;
 
-  const char* GetClassName() const override;
-
   // views::View:
   void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
   views::View* GetTooltipHandlerForPoint(const gfx::Point& point) override;
diff --git a/ash/system/palette/palette_tray.cc b/ash/system/palette/palette_tray.cc
index 67df04bf..ea570455 100644
--- a/ash/system/palette/palette_tray.cc
+++ b/ash/system/palette/palette_tray.cc
@@ -45,6 +45,7 @@
 #include "ui/accessibility/ax_enums.mojom-shared.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/chromeos/styles/cros_tokens_color_mappings.h"
 #include "ui/color/color_id.h"
@@ -95,6 +96,8 @@
 }
 
 class BatteryView : public views::View {
+  METADATA_HEADER(BatteryView, views::View)
+
  public:
   BatteryView() {
     SetLayoutManager(std::make_unique<views::BoxLayout>(
@@ -158,7 +161,12 @@
   raw_ptr<views::Label, ExperimentalAsh> label_ = nullptr;
 };
 
+BEGIN_METADATA(BatteryView)
+END_METADATA
+
 class TitleView : public views::View {
+  METADATA_HEADER(TitleView, views::View)
+
  public:
   explicit TitleView(PaletteTray* palette_tray) : palette_tray_(palette_tray) {
     // TODO(tdanderson|jdufault): Use TriView to handle the layout of the title.
@@ -234,6 +242,9 @@
   raw_ptr<PaletteTray, DanglingUntriaged | ExperimentalAsh> palette_tray_;
 };
 
+BEGIN_METADATA(TitleView)
+END_METADATA
+
 // Used as a Shell pre-target handler to notify PaletteTray of stylus events.
 class StylusEventHandler : public ui::EventHandler {
  public:
@@ -796,4 +807,7 @@
   bubble_->bubble_view()->ChangeAnchorRect(anchor_rect);
 }
 
+BEGIN_METADATA(PaletteTray)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/palette/palette_tray.h b/ash/system/palette/palette_tray.h
index e8aeb2e0..579c4e0 100644
--- a/ash/system/palette/palette_tray.h
+++ b/ash/system/palette/palette_tray.h
@@ -19,6 +19,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observation.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/events/devices/input_device_event_observer.h"
 
 class PrefChangeRegistrar;
@@ -61,6 +62,8 @@
                                public PaletteToolManager::Delegate,
                                public ui::InputDeviceEventObserver,
                                public ProjectorSessionObserver {
+  METADATA_HEADER(PaletteTray, TrayBackgroundView)
+
  public:
   explicit PaletteTray(Shelf* shelf);
 
diff --git a/ash/system/phonehub/onboarding_view.cc b/ash/system/phonehub/onboarding_view.cc
index 3d0f98c..e1600cf 100644
--- a/ash/system/phonehub/onboarding_view.cc
+++ b/ash/system/phonehub/onboarding_view.cc
@@ -45,6 +45,8 @@
 // (Get Started and Dismiss), where user can either choose to grant permission
 // to enable this feature or dismiss the screen.
 class OnboardingMainView : public PhoneHubInterstitialView {
+  METADATA_HEADER(OnboardingMainView, PhoneHubInterstitialView)
+
  public:
   OnboardingMainView(phonehub::OnboardingUiTracker* onboarding_ui_tracker,
                      OnboardingView* parent_view,
@@ -119,11 +121,16 @@
   const OnboardingView::OnboardingFlow onboarding_flow_;
 };
 
+BEGIN_METADATA(OnboardingMainView)
+END_METADATA
+
 // OnboardingDismissPromptView ------------------------------------------------
 // A follow-up prompt screen that pops up when the user has chosen to dismiss
 // the main onboarding screen. It should not be shown again after being
 // dismissed manually by either clicking the ack button or outside the bubble.
 class OnboardingDismissPromptView : public PhoneHubInterstitialView {
+  METADATA_HEADER(OnboardingDismissPromptView, PhoneHubInterstitialView)
+
  public:
   explicit OnboardingDismissPromptView(
       phonehub::OnboardingUiTracker* onboarding_ui_tracker)
@@ -186,6 +193,9 @@
       onboarding_ui_tracker_ = nullptr;
 };
 
+BEGIN_METADATA(OnboardingDismissPromptView)
+END_METADATA
+
 // OnboardingView -------------------------------------------------------------
 OnboardingView::OnboardingView(
     phonehub::OnboardingUiTracker* onboarding_ui_tracker,
diff --git a/ash/system/phonehub/phone_hub_tray.cc b/ash/system/phonehub/phone_hub_tray.cc
index 00e282d..1508f794 100644
--- a/ash/system/phonehub/phone_hub_tray.cc
+++ b/ash/system/phonehub/phone_hub_tray.cc
@@ -47,6 +47,7 @@
 #include "chromeos/ash/components/phonehub/phone_model.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/models/image_model.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/chromeos/styles/cros_tokens_color_mappings.h"
@@ -545,4 +546,8 @@
   return features::IsPhoneHubOnboardingNotifierRevampEnabled() &&
          features::kPhoneHubOnboardingNotifierUseNudge.Get();
 }
+
+BEGIN_METADATA(PhoneHubTray)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/phonehub/phone_hub_tray.h b/ash/system/phonehub/phone_hub_tray.h
index 04bb704..0bda09a2 100644
--- a/ash/system/phonehub/phone_hub_tray.h
+++ b/ash/system/phonehub/phone_hub_tray.h
@@ -24,6 +24,7 @@
 #include "chromeos/ash/components/phonehub/app_stream_manager.h"
 #include "chromeos/ash/components/phonehub/icon_decoder.h"
 #include "chromeos/ash/components/phonehub/phone_hub_manager.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/events/event.h"
 #include "ui/views/controls/button/image_button.h"
 
@@ -54,6 +55,8 @@
                                 public SessionObserver,
                                 public WindowTreeHostManager::Observer,
                                 public phonehub::AppStreamManager::Observer {
+  METADATA_HEADER(PhoneHubTray, TrayBackgroundView)
+
  public:
   explicit PhoneHubTray(Shelf* shelf);
   PhoneHubTray(const PhoneHubTray&) = delete;
diff --git a/ash/system/power/power_button_menu_item_view.cc b/ash/system/power/power_button_menu_item_view.cc
index f88c72d..42978a73 100644
--- a/ash/system/power/power_button_menu_item_view.cc
+++ b/ash/system/power/power_button_menu_item_view.cc
@@ -5,6 +5,7 @@
 #include "ash/system/power/power_button_menu_item_view.h"
 
 #include "ash/style/ash_color_id.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/models/image_model.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/chromeos/styles/cros_tokens_color_mappings.h"
@@ -124,4 +125,7 @@
   canvas->DrawRoundRect(bounds, kFocusedItemRoundRectRadiusDp, flags);
 }
 
+BEGIN_METADATA(PowerButtonMenuItemView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/power/power_button_menu_item_view.h b/ash/system/power/power_button_menu_item_view.h
index 7267816..b7a2767 100644
--- a/ash/system/power/power_button_menu_item_view.h
+++ b/ash/system/power/power_button_menu_item_view.h
@@ -10,6 +10,7 @@
 #include "ash/ash_export.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/raw_ref.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/controls/button/image_button.h"
 
 namespace views {
@@ -26,6 +27,8 @@
 // PowerButtonMenuItemView represents an item of the power button menu. It
 // includes an icon and title.
 class ASH_EXPORT PowerButtonMenuItemView : public views::ImageButton {
+  METADATA_HEADER(PowerButtonMenuItemView, views::ImageButton)
+
  public:
   // Height of the menu item in pixels.
   static constexpr int kMenuItemHeight = 84;
diff --git a/ash/system/power/power_button_menu_screen_view.cc b/ash/system/power/power_button_menu_screen_view.cc
index 332349c..768ab4e 100644
--- a/ash/system/power/power_button_menu_screen_view.cc
+++ b/ash/system/power/power_button_menu_screen_view.cc
@@ -65,6 +65,8 @@
 class PowerButtonMenuScreenView::PowerButtonMenuBackgroundView
     : public views::View,
       public ui::ImplicitAnimationObserver {
+  METADATA_HEADER(PowerButtonMenuBackgroundView, views::View)
+
  public:
   explicit PowerButtonMenuBackgroundView(
       base::RepeatingClosure show_animation_done)
@@ -121,6 +123,11 @@
   base::RepeatingClosure show_animation_done_;
 };
 
+BEGIN_METADATA(PowerButtonMenuScreenView,
+               PowerButtonMenuBackgroundView,
+               views::View)
+END_METADATA
+
 PowerButtonMenuScreenView::PowerButtonMenuScreenView(
     ShutdownReason shutdown_reason,
     PowerButtonPosition power_button_position,
diff --git a/ash/system/power/tray_power.cc b/ash/system/power/tray_power.cc
index 07d7083..b08069e 100644
--- a/ash/system/power/tray_power.cc
+++ b/ash/system/power/tray_power.cc
@@ -26,6 +26,7 @@
 #include "chromeos/constants/chromeos_features.h"
 #include "ui/accessibility/ax_enums.mojom.h"
 #include "ui/accessibility/ax_node_data.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/chromeos/devicetype_utils.h"
 #include "ui/chromeos/styles/cros_styles.h"
@@ -81,10 +82,6 @@
   return tooltip_;
 }
 
-const char* PowerTrayView::GetClassName() const {
-  return "PowerTrayView";
-}
-
 void PowerTrayView::OnThemeChanged() {
   TrayItemView::OnThemeChanged();
   UpdateStatus(false);
@@ -174,4 +171,7 @@
   UpdateLabelOrImageViewColor(is_active());
 }
 
+BEGIN_METADATA(PowerTrayView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/power/tray_power.h b/ash/system/power/tray_power.h
index b5fec03..c7c185c 100644
--- a/ash/system/power/tray_power.h
+++ b/ash/system/power/tray_power.h
@@ -9,10 +9,13 @@
 
 #include "ash/system/power/power_status.h"
 #include "ash/system/tray/tray_item_view.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace ash {
 
 class PowerTrayView : public TrayItemView, public PowerStatus::Observer {
+  METADATA_HEADER(PowerTrayView, TrayItemView)
+
  public:
   explicit PowerTrayView(Shelf* shelf);
 
@@ -26,7 +29,6 @@
   void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
   views::View* GetTooltipHandlerForPoint(const gfx::Point& point) override;
   std::u16string GetTooltipText(const gfx::Point& p) const override;
-  const char* GetClassName() const override;
   void OnThemeChanged() override;
 
   // TrayItemView:
diff --git a/ash/system/privacy_hub/geolocation_privacy_switch_controller.cc b/ash/system/privacy_hub/geolocation_privacy_switch_controller.cc
index 02d2678..659837fe 100644
--- a/ash/system/privacy_hub/geolocation_privacy_switch_controller.cc
+++ b/ash/system/privacy_hub/geolocation_privacy_switch_controller.cc
@@ -40,7 +40,7 @@
   pref_change_registrar_ = std::make_unique<PrefChangeRegistrar>();
   pref_change_registrar_->Init(pref_service);
   pref_change_registrar_->Add(
-      prefs::kUserGeolocationAllowed,
+      prefs::kUserGeolocationAccessLevel,
       base::BindRepeating(
           &GeolocationPrivacySwitchController::OnPreferenceChanged,
           base::Unretained(this)));
@@ -83,19 +83,34 @@
 }
 
 void GeolocationPrivacySwitchController::OnPreferenceChanged() {
-  const bool geolocation_state = pref_change_registrar_->prefs()->GetBoolean(
-      prefs::kUserGeolocationAllowed);
-  DLOG(ERROR) << "Privacy Hub: Geolocation switch state = "
-              << geolocation_state;
+  const GeolocationAccessLevel geolocation_state =
+      static_cast<GeolocationAccessLevel>(
+          pref_change_registrar_->prefs()->GetInteger(
+              prefs::kUserGeolocationAccessLevel));
+  VLOG(1) << "Privacy Hub: Geolocation switch state = "
+          << static_cast<int>(geolocation_state);
   UpdateNotification();
 }
 
+bool GeolocationPrivacySwitchController::IsGeolocationUsageAllowedForApps() {
+  GeolocationAccessLevel geolocation_access_level =
+      static_cast<GeolocationAccessLevel>(
+          pref_change_registrar_->prefs()->GetInteger(
+              prefs::kUserGeolocationAccessLevel));
+
+  switch (geolocation_access_level) {
+    case GeolocationAccessLevel::kAllowed:
+      return true;
+    case GeolocationAccessLevel::kOnlyAllowedForSystem:
+    case GeolocationAccessLevel::kDisallowed:
+      return false;
+  }
+}
+
 void GeolocationPrivacySwitchController::UpdateNotification() {
   if (!pref_change_registrar_ || !pref_change_registrar_->prefs()) {
     return;
   }
-  const bool geolocation_allowed = pref_change_registrar_->prefs()->GetBoolean(
-      prefs::kUserGeolocationAllowed);
 
   PrivacyHubNotificationController* notification_controller =
       PrivacyHubNotificationController::Get();
@@ -103,7 +118,7 @@
     return;
   }
 
-  if (usage_cnt_ == 0 || geolocation_allowed) {
+  if (usage_cnt_ == 0 || IsGeolocationUsageAllowedForApps()) {
     notification_controller->RemoveSoftwareSwitchNotification(
         SensorDisabledNotificationDelegate::Sensor::kLocation);
     return;
diff --git a/ash/system/privacy_hub/geolocation_privacy_switch_controller.h b/ash/system/privacy_hub/geolocation_privacy_switch_controller.h
index 3cd3d740..2a3c175 100644
--- a/ash/system/privacy_hub/geolocation_privacy_switch_controller.h
+++ b/ash/system/privacy_hub/geolocation_privacy_switch_controller.h
@@ -41,6 +41,10 @@
   void TrackGeolocationAttempted(const std::string& app_name);
   void TrackGeolocationRelinquished(const std::string& app_name);
 
+  // Returns true if there's an active user session and geolocation permission
+  // is set to "Allowed". Returns false otherwise.
+  bool IsGeolocationUsageAllowedForApps();
+
   // Returns the names of the apps that want to actively use geolocation (if
   // there is more than `max_count` of such apps, first max_count names are
   // returned ).
diff --git a/ash/system/privacy_hub/geolocation_privacy_switch_controller_unittest.cc b/ash/system/privacy_hub/geolocation_privacy_switch_controller_unittest.cc
index e8e5622a..0725d76 100644
--- a/ash/system/privacy_hub/geolocation_privacy_switch_controller_unittest.cc
+++ b/ash/system/privacy_hub/geolocation_privacy_switch_controller_unittest.cc
@@ -59,15 +59,20 @@
   }
 
   void SetUserPref(bool allowed) {
-    Shell::Get()->session_controller()->GetActivePrefService()->SetBoolean(
-        prefs::kUserGeolocationAllowed, allowed);
+    GeolocationAccessLevel access_level;
+    if (allowed) {
+      access_level = GeolocationAccessLevel::kAllowed;
+    } else {
+      access_level = GeolocationAccessLevel::kDisallowed;
+    }
+    Shell::Get()->session_controller()->GetActivePrefService()->SetInteger(
+        prefs::kUserGeolocationAccessLevel, static_cast<int>(access_level));
   }
 
-  bool GetUserPref() const {
-    return Shell::Get()
-        ->session_controller()
-        ->GetActivePrefService()
-        ->GetBoolean(prefs::kUserGeolocationAllowed);
+  GeolocationAccessLevel GetUserPref() const {
+    return static_cast<GeolocationAccessLevel>(
+        Shell::Get()->session_controller()->GetActivePrefService()->GetInteger(
+            prefs::kUserGeolocationAccessLevel));
   }
 
   raw_ptr<GeolocationPrivacySwitchController,
@@ -143,13 +148,13 @@
                 false),
             0);
   EXPECT_TRUE(FindNotification());
-  EXPECT_FALSE(GetUserPref());
+  EXPECT_NE(GetUserPref(), GeolocationAccessLevel::kAllowed);
 
   // Click on the notification button.
   message_center::MessageCenter::Get()->ClickOnNotificationButton(
       PrivacyHubNotificationController::kGeolocationSwitchNotificationId, 0);
   // This must change the user pref.
-  EXPECT_TRUE(GetUserPref());
+  EXPECT_EQ(GetUserPref(), GeolocationAccessLevel::kAllowed);
   // The notification should be cleared after it has been clicked on.
   EXPECT_FALSE(FindNotification());
 
diff --git a/ash/system/privacy_hub/privacy_hub_controller.cc b/ash/system/privacy_hub/privacy_hub_controller.cc
index 243a948..dd866cfc 100644
--- a/ash/system/privacy_hub/privacy_hub_controller.cc
+++ b/ash/system/privacy_hub/privacy_hub_controller.cc
@@ -8,6 +8,7 @@
 
 #include "ash/constants/ash_features.h"
 #include "ash/constants/ash_pref_names.h"
+#include "ash/constants/geolocation_access_level.h"
 #include "ash/shell.h"
 #include "ash/system/privacy_hub/camera_privacy_switch_controller.h"
 #include "ash/system/privacy_hub/microphone_privacy_switch_controller.h"
@@ -77,10 +78,10 @@
 void PrivacyHubController::RegisterLocalStatePrefs(
     PrefRegistrySimple* registry) {
   // TODO(b/286526469): Sync this pref with the device owner's location
-  // permission `kUserGeolocationAllowed`.
+  // permission `kUserGeolocationAccessLevel`.
   registry->RegisterIntegerPref(
       prefs::kDeviceGeolocationAllowed,
-      static_cast<int>(PrivacyHubController::AccessLevel::kAllowed));
+      static_cast<int>(GeolocationAccessLevel::kAllowed));
 }
 
 // static
@@ -97,7 +98,9 @@
   registry->RegisterIntegerPref(
       prefs::kSpeakOnMuteOptInNudgeShownCount, 0,
       user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF);
-  registry->RegisterBooleanPref(prefs::kUserGeolocationAllowed, true);
+  registry->RegisterIntegerPref(
+      prefs::kUserGeolocationAccessLevel,
+      static_cast<int>(GeolocationAccessLevel::kAllowed));
 }
 
 void PrivacyHubController::SetFrontend(PrivacyHubDelegate* ptr) {
@@ -155,6 +158,34 @@
   return (file_size != 0ll);
 }
 
+// static
+GeolocationAccessLevel
+PrivacyHubController::ArcToCrosGeolocationPermissionMapping(bool enabled) {
+  if (enabled) {
+    return GeolocationAccessLevel::kAllowed;
+  } else {
+    // We choose `kDisallowed` over `kOnlyAllowedForSystem` to uphold user's
+    // prior privacy preferences. This value will be used to set the initial
+    // geolocation access level when user receives the Privacy Hub geolocation
+    // feature.
+    return GeolocationAccessLevel::kDisallowed;
+  }
+}
+
+// static
+bool PrivacyHubController::CrosToArcGeolocationPermissionMapping(
+    GeolocationAccessLevel access_level) {
+  switch (access_level) {
+    case GeolocationAccessLevel::kAllowed:
+      return true;
+    case GeolocationAccessLevel::kOnlyAllowedForSystem:
+    case GeolocationAccessLevel::kDisallowed:
+      return false;
+    default:
+      NOTREACHED();
+  }
+}
+
 CameraPrivacySwitchSynchronizer*
 PrivacyHubController::CameraSynchronizerForTest() {
   return camera_controller() ? static_cast<CameraPrivacySwitchSynchronizer*>(
diff --git a/ash/system/privacy_hub/privacy_hub_controller.h b/ash/system/privacy_hub/privacy_hub_controller.h
index 11e0bff..ce22626 100644
--- a/ash/system/privacy_hub/privacy_hub_controller.h
+++ b/ash/system/privacy_hub/privacy_hub_controller.h
@@ -6,6 +6,7 @@
 #define ASH_SYSTEM_PRIVACY_HUB_PRIVACY_HUB_CONTROLLER_H_
 
 #include "ash/ash_export.h"
+#include "ash/constants/geolocation_access_level.h"
 #include "ash/public/cpp/privacy_hub_delegate.h"
 #include "ash/system/privacy_hub/camera_privacy_switch_controller.h"
 #include "ash/system/privacy_hub/geolocation_privacy_switch_controller.h"
@@ -38,18 +39,6 @@
 
 class ASH_EXPORT PrivacyHubController {
  public:
-  // This enum defines the access levels of the signals of the Privacy Hub
-  // features (namely microphone, camera and geolocation) for the entire
-  // ChromeOS ecosystem.
-  // Don't modify or reorder the enum elements. New values can be added at the
-  // end. These values shall be in sync with the
-  // DeviceLoginScreenGeolocationAccessLevelProto::GeolocationAccessLevel.
-  enum class AccessLevel {
-    kDisallowed = 0,
-    kAllowed = 1,
-    kMaxValue = kAllowed,
-  };
-
   explicit PrivacyHubController(base::PassKey<PrivacyHubController>);
 
   PrivacyHubController(const PrivacyHubController&) = delete;
@@ -103,6 +92,15 @@
   // calls to the filesystem.
   static bool CheckCameraLEDFallbackDirectly();
 
+  // ARC++ geolocation toggle is migrating to ChromeOS. ChromeOS has 3 states
+  // for geolocation access level, while ARC++ has 2. These functions implement
+  // the mappings between ARC++ boolean values and ChromeOS's
+  // `GeolocationAccessLevel`s.
+  static GeolocationAccessLevel ArcToCrosGeolocationPermissionMapping(
+      bool enabled);
+  static bool CrosToArcGeolocationPermissionMapping(
+      GeolocationAccessLevel access_level);
+
  private:
   // Used for first time initialization of the cached value.
   // Can be called only once.
diff --git a/ash/system/privacy_hub/privacy_hub_notification_controller.cc b/ash/system/privacy_hub/privacy_hub_notification_controller.cc
index c7d700cb..e01371c 100644
--- a/ash/system/privacy_hub/privacy_hub_notification_controller.cc
+++ b/ash/system/privacy_hub/privacy_hub_notification_controller.cc
@@ -373,24 +373,27 @@
     return;
   }
 
-  const char* pref_name = nullptr;
   switch (sensor) {
     case Sensor::kCamera: {
-      pref_name = prefs::kUserCameraAllowed;
+      pref_service->SetBoolean(prefs::kUserCameraAllowed, enabled);
       break;
     }
     case Sensor::kMicrophone: {
-      pref_name = prefs::kUserMicrophoneAllowed;
+      pref_service->SetBoolean(prefs::kUserMicrophoneAllowed, enabled);
       break;
     }
     case Sensor::kLocation: {
-      pref_name = prefs::kUserGeolocationAllowed;
+      // Geolocation notification asks user to allow geolocation for everything
+      // (not only system services).
+      if (enabled) {
+        pref_service->SetInteger(
+            prefs::kUserGeolocationAccessLevel,
+            static_cast<int>(GeolocationAccessLevel::kAllowed));
+      }
       break;
     }
   }
-  CHECK(pref_name);
 
-  pref_service->SetBoolean(pref_name, enabled);
   privacy_hub_metrics::LogSensorEnabledFromNotification(sensor, enabled);
 }
 
diff --git a/ash/system/session/logout_button_tray.cc b/ash/system/session/logout_button_tray.cc
index 5b1e60c..bbdc73bb 100644
--- a/ash/system/session/logout_button_tray.cc
+++ b/ash/system/session/logout_button_tray.cc
@@ -25,6 +25,7 @@
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
 #include "ui/accessibility/ax_node_data.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/gfx/geometry/size.h"
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/views/controls/button/md_text_button.h"
@@ -87,10 +88,6 @@
   UpdateLogoutDialogDuration();
 }
 
-const char* LogoutButtonTray::GetClassName() const {
-  return "LogoutButtonTray";
-}
-
 void LogoutButtonTray::OnThemeChanged() {
   TrayBackgroundView::OnThemeChanged();
   auto* color_provider = AshColorProvider::Get();
@@ -172,4 +169,7 @@
   }
 }
 
+BEGIN_METADATA(LogoutButtonTray)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/session/logout_button_tray.h b/ash/system/session/logout_button_tray.h
index 97fbe9a8..6857fa6 100644
--- a/ash/system/session/logout_button_tray.h
+++ b/ash/system/session/logout_button_tray.h
@@ -12,6 +12,7 @@
 #include "ash/system/tray/tray_background_view.h"
 #include "base/memory/raw_ptr.h"
 #include "base/time/time.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/view.h"
 
@@ -29,6 +30,8 @@
 // kShowLogoutButtonInTray pref.
 class ASH_EXPORT LogoutButtonTray : public TrayBackgroundView,
                                     public SessionObserver {
+  METADATA_HEADER(LogoutButtonTray, TrayBackgroundView)
+
  public:
   explicit LogoutButtonTray(Shelf* shelf);
 
@@ -51,7 +54,6 @@
   void HideBubble(const TrayBubbleView* bubble_view) override;
   std::u16string GetAccessibleNameForTray() override;
   void HandleLocaleChange() override;
-  const char* GetClassName() const override;
   void OnThemeChanged() override;
 
   // SessionObserver:
diff --git a/ash/system/time/calendar_month_view.cc b/ash/system/time/calendar_month_view.cc
index b85904a2..0e551641 100644
--- a/ash/system/time/calendar_month_view.cc
+++ b/ash/system/time/calendar_month_view.cc
@@ -574,6 +574,9 @@
   }
 }
 
+BEGIN_METADATA(CalendarMonthView)
+END_METADATA
+
 CalendarDateCellView* CalendarMonthView::AddDateCellToLayout(
     base::Time current_date,
     int column,
diff --git a/ash/system/time/calendar_month_view.h b/ash/system/time/calendar_month_view.h
index 9a918feb..8dddad52 100644
--- a/ash/system/time/calendar_month_view.h
+++ b/ash/system/time/calendar_month_view.h
@@ -11,6 +11,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/scoped_observation.h"
 #include "base/time/time.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/controls/button/label_button.h"
 #include "ui/views/view.h"
 
@@ -132,6 +133,7 @@
 //  Container for `CalendarDateCellView` for a single month.
 class ASH_EXPORT CalendarMonthView : public views::View,
                                      public CalendarModel::Observer {
+  METADATA_HEADER(CalendarMonthView, views::View)
  public:
   CalendarMonthView(base::Time first_day_of_month,
                     CalendarViewController* calendar_view_controller);
diff --git a/ash/system/time/calendar_view.cc b/ash/system/time/calendar_view.cc
index 939f3267..2a88ab2 100644
--- a/ash/system/time/calendar_view.cc
+++ b/ash/system/time/calendar_view.cc
@@ -232,6 +232,8 @@
 
 // The month view header which contains the title of each week day.
 class MonthHeaderView : public views::View {
+  METADATA_HEADER(MonthHeaderView, views::View)
+
  public:
   MonthHeaderView() {
     views::TableLayout* layout =
@@ -267,10 +269,15 @@
   view->layer()->SetTransform(gfx::Transform());
 }
 
+BEGIN_METADATA(MonthHeaderView)
+END_METADATA
+
 }  // namespace
 
 // The label for each month that's within the scroll view.
 class CalendarView::MonthHeaderLabelView : public views::View {
+  METADATA_HEADER(MonthHeaderLabelView, views::View)
+
  public:
   MonthHeaderLabelView(LabelType type,
                        CalendarViewController* calendar_view_controller)
@@ -314,6 +321,9 @@
   const raw_ptr<views::Label, ExperimentalAsh> month_label_ = nullptr;
 };
 
+BEGIN_METADATA(CalendarView, MonthHeaderLabelView, views::View)
+END_METADATA
+
 CalendarView::ScrollContentsView::ScrollContentsView(
     CalendarViewController* controller)
     : controller_(controller),
@@ -376,6 +386,9 @@
   }
 }
 
+BEGIN_METADATA(CalendarView, ScrollContentsView, views::View)
+END_METADATA
+
 CalendarHeaderView::CalendarHeaderView(const std::u16string& month,
                                        const std::u16string& year)
     : header_(AddChildView(CreateHeaderView(month))),
diff --git a/ash/system/time/calendar_view.h b/ash/system/time/calendar_view.h
index cd61ffc..11ea23a7 100644
--- a/ash/system/time/calendar_view.h
+++ b/ash/system/time/calendar_view.h
@@ -144,6 +144,8 @@
   // Content view of calendar's scroll view, used for metrics recording.
   // TODO(crbug.com/1297376): Add unit tests for metrics recording.
   class ScrollContentsView : public views::View {
+    METADATA_HEADER(ScrollContentsView, views::View)
+
    public:
     explicit ScrollContentsView(CalendarViewController* controller);
     ScrollContentsView(const ScrollContentsView& other) = delete;
diff --git a/ash/system/time/time_tray_item_view.cc b/ash/system/time/time_tray_item_view.cc
index 2662932..a38fbf24 100644
--- a/ash/system/time/time_tray_item_view.cc
+++ b/ash/system/time/time_tray_item_view.cc
@@ -13,6 +13,7 @@
 #include "ash/system/model/system_tray_model.h"
 #include "ash/system/time/time_view.h"
 #include "chromeos/constants/chromeos_features.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/chromeos/styles/cros_tokens_color_mappings.h"
 
 namespace ash {
@@ -53,8 +54,7 @@
   time_view_->SetDateViewColorId(color_id);
 }
 
-const char* TimeTrayItemView::GetClassName() const {
-  return "TimeTrayItemView";
-}
+BEGIN_METADATA(TimeTrayItemView)
+END_METADATA
 
 }  // namespace ash
diff --git a/ash/system/time/time_tray_item_view.h b/ash/system/time/time_tray_item_view.h
index a65226e1..efe692ce 100644
--- a/ash/system/time/time_tray_item_view.h
+++ b/ash/system/time/time_tray_item_view.h
@@ -9,11 +9,14 @@
 #include "ash/system/time/time_view.h"
 #include "ash/system/tray/tray_item_view.h"
 #include "base/memory/raw_ptr.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace ash {
 class Shelf;
 
 class ASH_EXPORT TimeTrayItemView : public TrayItemView {
+  METADATA_HEADER(TimeTrayItemView, TrayItemView)
+
  public:
   TimeTrayItemView(Shelf* shelf, TimeView::Type type);
 
@@ -29,9 +32,6 @@
   void HandleLocaleChange() override;
   void UpdateLabelOrImageViewColor(bool active) override;
 
-  // views::View:
-  const char* GetClassName() const override;
-
  private:
   friend class TimeTrayItemViewTest;
 
diff --git a/ash/system/tray/tray_background_view.cc b/ash/system/tray/tray_background_view.cc
index 20f14fd..ca27baa 100644
--- a/ash/system/tray/tray_background_view.cc
+++ b/ash/system/tray/tray_background_view.cc
@@ -139,13 +139,9 @@
       -ash::ShelfConfig::Get()->status_area_hit_region_padding();
 
   if (is_shelf_horizontal) {
-    insets =
-        gfx::Insets::TLBR(secondary_padding, primary_padding, secondary_padding,
-                          primary_padding + ash::kTraySeparatorWidth);
+    insets = gfx::Insets::VH(secondary_padding, primary_padding);
   } else {
-    insets = gfx::Insets::TLBR(primary_padding, secondary_padding,
-                               primary_padding + ash::kTraySeparatorWidth,
-                               secondary_padding);
+    insets = gfx::Insets::VH(primary_padding, secondary_padding);
   }
   MirrorInsetsIfNecessary(&insets);
   return insets;
diff --git a/ash/system/tray/tray_constants.h b/ash/system/tray/tray_constants.h
index 4ae775b..b4792ec 100644
--- a/ash/system/tray/tray_constants.h
+++ b/ash/system/tray/tray_constants.h
@@ -83,10 +83,6 @@
 // Width of lines used to separate menu items (e.g. input method menu).
 inline constexpr int kMenuSeparatorWidth = 1;
 
-// Width of lines used to separate sections of the system tray, for instance
-// in tray detailed views.
-inline constexpr int kTraySeparatorWidth = 0;
-
 // The size of the icons appearing in the material design system tray.
 inline constexpr int kTrayIconSize = 16;
 
diff --git a/ash/system/tray/tray_container.cc b/ash/system/tray/tray_container.cc
index a5f32ef..a4afe70 100644
--- a/ash/system/tray/tray_container.cc
+++ b/ash/system/tray/tray_container.cc
@@ -14,6 +14,7 @@
 #include "ash/system/tray/tray_background_view.h"
 #include "ash/system/tray/tray_constants.h"
 #include "chromeos/constants/chromeos_features.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/compositor/layer.h"
 #include "ui/gfx/geometry/insets.h"
 #include "ui/views/border.h"
@@ -182,4 +183,7 @@
   SchedulePaint();
 }
 
+BEGIN_METADATA(TrayContainer)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/tray/tray_container.h b/ash/system/tray/tray_container.h
index b2e3bc0e..960862f 100644
--- a/ash/system/tray/tray_container.h
+++ b/ash/system/tray/tray_container.h
@@ -8,6 +8,7 @@
 #include "ash/system/tray/tray_constants.h"
 #include "base/memory/raw_ptr.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/layout/box_layout.h"
 #include "ui/views/view.h"
 
@@ -22,6 +23,8 @@
 // Base class for tray containers. Sets the border and layout. The container
 // auto-resizes the widget when necessary.
 class TrayContainer : public views::View {
+  METADATA_HEADER(TrayContainer, views::View)
+
  public:
   TrayContainer(Shelf* shelf, TrayBackgroundView* tray_background_view);
 
diff --git a/ash/system/tray/tray_info_label.cc b/ash/system/tray/tray_info_label.cc
index 1d2794b..f019f80 100644
--- a/ash/system/tray/tray_info_label.cc
+++ b/ash/system/tray/tray_info_label.cc
@@ -9,6 +9,7 @@
 #include "ash/system/tray/tray_popup_utils.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/views/layout/fill_layout.h"
 
 namespace ash {
@@ -45,8 +46,7 @@
   label_->SetText(l10n_util::GetStringUTF16(message_id));
 }
 
-const char* TrayInfoLabel::GetClassName() const {
-  return "TrayInfoLabel";
-}
+BEGIN_METADATA(TrayInfoLabel)
+END_METADATA
 
 }  // namespace ash
diff --git a/ash/system/tray/tray_info_label.h b/ash/system/tray/tray_info_label.h
index 6baf6c9..b035f33 100644
--- a/ash/system/tray/tray_info_label.h
+++ b/ash/system/tray/tray_info_label.h
@@ -7,6 +7,7 @@
 
 #include "ash/ash_export.h"
 #include "base/memory/raw_ptr.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/controls/label.h"
 #include "ui/views/view.h"
 
@@ -16,6 +17,8 @@
 // row within a system menu detailed view (e.g., the "Scanning for devices..."
 // message that can appear at the top of the Bluetooth detailed view).
 class ASH_EXPORT TrayInfoLabel : public views::View {
+  METADATA_HEADER(TrayInfoLabel, views::View)
+
  public:
   explicit TrayInfoLabel(int message_id);
 
@@ -28,9 +31,6 @@
   // |message_id|.
   void Update(int message_id);
 
-  // views::View:
-  const char* GetClassName() const override;
-
   const views::Label* label() { return label_; }
 
  private:
diff --git a/ash/system/unified/current_locale_view.cc b/ash/system/unified/current_locale_view.cc
index 5d1b5cf..cd39385 100644
--- a/ash/system/unified/current_locale_view.cc
+++ b/ash/system/unified/current_locale_view.cc
@@ -15,6 +15,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/views/border.h"
 #include "ui/views/controls/label.h"
 
@@ -75,4 +76,7 @@
                                  : cros_tokens::kCrosSysOnSurface);
 }
 
+BEGIN_METADATA(CurrentLocaleView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/unified/current_locale_view.h b/ash/system/unified/current_locale_view.h
index 01b60d0..0d00a49f 100644
--- a/ash/system/unified/current_locale_view.h
+++ b/ash/system/unified/current_locale_view.h
@@ -7,12 +7,15 @@
 
 #include "ash/system/model/locale_model.h"
 #include "ash/system/tray/tray_item_view.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace ash {
 
 // The current locale view in UnifiedSystemTray button. The view shows the
 // abbreviation of the current locale (e.g. "DA").
 class CurrentLocaleView : public TrayItemView, public LocaleModel::Observer {
+  METADATA_HEADER(CurrentLocaleView, TrayItemView)
+
  public:
   explicit CurrentLocaleView(Shelf* shelf);
 
diff --git a/ash/system/unified/ime_mode_view.cc b/ash/system/unified/ime_mode_view.cc
index 6b89b7c2..897bcdeb 100644
--- a/ash/system/unified/ime_mode_view.cc
+++ b/ash/system/unified/ime_mode_view.cc
@@ -16,6 +16,7 @@
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/views/border.h"
 #include "ui/views/controls/label.h"
 
@@ -62,10 +63,6 @@
   Update();
 }
 
-const char* ImeModeView::GetClassName() const {
-  return "ImeModeView";
-}
-
 void ImeModeView::HandleLocaleChange() {
   Update();
 }
@@ -123,4 +120,7 @@
   Layout();
 }
 
+BEGIN_METADATA(ImeModeView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/unified/ime_mode_view.h b/ash/system/unified/ime_mode_view.h
index ade1fd6..b015b666 100644
--- a/ash/system/unified/ime_mode_view.h
+++ b/ash/system/unified/ime_mode_view.h
@@ -9,6 +9,7 @@
 #include "ash/system/ime/ime_observer.h"
 #include "ash/system/model/locale_model.h"
 #include "ash/system/tray/tray_item_view.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace ash {
 
@@ -17,6 +18,8 @@
                     public IMEObserver,
                     public LocaleModel::Observer,
                     public TabletModeObserver {
+  METADATA_HEADER(ImeModeView, TrayItemView)
+
  public:
   explicit ImeModeView(Shelf* shelf);
 
@@ -37,7 +40,6 @@
   void OnTabletModeEnded() override;
 
   // views::TrayItemView:
-  const char* GetClassName() const override;
   void HandleLocaleChange() override;
   void UpdateLabelOrImageViewColor(bool active) override;
 
diff --git a/ash/system/unified/managed_device_tray_item_view.cc b/ash/system/unified/managed_device_tray_item_view.cc
index a3b1cea..7293d8e 100644
--- a/ash/system/unified/managed_device_tray_item_view.cc
+++ b/ash/system/unified/managed_device_tray_item_view.cc
@@ -18,6 +18,7 @@
 #include "chromeos/constants/chromeos_features.h"
 #include "chromeos/strings/grit/chromeos_strings.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/models/image_model.h"
 #include "ui/chromeos/devicetype_utils.h"
 #include "ui/gfx/paint_vector_icon.h"
@@ -133,4 +134,7 @@
   }
 }
 
+BEGIN_METADATA(ManagedDeviceTrayItemView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/unified/managed_device_tray_item_view.h b/ash/system/unified/managed_device_tray_item_view.h
index 144cb581..2123d05 100644
--- a/ash/system/unified/managed_device_tray_item_view.h
+++ b/ash/system/unified/managed_device_tray_item_view.h
@@ -8,6 +8,7 @@
 #include "ash/public/cpp/session/session_observer.h"
 #include "ash/system/enterprise/enterprise_domain_observer.h"
 #include "ash/system/tray/tray_item_view.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace ash {
 
@@ -17,6 +18,8 @@
 class ManagedDeviceTrayItemView : public TrayItemView,
                                   public SessionObserver,
                                   public EnterpriseDomainObserver {
+  METADATA_HEADER(ManagedDeviceTrayItemView, TrayItemView)
+
  public:
   explicit ManagedDeviceTrayItemView(Shelf* shelf);
 
diff --git a/ash/system/unified/notification_counter_view.cc b/ash/system/unified/notification_counter_view.cc
index 68a1744..4083c1a6 100644
--- a/ash/system/unified/notification_counter_view.cc
+++ b/ash/system/unified/notification_counter_view.cc
@@ -19,6 +19,7 @@
 #include "base/memory/raw_ptr.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/models/image_model.h"
 #include "ui/color/color_id.h"
 #include "ui/gfx/canvas.h"
@@ -212,9 +213,8 @@
           this, count_for_display_));
 }
 
-const char* NotificationCounterView::GetClassName() const {
-  return "NotificationCounterView";
-}
+BEGIN_METADATA(NotificationCounterView)
+END_METADATA
 
 QuietModeView::QuietModeView(Shelf* shelf) : TrayItemView(shelf) {
   CreateImageView();
@@ -263,9 +263,8 @@
              : cros_tokens::kCrosSysOnSurface));
 }
 
-const char* QuietModeView::GetClassName() const {
-  return "QuietModeView";
-}
+BEGIN_METADATA(QuietModeView)
+END_METADATA
 
 SeparatorTrayItemView::SeparatorTrayItemView(Shelf* shelf)
     : TrayItemView(shelf) {
@@ -282,12 +281,11 @@
 
 void SeparatorTrayItemView::HandleLocaleChange() {}
 
-const char* SeparatorTrayItemView::GetClassName() const {
-  return "SeparatorTrayItemView";
-}
-
 void SeparatorTrayItemView::UpdateColor(session_manager::SessionState state) {
   separator_->SetColorId(SeparatorIconColorId(state));
 }
 
+BEGIN_METADATA(SeparatorTrayItemView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/unified/notification_counter_view.h b/ash/system/unified/notification_counter_view.h
index 361e731..5ae9a9b 100644
--- a/ash/system/unified/notification_counter_view.h
+++ b/ash/system/unified/notification_counter_view.h
@@ -8,6 +8,7 @@
 #include "ash/ash_export.h"
 #include "ash/system/tray/tray_item_view.h"
 #include "base/memory/raw_ptr.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace session_manager {
 enum class SessionState;
@@ -27,6 +28,8 @@
 
 // A notification counter view in UnifiedSystemTray button.
 class ASH_EXPORT NotificationCounterView : public TrayItemView {
+  METADATA_HEADER(NotificationCounterView, TrayItemView)
+
  public:
   NotificationCounterView(Shelf* shelf,
                           NotificationIconsController* controller);
@@ -44,9 +47,6 @@
   void OnThemeChanged() override;
   void UpdateLabelOrImageViewColor(bool active) override;
 
-  // views::TrayItemView:
-  const char* GetClassName() const override;
-
   int count_for_display_for_testing() const { return count_for_display_; }
 
  private:
@@ -63,6 +63,8 @@
 
 // A do-not-distrub icon view in UnifiedSystemTray button.
 class QuietModeView : public TrayItemView {
+  METADATA_HEADER(QuietModeView, TrayItemView)
+
  public:
   explicit QuietModeView(Shelf* shelf);
   ~QuietModeView() override;
@@ -75,13 +77,12 @@
   void HandleLocaleChange() override;
   void OnThemeChanged() override;
   void UpdateLabelOrImageViewColor(bool active) override;
-
-  // views::TrayItemView:
-  const char* GetClassName() const override;
 };
 
 // Separator view in UnifiedSystemTray button.
 class SeparatorTrayItemView : public TrayItemView {
+  METADATA_HEADER(SeparatorTrayItemView, TrayItemView)
+
  public:
   explicit SeparatorTrayItemView(Shelf* shelf);
   ~SeparatorTrayItemView() override;
@@ -90,7 +91,6 @@
 
   // TrayItemView:
   void HandleLocaleChange() override;
-  const char* GetClassName() const override;
 
   // Update the color of separator depending on the given state.
   void UpdateColor(session_manager::SessionState state);
diff --git a/ash/system/unified/notification_icons_controller.cc b/ash/system/unified/notification_icons_controller.cc
index c6e2ca4..caa62c4 100644
--- a/ash/system/unified/notification_icons_controller.cc
+++ b/ash/system/unified/notification_icons_controller.cc
@@ -25,6 +25,7 @@
 #include "ash/system/unified/unified_system_tray_model.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/models/image_model.h"
 #include "ui/color/color_id.h"
 #include "ui/color/color_provider.h"
@@ -195,6 +196,9 @@
   }
 }
 
+BEGIN_METADATA(NotificationIconTrayItemView)
+END_METADATA
+
 NotificationIconsController::NotificationIconsController(
     Shelf* shelf,
     UnifiedSystemTrayModel* system_tray_model,
diff --git a/ash/system/unified/notification_icons_controller.h b/ash/system/unified/notification_icons_controller.h
index f6875cc..cbe25fc 100644
--- a/ash/system/unified/notification_icons_controller.h
+++ b/ash/system/unified/notification_icons_controller.h
@@ -13,6 +13,7 @@
 #include "ash/system/unified/unified_system_tray_model.h"
 #include "base/memory/raw_ptr.h"
 #include "base/scoped_observation.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/display/display_observer.h"
 #include "ui/message_center/message_center_observer.h"
 #include "ui/message_center/message_center_types.h"
@@ -34,6 +35,8 @@
 
 // Tray item view for notification icon shown in the tray.
 class ASH_EXPORT NotificationIconTrayItemView : public TrayItemView {
+  METADATA_HEADER(NotificationIconTrayItemView, TrayItemView)
+
  public:
   NotificationIconTrayItemView(Shelf* shelf,
                                NotificationIconsController* controller_);
diff --git a/ash/system/unified/power_button.cc b/ash/system/unified/power_button.cc
index 1f27c0cc..9df2763f 100644
--- a/ash/system/unified/power_button.cc
+++ b/ash/system/unified/power_button.cc
@@ -28,6 +28,7 @@
 #include "chromeos/dbus/power/power_manager_client.h"
 #include "components/user_manager/user_type.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/models/image_model.h"
 #include "ui/base/models/menu_separator_types.h"
 #include "ui/base/models/simple_menu_model.h"
@@ -373,6 +374,9 @@
       is_active ? kChevronUpSmallIcon : kChevronDownSmallIcon, icon_color_id));
 }
 
+BEGIN_METADATA(PowerButtonContainer)
+END_METADATA
+
 PowerButton::PowerButton(UnifiedSystemTrayController* tray_controller)
     : background_view_(AddChildView(std::make_unique<View>())),
       button_content_(AddChildView(std::make_unique<PowerButtonContainer>(
@@ -474,4 +478,7 @@
   UpdateView();
 }
 
+BEGIN_METADATA(PowerButton)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/unified/power_button.h b/ash/system/unified/power_button.h
index cb08876..c9727cb17 100644
--- a/ash/system/unified/power_button.h
+++ b/ash/system/unified/power_button.h
@@ -9,6 +9,7 @@
 
 #include "ash/ash_export.h"
 #include "base/memory/raw_ptr.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/view.h"
 
@@ -28,6 +29,8 @@
 // The power button container which contains 2 icons: a power icon and an
 // arrow down icon.
 class PowerButtonContainer : public views::Button {
+  METADATA_HEADER(PowerButtonContainer, views::Button)
+
  public:
   explicit PowerButtonContainer(PressedCallback callback);
   PowerButtonContainer(const PowerButtonContainer&) = delete;
@@ -46,6 +49,8 @@
 // `background_view_` will change its corner radii and a power button
 // menu will pop up at the same time when it's active.
 class ASH_EXPORT PowerButton : public views::View {
+  METADATA_HEADER(PowerButton, views::View)
+
  public:
   explicit PowerButton(UnifiedSystemTrayController* tray_controller);
   PowerButton(const PowerButton&) = delete;
diff --git a/ash/system/unified/screen_capture_tray_item_view.cc b/ash/system/unified/screen_capture_tray_item_view.cc
index 1f669e2..311d05f 100644
--- a/ash/system/unified/screen_capture_tray_item_view.cc
+++ b/ash/system/unified/screen_capture_tray_item_view.cc
@@ -15,6 +15,7 @@
 #include "chromeos/constants/chromeos_features.h"
 #include "components/vector_icons/vector_icons.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/chromeos/styles/cros_tokens_color_mappings.h"
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/gfx/vector_icon_types.h"
@@ -118,4 +119,8 @@
 void ScreenCaptureTrayItemView::MultiCaptureServiceClientDestroyed() {
   multi_capture_service_client_observation_.Reset();
 }
+
+BEGIN_METADATA(ScreenCaptureTrayItemView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/unified/screen_capture_tray_item_view.h b/ash/system/unified/screen_capture_tray_item_view.h
index a4e3eef6..bef1d8d4 100644
--- a/ash/system/unified/screen_capture_tray_item_view.h
+++ b/ash/system/unified/screen_capture_tray_item_view.h
@@ -15,6 +15,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace url {
 class Origin;
@@ -27,6 +28,8 @@
 class ASH_EXPORT ScreenCaptureTrayItemView
     : public TrayItemView,
       public MultiCaptureServiceClient::Observer {
+  METADATA_HEADER(ScreenCaptureTrayItemView, TrayItemView)
+
  public:
   struct ScreenCaptureTrayItemMetadata {
     explicit ScreenCaptureTrayItemMetadata(base::TimeTicks time_created);
diff --git a/ash/system/unified/unified_system_tray.cc b/ash/system/unified/unified_system_tray.cc
index fbdd2b8..c07286f 100644
--- a/ash/system/unified/unified_system_tray.cc
+++ b/ash/system/unified/unified_system_tray.cc
@@ -57,6 +57,7 @@
 #include "chromeos/constants/chromeos_features.h"
 #include "media/capture/video/chromeos/video_capture_features_chromeos.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/compositor/presentation_time_recorder.h"
 #include "ui/display/screen.h"
 #include "ui/gfx/geometry/point.h"
@@ -629,4 +630,7 @@
   }
 }
 
+BEGIN_METADATA(UnifiedSystemTray)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/unified/unified_system_tray.h b/ash/system/unified/unified_system_tray.h
index 82af3fe..175fb58 100644
--- a/ash/system/unified/unified_system_tray.h
+++ b/ash/system/unified/unified_system_tray.h
@@ -20,6 +20,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 
 namespace ui {
 class Event;
@@ -67,6 +68,8 @@
       public UnifiedSystemTrayController::Observer,
       public TabletModeObserver,
       public message_center::MessageCenterObserver {
+  METADATA_HEADER(UnifiedSystemTray, TrayBackgroundView)
+
  public:
   class Observer : public base::CheckedObserver {
    public:
diff --git a/ash/system/update/eol_notice_quick_settings_view.cc b/ash/system/update/eol_notice_quick_settings_view.cc
index 204c6ab..a832395 100644
--- a/ash/system/update/eol_notice_quick_settings_view.cc
+++ b/ash/system/update/eol_notice_quick_settings_view.cc
@@ -16,6 +16,7 @@
 #include "ash/system/unified/quick_settings_metrics_util.h"
 #include "third_party/skia/include/core/SkPath.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/chromeos/styles/cros_tokens_color_mappings.h"
 #include "ui/color/color_provider.h"
 #include "ui/gfx/canvas.h"
@@ -91,4 +92,7 @@
                    flags);
 }
 
+BEGIN_METADATA(EolNoticeQuickSettingsView)
+END_METADATA
+
 }  // namespace ash
diff --git a/ash/system/update/eol_notice_quick_settings_view.h b/ash/system/update/eol_notice_quick_settings_view.h
index 9f67b0f..a3cf6a9 100644
--- a/ash/system/update/eol_notice_quick_settings_view.h
+++ b/ash/system/update/eol_notice_quick_settings_view.h
@@ -6,6 +6,7 @@
 #define ASH_SYSTEM_UPDATE_EOL_NOTICE_QUICK_SETTINGS_VIEW_H_
 
 #include "ash/ash_export.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/controls/button/label_button.h"
 
 namespace ash {
@@ -14,6 +15,8 @@
 // life. Clicking the label will request a page with more info about device end
 // of life to be opened.
 class ASH_EXPORT EolNoticeQuickSettingsView : public views::LabelButton {
+  METADATA_HEADER(EolNoticeQuickSettingsView, views::LabelButton)
+
  public:
   EolNoticeQuickSettingsView();
   ~EolNoticeQuickSettingsView() override;
diff --git a/ash/system/video_conference/bubble/return_to_app_button_base.cc b/ash/system/video_conference/bubble/return_to_app_button_base.cc
index 37508e3..65a4661f 100644
--- a/ash/system/video_conference/bubble/return_to_app_button_base.cc
+++ b/ash/system/video_conference/bubble/return_to_app_button_base.cc
@@ -20,6 +20,7 @@
 #include "base/unguessable_token.h"
 #include "chromeos/crosapi/mojom/video_conference.mojom.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/models/image_model.h"
 #include "ui/chromeos/styles/cros_tokens_color_mappings.h"
 #include "ui/views/background.h"
@@ -148,4 +149,7 @@
   return label_->GetText();
 }
 
+BEGIN_METADATA(ReturnToAppButtonBase)
+END_METADATA
+
 }  // namespace ash::video_conference
diff --git a/ash/system/video_conference/bubble/return_to_app_button_base.h b/ash/system/video_conference/bubble/return_to_app_button_base.h
index 4f34ca7..7b471cd9 100644
--- a/ash/system/video_conference/bubble/return_to_app_button_base.h
+++ b/ash/system/video_conference/bubble/return_to_app_button_base.h
@@ -11,6 +11,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "chromeos/crosapi/mojom/video_conference.mojom-forward.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/controls/button/button.h"
 
 namespace base {
@@ -32,6 +33,8 @@
 // the layout or padding/spacing (the overriding class needs to take care of
 // that).
 class ASH_EXPORT ReturnToAppButtonBase : public views::Button {
+  METADATA_HEADER(ReturnToAppButtonBase, views::Button)
+
  public:
   ReturnToAppButtonBase(const ReturnToAppButtonBase&) = delete;
   ReturnToAppButtonBase& operator=(const ReturnToAppButtonBase&) = delete;
diff --git a/ash/system/video_conference/bubble/return_to_app_panel.cc b/ash/system/video_conference/bubble/return_to_app_panel.cc
index 8c496e43..a5d03504 100644
--- a/ash/system/video_conference/bubble/return_to_app_panel.cc
+++ b/ash/system/video_conference/bubble/return_to_app_panel.cc
@@ -25,6 +25,7 @@
 #include "base/unguessable_token.h"
 #include "chromeos/crosapi/mojom/video_conference.mojom.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/models/image_model.h"
 #include "ui/chromeos/styles/cros_tokens_color_mappings.h"
 #include "ui/compositor/animation_throughput_reporter.h"
@@ -155,6 +156,8 @@
 // depending on the expand state.
 class ReturnToAppExpandButton : public views::ImageView,
                                 ReturnToAppButton::Observer {
+  METADATA_HEADER(ReturnToAppExpandButton, views::ImageView)
+
  public:
   explicit ReturnToAppExpandButton(ReturnToAppButton* return_to_app_button)
       : return_to_app_button_(return_to_app_button) {
@@ -202,6 +205,9 @@
   const raw_ptr<ReturnToAppButton, ExperimentalAsh> return_to_app_button_;
 };
 
+BEGIN_METADATA(ReturnToAppExpandButton)
+END_METADATA
+
 }  // namespace
 
 // -----------------------------------------------------------------------------
@@ -326,6 +332,9 @@
   SetAccessibleName(accessible_name);
 }
 
+BEGIN_METADATA(ReturnToAppButton)
+END_METADATA
+
 // -----------------------------------------------------------------------------
 // ReturnToAppContainer:
 
@@ -416,6 +425,9 @@
   return size;
 }
 
+BEGIN_METADATA(ReturnToAppPanel, ReturnToAppContainer, views::View)
+END_METADATA
+
 // -----------------------------------------------------------------------------
 // ReturnToAppPanel:
 
@@ -539,4 +551,7 @@
   PreferredSizeChanged();
 }
 
+BEGIN_METADATA(ReturnToAppPanel)
+END_METADATA
+
 }  // namespace ash::video_conference
diff --git a/ash/system/video_conference/bubble/return_to_app_panel.h b/ash/system/video_conference/bubble/return_to_app_panel.h
index dd36320..ba17a36 100644
--- a/ash/system/video_conference/bubble/return_to_app_panel.h
+++ b/ash/system/video_conference/bubble/return_to_app_panel.h
@@ -15,6 +15,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list_types.h"
 #include "chromeos/crosapi/mojom/video_conference.mojom-forward.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/compositor/throughput_tracker.h"
 #include "ui/gfx/geometry/size.h"
 #include "ui/views/animation/animation_delegate_views.h"
@@ -43,6 +44,8 @@
 
 // The "return to app" button that resides within the "return to app" panel.
 class ASH_EXPORT ReturnToAppButton : public ReturnToAppButtonBase {
+  METADATA_HEADER(ReturnToAppButton, ReturnToAppButtonBase)
+
  public:
   class Observer : public base::CheckedObserver {
    public:
@@ -112,6 +115,8 @@
 // focused.
 class ASH_EXPORT ReturnToAppPanel : public views::View,
                                     ReturnToAppButton::Observer {
+  METADATA_HEADER(ReturnToAppPanel, views::View)
+
  public:
   explicit ReturnToAppPanel(const MediaApps& apps);
   ReturnToAppPanel(const ReturnToAppPanel&) = delete;
@@ -132,6 +137,8 @@
   // Mainly used to handle expand/collapse animation.
   class ReturnToAppContainer : public views::View,
                                public views::AnimationDelegateViews {
+    METADATA_HEADER(ReturnToAppContainer, views::View)
+
    public:
     ReturnToAppContainer();
     ReturnToAppContainer(const ReturnToAppContainer&) = delete;
diff --git a/ash/system/video_conference/bubble/set_value_effects_view.cc b/ash/system/video_conference/bubble/set_value_effects_view.cc
index 76e13ec9..661073a 100644
--- a/ash/system/video_conference/bubble/set_value_effects_view.cc
+++ b/ash/system/video_conference/bubble/set_value_effects_view.cc
@@ -13,6 +13,7 @@
 #include "ash/system/video_conference/effects/video_conference_tray_effects_manager_types.h"
 #include "ash/system/video_conference/video_conference_tray_controller.h"
 #include "ash/system/video_conference/video_conference_utils.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/views/controls/label.h"
 #include "ui/views/layout/box_layout.h"
 #include "ui/views/layout/box_layout_view.h"
@@ -94,6 +95,9 @@
   tab_slider_ = AddChildView(std::move(tab_slider));
 }
 
+BEGIN_METADATA(SetValueEffectSlider)
+END_METADATA
+
 SetValueEffectsView::SetValueEffectsView(
     VideoConferenceTrayController* controller) {
   SetID(BubbleViewID::kSetValueEffectsView);
@@ -119,4 +123,7 @@
   }
 }
 
+BEGIN_METADATA(SetValueEffectsView)
+END_METADATA
+
 }  // namespace ash::video_conference
diff --git a/ash/system/video_conference/bubble/set_value_effects_view.h b/ash/system/video_conference/bubble/set_value_effects_view.h
index 1abed10a..85daa638 100644
--- a/ash/system/video_conference/bubble/set_value_effects_view.h
+++ b/ash/system/video_conference/bubble/set_value_effects_view.h
@@ -7,6 +7,7 @@
 
 #include "ash/system/video_conference/effects/video_conference_tray_effects_manager_types.h"
 #include "base/memory/raw_ptr.h"
+#include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/view.h"
 
 namespace ash {
@@ -22,6 +23,8 @@
 // and a tab slider that allows the user to select from one of several integer
 // values.
 class SetValueEffectSlider : public views::View {
+  METADATA_HEADER(SetValueEffectSlider, views::View)
+
  public:
   explicit SetValueEffectSlider(const VcHostedEffect* effect);
 
@@ -45,6 +48,8 @@
 // The set-value effects view that resides in the video conference bubble,
 // containing all the `SetValueEffectSlider` views in this bubble.
 class SetValueEffectsView : public views::View {
+  METADATA_HEADER(SetValueEffectsView, views::View)
+
  public:
   explicit SetValueEffectsView(VideoConferenceTrayController* controller);
   SetValueEffectsView(const SetValueEffectsView&) = delete;
diff --git a/ash/system/video_conference/video_conference_tray.cc b/ash/system/video_conference/video_conference_tray.cc
index f11e41e..bd71cdf 100644
--- a/ash/system/video_conference/video_conference_tray.cc
+++ b/ash/system/video_conference/video_conference_tray.cc
@@ -81,6 +81,8 @@
 
 // A customized toggle button for the VC tray's toggle bubble button.
 class ToggleBubbleButton : public IconButton {
+  METADATA_HEADER(ToggleBubbleButton, IconButton)
+
  public:
   ToggleBubbleButton(VideoConferenceTray* tray, PressedCallback callback)
       : IconButton(std::move(callback),
@@ -125,6 +127,9 @@
   const raw_ptr<VideoConferenceTray, ExperimentalAsh> tray_;
 };
 
+BEGIN_METADATA(ToggleBubbleButton)
+END_METADATA
+
 }  // namespace
 
 VideoConferenceTrayButton::VideoConferenceTrayButton(
@@ -242,6 +247,9 @@
       l10n_util::GetStringUTF16(capture_state_id)));
 }
 
+BEGIN_METADATA(VideoConferenceTrayButton)
+END_METADATA
+
 VideoConferenceTray::VideoConferenceTray(Shelf* shelf)
     : TrayBackgroundView(shelf,
                          TrayBackgroundViewCatalogName::kVideoConferenceTray) {
diff --git a/ash/system/video_conference/video_conference_tray.h b/ash/system/video_conference/video_conference_tray.h
index 299e8f19..989b08bc 100644
--- a/ash/system/video_conference/video_conference_tray.h
+++ b/ash/system/video_conference/video_conference_tray.h
@@ -52,6 +52,8 @@
 // A toggle icon button in the VC tray, which is used for toggling camera,
 // microphone, and screen sharing.
 class VideoConferenceTrayButton : public IconButton {
+  METADATA_HEADER(VideoConferenceTrayButton, IconButton)
+
  public:
   VideoConferenceTrayButton(PressedCallback callback,
                             const gfx::VectorIcon* icon,
diff --git a/ash/user_education/holding_space_wallpaper_nudge/holding_space_wallpaper_nudge_prefs.cc b/ash/user_education/holding_space_wallpaper_nudge/holding_space_wallpaper_nudge_prefs.cc
index 45ac135..9b9eca33 100644
--- a/ash/user_education/holding_space_wallpaper_nudge/holding_space_wallpaper_nudge_prefs.cc
+++ b/ash/user_education/holding_space_wallpaper_nudge/holding_space_wallpaper_nudge_prefs.cc
@@ -15,33 +15,58 @@
 
 // Constants -------------------------------------------------------------------
 
+// Prefs about the nudge being shown are stored separately for the
+// counterfactual branch to make sure users that are on the counterfactual
+// branch still see it in the event the feature is turned on for them later.
+constexpr char kLastTimeNudgeShownCounterfactual[] =
+    "ash.holding_space.wallpaper_nudge.last_shown_time_counterfactual";
 constexpr char kLastTimeNudgeShown[] =
     "ash.holding_space.wallpaper_nudge.last_shown_time";
+constexpr char kNudgeShownCountCounterfactual[] =
+    "ash.holding_space.wallpaper_nudge.shown_count_counterfactual";
 constexpr char kNudgeShownCount[] =
     "ash.holding_space.wallpaper_nudge.shown_count";
 
+// Helpers ---------------------------------------------------------------------
+
+// Gets the name of the pref that store how many times the nudge has been shown.
+std::string GetNudgeCountPrefName() {
+  return features::IsHoldingSpaceWallpaperNudgeEnabledCounterfactually()
+             ? kNudgeShownCountCounterfactual
+             : kNudgeShownCount;
+}
+
+// Gets the name of the pref that store the last time the nudge was shown.
+std::string GetNudgeTimePrefName() {
+  return features::IsHoldingSpaceWallpaperNudgeEnabledCounterfactually()
+             ? kLastTimeNudgeShownCounterfactual
+             : kLastTimeNudgeShown;
+}
+
 }  // namespace
 
 // Utilities -------------------------------------------------------------------
 
 absl::optional<base::Time> GetLastTimeNudgeWasShown(PrefService* prefs) {
-  auto* pref = prefs->FindPreference(kLastTimeNudgeShown);
+  auto* pref = prefs->FindPreference(GetNudgeTimePrefName());
   return pref->IsDefaultValue() ? absl::nullopt
                                 : base::ValueToTime(pref->GetValue());
 }
 
 uint64_t GetNudgeShownCount(PrefService* prefs) {
-  return prefs->GetUint64(kNudgeShownCount);
+  return prefs->GetUint64(GetNudgeCountPrefName());
 }
 
 void MarkNudgeShown(PrefService* prefs) {
   CHECK(features::IsHoldingSpaceWallpaperNudgeEnabled());
-  prefs->SetTime(kLastTimeNudgeShown, base::Time::Now());
-  prefs->SetUint64(kNudgeShownCount, GetNudgeShownCount(prefs) + 1u);
+  prefs->SetTime(GetNudgeTimePrefName(), base::Time::Now());
+  prefs->SetUint64(GetNudgeCountPrefName(), GetNudgeShownCount(prefs) + 1u);
 }
 
 void RegisterProfilePrefs(PrefRegistrySimple* registry) {
+  registry->RegisterTimePref(kLastTimeNudgeShownCounterfactual, base::Time());
   registry->RegisterTimePref(kLastTimeNudgeShown, base::Time());
+  registry->RegisterUint64Pref(kNudgeShownCountCounterfactual, 0u);
   registry->RegisterUint64Pref(kNudgeShownCount, 0u);
 }
 
diff --git a/ash/user_education/holding_space_wallpaper_nudge/holding_space_wallpaper_nudge_prefs.h b/ash/user_education/holding_space_wallpaper_nudge/holding_space_wallpaper_nudge_prefs.h
index f2195eb..c5c91924 100644
--- a/ash/user_education/holding_space_wallpaper_nudge/holding_space_wallpaper_nudge_prefs.h
+++ b/ash/user_education/holding_space_wallpaper_nudge/holding_space_wallpaper_nudge_prefs.h
@@ -17,8 +17,9 @@
 
 namespace ash::holding_space_wallpaper_nudge_prefs {
 
-// Returns the time the nudge was last shown. If the nudge has never been shown,
-// returns `absl::nullopt`.
+// Returns the time the nudge was last shown. If on the counterfactual arm, it
+// will be the last time the nudge would have been shown. If the nudge has never
+// been shown, returns `absl::nullopt`.
 ASH_EXPORT absl::optional<base::Time> GetLastTimeNudgeWasShown(
     PrefService* prefs);
 
diff --git a/ash/user_education/holding_space_wallpaper_nudge/holding_space_wallpaper_nudge_prefs_unittest.cc b/ash/user_education/holding_space_wallpaper_nudge/holding_space_wallpaper_nudge_prefs_unittest.cc
index fe886f97..073cdc1 100644
--- a/ash/user_education/holding_space_wallpaper_nudge/holding_space_wallpaper_nudge_prefs_unittest.cc
+++ b/ash/user_education/holding_space_wallpaper_nudge/holding_space_wallpaper_nudge_prefs_unittest.cc
@@ -72,4 +72,81 @@
   EXPECT_EQ(GetNudgeShownCount(pref_service()), 2u);
 }
 
+TEST_F(HoldingSpaceWallpaperNudgePrefsTest, CounterfactualPrefIsSeparate) {
+  base::Time before, after;
+
+  // Case: Enabled counterfactually, which should have separate prefs.
+  {
+    base::test::ScopedFeatureList counterfactual_feature_list;
+    counterfactual_feature_list.InitAndEnableFeatureWithParameters(
+        features::kHoldingSpaceWallpaperNudge, {{"is-counterfactual", "true"}});
+
+    EXPECT_EQ(GetLastTimeNudgeWasShown(pref_service()), absl::nullopt);
+    EXPECT_EQ(GetNudgeShownCount(pref_service()), 0u);
+
+    before = base::Time::Now();
+    MarkNudgeShown(pref_service());
+    after = base::Time::Now();
+
+    EXPECT_THAT(GetLastTimeNudgeWasShown(pref_service()),
+                AllOf(Ne(absl::nullopt), Ge(before), Le(after)));
+    EXPECT_EQ(GetNudgeShownCount(pref_service()), 1u);
+  }
+
+  // Case: Disabled, counterfactual prefs should have no effect.
+  {
+    base::test::ScopedFeatureList disabled_feature_list;
+    disabled_feature_list.InitAndDisableFeature(
+        features::kHoldingSpaceWallpaperNudge);
+    EXPECT_EQ(GetLastTimeNudgeWasShown(pref_service()), absl::nullopt);
+    EXPECT_EQ(GetNudgeShownCount(pref_service()), 0u);
+  }
+
+  // Case: Enabled non-counterfactually.
+  {
+    base::test::ScopedFeatureList noncounterfactual_feature_list;
+    noncounterfactual_feature_list.InitAndEnableFeatureWithParameters(
+        features::kHoldingSpaceWallpaperNudge,
+        {{"is-counterfactual", "false"}});
+
+    EXPECT_EQ(GetLastTimeNudgeWasShown(pref_service()), absl::nullopt);
+    EXPECT_EQ(GetNudgeShownCount(pref_service()), 0u);
+
+    before = base::Time::Now();
+    MarkNudgeShown(pref_service());
+    after = base::Time::Now();
+
+    EXPECT_THAT(GetLastTimeNudgeWasShown(pref_service()),
+                AllOf(Ne(absl::nullopt), Ge(before), Le(after)));
+    EXPECT_EQ(GetNudgeShownCount(pref_service()), 1u);
+  }
+
+  // Case: Enabled normally, which should be the same as non-counterfactually.
+  {
+    base::test::ScopedFeatureList feature_list(
+        features::kHoldingSpaceWallpaperNudge);
+
+    EXPECT_NE(GetLastTimeNudgeWasShown(pref_service()), absl::nullopt);
+    EXPECT_EQ(GetNudgeShownCount(pref_service()), 1u);
+
+    before = base::Time::Now();
+    MarkNudgeShown(pref_service());
+    after = base::Time::Now();
+
+    EXPECT_THAT(GetLastTimeNudgeWasShown(pref_service()),
+                AllOf(Ne(absl::nullopt), Ge(before), Le(after)));
+    EXPECT_EQ(GetNudgeShownCount(pref_service()), 2u);
+  }
+
+  // Case: Disabled, normal prefs should be retrievable.
+  {
+    base::test::ScopedFeatureList disabled_feature_list;
+    disabled_feature_list.InitAndDisableFeature(
+        features::kHoldingSpaceWallpaperNudge);
+    EXPECT_THAT(GetLastTimeNudgeWasShown(pref_service()),
+                AllOf(Ne(absl::nullopt), Ge(before), Le(after)));
+    EXPECT_EQ(GetNudgeShownCount(pref_service()), 2u);
+  }
+}
+
 }  // namespace ash::holding_space_wallpaper_nudge_prefs
diff --git a/ash/wm/desks/templates/restore_data_collector.cc b/ash/wm/desks/templates/restore_data_collector.cc
index d2925b4b..8c4e186 100644
--- a/ash/wm/desks/templates/restore_data_collector.cc
+++ b/ash/wm/desks/templates/restore_data_collector.cc
@@ -8,12 +8,15 @@
 #include "ash/public/cpp/multi_user_window_manager.h"
 #include "ash/public/cpp/saved_desk_delegate.h"
 #include "ash/shell.h"
+#include "ash/wm/desks/desk.h"
+#include "ash/wm/desks/desks_controller.h"
 #include "ash/wm/desks/templates/saved_desk_dialog_controller.h"
 #include "ash/wm/desks/templates/saved_desk_util.h"
 #include "ash/wm/mru_window_tracker.h"
 #include "ash/wm/overview/overview_controller.h"
 #include "ash/wm/window_restore/window_restore_util.h"
 #include "base/uuid.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "components/app_restore/app_launch_info.h"
 #include "components/app_restore/restore_data.h"
 #include "components/app_restore/window_info.h"
@@ -46,6 +49,8 @@
   call.root_window_to_show = root_window_to_show;
   call.template_type = template_type;
   call.template_name = template_name;
+  call.lacros_profile_id =
+      DesksController::Get()->active_desk()->lacros_profile_id();
   auto* window_manager = MultiUserWindowManagerImpl::Get();
   auto* const shell = Shell::Get();
   auto mru_windows =
@@ -168,6 +173,9 @@
       base::Uuid::GenerateRandomV4(), DeskTemplateSource::kUser,
       call.template_name, base::Time::Now(), call.template_type);
   desk_template->set_desk_restore_data(std::move(call.data));
+  if (chromeos::features::IsDeskProfilesEnabled()) {
+    desk_template->set_lacros_profile_id(call.lacros_profile_id);
+  }
 
   if (!call.unsupported_apps.empty() &&
       Shell::Get()->overview_controller()->InOverviewSession()) {
diff --git a/ash/wm/desks/templates/restore_data_collector.h b/ash/wm/desks/templates/restore_data_collector.h
index 182cfa2..7d65555 100644
--- a/ash/wm/desks/templates/restore_data_collector.h
+++ b/ash/wm/desks/templates/restore_data_collector.h
@@ -66,6 +66,7 @@
     size_t non_persistable_window_count = 0;
     std::unique_ptr<app_restore::RestoreData> data;
     uint32_t pending_request_count = 0;
+    uint64_t lacros_profile_id = 0;
     GetDeskTemplateCallback callback;
   };
 
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 55279d498..453a4c8 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -2394,6 +2394,12 @@
         "trace_event/trace_logging_minimal_win.cc",
         "trace_event/trace_logging_minimal_win.h",
       ]
+      if (use_perfetto_client_library) {
+        sources += [
+          "trace_event/etw_interceptor_win.cc",
+          "trace_event/etw_interceptor_win.h",
+        ]
+      }
     }
 
     if (is_android) {
diff --git a/base/containers/flat_tree.h b/base/containers/flat_tree.h
index 7a8e6051..8dcaf0fc 100644
--- a/base/containers/flat_tree.h
+++ b/base/containers/flat_tree.h
@@ -40,20 +40,6 @@
   return ranges::adjacent_find(range, base::not_fn(comp)) == ranges::end(range);
 }
 
-// This is a convenience trait inheriting from std::true_type if Iterator is at
-// least a ForwardIterator and thus supports multiple passes over a range.
-template <class Iterator>
-using is_multipass = std::is_base_of<
-      std::forward_iterator_tag,
-      typename std::iterator_traits<Iterator>::iterator_category>;
-
-// Uses SFINAE to detect whether type has is_transparent member.
-template <typename T, typename = void>
-struct IsTransparentCompare : std::false_type {};
-template <typename T>
-struct IsTransparentCompare<T, std::void_t<typename T::is_transparent>>
-    : std::true_type {};
-
 // Helper inspired by C++20's std::to_array to convert a C-style array to a
 // std::array. As opposed to the C++20 version this implementation does not
 // provide an overload for rvalues and does not strip cv qualifers from the
@@ -75,45 +61,10 @@
 
 // Helper that calls `container.reserve(std::size(source))`.
 template <typename T, typename U>
-constexpr void ReserveIfSupported(const T&, const U&) {}
-
-template <typename T, typename U>
-auto ReserveIfSupported(T& container, const U& source)
-    -> decltype(container.reserve(std::size(source)), void()) {
-  container.reserve(std::size(source));
-}
-
-// std::pair's operator= is not constexpr prior to C++20. Thus we need this
-// small helper to invoke operator= on the .first and .second member explicitly.
-template <typename T>
-constexpr void Assign(T& lhs, T&& rhs) {
-  lhs = std::move(rhs);
-}
-
-template <typename T, typename U>
-constexpr void Assign(std::pair<T, U>& lhs, std::pair<T, U>&& rhs) {
-  Assign(lhs.first, std::move(rhs.first));
-  Assign(lhs.second, std::move(rhs.second));
-}
-
-// constexpr swap implementation. std::swap is not constexpr prior to C++20.
-template <typename T>
-constexpr void Swap(T& lhs, T& rhs) {
-  T tmp = std::move(lhs);
-  Assign(lhs, std::move(rhs));
-  Assign(rhs, std::move(tmp));
-}
-
-// constexpr prev implementation. std::prev is not constexpr prior to C++17.
-template <typename BidirIt>
-constexpr BidirIt Prev(BidirIt it) {
-  return --it;
-}
-
-// constexpr next implementation. std::next is not constexpr prior to C++17.
-template <typename InputIt>
-constexpr InputIt Next(InputIt it) {
-  return ++it;
+void ReserveIfSupported(T& container, const U& source) {
+  if constexpr (requires { container.reserve(std::size(source)); }) {
+    container.reserve(std::size(source));
+  }
 }
 
 // constexpr sort implementation. std::sort is not constexpr prior to C++20.
@@ -125,9 +76,12 @@
   if (first == last)
     return;
 
-  for (auto it = Next(first); it != last; ++it) {
-    for (auto curr = it; curr != first && comp(*curr, *Prev(curr)); --curr)
-      Swap(*curr, *Prev(curr));
+  for (auto it = std::next(first); it != last; ++it) {
+    for (auto curr = it; curr != first && comp(*curr, *std::prev(curr));
+         --curr) {
+      using std::swap;
+      swap(*curr, *std::prev(curr));
+    }
   }
 }
 
@@ -571,8 +525,9 @@
 
   // If the compare is not transparent we want to construct key_type once.
   template <typename K>
-  using KeyTypeOrK = typename std::
-      conditional<IsTransparentCompare<key_compare>::value, K, key_type>::type;
+  using KeyTypeOrK = std::conditional_t<requires {
+    typename key_compare::is_transparent;
+  }, K, key_type>;
 };
 
 // ----------------------------------------------------------------------------
@@ -828,7 +783,7 @@
 
   // Dispatch to single element insert if the input range contains a single
   // element.
-  if (is_multipass<InputIterator>() && std::next(first) == last) {
+  if (std::forward_iterator<InputIterator> && std::next(first) == last) {
     insert(end(), *first);
     return;
   }
diff --git a/base/containers/flat_tree_unittest.cc b/base/containers/flat_tree_unittest.cc
index a63fb74..736df73 100644
--- a/base/containers/flat_tree_unittest.cc
+++ b/base/containers/flat_tree_unittest.cc
@@ -186,20 +186,6 @@
 class FlatTreeTest : public testing::Test {};
 TYPED_TEST_SUITE_P(FlatTreeTest);
 
-TEST(FlatTree, IsMultipass) {
-  static_assert(!is_multipass<std::istream_iterator<int>>(),
-                "InputIterator is not multipass");
-  static_assert(!is_multipass<std::ostream_iterator<int>>(),
-                "OutputIterator is not multipass");
-
-  static_assert(is_multipass<std::forward_list<int>::iterator>(),
-                "ForwardIterator is multipass");
-  static_assert(is_multipass<std::list<int>::iterator>(),
-                "BidirectionalIterator is multipass");
-  static_assert(is_multipass<std::vector<int>::iterator>(),
-                "RandomAccessIterator is multipass");
-}
-
 // Tests that the compiler generated move operators propagrate noexcept
 // specifiers.
 TEST(FlatTree, NoExcept) {
diff --git a/base/containers/span_rust.h b/base/containers/span_rust.h
index 631feac0..1e2390a9 100644
--- a/base/containers/span_rust.h
+++ b/base/containers/span_rust.h
@@ -9,7 +9,7 @@
 
 #include "base/containers/span.h"
 #include "base/rust_buildflags.h"
-#include "third_party/rust/cxx/v1/crate/include/cxx.h"
+#include "third_party/rust/cxx/v1/cxx.h"
 
 #if !BUILDFLAG(BUILD_RUST_BASE_CONVERSIONS)
 #error "span_rust.h included without BUILD_RUST_BASE_CONVERSIONS"
diff --git a/base/containers/vector_buffer.h b/base/containers/vector_buffer.h
index 163953d9..7127796 100644
--- a/base/containers/vector_buffer.h
+++ b/base/containers/vector_buffer.h
@@ -95,20 +95,14 @@
 
   // DestructRange ------------------------------------------------------------
 
-  // Trivially destructible objects need not have their destructors called.
-  template <typename T2 = T,
-            std::enable_if_t<std::is_trivially_destructible_v<T2>, int> = 0>
-  void DestructRange(T* begin, T* end) {}
-
-  // Non-trivially destructible objects must have their destructors called
-  // individually.
-  template <typename T2 = T,
-            std::enable_if_t<!std::is_trivially_destructible_v<T2>, int> = 0>
   void DestructRange(T* begin, T* end) {
-    CHECK_LE(begin, end);
-    while (begin != end) {
-      begin->~T();
-      begin++;
+    // Trivially destructible objects need not have their destructors called.
+    if constexpr (!std::is_trivially_destructible_v<T>) {
+      CHECK_LE(begin, end);
+      while (begin != end) {
+        begin->~T();
+        begin++;
+      }
     }
   }
 
@@ -131,45 +125,24 @@
   static inline constexpr bool is_trivially_copyable_or_relocatable =
       std::is_trivially_copyable_v<T2> || IS_TRIVIALLY_RELOCATABLE(T2);
 
-  template <typename T2 = T,
-            std::enable_if_t<is_trivially_copyable_or_relocatable<T2>, int> = 0>
   static void MoveRange(T* from_begin, T* from_end, T* to) {
     CHECK(!RangesOverlap(from_begin, from_end, to));
 
-    memcpy(
-        to, from_begin,
-        CheckSub(get_uintptr(from_end), get_uintptr(from_begin)).ValueOrDie());
-  }
-
-  // Not trivially copyable, but movable: call the move constructor and
-  // destruct the original.
-  template <typename T2 = T,
-            std::enable_if_t<std::is_move_constructible_v<T2> &&
-                                 !is_trivially_copyable_or_relocatable<T2>,
-                             int> = 0>
-  static void MoveRange(T* from_begin, T* from_end, T* to) {
-    CHECK(!RangesOverlap(from_begin, from_end, to));
-    while (from_begin != from_end) {
-      new (to) T(std::move(*from_begin));
-      from_begin->~T();
-      from_begin++;
-      to++;
-    }
-  }
-
-  // Not movable, not trivially copyable: call the copy constructor and
-  // destruct the original.
-  template <typename T2 = T,
-            std::enable_if_t<!std::is_move_constructible_v<T2> &&
-                                 !is_trivially_copyable_or_relocatable<T2>,
-                             int> = 0>
-  static void MoveRange(T* from_begin, T* from_end, T* to) {
-    CHECK(!RangesOverlap(from_begin, from_end, to));
-    while (from_begin != from_end) {
-      new (to) T(*from_begin);
-      from_begin->~T();
-      from_begin++;
-      to++;
+    if constexpr (is_trivially_copyable_or_relocatable<T>) {
+      memcpy(to, from_begin,
+             CheckSub(get_uintptr(from_end), get_uintptr(from_begin))
+                 .ValueOrDie());
+    } else {
+      while (from_begin != from_end) {
+        if constexpr (std::move_constructible<T>) {
+          new (to) T(std::move(*from_begin));
+        } else {
+          new (to) T(*from_begin);
+        }
+        from_begin->~T();
+        from_begin++;
+        to++;
+      }
     }
   }
 
diff --git a/base/memory/weak_ptr.h b/base/memory/weak_ptr.h
index ce81874..40bd1ca2 100644
--- a/base/memory/weak_ptr.h
+++ b/base/memory/weak_ptr.h
@@ -239,12 +239,12 @@
 
   // Allow conversion from U to T provided U "is a" T. Note that this
   // is separate from the (implicit) copy and move constructors.
-  template <typename U,
-            typename = std::enable_if_t<std::is_convertible_v<U*, T*>>>
+  template <typename U>
+    requires(std::convertible_to<U*, T*>)
   // NOLINTNEXTLINE(google-explicit-constructor)
   WeakPtr(const WeakPtr<U>& other) : ref_(other.ref_), ptr_(other.ptr_) {}
-  template <typename U,
-            typename = std::enable_if_t<std::is_convertible_v<U*, T*>>>
+  template <typename U>
+    requires(std::convertible_to<U*, T*>)
   // NOLINTNEXTLINE(google-explicit-constructor)
   WeakPtr& operator=(const WeakPtr<U>& other) {
     ref_ = other.ref_;
@@ -252,13 +252,13 @@
     return *this;
   }
 
-  template <typename U,
-            typename = std::enable_if_t<std::is_convertible_v<U*, T*>>>
+  template <typename U>
+    requires(std::convertible_to<U*, T*>)
   // NOLINTNEXTLINE(google-explicit-constructor)
   WeakPtr(WeakPtr<U>&& other)
       : ref_(std::move(other.ref_)), ptr_(std::move(other.ptr_)) {}
-  template <typename U,
-            typename = std::enable_if_t<std::is_convertible_v<U*, T*>>>
+  template <typename U>
+    requires(std::convertible_to<U*, T*>)
   // NOLINTNEXTLINE(google-explicit-constructor)
   WeakPtr& operator=(WeakPtr<U>&& other) {
     ref_ = std::move(other.ref_);
@@ -384,18 +384,16 @@
                             reinterpret_cast<const T*>(ptr_));
   }
 
-  template <int&... ExplicitArgumentBarrier,
-            typename U = T,
-            typename = std::enable_if_t<!std::is_const_v<U>>>
-  WeakPtr<T> GetWeakPtr() {
+  WeakPtr<T> GetWeakPtr()
+    requires(!std::is_const_v<T>)
+  {
     return WeakPtr<T>(weak_reference_owner_.GetRef(),
                       reinterpret_cast<T*>(ptr_));
   }
 
-  template <int&... ExplicitArgumentBarrier,
-            typename U = T,
-            typename = std::enable_if_t<!std::is_const_v<U>>>
-  WeakPtr<T> GetMutableWeakPtr() const {
+  WeakPtr<T> GetMutableWeakPtr() const
+    requires(!std::is_const_v<T>)
+  {
     return WeakPtr<T>(weak_reference_owner_.GetRef(),
                       reinterpret_cast<T*>(ptr_));
   }
diff --git a/base/memory/weak_ptr_nocompile.nc b/base/memory/weak_ptr_nocompile.nc
index 84e36ed..02aebc03 100644
--- a/base/memory/weak_ptr_nocompile.nc
+++ b/base/memory/weak_ptr_nocompile.nc
@@ -108,12 +108,7 @@
   {
     Unrelated unrelated;
     const WeakPtrFactory<const Unrelated> factory(&unrelated);
-    factory.GetMutableWeakPtr();  // expected-error {{no matching member function for call to 'GetMutableWeakPtr'}}
-  }
-  {
-    DerivedUnrelated derived_unrelated;
-    const WeakPtrFactory<DerivedUnrelated> factory(&derived_unrelated);
-    factory.GetMutableWeakPtr<Unrelated>();  // expected-error {{no matching member function for call to 'GetMutableWeakPtr'}}
+    factory.GetMutableWeakPtr();  // expected-error {{invalid reference to function 'GetMutableWeakPtr': constraints not satisfied}}
   }
 }
 
diff --git a/base/strings/string_piece_rust.h b/base/strings/string_piece_rust.h
index fc75ffa..d2c1641 100644
--- a/base/strings/string_piece_rust.h
+++ b/base/strings/string_piece_rust.h
@@ -9,7 +9,7 @@
 
 #include "base/rust_buildflags.h"
 #include "base/strings/string_piece.h"
-#include "third_party/rust/cxx/v1/crate/include/cxx.h"
+#include "third_party/rust/cxx/v1/cxx.h"
 
 #if !BUILDFLAG(BUILD_RUST_BASE_CONVERSIONS)
 #error "string_piece_rust.h included without BUILD_RUST_BASE_CONVERSIONS"
diff --git a/base/strings/to_string.h b/base/strings/to_string.h
index eae7b94..bfbc5ae5 100644
--- a/base/strings/to_string.h
+++ b/base/strings/to_string.h
@@ -116,7 +116,8 @@
 }  // namespace internal
 
 // Converts any type to a string, preferring defined operator<<() or ToString()
-// methods if they exist.
+// methods if they exist. If multiple `values` are given, returns the
+// concatenation of the result of applying `ToString` to each value.
 template <typename... Ts>
 std::string ToString(const Ts&... values) {
   std::ostringstream ss;
diff --git a/base/test/android/javatests/src/org/chromium/base/test/transit/FacilityCheckIn.java b/base/test/android/javatests/src/org/chromium/base/test/transit/FacilityCheckIn.java
index 954833f..182432fc 100644
--- a/base/test/android/javatests/src/org/chromium/base/test/transit/FacilityCheckIn.java
+++ b/base/test/android/javatests/src/org/chromium/base/test/transit/FacilityCheckIn.java
@@ -32,8 +32,8 @@
     void enterSync() {
         onBeforeTransition();
         triggerTransition();
-        List<ConditionWaiter.ConditionWaitStatus> transitionConditions = createConditions();
-        waitUntilEntry(transitionConditions);
+        List<ConditionWaiter.ConditionWaitStatus> waitStatuses = createWaitStatuses();
+        waitUntilEntry(waitStatuses);
         onAfterTransition();
         PublicTransitConfig.maybePauseAfterTransition(mFacility);
     }
@@ -49,15 +49,19 @@
         Log.i(TAG, "Triggered entry into %s", mFacility);
     }
 
-    private List<ConditionWaiter.ConditionWaitStatus> createConditions() {
-        ArrayList<ConditionWaiter.ConditionWaitStatus> transitionConditions = new ArrayList<>();
+    private List<ConditionWaiter.ConditionWaitStatus> createWaitStatuses() {
+        ArrayList<ConditionWaiter.ConditionWaitStatus> waitStatuses = new ArrayList<>();
         for (Condition condition : mFacility.getEnterConditions()) {
-            transitionConditions.add(
+            waitStatuses.add(
                     new ConditionWaiter.ConditionWaitStatus(
                             condition, ConditionWaiter.ConditionOrigin.ENTER));
         }
-        transitionConditions.addAll(createTransitionConditionStatuses());
-        return transitionConditions;
+        for (Condition condition : getTransitionConditions()) {
+            waitStatuses.add(
+                    new ConditionWaiter.ConditionWaitStatus(
+                            condition, ConditionWaiter.ConditionOrigin.TRANSITION));
+        }
+        return waitStatuses;
     }
 
     private void waitUntilEntry(List<ConditionWaiter.ConditionWaitStatus> transitionConditions) {
diff --git a/base/test/android/javatests/src/org/chromium/base/test/transit/FacilityCheckOut.java b/base/test/android/javatests/src/org/chromium/base/test/transit/FacilityCheckOut.java
index 4853ee6..6acc298 100644
--- a/base/test/android/javatests/src/org/chromium/base/test/transit/FacilityCheckOut.java
+++ b/base/test/android/javatests/src/org/chromium/base/test/transit/FacilityCheckOut.java
@@ -32,8 +32,8 @@
     void exitSync() {
         onBeforeTransition();
         triggerTransition();
-        List<ConditionWaiter.ConditionWaitStatus> transitionConditions = createConditions();
-        waitUntilExit(transitionConditions);
+        List<ConditionWaiter.ConditionWaitStatus> waitStatuses = createWaitStatuses();
+        waitUntilExit(waitStatuses);
         onAfterTransition();
         PublicTransitConfig.maybePauseAfterTransition(mFacility);
     }
@@ -49,15 +49,19 @@
         Log.i(TAG, "Triggered exit from %s", mFacility);
     }
 
-    private List<ConditionWaiter.ConditionWaitStatus> createConditions() {
-        ArrayList<ConditionWaiter.ConditionWaitStatus> transitionConditions = new ArrayList<>();
+    private List<ConditionWaiter.ConditionWaitStatus> createWaitStatuses() {
+        ArrayList<ConditionWaiter.ConditionWaitStatus> waitStatuses = new ArrayList<>();
         for (Condition condition : mFacility.getExitConditions()) {
-            transitionConditions.add(
+            waitStatuses.add(
                     new ConditionWaiter.ConditionWaitStatus(
                             condition, ConditionWaiter.ConditionOrigin.EXIT));
         }
-        transitionConditions.addAll(createTransitionConditionStatuses());
-        return transitionConditions;
+        for (Condition condition : getTransitionConditions()) {
+            waitStatuses.add(
+                    new ConditionWaiter.ConditionWaitStatus(
+                            condition, ConditionWaiter.ConditionOrigin.TRANSITION));
+        }
+        return waitStatuses;
     }
 
     private void waitUntilExit(List<ConditionWaiter.ConditionWaitStatus> transitionConditions) {
diff --git a/base/test/android/javatests/src/org/chromium/base/test/transit/Transition.java b/base/test/android/javatests/src/org/chromium/base/test/transit/Transition.java
index f4bc7f2d..5b8e18a 100644
--- a/base/test/android/javatests/src/org/chromium/base/test/transit/Transition.java
+++ b/base/test/android/javatests/src/org/chromium/base/test/transit/Transition.java
@@ -51,17 +51,11 @@
         }
     }
 
-    protected List<ConditionWaiter.ConditionWaitStatus> createTransitionConditionStatuses() {
+    protected List<Condition> getTransitionConditions() {
         if (mConditions == null) {
             return Collections.EMPTY_LIST;
+        } else {
+            return mConditions;
         }
-
-        ArrayList<ConditionWaiter.ConditionWaitStatus> statuses = new ArrayList<>();
-        for (Condition condition : mConditions) {
-            statuses.add(
-                    new ConditionWaiter.ConditionWaitStatus(
-                            condition, ConditionWaiter.ConditionOrigin.TRANSITION));
-        }
-        return statuses;
     }
 }
diff --git a/base/test/android/javatests/src/org/chromium/base/test/transit/Trip.java b/base/test/android/javatests/src/org/chromium/base/test/transit/Trip.java
index 9d3783b..1282069 100644
--- a/base/test/android/javatests/src/org/chromium/base/test/transit/Trip.java
+++ b/base/test/android/javatests/src/org/chromium/base/test/transit/Trip.java
@@ -75,33 +75,37 @@
     }
 
     private void waitUntilArrival() {
-        ArrayList<ConditionWaiter.ConditionWaitStatus> transitionConditions = new ArrayList<>();
+        ArrayList<ConditionWaiter.ConditionWaitStatus> waitStatuses = new ArrayList<>();
 
         if (mOrigin != null) {
             for (Condition condition : mOrigin.getExitConditions()) {
-                transitionConditions.add(
+                waitStatuses.add(
                         new ConditionWaiter.ConditionWaitStatus(
                                 condition, ConditionWaiter.ConditionOrigin.EXIT));
             }
             for (Condition condition : mOrigin.getActiveFacilityExitConditions()) {
-                transitionConditions.add(
+                waitStatuses.add(
                         new ConditionWaiter.ConditionWaitStatus(
                                 condition, ConditionWaiter.ConditionOrigin.EXIT));
             }
         }
 
         for (Condition condition : mDestination.getEnterConditions()) {
-            transitionConditions.add(
+            waitStatuses.add(
                     new ConditionWaiter.ConditionWaitStatus(
                             condition, ConditionWaiter.ConditionOrigin.ENTER));
         }
-        transitionConditions.addAll(createTransitionConditionStatuses());
+        for (Condition condition : getTransitionConditions()) {
+            waitStatuses.add(
+                    new ConditionWaiter.ConditionWaitStatus(
+                            condition, ConditionWaiter.ConditionOrigin.TRANSITION));
+        }
 
         // Throws CriteriaNotSatisfiedException if any conditions aren't met within the timeout and
         // prints the state of all conditions. The timeout can be reduced when explicitly looking
         // for flakiness due to tight timeouts.
         try {
-            ConditionWaiter.waitFor(transitionConditions);
+            ConditionWaiter.waitFor(waitStatuses);
         } catch (AssertionError e) {
             throw new TravelException(mOrigin, mDestination, e);
         }
diff --git a/base/trace_event/etw_interceptor_win.cc b/base/trace_event/etw_interceptor_win.cc
new file mode 100644
index 0000000..429062adb
--- /dev/null
+++ b/base/trace_event/etw_interceptor_win.cc
@@ -0,0 +1,113 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/trace_event/etw_interceptor_win.h"
+
+#include "base/containers/flat_map.h"
+#include "base/time/time.h"
+#include "base/trace_event/trace_event_etw_export_win.h"
+#include "third_party/perfetto/protos/perfetto/common/interceptor_descriptor.gen.h"
+#include "third_party/perfetto/protos/perfetto/trace/trace_packet.pbzero.h"
+#include "third_party/perfetto/protos/perfetto/trace/track_event/track_event.pbzero.h"
+
+namespace base::trace_event {
+
+class ETWInterceptor::Delegate
+    : public perfetto::TrackEventStateTracker::Delegate {
+ public:
+  explicit Delegate(InterceptorContext& context)
+      : context_(&context), locked_self_(context_->GetInterceptorLocked()) {}
+  ~Delegate() override;
+
+  perfetto::TrackEventStateTracker::SessionState* GetSessionState() override;
+  void OnTrackUpdated(perfetto::TrackEventStateTracker::Track&) override;
+  void OnTrackEvent(
+      const perfetto::TrackEventStateTracker::Track&,
+      const perfetto::TrackEventStateTracker::ParsedTrackEvent&) override;
+
+ private:
+  raw_ptr<InterceptorContext> context_;
+  perfetto::LockedHandle<ETWInterceptor> locked_self_;
+};
+
+ETWInterceptor::Delegate::~Delegate() = default;
+
+perfetto::TrackEventStateTracker::SessionState*
+ETWInterceptor::Delegate::GetSessionState() {
+  return &locked_self_->session_state_;
+}
+
+void ETWInterceptor::Delegate::OnTrackUpdated(
+    perfetto::TrackEventStateTracker::Track& track) {}
+
+void ETWInterceptor::Delegate::OnTrackEvent(
+    const perfetto::TrackEventStateTracker::Track& track,
+    const perfetto::TrackEventStateTracker::ParsedTrackEvent& event) {
+  uint64_t keyword = base::trace_event::CategoryGroupToETWKeyword(
+      std::string_view(event.category.data, event.category.size));
+  const char* phase_string = nullptr;
+  switch (event.track_event.type()) {
+    case perfetto::protos::pbzero::TrackEvent::TYPE_SLICE_BEGIN:
+      phase_string = "Begin";
+      break;
+    case perfetto::protos::pbzero::TrackEvent::TYPE_SLICE_END:
+      phase_string = "End";
+      break;
+    case perfetto::protos::pbzero::TrackEvent::TYPE_INSTANT:
+      phase_string = "Instant";
+      break;
+  }
+  DCHECK_NE(nullptr, phase_string);
+  // TODO(crbug.com/1465855): Consider exporting thread time once
+  // TrackEventStateTracker supports it.
+  if (event.track_event.type() ==
+      perfetto::protos::pbzero::TrackEvent::TYPE_SLICE_END) {
+    locked_self_->provider_->WriteEvent(
+        std::string_view(event.name.data, event.name.size),
+        TlmEventDescriptor(0, keyword),
+        TlmMbcsStringField("Phase", phase_string),
+        TlmUInt64Field(
+            "Timestamp",
+            event.timestamp_ns / base::TimeTicks::kNanosecondsPerMicrosecond),
+        TlmUInt64Field(
+            "Duration",
+            event.duration_ns / base::TimeTicks::kNanosecondsPerMicrosecond));
+  } else {
+    locked_self_->provider_->WriteEvent(
+        std::string_view(event.name.data, event.name.size),
+        TlmEventDescriptor(0, keyword),
+        TlmMbcsStringField("Phase", phase_string),
+        TlmUInt64Field(
+            "Timestamp",
+            event.timestamp_ns / base::TimeTicks::kNanosecondsPerMicrosecond));
+  }
+}
+
+ETWInterceptor::ETWInterceptor(TlmProvider* provider) : provider_(provider) {}
+ETWInterceptor::~ETWInterceptor() = default;
+
+void ETWInterceptor::Register(TlmProvider* provider) {
+  perfetto::protos::gen::InterceptorDescriptor desc;
+  desc.set_name("etwexport");
+  perfetto::Interceptor<ETWInterceptor>::Register(desc, provider);
+}
+
+void ETWInterceptor::OnTracePacket(InterceptorContext context) {
+  auto& tls = context.GetThreadLocalState();
+  Delegate delegate(context);
+  perfetto::protos::pbzero::TracePacket::Decoder packet(
+      context.packet_data.data, context.packet_data.size);
+  perfetto::TrackEventStateTracker::ProcessTracePacket(
+      delegate, tls.sequence_state, packet);
+}
+
+ETWInterceptor::ThreadLocalState::ThreadLocalState(ThreadLocalStateArgs& args) {
+}
+ETWInterceptor::ThreadLocalState::~ThreadLocalState() = default;
+
+void ETWInterceptor::OnSetup(const SetupArgs&) {}
+void ETWInterceptor::OnStart(const StartArgs&) {}
+void ETWInterceptor::OnStop(const StopArgs&) {}
+
+}  // namespace base::trace_event
diff --git a/base/trace_event/etw_interceptor_win.h b/base/trace_event/etw_interceptor_win.h
new file mode 100644
index 0000000..9771243
--- /dev/null
+++ b/base/trace_event/etw_interceptor_win.h
@@ -0,0 +1,51 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// This file contains the Windows-specific exporting to ETW.
+#ifndef BASE_TRACE_EVENT_ETW_INTERCEPTOR_WIN_H_
+#define BASE_TRACE_EVENT_ETW_INTERCEPTOR_WIN_H_
+
+#include <stdint.h>
+
+#include "base/base_export.h"
+#include "base/trace_event/trace_logging_minimal_win.h"
+#include "third_party/perfetto/include/perfetto/tracing/interceptor.h"
+#include "third_party/perfetto/include/perfetto/tracing/track_event_state_tracker.h"
+
+namespace base::trace_event {
+
+// Receives perfetto tracing packets and emits ETW events through TlmProvider.
+class BASE_EXPORT ETWInterceptor
+    : public perfetto::Interceptor<ETWInterceptor> {
+ public:
+  static void OnTracePacket(InterceptorContext context);
+
+  explicit ETWInterceptor(TlmProvider* provider);
+  ~ETWInterceptor() override;
+
+  static void Register(TlmProvider* provider);
+
+  void OnSetup(const SetupArgs&) override;
+  void OnStart(const StartArgs&) override;
+  void OnStop(const StopArgs&) override;
+
+  struct ThreadLocalState : public InterceptorBase::ThreadLocalState {
+    explicit ThreadLocalState(ThreadLocalStateArgs&);
+    ~ThreadLocalState() override;
+
+    // We only support a single trace writer sequence per thread, so the
+    // sequence state is stored in TLS.
+    perfetto::TrackEventStateTracker::SequenceState sequence_state;
+  };
+
+ private:
+  class Delegate;
+
+  perfetto::TrackEventStateTracker::SessionState session_state_;
+  raw_ptr<TlmProvider> provider_;
+};
+
+}  // namespace base::trace_event
+
+#endif  // BASE_TRACE_EVENT_ETW_INTERCEPTOR_WIN_H_
diff --git a/base/trace_event/trace_event_etw_export_win.cc b/base/trace_event/trace_event_etw_export_win.cc
index 3113e96..46fb9b70 100644
--- a/base/trace_event/trace_event_etw_export_win.cc
+++ b/base/trace_event/trace_event_etw_export_win.cc
@@ -9,12 +9,14 @@
 #include <stddef.h>
 #include <stdlib.h>
 #include <windows.h>
+#include <utility>
 
 #include "base/at_exit.h"
 #include "base/check_op.h"
 #include "base/command_line.h"
 #include "base/logging.h"
 #include "base/memory/singleton.h"
+#include "base/no_destructor.h"
 #include "base/strings/string_tokenizer.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
@@ -87,6 +89,9 @@
 //
 // The high 16 bits of the keyword have special semantics and should not be
 // set for enabling individual categories as they are reserved by winmeta.xml.
+// TODO(crbug.com/1497783): Move this to
+// components/tracing/common/etw_export_win.cc once no longer used by
+// TraceEventETWExport.
 const char* const kFilteredEventGroupNames[] = {
     "benchmark",                             // 0x1
     "blink",                                 // 0x2
@@ -155,16 +160,6 @@
   // Construct the ETW provider. If construction fails then the event logging
   // calls will fail. We're passing a callback function as part of registration.
   // This allows us to detect changes to enable/disable/keyword changes.
-
-  // This GUID is the used to identify the Chrome provider and is used whenever
-  // ETW is enabled via tracing tools and cannot change without updating tools
-  // that collect Chrome ETW data.
-  static const GUID Chrome_GUID = {
-      0xD2D578D9,
-      0x2936,
-      0x45B6,
-      {0xA0, 0x9F, 0x30, 0xE3, 0x27, 0x15, 0xF4, 0x2D}};
-
   etw_provider_ = std::make_unique<TlmProvider>(
       "Google.Chrome", Chrome_GUID,
       base::BindRepeating(&TraceEventETWExport::OnETWEnableUpdate,
@@ -176,14 +171,12 @@
   // values of the keys (no key addition/deletion). Therefore, the map does not
   // require a lock for access.
   // Also set up the map from category name to keyword.
-  for (size_t i = 0; i < ARRAYSIZE(kFilteredEventGroupNames); i++) {
-    uint64_t keyword = 1ULL << i;
+  for (size_t i = 0; i < std::size(kFilteredEventGroupNames); i++) {
     categories_status_[kFilteredEventGroupNames[i]] = false;
-    categories_keyword_[kFilteredEventGroupNames[i]] = keyword;
   }
   // Make sure we stay at 48 entries, the maximum number of bits available
   // for keyword use.
-  static_assert(ARRAYSIZE(kFilteredEventGroupNames) <= kMaxNumberOfGroupNames,
+  static_assert(std::size(kFilteredEventGroupNames) <= kMaxNumberOfGroupNames,
                 "Exceeded max ETW keyword bits");
 }
 
@@ -203,52 +196,6 @@
 }
 
 // static
-uint64_t TraceEventETWExport::CategoryGroupToKeyword(
-    const uint8_t* category_state) {
-  uint64_t keyword = 0;
-
-  // To enable multiple sessions with this provider enabled we need to log the
-  // level and keyword with the event so that if the sessions differ in the
-  // level or keywords enabled we log the right events and allow ETW to
-  // route the data to the appropriate session.
-  // TODO(joel@microsoft.com) Explore better methods in future integration
-  // with perfetto.
-
-  auto* instance = GetInstance();
-  if (!instance)
-    return keyword;
-
-  // Add in the keyword for the special bits if they are set.
-  if (instance->categories_status_
-          [kFilteredEventGroupNames[kOtherEventsGroupNameIndex]]) {
-    keyword |= instance->categories_keyword_
-                   [kFilteredEventGroupNames[kOtherEventsGroupNameIndex]];
-  }
-  if (instance->categories_status_
-          [kFilteredEventGroupNames[kDisabledOtherEventsGroupNameIndex]]) {
-    keyword |=
-        instance->categories_keyword_
-            [kFilteredEventGroupNames[kDisabledOtherEventsGroupNameIndex]];
-  }
-  // Add in the keyword for the categories specified at the logging site.
-  const TraceCategory* category = TraceCategory::FromStatePtr(category_state);
-  StringPiece category_group_name = category->name();
-
-  CStringTokenizer category_group_tokens(category_group_name.begin(),
-                                         category_group_name.end(), ",");
-  while (category_group_tokens.GetNext()) {
-    StringPiece category_group_token = category_group_tokens.token_piece();
-
-    // Lookup the keyword for this part of the category_group_name
-    // and or in the keyword.
-    auto it = instance->categories_keyword_.find(category_group_token);
-    if (it != instance->categories_keyword_.end())
-      keyword |= it->second;
-  }
-  return keyword;
-}
-
-// static
 void TraceEventETWExport::AddEvent(char phase,
                                    const unsigned char* category_group_enabled,
                                    const char* name,
@@ -257,9 +204,12 @@
                                    const TraceArguments* args) {
   // We bail early in case exporting is disabled or no consumer is listening.
   auto* instance = GetInstance();
-  uint64_t keyword = CategoryGroupToKeyword(category_group_enabled);
-  if (!instance ||
-      !instance->etw_provider_->IsEnabled(TRACE_LEVEL_NONE, keyword)) {
+  if (!instance) {
+    return;
+  }
+  uint64_t keyword =
+      instance->CategoryStateToETWKeyword(category_group_enabled);
+  if (!instance->etw_provider_->IsEnabled(TRACE_LEVEL_NONE, keyword)) {
     return;
   }
 
@@ -383,9 +333,12 @@
     const unsigned char* category_group_enabled,
     const char* name) {
   auto* instance = GetInstance();
-  uint64_t keyword = CategoryGroupToKeyword(category_group_enabled);
-  if (!instance ||
-      !instance->etw_provider_->IsEnabled(TRACE_LEVEL_NONE, keyword)) {
+  if (!instance) {
+    return;
+  }
+  uint64_t keyword =
+      instance->CategoryStateToETWKeyword(category_group_enabled);
+  if (!instance->etw_provider_->IsEnabled(TRACE_LEVEL_NONE, keyword)) {
     return;
   }
 
@@ -430,7 +383,7 @@
   // callback will be called to set the updated keyword bits in each
   // process that has registered their ETW provider.
   etw_match_any_keyword_ = etw_provider_->keyword_any() & kCategoryKeywordMask;
-  for (size_t i = 0; i < ARRAYSIZE(kFilteredEventGroupNames); i++) {
+  for (size_t i = 0; i < std::size(kFilteredEventGroupNames); i++) {
     if (etw_match_any_keyword_ & (1ULL << i)) {
       categories_status_[kFilteredEventGroupNames[i]] = true;
     } else {
@@ -469,6 +422,13 @@
   }
 }
 
+uint64_t TraceEventETWExport::CategoryStateToETWKeyword(
+    const uint8_t* category_state) {
+  const TraceCategory* category = TraceCategory::FromStatePtr(category_state);
+  uint64_t keyword = CategoryGroupToETWKeyword(category->name());
+  return keyword;
+}
+
 void TraceEventETWExport::OnETWEnableUpdate(
     TlmProvider::EventControlCode enabled) {
   // During construction, if tracing is already enabled, we'll get
@@ -493,5 +453,74 @@
       StaticMemorySingletonTraits<TraceEventETWExport>>::GetIfExists();
 }
 
+uint64_t CategoryGroupToETWKeyword(std::string_view category_group_name) {
+  static NoDestructor<base::flat_map<std::string_view, uint64_t>>
+      categories_to_keyword([]() {
+        std::vector<std::pair<std::string_view, uint64_t>> items;
+        for (size_t i = 0; i < kOtherEventsGroupNameIndex; i++) {
+          uint64_t keyword = 1ULL << i;
+          items.emplace_back(kFilteredEventGroupNames[i], keyword);
+        }
+        std::sort(items.begin(), items.end());
+        return base::flat_map<std::string_view, uint64_t>(base::sorted_unique,
+                                                          std::move(items));
+      }());
+
+  uint64_t keyword = 0;
+
+  // To enable multiple sessions with this provider enabled we need to log the
+  // level and keyword with the event so that if the sessions differ in the
+  // level or keywords enabled we log the right events and allow ETW to
+  // route the data to the appropriate session.
+  // TODO(joel@microsoft.com) Explore better methods in future integration
+  // with perfetto.
+
+  CStringTokenizer category_group_tokens(category_group_name.begin(),
+                                         category_group_name.end(), ",");
+  while (category_group_tokens.GetNext()) {
+    StringPiece category_group_token = category_group_tokens.token_piece();
+
+    // Lookup the keyword for this part of the category_group_name
+    // and or in the keyword.
+    auto it = categories_to_keyword->find(category_group_token);
+    if (it != categories_to_keyword->end()) {
+      keyword |= it->second;
+    } else {
+      if (StartsWith(category_group_token, "disabled-by-default")) {
+        keyword |= (1ULL << kDisabledOtherEventsGroupNameIndex);
+      } else {
+        keyword |= (1ULL << kOtherEventsGroupNameIndex);
+      }
+    }
+  }
+  return keyword;
+}
+
+#if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
+
+perfetto::protos::gen::TrackEventConfig ETWKeywordToTrackEventConfig(
+    uint64_t keyword) {
+  perfetto::protos::gen::TrackEventConfig track_event_config;
+  for (size_t i = 0; i < kOtherEventsGroupNameIndex; ++i) {
+    if (keyword & (1ULL << i)) {
+      track_event_config.add_enabled_categories(kFilteredEventGroupNames[i]);
+    }
+  }
+  bool other_events_enabled = (keyword & (1ULL << kOtherEventsGroupNameIndex));
+  bool disabled_other_events_enables =
+      (keyword & (1ULL << kDisabledOtherEventsGroupNameIndex));
+  if (!other_events_enabled) {
+    track_event_config.add_disabled_categories("*");
+  }
+  if (!disabled_other_events_enables) {
+    track_event_config.add_disabled_categories("disabled-by-default-*");
+  } else if (other_events_enabled) {
+    track_event_config.add_enabled_categories("disabled-by-default-*");
+  }
+  return track_event_config;
+}
+
+#endif  // BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
+
 }  // namespace trace_event
 }  // namespace base
diff --git a/base/trace_event/trace_event_etw_export_win.h b/base/trace_event/trace_event_etw_export_win.h
index f7d5481..b1e512b 100644
--- a/base/trace_event/trace_event_etw_export_win.h
+++ b/base/trace_event/trace_event_etw_export_win.h
@@ -24,6 +24,15 @@
 
 namespace trace_event {
 
+// This GUID is the used to identify the Chrome provider and is used whenever
+// ETW is enabled via tracing tools and cannot change without updating tools
+// that collect Chrome ETW data.
+inline constexpr GUID Chrome_GUID = {
+    0xD2D578D9,
+    0x2936,
+    0x45B6,
+    {0xA0, 0x9F, 0x30, 0xE3, 0x27, 0x15, 0xF4, 0x2D}};
+
 class BASE_EXPORT TraceEventETWExport {
  public:
   TraceEventETWExport(const TraceEventETWExport&) = delete;
@@ -73,11 +82,11 @@
   // Returns true if there was a change, false otherwise.
   bool UpdateEnabledCategories();
 
-  static uint64_t CategoryGroupToKeyword(const uint8_t* category_state);
-
   // Returns true if the category is enabled.
   bool IsCategoryEnabled(StringPiece category_name) const;
 
+  uint64_t CategoryStateToETWKeyword(const uint8_t* category_state);
+
   bool is_registration_complete_ = false;
 
   // The keywords that were enabled last time the callback was made.
@@ -89,11 +98,18 @@
 
   // Maps category names to their status (enabled/disabled).
   std::map<StringPiece, bool> categories_status_;
-
-  // Maps category names to their keyword.
-  std::map<StringPiece, uint64_t> categories_keyword_;
 };
 
+BASE_EXPORT uint64_t
+CategoryGroupToETWKeyword(std::string_view category_group_name);
+
+#if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
+
+BASE_EXPORT perfetto::protos::gen::TrackEventConfig
+ETWKeywordToTrackEventConfig(uint64_t keyword);
+
+#endif  // BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
+
 }  // namespace trace_event
 }  // namespace base
 
diff --git a/base/trace_event/trace_logging_minimal_win.cc b/base/trace_event/trace_logging_minimal_win.cc
index d7284bc..5d565fa73 100644
--- a/base/trace_event/trace_logging_minimal_win.cc
+++ b/base/trace_event/trace_logging_minimal_win.cc
@@ -27,19 +27,22 @@
 
 // Appends a nul-terminated string to a metadata block.
 // Returns new meta_data_index value, or -1 for overflow.
-uint16_t TlmProvider::AppendNameToMetadata(char* metadata,
-                                           uint16_t metadata_size,
-                                           uint16_t metadata_index,
-                                           const char* name) const noexcept {
+uint16_t TlmProvider::AppendNameToMetadata(
+    char* metadata,
+    uint16_t metadata_size,
+    uint16_t metadata_index,
+    std::string_view name) const noexcept {
   uint16_t index = metadata_index;
   DCHECK_LE(index, metadata_size);
 
-  const size_t cch = strlen(name) + 1;
-  if (cch > static_cast<unsigned>(metadata_size - index))
+  const size_t cch = name.size();
+  if (cch + 1 > static_cast<unsigned>(metadata_size - index)) {
     return static_cast<uint16_t>(-1);
+  }
 
-  memcpy(metadata + index, name, cch);
-  index += static_cast<uint16_t>(cch);
+  memcpy(metadata + index, name.begin(), cch);
+  metadata[index + cch] = 0;
+  index += static_cast<uint16_t>(cch) + 1;
   return index;
 }
 
@@ -134,7 +137,7 @@
 }
 
 uint16_t TlmProvider::EventBegin(char* metadata,
-                                 const char* event_name) const noexcept {
+                                 std::string_view event_name) const noexcept {
   // EventMetadata for tracelogging has the following format
   //     UINT16 MetadataSize;
   //     BYTE SpecialFlags[]; // Not used, so always size 1.
@@ -240,6 +243,18 @@
   EventDataDescCreate(&descriptors[0], (void*)&value_, sizeof(value_));
 }
 
+TlmUInt64Field::TlmUInt64Field(const char* name, const uint64_t value) noexcept
+    : TlmFieldBase(name), value_(value) {
+  DCHECK_NE(Name(), nullptr);
+}
+uint64_t TlmUInt64Field::Value() const noexcept {
+  return value_;
+}
+void TlmUInt64Field::FillEventDescriptor(
+    EVENT_DATA_DESCRIPTOR* descriptors) const noexcept {
+  EventDataDescCreate(&descriptors[0], (void*)&value_, sizeof(value_));
+}
+
 TlmMbcsStringField::TlmMbcsStringField(const char* name,
                                        const char* value) noexcept
     : TlmFieldBase(name), value_(value) {
diff --git a/base/trace_event/trace_logging_minimal_win.h b/base/trace_event/trace_logging_minimal_win.h
index 3a42a10..8930d63 100644
--- a/base/trace_event/trace_logging_minimal_win.h
+++ b/base/trace_event/trace_logging_minimal_win.h
@@ -31,6 +31,8 @@
 // TODO(joel@microsoft.com) Update headers and use defined constants instead
 // of magic numbers after crbug.com/1089996 is resolved.
 
+#include "base/functional/callback.h"
+
 /*
  * An instance of TlmProvider represents a logger through which data can be
  *  sent to Event Tracing for Windows (ETW). This logger generates
@@ -108,10 +110,11 @@
  *     my_provider.Unregister();
  */
 
+#include "base/base_export.h"
 #include "base/functional/callback.h"
 #include "base/memory/raw_ptr.h"
 
-class TlmProvider {
+class BASE_EXPORT TlmProvider {
  public:
   enum class EventControlCode {
     kDisableProvider = 0,
@@ -184,7 +187,7 @@
   // with the specified level and keyword, packs the data into an event and
   // sends it to ETW. Returns Win32 error code or 0 for success.
   template <class... FieldTys>
-  ULONG WriteEvent(const char* event_name,
+  ULONG WriteEvent(std::string_view event_name,
                    const EVENT_DESCRIPTOR& event_descriptor,
                    const FieldTys&... event_fields) const noexcept {
     if (!IsEnabled(event_descriptor)) {
@@ -266,7 +269,8 @@
       PVOID callback_context);
 
   // Returns initial value of metadata_index.
-  uint16_t EventBegin(char* metadata, const char* event_name) const noexcept;
+  uint16_t EventBegin(char* metadata,
+                      std::string_view event_name) const noexcept;
 
   char EventAddField(char* metadata,
                      uint16_t* metadata_index,
@@ -286,7 +290,7 @@
   uint16_t AppendNameToMetadata(char* metadata,
                                 uint16_t metadata_size,
                                 uint16_t metadata_index,
-                                const char* name) const noexcept;
+                                std::string_view name) const noexcept;
 
   uint32_t level_plus1_ = 0;
   uint16_t provider_metadata_size_ = 0;
@@ -368,6 +372,20 @@
   const int64_t value_;
 };
 
+class TlmUInt64Field
+    : public TlmFieldBase<1, 10>  // 1 data descriptor, Type = _TlgInUINT64
+{
+ public:
+  // name is a utf-8 nul-terminated string.
+  // value is 64 bit signed integer
+  TlmUInt64Field(const char* name, const uint64_t value) noexcept;
+  uint64_t Value() const noexcept;
+  void FillEventDescriptor(EVENT_DATA_DESCRIPTOR* descriptors) const noexcept;
+
+ private:
+  const uint64_t value_;
+};
+
 // Helper for creating event descriptors for use with WriteEvent.
 constexpr EVENT_DESCRIPTOR TlmEventDescriptor(uint8_t level,
                                               uint64_t keyword) noexcept {
diff --git a/build/android/pylib/local/emulator/avd.py b/build/android/pylib/local/emulator/avd.py
index 35740e8..6f3a5d46 100644
--- a/build/android/pylib/local/emulator/avd.py
+++ b/build/android/pylib/local/emulator/avd.py
@@ -556,7 +556,7 @@
       # https://bit.ly/3agmjcM).
       # Wait for this step to complete since it can take a while for old OSs
       # like M, otherwise the avd may have "Encryption Unsuccessful" error.
-      instance.device.WaitUntilFullyBooted(decrypt=True, timeout=180, retries=0)
+      instance.device.WaitUntilFullyBooted(decrypt=True, timeout=360, retries=0)
 
       if additional_apks:
         for apk in additional_apks:
diff --git a/build/rust/BUILD.gn b/build/rust/BUILD.gn
index 56ffdab..b7f3d7cd 100644
--- a/build/rust/BUILD.gn
+++ b/build/rust/BUILD.gn
@@ -23,8 +23,12 @@
     # on the C++ side.
     static_library("cxx_cppdeps") {
       sources = [
-        "//third_party/rust/cxx/v1/crate/include/cxx.h",
-        "//third_party/rust/cxx/v1/crate/src/cxx.cc",
+        "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/include/cxx.h",
+        "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/cxx.cc",
+
+        # Our version-independent forwarding header, which we patch cxx.cc to
+        # use since we want it to use an absolute path for its include.
+        "//third_party/rust/cxx/v1/cxx.h",
       ]
 
       defines = [ "RUST_CXX_NO_EXCEPTIONS" ]
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index 9289eed..ea454db 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -2104,6 +2104,7 @@
             "javatests/src/org/chromium/chrome/browser/vr/WebXrVrCardboardDeviceTest.java",
             "javatests/src/org/chromium/chrome/browser/vr/WebXrVrCardboardInputTest.java",
             "javatests/src/org/chromium/chrome/browser/vr/WebXrVrCardboardPermissionTest.java",
+            "javatests/src/org/chromium/chrome/browser/vr/WebXrVrCardboardQrCodeTest.java",
             "javatests/src/org/chromium/chrome/browser/vr/WebXrVrCardboardTabTest.java",
             "javatests/src/org/chromium/chrome/browser/vr/WebXrVrCardboardTransitionTest.java",
             "javatests/src/org/chromium/chrome/browser/vr/rules/ChromeTabbedActivityVrCardboardTestRule.java",
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
index c45695d1..231f679 100644
--- a/chrome/android/chrome_java_sources.gni
+++ b/chrome/android/chrome_java_sources.gni
@@ -151,6 +151,7 @@
   "java/src/org/chromium/chrome/browser/autofill/vcn/AutofillVcnEnrollBottomSheetProperties.java",
   "java/src/org/chromium/chrome/browser/autofill/vcn/AutofillVcnEnrollBottomSheetView.java",
   "java/src/org/chromium/chrome/browser/autofill/vcn/AutofillVcnEnrollBottomSheetViewBinder.java",
+  "java/src/org/chromium/chrome/browser/automotive/AutomotiveUtils.java",
   "java/src/org/chromium/chrome/browser/auxiliary_search/AuxiliarySearchBridge.java",
   "java/src/org/chromium/chrome/browser/auxiliary_search/AuxiliarySearchProvider.java",
   "java/src/org/chromium/chrome/browser/background_sync/BackgroundSyncBackgroundTask.java",
diff --git a/chrome/android/chrome_junit_test_java_sources.gni b/chrome/android/chrome_junit_test_java_sources.gni
index 986bd799..70a9a5f 100644
--- a/chrome/android/chrome_junit_test_java_sources.gni
+++ b/chrome/android/chrome_junit_test_java_sources.gni
@@ -8,6 +8,7 @@
   "java/src/org/chromium/chrome/browser/segmentation_platform/ReaderModeActionProviderTest.java",
   "java/src/org/chromium/chrome/browser/segmentation_platform/SignalAccumulatorTest.java",
   "java/src/org/chromium/chrome/browser/tab/TabFaviconTest.java",
+  "javatests/src/org/chromium/chrome/browser/automotive/AutomotiveUtilsUnitTest.java",
   "junit/src/org/chromium/chrome/browser/AppIndexingUtilTest.java",
   "junit/src/org/chromium/chrome/browser/ChromeActionModeHandlerUnitTest.java",
   "junit/src/org/chromium/chrome/browser/ChromeActivityUnitTest.java",
diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni
index ed96025..8bf5822 100644
--- a/chrome/android/chrome_test_java_sources.gni
+++ b/chrome/android/chrome_test_java_sources.gni
@@ -78,7 +78,7 @@
   "javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillServerCardEditorTest.java",
   "javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillTestRule.java",
   "javatests/src/org/chromium/chrome/browser/autofill/vcn/AutofillVcnEnrollBottomSheetViewBinderTest.java",
-  "javatests/src/org/chromium/chrome/browser/automotive/backbuttontoolbar/BackButtonToolbarTest.java",
+  "javatests/src/org/chromium/chrome/browser/automotive/BackButtonToolbarTest.java",
   "javatests/src/org/chromium/chrome/browser/background_sync/BackgroundSyncTest.java",
   "javatests/src/org/chromium/chrome/browser/background_sync/PeriodicBackgroundSyncTest.java",
   "javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkBridgeTest.java",
diff --git a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java
index 50c8ebd..95f1225 100644
--- a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java
+++ b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java
@@ -662,13 +662,17 @@
         if (!isHomepageShown()) return;
 
         recordTimeBetweenShowAndCreate();
-        // We use UI_DEFAULT priority to not slow down high priority tasks such as user input.
-        // As this is behavior is behind a feature flag, based on the results we will deviate to
-        // lower priority if needed.
-        PostTask.runOrPostTask(TaskTraits.UI_DEFAULT,
-                ()
-                        -> WarmupManager.getInstance().createSpareTab(
-                                tabCreator, TabLaunchType.FROM_START_SURFACE));
+
+        if (!mIsIncognito) {
+            Profile profile = mProfileSupplier.get();
+
+            // We use UI_DEFAULT priority to not slow down high priority tasks such as user input.
+            // As this is behavior is behind a feature flag, based on the results we will deviate to
+            // lower priority if needed.
+            PostTask.runOrPostTask(
+                    TaskTraits.UI_DEFAULT,
+                    () -> WarmupManager.getInstance().createRegularSpareTab(profile));
+        }
     }
 
     /**
diff --git a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java
index eb99310c4..79c5ac3b 100644
--- a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java
+++ b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java
@@ -83,6 +83,7 @@
 import org.chromium.chrome.browser.layouts.LayoutStateProvider;
 import org.chromium.chrome.browser.layouts.LayoutTestUtils;
 import org.chromium.chrome.browser.layouts.LayoutType;
+import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab.TabLaunchType;
 import org.chromium.chrome.browser.tasks.ReturnToChromeUtil;
@@ -973,7 +974,7 @@
         // SpareTab should be created when the start surface is shown.
         CriteriaHelper.pollUiThread(
                 () -> {
-                    WarmupManager.getInstance().hasSpareTab();
+                    WarmupManager.getInstance().hasSpareTab(Profile.getLastUsedRegularProfile());
                 });
 
         // The renderer process count should be 0 as spareTab doesn't initialize renderer by
@@ -985,7 +986,10 @@
         StartSurfaceTestUtils.waitForCurrentTabLoaded(mActivityTestRule);
 
         // SpareTab should be used when we navigate from start surface.
-        CriteriaHelper.pollUiThread(() -> !WarmupManager.getInstance().hasSpareTab());
+        CriteriaHelper.pollUiThread(
+                () ->
+                        !WarmupManager.getInstance()
+                                .hasSpareTab(Profile.getLastUsedRegularProfile()));
         Assert.assertEquals(
                 1,
                 RecordHistogram.getHistogramValueCountForTesting(
@@ -1012,7 +1016,7 @@
         // SpareTab should be created when the start surface is shown.
         CriteriaHelper.pollUiThread(
                 () -> {
-                    WarmupManager.getInstance().hasSpareTab();
+                    WarmupManager.getInstance().hasSpareTab(Profile.getLastUsedRegularProfile());
                 });
 
         // Navigate from StartSurface using search box.
@@ -1025,7 +1029,10 @@
         ChromeTabUtils.waitForTabPageLoaded(cta.getActivityTab(), (String) null);
 
         // SpareTab should be used when we navigate from start surface.
-        CriteriaHelper.pollUiThread(() -> !WarmupManager.getInstance().hasSpareTab());
+        CriteriaHelper.pollUiThread(
+                () ->
+                        !WarmupManager.getInstance()
+                                .hasSpareTab(Profile.getLastUsedRegularProfile()));
         Assert.assertEquals(
                 1,
                 RecordHistogram.getHistogramValueCountForTesting(
@@ -1053,7 +1060,7 @@
         // SpareTab should be created when the start surface is shown.
         CriteriaHelper.pollUiThread(
                 () -> {
-                    WarmupManager.getInstance().hasSpareTab();
+                    WarmupManager.getInstance().hasSpareTab(Profile.getLastUsedRegularProfile());
                 });
 
         // Navigate from StartSurface using carousel tab switcher.
@@ -1061,7 +1068,10 @@
         LayoutTestUtils.waitForLayout(cta.getLayoutManager(), LayoutType.BROWSING);
 
         // This shouldn't use spare tab and deletes spare tab once the start surface gets hidden.
-        CriteriaHelper.pollUiThread(() -> !WarmupManager.getInstance().hasSpareTab());
+        CriteriaHelper.pollUiThread(
+                () ->
+                        !WarmupManager.getInstance()
+                                .hasSpareTab(Profile.getLastUsedRegularProfile()));
         Assert.assertEquals(
                 1,
                 RecordHistogram.getHistogramValueCountForTesting(
@@ -1093,7 +1103,7 @@
         // SpareTab should be created when the start surface is shown.
         CriteriaHelper.pollUiThread(
                 () -> {
-                    WarmupManager.getInstance().hasSpareTab();
+                    WarmupManager.getInstance().hasSpareTab(Profile.getLastUsedRegularProfile());
                 });
 
         // The renderer process count should be 1 as spareTab also initializes renderer when the
@@ -1123,19 +1133,22 @@
         // SpareTab should be created when the start surface is shown.
         CriteriaHelper.pollUiThread(
                 () -> {
-                    WarmupManager.getInstance().hasSpareTab();
+                    WarmupManager.getInstance().hasSpareTab(Profile.getLastUsedRegularProfile());
                 });
 
         // Navigate from start surface using link
         mActivityTestRule.loadUrlInNewTab("about:blank", false, TabLaunchType.FROM_LINK);
 
-        // This shouldn't use spare tab and deletes spare tab once the start surface gets hidden.
-        CriteriaHelper.pollUiThread(() -> !WarmupManager.getInstance().hasSpareTab());
+        // This should use the spare tab.
+        CriteriaHelper.pollUiThread(
+                () ->
+                        !WarmupManager.getInstance()
+                                .hasSpareTab(Profile.getLastUsedRegularProfile()));
         Assert.assertEquals(
                 1,
                 RecordHistogram.getHistogramValueCountForTesting(
                         HISTOGRAM_SPARE_TAB_FINAL_STATUS,
-                        WarmupManager.SpareTabFinalStatus.TAB_DESTROYED));
+                        WarmupManager.SpareTabFinalStatus.TAB_USED));
     }
 
     @Test
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java b/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java
index da450948..36ac86b1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java
@@ -6,6 +6,7 @@
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.Configuration;
+import android.graphics.Rect;
 import android.net.Uri;
 import android.util.DisplayMetrics;
 import android.view.ContextThemeWrapper;
@@ -23,6 +24,7 @@
 import org.jni_zero.NativeMethods;
 
 import org.chromium.base.BuildInfo;
+import org.chromium.base.ContextUtils;
 import org.chromium.base.Log;
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.TraceEvent;
@@ -30,21 +32,25 @@
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.task.AsyncTask;
 import org.chromium.chrome.R;
+import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingTask;
 import org.chromium.chrome.browser.content.WebContentsFactory;
 import org.chromium.chrome.browser.crash.ChromePureJavaExceptionReporter;
+import org.chromium.chrome.browser.customtabs.CustomTabDelegateFactory;
 import org.chromium.chrome.browser.flags.BooleanCachedFieldTrialParameter;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.tab.EmptyTabObserver;
 import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tab.TabBuilder;
+import org.chromium.chrome.browser.tab.TabDelegateFactory;
 import org.chromium.chrome.browser.tab.TabLaunchType;
-import org.chromium.chrome.browser.tab.TabObserver;
-import org.chromium.chrome.browser.tabmodel.TabCreator;
+import org.chromium.chrome.browser.tab.TabUtils;
 import org.chromium.chrome.browser.toolbar.ControlContainer;
 import org.chromium.components.embedder_support.util.UrlConstants;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.content_public.browser.WebContentsObserver;
 import org.chromium.ui.LayoutInflaterUtils;
+import org.chromium.ui.base.WindowAndroid;
 import org.chromium.ui.display.DisplayUtil;
 
 import java.lang.annotation.Retention;
@@ -77,17 +83,40 @@
         }
     }
 
-    /**
-     * Records stats, observes crashes, and cleans up spareTab object.
-     */
-    private TabObserver mSpareTabObserver = new EmptyTabObserver() {
+    /** Records stats, observes crashes, and cleans up spareTab object. */
+    private class HiddenTabObserver extends EmptyTabObserver {
+        // This WindowAndroid is "owned" by the Tab and should be destroyed when it is no longer
+        // needed by the Tab or when the Tab is destroyed.
+        private WindowAndroid mOwnedWindowAndroid;
+
+        public HiddenTabObserver(WindowAndroid ownedWindowAndroid) {
+            mOwnedWindowAndroid = ownedWindowAndroid;
+        }
+
         @Override
         // Invoked when tab crashes, or when the associated renderer process is killed.
         public void onCrash(Tab tab) {
             mSpareTabFinalStatus = SpareTabFinalStatus.TAB_CRASHED;
             destroySpareTabInternal();
         }
-    };
+
+        @Override
+        public void onDestroyed(Tab tab) {
+            destroyOwnedWindow(tab);
+        }
+
+        @Override
+        public void onActivityAttachmentChanged(Tab tab, WindowAndroid window) {
+            destroyOwnedWindow(tab);
+        }
+
+        private void destroyOwnedWindow(Tab tab) {
+            assert mOwnedWindowAndroid != null;
+            mOwnedWindowAndroid.destroy();
+            mOwnedWindowAndroid = null;
+            tab.removeObserver(this);
+        }
+    }
 
     @SuppressLint("StaticFieldLeak")
     private static WarmupManager sWarmupManager;
@@ -177,44 +206,33 @@
     }
 
     /**
-     * Creates and initializes a spare Tab of TabLaunchType type, to be used for a subsequent
+     * Creates and initializes a Regular (non-Incognito) spare Tab, to be used for a subsequent
      * navigation.
      *
-     * This creates a WebContents and initializes renderer if SPARE_TAB_INITIALIZE_RENDERER is true.
-     * It can be picked up by any tab with TabLaunchType as type. Can be called multiple times, and
-     * must be called from the UI thread.
+     * <p>This creates a WebContents and initializes renderer if SPARE_TAB_INITIALIZE_RENDERER is
+     * true. Can be called multiple times, and must be called from the UI thread.
      *
-     * @param tabCreator The {@link TabCreator} object to create spareTab.
-     * @param type The LaunchType while creating this spareTab.
-     *
+     * <p>The tab's launch type will be set when the tab is used.
      */
-    public void createSpareTab(TabCreator tabCreator, @TabLaunchType int type) {
+    public void createRegularSpareTab(Profile profile) {
+        ThreadUtils.assertOnUiThread();
+        assert !profile.isOffTheRecord();
         try (TraceEvent e = TraceEvent.scoped("WarmupManager.createSpareTab")) {
             // Return without creating spare Tab if spareTab feature isn't enabled.
             if (!isSpareTabEnabled()) return;
 
             mSpareTabFinalStatus = SpareTabFinalStatus.TAB_CREATION_IN_PROGRESS;
-            ThreadUtils.assertOnUiThread();
 
             // Ensure native is initialized before creating spareTab.
             assert LibraryLoader.getInstance().isInitialized();
 
-            if (mSpareTab != null) {
-                // If a spare Tab is already present for the launch type don't create a new one.
-                if (mSpareTab.getLaunchType() == type) return;
-
-                // Destroy the old spare tab before creating new one.
-                destroySpareTab();
-            }
-
-            // We don't handle spare tab creation if tabCreator is null.
-            if (tabCreator == null) return;
+            if (mSpareTab != null) return;
 
             // Initializes renderer with WebContents creation if enabled.
-            boolean initialize_renderer = SPARE_TAB_INITIALIZE_RENDERER.getValue();
+            boolean initializeRenderer = SPARE_TAB_INITIALIZE_RENDERER.getValue();
 
             // Build a spare detached tab.
-            Tab spareTab = tabCreator.buildDetachedSpareTab(type, initialize_renderer);
+            Tab spareTab = buildDetachedSpareTab(profile, initializeRenderer);
 
             mSpareTab = spareTab;
             assert mSpareTab != null : "Building a spare detached tab shouldn't return null.";
@@ -222,39 +240,70 @@
             mSpareTabFinalStatus = SpareTabFinalStatus.TAB_CREATED_BUT_NOT_USED;
         }
 
-        // Ensure that the TabObserver is set before adding it.
-        assert mSpareTabObserver != null;
         if (mSpareTab != null) {
-            mSpareTab.addObserver(mSpareTabObserver);
+            mSpareTab.addObserver(new HiddenTabObserver(mSpareTab.getWindowAndroid()));
         }
     }
 
     /**
-     * Returns a spare Tab or null, depending on the availability of one.
+     * Creates an instance of a {@link Tab} that is fully detached from any activity.
      *
-     * @param incognito whether tab is used in incognito mode or not.
-     * @param type TabLaunchType of the requested tab.
+     * <p>Also performs general tab initialization as well as detached specifics.
      *
-     * @return a Tab, or null.
+     * @param initializeRenderer Whether to initialize renderer with WebContents creation.
+     * @return The newly created and initialized spare tab.
+     *     <p>TODO(crbug.com/1412572): Adapt this method to create other tabs.
      */
-    public Tab takeSpareTab(boolean incognito, @TabLaunchType int type) {
-        try (TraceEvent e = TraceEvent.scoped("WarmupManager.takeSpareTab")) {
-            if (!canUseSpareTab(type)) return null;
+    private Tab buildDetachedSpareTab(Profile profile, boolean initializeRenderer) {
+        Context context = ContextUtils.getApplicationContext();
 
+        // These are effectively unused as they will be set when finishing reparenting.
+        TabDelegateFactory delegateFactory = CustomTabDelegateFactory.createEmpty();
+        WindowAndroid window = new WindowAndroid(context);
+
+        // TODO(crbug.com/1190971): Set isIncognito flag here if spare tabs are allowed for
+        // incognito mode.
+        Tab tab =
+                TabBuilder.createLiveTab(profile, true)
+                        .setWindow(window)
+                        .setLaunchType(TabLaunchType.UNSET)
+                        .setDelegateFactory(delegateFactory)
+                        .setInitiallyHidden(true)
+                        .setInitializeRenderer(initializeRenderer)
+                        .build();
+
+        // Resize the webContents to avoid expensive post load resize when attaching the tab.
+        Rect bounds = TabUtils.estimateContentSize(context);
+        int width = bounds.right - bounds.left;
+        int height = bounds.bottom - bounds.top;
+        tab.getWebContents().setSize(width, height);
+
+        // Reparent the tab to detach it from the current activity.
+        ReparentingTask.from(tab).detach();
+        return tab;
+    }
+
+    /**
+     * Returns the spare Tab. Must only be called when a spare tab is available for |profile|.
+     *
+     * @param profile the profile associated with the spare Tab.
+     * @param type TabLaunchType of the requested tab.
+     * @return the spare Tab.
+     */
+    public Tab takeSpareTab(Profile profile, @TabLaunchType int type) {
+        ThreadUtils.assertOnUiThread();
+        try (TraceEvent e = TraceEvent.scoped("WarmupManager.takeSpareTab")) {
             // We should only invoke this when the spare tab feature is enabled.
             assert isSpareTabEnabled();
 
-            ThreadUtils.assertOnUiThread();
-
-            // Only use spareTab for non-incognito mode.
-            if (incognito) return null;
-
-            // Remove the spareTab observer before using it.
-            mSpareTab.removeObserver(mSpareTabObserver);
+            if (mSpareTab.getProfile() != profile) {
+                throw new RuntimeException("Attempted to take the tab from another profile.");
+            }
 
             Tab spareTab = mSpareTab;
             mSpareTab = null;
 
+            spareTab.setTabLaunchType(type);
             mSpareTabFinalStatus = SpareTabFinalStatus.TAB_USED;
 
             // Record the SpareTabFinalStatus once its used.
@@ -264,10 +313,11 @@
     }
 
     /**
-     * @return Whether a spare tab is available.
+     * @return Whether a spare tab is available for the given profile.
      */
-    public boolean hasSpareTab() {
-        return mSpareTab != null;
+    public boolean hasSpareTab(Profile profile) {
+        if (mSpareTab == null) return false;
+        return mSpareTab.getProfile() == profile;
     }
 
     /**
@@ -283,24 +333,6 @@
     }
 
     /**
-     * Various conditions are checked to determine whether the spare tab can be used to load a URL.
-     * In order to load a URL, the tab properties must match the tab that is being used.
-     *
-     * @param type TabLaunchType of the requested tab.
-     *
-     * @return Whether a spare tab can be used for next navigation or false otherwise.
-     */
-    public boolean canUseSpareTab(@TabLaunchType int type) {
-        // If there is no spareTab return false.
-        if (!hasSpareTab()) return false;
-
-        // Ensure that TabLaunchType matches when using spareTab for navigation.
-        if (mSpareTab.getLaunchType() != type) return false;
-
-        return true;
-    }
-
-    /**
      * Removes the singleton instance for the WarmupManager for testing.
      */
     public static void deInitForTesting() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/ChromeTabModelFilterFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/ChromeTabModelFilterFactory.java
index 87a5850..658d7dc2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/ChromeTabModelFilterFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/ChromeTabModelFilterFactory.java
@@ -4,7 +4,8 @@
 
 package org.chromium.chrome.browser.app.tabmodel;
 
-import android.app.Activity;
+import static org.chromium.chrome.browser.dependency_injection.ChromeCommonQualifiers.ACTIVITY_CONTEXT;
+
 import android.content.Context;
 
 import org.chromium.chrome.browser.dependency_injection.ActivityScope;
@@ -15,6 +16,7 @@
 import org.chromium.chrome.browser.tasks.tab_management.TabManagementDelegateProvider;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 
 /**
  * Glue code that decides which concrete {@link TabModelFilterFactory} should be used.
@@ -23,12 +25,12 @@
 public class ChromeTabModelFilterFactory implements TabModelFilterFactory {
     private Context mContext;
 
-    @Inject
     /**
      * @param context The activity context.
      */
-    public ChromeTabModelFilterFactory(Activity activity) {
-        mContext = activity;
+    @Inject
+    public ChromeTabModelFilterFactory(@Named(ACTIVITY_CONTEXT) Context context) {
+        mContext = context;
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/DefaultTabModelSelectorFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/DefaultTabModelSelectorFactory.java
index 83458c9f..f5fdb1b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/DefaultTabModelSelectorFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/DefaultTabModelSelectorFactory.java
@@ -4,7 +4,7 @@
 
 package org.chromium.chrome.browser.app.tabmodel;
 
-import android.app.Activity;
+import android.content.Context;
 
 import org.chromium.base.supplier.OneshotSupplier;
 import org.chromium.chrome.browser.flags.ActivityType;
@@ -25,12 +25,11 @@
     // verification errors.
     @Override
     public TabModelSelector buildSelector(
-            Activity activity,
+            Context context,
             OneshotSupplier<ProfileProvider> profileProviderSupplier,
             TabCreatorManager tabCreatorManager,
-            NextTabPolicySupplier nextTabPolicySupplier,
-            int selectorIndex) {
-        TabModelFilterFactory tabModelFilterFactory = new ChromeTabModelFilterFactory(activity);
+            NextTabPolicySupplier nextTabPolicySupplier) {
+        TabModelFilterFactory tabModelFilterFactory = new ChromeTabModelFilterFactory(context);
         AsyncTabParamsManager asyncTabParamsManager = AsyncTabParamsManagerSingleton.getInstance();
 
         return new TabModelSelectorImpl(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillPaymentMethodsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillPaymentMethodsDelegate.java
index 3b3ecf2..fa8bea7e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillPaymentMethodsDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillPaymentMethodsDelegate.java
@@ -90,6 +90,21 @@
     }
 
     /**
+     * Calls the native deleteSavedCvcs to delete saved CVCs.
+     *
+     * @throws IllegalStateException when called after the native delegate has been cleaned up, or
+     *     if an error occurred during initialization.
+     */
+    public void deleteSavedCvcs() {
+        if (mNativeAutofillPaymentMethodsDelegate == 0) {
+            throw new IllegalStateException(
+                    "The native delegate was cleaned up or not initialized.");
+        }
+        AutofillPaymentMethodsDelegateJni.get()
+                .deleteSavedCvcs(mNativeAutofillPaymentMethodsDelegate);
+    }
+
+    /**
      * Calls the native cleanup method for this instance.
      * This must be called when the object is no longer needed, or a memory leak will result.
      */
@@ -110,5 +125,7 @@
                 Callback<Boolean> virtualCardEnrollmentUpdateResponseCallback);
         void unenrollVirtualCard(long nativeAutofillPaymentMethodsDelegate, long instrumentId,
                 Callback<Boolean> virtualCardEnrollmentUpdateResponseCallback);
+
+        void deleteSavedCvcs(long nativeAutofillPaymentMethodsDelegate);
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillPaymentMethodsFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillPaymentMethodsFragment.java
index e5f1bb3..36221f2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillPaymentMethodsFragment.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillPaymentMethodsFragment.java
@@ -73,6 +73,8 @@
 
     @Nullable
     private ReauthenticatorBridge mReauthenticatorBridge;
+    @Nullable
+    private AutofillPaymentMethodsDelegate mAutofillPaymentMethodsDelegate;
 
     @Override
     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
@@ -485,7 +487,11 @@
                                 new AppModalPresenter(getActivity()), ModalDialogType.APP),
                         deleteRequested -> {
                             if (deleteRequested) {
-                                // TODO(crbug.com/1491570): Call to the saved CVC delete interface.
+                                if (mAutofillPaymentMethodsDelegate == null) {
+                                    mAutofillPaymentMethodsDelegate =
+                                            new AutofillPaymentMethodsDelegate(getProfile());
+                                }
+                                mAutofillPaymentMethodsDelegate.deleteSavedCvcs();
                             }
                         });
         dialog.show();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/automotive/AutomotiveUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/automotive/AutomotiveUtils.java
new file mode 100644
index 0000000..05bb923
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/automotive/AutomotiveUtils.java
@@ -0,0 +1,32 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.automotive;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+
+import org.chromium.base.BuildInfo;
+import org.chromium.ui.display.DisplayAndroid;
+import org.chromium.ui.display.DisplayUtil;
+
+public class AutomotiveUtils {
+
+    /** Returns the height of the automotive back button toolbar. */
+    public static int getAutomotiveToolbarHeightDp(Context activityContext) {
+        if (BuildInfo.getInstance().isAutomotive) {
+            final TypedArray styledAttributes =
+                    activityContext
+                            .getTheme()
+                            .obtainStyledAttributes(
+                                    new int[] {org.chromium.ui.R.attr.actionBarSize});
+            int automotiveToolbarHeightPx = Math.round(styledAttributes.getDimension(0, 0));
+            styledAttributes.recycle();
+            return DisplayUtil.pxToDp(
+                    DisplayAndroid.getNonMultiDisplay(activityContext), automotiveToolbarHeightPx);
+        } else {
+            return 0;
+        }
+    }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkFeatures.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkFeatures.java
index b9d06a2..65fbc88 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkFeatures.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkFeatures.java
@@ -11,6 +11,10 @@
 
 /** Self-documenting feature class for bookmarks. */
 public class BookmarkFeatures {
+    private static final MutableFlagWithSafeDefault sEnableBookmarksAccountStorage =
+            new MutableFlagWithSafeDefault(
+                    ChromeFeatureList.ENABLE_BOOKMARK_FOLDERS_FOR_ACCOUNT_STORAGE, false);
+
     private static final MutableFlagWithSafeDefault sAndroidImprovedBookmarksFlag =
             new MutableFlagWithSafeDefault(ChromeFeatureList.ANDROID_IMPROVED_BOOKMARKS, false);
 
@@ -34,4 +38,8 @@
     public static boolean isAndroidImprovedBookmarksEnabled() {
         return sAndroidImprovedBookmarksFlag.isEnabled();
     }
+
+    public static boolean isBookmarksAccountStorageEnabled() {
+        return sEnableBookmarksAccountStorage.isEnabled();
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java
index 7496eae..c3e1c07 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java
@@ -328,7 +328,7 @@
      * Creates a basic/empty {@link TabDelegateFactory} for use when creating a hidden tab. It will
      * be replaced when the hidden Tab becomes shown.
      */
-    static CustomTabDelegateFactory createEmpty() {
+    public static CustomTabDelegateFactory createEmpty() {
         return new CustomTabDelegateFactory(null, false, false, null, DisplayMode.BROWSER, false,
                 null, null, null, null,
                 ()
@@ -386,7 +386,6 @@
     @VisibleForTesting
     TabContextMenuItemDelegate createTabContextMenuItemDelegate(Tab tab) {
         TabModelSelector tabModelSelector = mTabModelSelectorSupplier.get();
-        final boolean isIncognito = tab.isIncognito();
         return new TabContextMenuItemDelegate(tab, tabModelSelector,
                 EphemeralTabCoordinator.isSupported() ? mEphemeralTabCoordinator::get : ()
                         -> null,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/DEPS b/chrome/android/java/src/org/chromium/chrome/browser/tab/DEPS
index 30b2564a..7ce90fe 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/DEPS
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/DEPS
@@ -19,6 +19,7 @@
   "+chrome/browser/bluetooth/android/java/src/org/chromium/chrome/browser/bluetooth/BluetoothNotificationManager.java",
   "+chrome/android/java/src/org/chromium/chrome/browser/app/usb/UsbNotificationService.java",
   "+chrome/browser/usb/android/java/src/org/chromium/chrome/browser/usb/UsbNotificationManager.java",
+  "+chrome/android/java/src/org/chromium/chrome/browser/automotive/AutomotiveUtils.java",
   "+chrome/android/java/src/org/chromium/chrome/browser/media/MediaCaptureNotificationServiceImpl.java",
   "+chrome/android/java/src/org/chromium/chrome/browser/metrics/UkmRecorder.java",
   "+chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
index 91e71fc4..f819372 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
@@ -136,14 +136,13 @@
     private boolean mIsShowingErrorPage;
 
     /**
-     * Saves how this tab was launched (from a link, external app, etc) so that
-     * we can determine the different circumstances in which it should be
-     * closed. For example, a tab opened from an external app should be closed
-     * when the back stack is empty and the user uses the back hardware key. A
-     * standard tab however should be kept open and the entire activity should
-     * be moved to the background.
+     * Saves how this tab was launched (from a link, external app, etc) so that we can determine the
+     * different circumstances in which it should be closed. For example, a tab opened from an
+     * external app should be closed when the back stack is empty and the user uses the back
+     * hardware key. A standard tab however should be kept open and the entire activity should be
+     * moved to the background.
      */
-    private final @Nullable @TabLaunchType Integer mLaunchType;
+    private @Nullable @TabLaunchType Integer mLaunchType;
 
     private @Nullable @TabCreationState Integer mCreationState;
 
@@ -1900,6 +1899,13 @@
                 /* forcedByUser */ false, caller);
     }
 
+    /** Sets the TabLaunchType for tabs launched with an unset launch type. */
+    @Override
+    public void setTabLaunchType(@TabLaunchType int launchType) {
+        assert mLaunchType == TabLaunchType.UNSET;
+        mLaunchType = launchType;
+    }
+
     @NativeMethods
     @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
     public interface Natives {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java
index 4ed7a55..b7c2fdc4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java
@@ -26,6 +26,7 @@
 
 import org.chromium.base.BuildInfo;
 import org.chromium.chrome.R;
+import org.chromium.chrome.browser.automotive.AutomotiveUtils;
 import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.tasks.tab_management.TabUiThemeProvider;
@@ -267,14 +268,18 @@
         if (context.getResources().getConfiguration().orientation
                 == Configuration.ORIENTATION_LANDSCAPE) {
             assert browserControlsStateProvider != null;
-            int toolbarHeightDp = (browserControlsStateProvider == null)
-                    ? 0
-                    : Math.round((float) browserControlsStateProvider.getTopControlsHeight()
-                            / context.getResources().getDisplayMetrics().density);
+            int browserControlsHeightDp =
+                    (browserControlsStateProvider == null)
+                            ? 0
+                            : Math.round(
+                                    (float) browserControlsStateProvider.getTopControlsHeight()
+                                            / context.getResources().getDisplayMetrics().density);
+            int automotiveToolbarHeightDp = AutomotiveUtils.getAutomotiveToolbarHeightDp(context);
             // This should match the aspect ratio of a Tab's content area.
             return (context.getResources().getConfiguration().screenWidthDp * 1.f)
                     / (context.getResources().getConfiguration().screenHeightDp * 1.f
-                            - toolbarHeightDp);
+                            - browserControlsHeightDp
+                            - automotiveToolbarHeightDp);
         }
         // This is an experimentally determined value.
         return PORTRAIT_THUMBNAIL_ASPECT_RATIO;
@@ -317,11 +322,10 @@
      */
     public static void setBitmapAndUpdateImageMatrix(
             ImageView view, Bitmap bitmap, Size destinationSize) {
-        view.setImageBitmap(bitmap);
         if (BuildInfo.getInstance().isAutomotive) {
-            bitmap.setDensity(
-                    (int) (bitmap.getDensity() * DisplayUtil.getUiScalingFactorForAutomotive()));
+            bitmap.setDensity(DisplayUtil.getUiDensityForAutomotive(bitmap.getDensity()));
         }
+        view.setImageBitmap(bitmap);
         int newWidth = destinationSize == null ? 0 : destinationSize.getWidth();
         int newHeight = destinationSize == null ? 0 : destinationSize.getHeight();
         if (newWidth <= 0 || newHeight <= 0
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java
index 0b1e999..1507b103 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java
@@ -650,10 +650,17 @@
 
     private void initializeIPH(boolean intentWithEffect) {
         if (mActivity == null) return;
-        mToolbarButtonInProductHelpController = new ToolbarButtonInProductHelpController(mActivity,
-                mWindowAndroid, mAppMenuCoordinator, mActivityLifecycleDispatcher,
-                mActivityTabProvider, mIsInOverviewModeSupplier,
-                mToolbarManager.getMenuButtonView(), mToolbarManager.getSecurityIconView());
+        mToolbarButtonInProductHelpController =
+                new ToolbarButtonInProductHelpController(
+                        mActivity,
+                        mWindowAndroid,
+                        mAppMenuCoordinator,
+                        mActivityLifecycleDispatcher,
+                        mProfileSupplier,
+                        mActivityTabProvider,
+                        mIsInOverviewModeSupplier,
+                        mToolbarManager.getMenuButtonView(),
+                        mToolbarManager.getSecurityIconView());
         mReadLaterIPHController = new ReadLaterIPHController(mActivity,
                 getToolbarManager().getMenuButtonView(), mAppMenuCoordinator.getAppMenuHandler());
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
index 6304b1a..528e5bd7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
@@ -5,14 +5,11 @@
 package org.chromium.chrome.browser.tabmodel;
 
 import android.app.Activity;
-import android.content.Context;
 import android.content.Intent;
-import android.graphics.Rect;
 import android.text.TextUtils;
 
 import androidx.annotation.Nullable;
 
-import org.chromium.base.ContextUtils;
 import org.chromium.base.IntentUtils;
 import org.chromium.base.SysUtils;
 import org.chromium.base.TraceEvent;
@@ -43,7 +40,6 @@
 import org.chromium.chrome.browser.tab.TabParentIntent;
 import org.chromium.chrome.browser.tab.TabResolver;
 import org.chromium.chrome.browser.tab.TabState;
-import org.chromium.chrome.browser.tab.TabUtils;
 import org.chromium.components.embedder_support.util.UrlConstants;
 import org.chromium.components.embedder_support.util.UrlUtilities;
 import org.chromium.components.url_formatter.UrlFormatter;
@@ -242,48 +238,6 @@
     }
 
     /**
-     * Creates an instance of a {@link Tab} that is fully detached from any activity.
-     *
-     * Also performs general tab initialization as well as detached specifics.
-     *
-     * @param type Information about how the tab is launched.
-     * @param initializeRenderer Whether to initialize renderer with WebContents creation.
-     *
-     * @return The newly created and initialized spare tab.
-     *
-     * TODO(crbug.com/1412572): Adapt this method to create other tabs.
-     */
-    @Override
-    public Tab buildDetachedSpareTab(@TabLaunchType int type, boolean initializeRenderer) {
-        try (TraceEvent e = TraceEvent.scoped("ChromeTabCreator.buildDetachedTab")) {
-            Context context = ContextUtils.getApplicationContext();
-
-            // Don't create spare tab in incognito mode.
-            if (mIncognito) return null;
-
-            TabDelegateFactory delegateFactory = createDefaultTabDelegateFactory();
-            Tab tab =
-                    TabBuilder.createLiveTab(getProfile(), true)
-                            .setWindow(mNativeWindow)
-                            .setLaunchType(type)
-                            .setDelegateFactory(delegateFactory)
-                            .setInitiallyHidden(true)
-                            .setInitializeRenderer(initializeRenderer)
-                            .build();
-
-            // Resize the webContents to avoid expensive post load resize when attaching the tab.
-            Rect bounds = TabUtils.estimateContentSize(context);
-            int width = bounds.right - bounds.left;
-            int height = bounds.bottom - bounds.top;
-            tab.getWebContents().setSize(width, height);
-
-            // Reparent the tab to detach it from the current activity.
-            ReparentingTask.from(tab).detach();
-            return tab;
-        }
-    }
-
-    /**
      * Creates a new tab and posts to UI.
      * @param loadUrlParams parameters of the url load.
      * @param type Information about how the tab was launched.
@@ -377,13 +331,16 @@
                                 .setInitiallyHidden(!openInForeground)
                                 .build();
                 creationState = TabCreationState.FROZEN_FOR_LAZY_LOAD;
-            } else if ((tab = WarmupManager.getInstance().takeSpareTab(mIncognito, type)) != null) {
+            } else if (WarmupManager.getInstance().hasSpareTab(getProfile())) {
                 // Load URL using spare tab if available. This occurs only if a spare tab has been
                 // created beforehand. The creation of a spare tab is a costly operation that should
                 // not be performed without testing. Spare tab is only used for navigations in the
                 // foreground and for high-end devices.
                 TraceEvent.end("ChromeTabCreator.loadUrlWithSpareTab");
 
+                tab = WarmupManager.getInstance().takeSpareTab(getProfile(), type);
+                assert tab != null;
+
                 // Reparent the tab to its parent, updating the DelegateFactory and NativeWindow.
                 tab.reparentTab(parent);
                 ReparentingTask.from(tab).finish(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarButtonInProductHelpController.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarButtonInProductHelpController.java
index aca9fe08..04cc7ec 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarButtonInProductHelpController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarButtonInProductHelpController.java
@@ -22,7 +22,6 @@
 import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
 import org.chromium.chrome.browser.feature_guide.notifications.FeatureNotificationUtils;
 import org.chromium.chrome.browser.feature_guide.notifications.FeatureType;
-import org.chromium.chrome.browser.incognito.IncognitoUtils;
 import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
 import org.chromium.chrome.browser.lifecycle.PauseResumeWithNativeObserver;
 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
@@ -65,6 +64,7 @@
     private final View mSecurityIconAnchorView;
     private final AppMenuHandler mAppMenuHandler;
     private final UserEducationHelper mUserEducationHelper;
+    private final ObservableSupplier<Profile> mProfileSupplier;
     private final Supplier<Tab> mCurrentTabSupplier;
     private final Supplier<Boolean> mIsInOverviewModeSupplier;
 
@@ -72,18 +72,23 @@
      * @param activity {@link Activity} on which this class runs.
      * @param windowAndroid {@link WindowAndroid} for the current Activity.
      * @param appMenuCoordinator {@link AppMenuCoordinator} whose visual state is to be updated
-     *        accordingly.
+     *     accordingly.
      * @param lifecycleDispatcher {@link LifecycleDispatcher} that helps observe activity lifecycle.
+     * @param profileSupplier A supplier of the Profile associated with the current visible state.
      * @param tabSupplier An observable supplier of the current {@link Tab}.
      * @param isInOverviewModeSupplier Supplies whether the app is in overview mode.
      * @param menuButtonAnchorView The menu button view to serve as an anchor.
      * @param securityIconAnchorView The security icon to serve as an anchor.
      */
-    public ToolbarButtonInProductHelpController(@NonNull Activity activity,
-            @NonNull WindowAndroid windowAndroid, @NonNull AppMenuCoordinator appMenuCoordinator,
+    public ToolbarButtonInProductHelpController(
+            @NonNull Activity activity,
+            @NonNull WindowAndroid windowAndroid,
+            @NonNull AppMenuCoordinator appMenuCoordinator,
             @NonNull ActivityLifecycleDispatcher lifecycleDispatcher,
+            @NonNull ObservableSupplier<Profile> profileSupplier,
             @NonNull ObservableSupplier<Tab> tabSupplier,
-            @NonNull Supplier<Boolean> isInOverviewModeSupplier, @NonNull View menuButtonAnchorView,
+            @NonNull Supplier<Boolean> isInOverviewModeSupplier,
+            @NonNull View menuButtonAnchorView,
             @NonNull View securityIconAnchorView) {
         mActivity = activity;
         mWindowAndroid = windowAndroid;
@@ -96,6 +101,7 @@
         mScreenshotMonitor = new ScreenshotMonitorImpl(this, mActivity);
         mLifecycleDispatcher = lifecycleDispatcher;
         mLifecycleDispatcher.register(this);
+        mProfileSupplier = profileSupplier;
         mCurrentTabSupplier = tabSupplier;
         mPageLoadObserver =
                 new CurrentTabObserver(
@@ -221,19 +227,24 @@
 
     @Override
     public void onScreenshotTaken() {
-        boolean isIncognito =
-                mCurrentTabSupplier.get() != null && mCurrentTabSupplier.get().isIncognito();
-        Profile profile = IncognitoUtils.getProfileFromWindowAndroid(mWindowAndroid, isIncognito);
-        Tracker tracker = TrackerFactory.getTrackerForProfile(profile);
+        Tab currentTab = mCurrentTabSupplier.get();
+        Profile currentProfile =
+                currentTab != null ? currentTab.getProfile() : mProfileSupplier.get();
+
+        Tracker tracker = TrackerFactory.getTrackerForProfile(currentProfile);
         tracker.notifyEvent(EventConstants.SCREENSHOT_TAKEN_CHROME_IN_FOREGROUND);
 
-        PostTask.postTask(TaskTraits.UI_DEFAULT, () -> {
-            showDownloadPageTextBubble(
-                    mCurrentTabSupplier.get(), FeatureConstants.DOWNLOAD_PAGE_SCREENSHOT_FEATURE);
-            ScreenshotTabObserver tabObserver =
-                    ScreenshotTabObserver.from(mCurrentTabSupplier.get());
-            if (tabObserver != null) tabObserver.onScreenshotTaken();
-        });
+        if (currentTab == null) return;
+
+        PostTask.postTask(
+                TaskTraits.UI_DEFAULT,
+                () -> {
+                    if (currentTab != mCurrentTabSupplier.get()) return;
+                    showDownloadPageTextBubble(
+                            currentTab, FeatureConstants.DOWNLOAD_PAGE_SCREENSHOT_FEATURE);
+                    ScreenshotTabObserver tabObserver = ScreenshotTabObserver.from(currentTab);
+                    if (tabObserver != null) tabObserver.onScreenshotTaken();
+                });
     }
 
     // Private methods.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/WarmupManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/WarmupManagerTest.java
index 49a04e4..0bc915a0 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/WarmupManagerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/WarmupManagerTest.java
@@ -16,6 +16,7 @@
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
+import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -48,6 +49,7 @@
 import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
 import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
 import org.chromium.chrome.test.R;
+import org.chromium.chrome.test.batch.BlankCTATabInitialStateRule;
 import org.chromium.chrome.test.util.ChromeTabUtils;
 import org.chromium.chrome.test.util.browser.Features.DisableFeatures;
 import org.chromium.chrome.test.util.browser.Features.EnableFeatures;
@@ -76,8 +78,13 @@
 @UseRunnerDelegate(ChromeJUnit4RunnerDelegate.class)
 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
 public class WarmupManagerTest {
+    @ClassRule
+    public static ChromeTabbedActivityTestRule sActivityTestRule =
+            new ChromeTabbedActivityTestRule();
+
     @Rule
-    public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule();
+    public BlankCTATabInitialStateRule mBlankCTATabInitialStateRule =
+            new BlankCTATabInitialStateRule(sActivityTestRule, false);
 
     public enum ProfileType {
         REGULAR_PROFILE,
@@ -117,13 +124,11 @@
 
     @Before
     public void setUp() throws Exception {
-        mActivityTestRule.startMainActivityFromLauncher();
-
-        mTabModel = mActivityTestRule.getActivity().getTabModelSelector().getModel(false);
+        mTabModel = sActivityTestRule.getActivity().getTabModelSelector().getModel(false);
 
         mTabGroupModelFilter =
                 (TabGroupModelFilter)
-                        mActivityTestRule
+                        sActivityTestRule
                                 .getActivity()
                                 .getTabModelSelector()
                                 .getTabModelFilterProvider()
@@ -148,9 +153,12 @@
 
     @After
     public void tearDown() {
-        TestThreadUtils.runOnUiThreadBlocking(() -> mWarmupManager.destroySpareWebContents());
-        TestThreadUtils.runOnUiThreadBlocking(() -> mWarmupManager.destroySpareTab());
-        WarmupManager.deInitForTesting();
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> {
+                    mWarmupManager.destroySpareWebContents();
+                    mWarmupManager.destroySpareTab();
+                    WarmupManager.deInitForTesting();
+                });
         mWebServer.shutdown();
     }
 
@@ -173,7 +181,7 @@
                 Tab tab =
                         ChromeTabUtils.fullyLoadUrlInNewTab(
                                 InstrumentationRegistry.getInstrumentation(),
-                                mActivityTestRule.getActivity(),
+                                sActivityTestRule.getActivity(),
                                 "about:blank",
                                 /* incognito= */ false);
                 tabs.add(tab);
@@ -199,12 +207,13 @@
                                             ? TabLaunchType.FROM_TAB_GROUP_UI
                                             : TabLaunchType.FROM_CHROME_UI;
                             TabCreator tabCreator =
-                                    mActivityTestRule
+                                    sActivityTestRule
                                             .getActivity()
                                             .getTabCreator(/* incognito= */ false);
                             return tabCreator.createNewTab(
                                     new LoadUrlParams(url), type, parent, index);
                         });
+        ChromeTabUtils.waitForTabPageLoaded(tab, url);
         return tab;
     }
 
@@ -382,29 +391,24 @@
         // Set the param to true allowing renderer initialization.
         WarmupManager.SPARE_TAB_INITIALIZE_RENDERER.setForTesting(true);
 
-        final AtomicBoolean isRenderFrameLive = new AtomicBoolean();
-
-        PostTask.runOrPostTask(
-                TaskTraits.UI_DEFAULT,
+        TestThreadUtils.runOnUiThreadBlocking(
                 () -> {
-                    mWarmupManager.createSpareTab(
-                            mActivityTestRule.getActivity().getCurrentTabCreator(),
-                            TabLaunchType.FROM_START_SURFACE);
-                    Assert.assertTrue(mWarmupManager.hasSpareTab());
-                    Tab tab = mWarmupManager.takeSpareTab(false, TabLaunchType.FROM_START_SURFACE);
+                    Profile profile = getProfile(ProfileType.REGULAR_PROFILE);
+                    mWarmupManager.createRegularSpareTab(profile);
+                    Assert.assertTrue(mWarmupManager.hasSpareTab(profile));
+                    Tab tab =
+                            mWarmupManager.takeSpareTab(profile, TabLaunchType.FROM_START_SURFACE);
                     WebContents webContents = tab.getWebContents();
                     Assert.assertNotNull(tab);
                     Assert.assertNotNull(webContents);
-                    Assert.assertFalse(mWarmupManager.hasSpareTab());
+                    Assert.assertFalse(mWarmupManager.hasSpareTab(profile));
+                    Assert.assertEquals(TabLaunchType.FROM_START_SURFACE, tab.getLaunchType());
 
                     // RenderFrame should become live synchronously during WebContents creation when
                     // SPARE_TAB_INITIALIZE_RENDERER is set.
-                    if (webContents.getMainFrame().isRenderFrameLive()) {
-                        isRenderFrameLive.set(true);
-                    }
+                    Assert.assertTrue(webContents.getMainFrame().isRenderFrameLive());
+                    tab.destroy();
                 });
-        CriteriaHelper.pollUiThread(
-                () -> isRenderFrameLive.get(), "Spare renderer is not initialized");
     }
 
     // Test to check the functionality of spare tab creation without initializing renderer.
@@ -417,27 +421,24 @@
     public void testCreateAndTakeSpareTabWithoutInitializeRenderer() {
         WarmupManager.SPARE_TAB_INITIALIZE_RENDERER.setForTesting(false);
 
-        final AtomicBoolean isRenderFrameLive = new AtomicBoolean();
-
-        PostTask.runOrPostTask(
-                TaskTraits.UI_DEFAULT,
+        TestThreadUtils.runOnUiThreadBlocking(
                 () -> {
-                    mWarmupManager.createSpareTab(
-                            mActivityTestRule.getActivity().getCurrentTabCreator(),
-                            TabLaunchType.FROM_START_SURFACE);
-                    Assert.assertTrue(mWarmupManager.hasSpareTab());
-                    Tab tab = mWarmupManager.takeSpareTab(false, TabLaunchType.FROM_START_SURFACE);
+                    Profile profile = getProfile(ProfileType.REGULAR_PROFILE);
+                    mWarmupManager.createRegularSpareTab(profile);
+                    Assert.assertTrue(mWarmupManager.hasSpareTab(profile));
+                    Tab tab =
+                            mWarmupManager.takeSpareTab(profile, TabLaunchType.FROM_START_SURFACE);
                     WebContents webContents = tab.getWebContents();
                     Assert.assertNotNull(tab);
                     Assert.assertNotNull(webContents);
-                    Assert.assertFalse(mWarmupManager.hasSpareTab());
+                    Assert.assertFalse(mWarmupManager.hasSpareTab(profile));
+                    Assert.assertEquals(TabLaunchType.FROM_START_SURFACE, tab.getLaunchType());
 
                     // RenderFrame shouldn't be created when the SPARE_TAB_INITIALIZE_RENDERER is
                     // false.
                     Assert.assertFalse(webContents.getMainFrame().isRenderFrameLive());
+                    tab.destroy();
                 });
-        CriteriaHelper.pollUiThread(
-                () -> !isRenderFrameLive.get(), "Spare renderer is initialized");
     }
 
     /** Tests that taking a spare Tab makes it unavailable to subsequent callers. */
@@ -450,13 +451,14 @@
         var histogramWatcher =
                 HistogramWatcher.newSingleRecordWatcher(
                         HISTOGRAM_SPARE_TAB_FINAL_STATUS, SpareTabFinalStatus.TAB_USED);
-        mWarmupManager.createSpareTab(
-                mActivityTestRule.getActivity().getCurrentTabCreator(),
-                TabLaunchType.FROM_START_SURFACE);
-        Tab tab = mWarmupManager.takeSpareTab(false, TabLaunchType.FROM_START_SURFACE);
+        Profile profile = getProfile(ProfileType.REGULAR_PROFILE);
+        mWarmupManager.createRegularSpareTab(profile);
+        Tab tab = mWarmupManager.takeSpareTab(profile, TabLaunchType.FROM_START_SURFACE);
         Assert.assertNotNull(tab);
-        Assert.assertFalse(mWarmupManager.hasSpareTab());
+        Assert.assertFalse(mWarmupManager.hasSpareTab(profile));
+        Assert.assertEquals(TabLaunchType.FROM_START_SURFACE, tab.getLaunchType());
         histogramWatcher.assertExpected();
+        tab.destroy();
     }
 
     /**
@@ -473,14 +475,14 @@
                 HistogramWatcher.newSingleRecordWatcher(
                         HISTOGRAM_SPARE_TAB_FINAL_STATUS, SpareTabFinalStatus.TAB_DESTROYED);
 
-        mWarmupManager.createSpareTab(
-                mActivityTestRule.getActivity().getCurrentTabCreator(),
-                TabLaunchType.FROM_START_SURFACE);
-        Assert.assertTrue(mWarmupManager.hasSpareTab());
+        Profile profile = getProfile(ProfileType.REGULAR_PROFILE);
+        mWarmupManager.createRegularSpareTab(profile);
+        Assert.assertTrue(mWarmupManager.hasSpareTab(profile));
+        Assert.assertFalse(mWarmupManager.hasSpareTab(getProfile(ProfileType.PRIMARY_OTR_PROFILE)));
 
         // Destroy the created spare tab.
         mWarmupManager.destroySpareTab();
-        Assert.assertFalse(mWarmupManager.hasSpareTab());
+        Assert.assertFalse(mWarmupManager.hasSpareTab(profile));
 
         histogramWatcher.assertExpected();
     }
@@ -499,16 +501,16 @@
                 HistogramWatcher.newSingleRecordWatcher(
                         HISTOGRAM_SPARE_TAB_FINAL_STATUS, SpareTabFinalStatus.TAB_USED);
 
-        mWarmupManager.createSpareTab(
-                mActivityTestRule.getActivity().getCurrentTabCreator(),
-                TabLaunchType.FROM_START_SURFACE);
+        Profile profile = getProfile(ProfileType.REGULAR_PROFILE);
+        mWarmupManager.createRegularSpareTab(profile);
 
         // Kill the renderer process, this shouldn't kill the associated spare tab and record
         // TAB_CREATED status.
         WebContentsUtils.simulateRendererKilled(mWarmupManager.mSpareTab.getWebContents());
-        Assert.assertNotNull(mWarmupManager.takeSpareTab(false, TabLaunchType.FROM_START_SURFACE));
-
+        Tab tab = mWarmupManager.takeSpareTab(profile, TabLaunchType.FROM_START_SURFACE);
+        Assert.assertNotNull(tab);
         histogramWatcher.assertExpected();
+        tab.destroy();
     }
 
     /** Tests that when SpareTab is disabled we don't create any spare tab. */
@@ -518,12 +520,10 @@
     @DisableFeatures(ChromeFeatureList.SPARE_TAB)
     @UiThreadTest
     public void testTakeSpareTabWhenFeatureDisabled() {
-        Assert.assertNotNull(mActivityTestRule.getActivity().getCurrentTabCreator());
-        mWarmupManager.createSpareTab(
-                mActivityTestRule.getActivity().getCurrentTabCreator(),
-                TabLaunchType.FROM_START_SURFACE);
-        Tab tab = mWarmupManager.takeSpareTab(false, TabLaunchType.FROM_START_SURFACE);
-        Assert.assertNull(tab);
+        Assert.assertNotNull(sActivityTestRule.getActivity().getCurrentTabCreator());
+        mWarmupManager.createRegularSpareTab(getProfile(ProfileType.REGULAR_PROFILE));
+        Assert.assertFalse(mWarmupManager.hasSpareTab(getProfile(ProfileType.REGULAR_PROFILE)));
+        Assert.assertFalse(mWarmupManager.hasSpareTab(getProfile(ProfileType.PRIMARY_OTR_PROFILE)));
     }
 
     /** Tests that we are able to load url in the spare tab once it is created. */
@@ -535,21 +535,19 @@
         var histogramWatcher =
                 HistogramWatcher.newSingleRecordWatcher(
                         HISTOGRAM_SPARE_TAB_FINAL_STATUS, SpareTabFinalStatus.TAB_USED);
-        Assert.assertNotNull(mActivityTestRule.getActivity().getCurrentTabCreator());
-
-        // Create spare tab so that it can be used for navigation from TAB_GROUP_UI.
-        PostTask.runOrPostTask(
-                TaskTraits.UI_DEFAULT,
-                () -> {
-                    mWarmupManager.createSpareTab(
-                            mActivityTestRule.getActivity().getCurrentTabCreator(),
-                            TabLaunchType.FROM_TAB_GROUP_UI);
-                    Assert.assertTrue(mWarmupManager.hasSpareTab());
-                });
+        Assert.assertNotNull(sActivityTestRule.getActivity().getCurrentTabCreator());
 
         prepareTabs(Arrays.asList(new Integer[] {3, 1}));
         List<Tab> tabs = getCurrentTabs();
 
+        Profile profile = getProfile(ProfileType.REGULAR_PROFILE);
+        // Create spare tab so that it can be used for navigation from TAB_GROUP_UI.
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> {
+                    mWarmupManager.createRegularSpareTab(profile);
+                    Assert.assertTrue(mWarmupManager.hasSpareTab(profile));
+                });
+
         // Tab 0
         // Tab (tab added here), 1, 2, 3
         // Tab 4 - this uses spare tab.
@@ -557,11 +555,11 @@
         tabs.add(1, tab);
         assertEquals(tabs, getCurrentTabs());
         assertOrderValid(true);
+        Assert.assertEquals(TabLaunchType.FROM_TAB_GROUP_UI, tab.getLaunchType());
 
-        PostTask.runOrPostTask(
-                TaskTraits.UI_DEFAULT,
+        TestThreadUtils.runOnUiThreadBlocking(
                 () -> {
-                    Assert.assertFalse(mWarmupManager.hasSpareTab());
+                    Assert.assertFalse(mWarmupManager.hasSpareTab(profile));
                 });
         histogramWatcher.assertExpected();
     }
@@ -572,21 +570,19 @@
     @Feature({"SpareTab"})
     @EnableFeatures(ChromeFeatureList.SPARE_TAB)
     public void testMetricsRecordedWithSpareTab() {
-        Assert.assertNotNull(mActivityTestRule.getActivity().getCurrentTabCreator());
-
-        // Create spare tab so that it can be used for navigation from TAB_GROUP_UI.
-        PostTask.runOrPostTask(
-                TaskTraits.UI_DEFAULT,
-                () -> {
-                    mWarmupManager.createSpareTab(
-                            mActivityTestRule.getActivity().getCurrentTabCreator(),
-                            TabLaunchType.FROM_TAB_GROUP_UI);
-                    Assert.assertTrue(mWarmupManager.hasSpareTab());
-                });
+        Assert.assertNotNull(sActivityTestRule.getActivity().getCurrentTabCreator());
 
         prepareTabs(Arrays.asList(new Integer[] {1, 1}));
         List<Tab> tabs = getCurrentTabs();
 
+        Profile profile = getProfile(ProfileType.REGULAR_PROFILE);
+        // Create spare tab so that it can be used for navigation from TAB_GROUP_UI.
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> {
+                    mWarmupManager.createRegularSpareTab(profile);
+                    Assert.assertTrue(mWarmupManager.hasSpareTab(profile));
+                });
+
         // Check that the First Paint (FP) and First Contentful Paint (FCP) metrics are recorded
         // correctly when using the SpareTab feature.
         var pageLoadHistogramWatcher =
@@ -599,12 +595,12 @@
         // Navigate and this should record PageLoadMetrics.
         Tab tab = addTabAt(/* index= */ 0, /* parent= */ tabs.get(1));
         tabs.add(1, tab);
+        Assert.assertEquals(TabLaunchType.FROM_TAB_GROUP_UI, tab.getLaunchType());
 
         // PageLoadMetrics should be recorded when SpareTab is used for navigation.
-        PostTask.runOrPostTask(
-                TaskTraits.UI_DEFAULT,
+        TestThreadUtils.runOnUiThreadBlocking(
                 () -> {
-                    Assert.assertFalse(mWarmupManager.hasSpareTab());
+                    Assert.assertFalse(mWarmupManager.hasSpareTab(profile));
                 });
         pageLoadHistogramWatcher.pollInstrumentationThreadUntilSatisfied();
     }
@@ -622,18 +618,19 @@
         ChromeFeatureList.CREATE_NEW_TAB_INITIALIZE_RENDERER
     })
     public void testOnTabCreationWithInitializeRenderer() {
-        mWarmupManager.createSpareTab(
-                mActivityTestRule.getActivity().getCurrentTabCreator(),
-                TabLaunchType.FROM_TAB_GROUP_UI);
-        Assert.assertTrue(mWarmupManager.hasSpareTab());
+        Profile profile = getProfile(ProfileType.REGULAR_PROFILE);
+        mWarmupManager.createRegularSpareTab(profile);
+        Assert.assertTrue(mWarmupManager.hasSpareTab(profile));
 
-        Tab tab = mWarmupManager.takeSpareTab(false, TabLaunchType.FROM_TAB_GROUP_UI);
+        Tab tab = mWarmupManager.takeSpareTab(profile, TabLaunchType.FROM_TAB_GROUP_UI);
         WebContents webContents = tab.getWebContents();
         Assert.assertNotNull(tab);
         Assert.assertNotNull(webContents);
+        Assert.assertEquals(TabLaunchType.FROM_TAB_GROUP_UI, tab.getLaunchType());
 
         // RenderFrame should be created when the CREATE_NEW_TAB_INITIALIZE_RENDERER is enabled.
         Assert.assertTrue(webContents.getMainFrame().isRenderFrameLive());
+        tab.destroy();
     }
 
     @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillPaymentMethodsFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillPaymentMethodsFragmentTest.java
index 3e88b67a..6c13ca8 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillPaymentMethodsFragmentTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillPaymentMethodsFragmentTest.java
@@ -5,13 +5,16 @@
 package org.chromium.chrome.browser.autofill.settings;
 
 import static androidx.test.espresso.Espresso.onView;
+import static androidx.test.espresso.action.ViewActions.click;
 import static androidx.test.espresso.assertion.ViewAssertions.matches;
+import static androidx.test.espresso.matcher.RootMatchers.isDialog;
 import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
 import static androidx.test.espresso.matcher.ViewMatchers.withText;
 
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.notNull;
+import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
@@ -39,6 +42,7 @@
 import org.chromium.base.Callback;
 import org.chromium.base.test.util.Batch;
 import org.chromium.base.test.util.HistogramWatcher;
+import org.chromium.base.test.util.JniMocker;
 import org.chromium.base.test.util.Restriction;
 import org.chromium.chrome.browser.autofill.AutofillTestHelper;
 import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard;
@@ -82,10 +86,17 @@
             mSettingsActivityTestRule =
                     new SettingsActivityTestRule<>(AutofillPaymentMethodsFragment.class);
 
-    @Mock private ReauthenticatorBridge mReauthenticatorMock;
+    @Rule
+    public JniMocker mMocker = new JniMocker();
+
+    @Mock
+    private ReauthenticatorBridge mReauthenticatorMock;
+    @Mock
+    private AutofillPaymentMethodsDelegate.Natives mNativeMock;
 
     // Card Issuer values that map to the browser CreditCard.Issuer enum.
     private static final int CARD_ISSUER_UNKNOWN = 0;
+    private static final long NATIVE_AUTOFILL_PAYMENTS_METHODS_DELEGATE = 100L;
     private static final List<String> CARD_ISSUER_NETWORKS = Arrays.asList("visa", "mastercard");
 
     private static final CreditCard SAMPLE_CARD_VISA =
@@ -1025,6 +1036,32 @@
     // the AutofillCreditCardEnabled policy is set to false. Currently, Android-x86-rel targets
     // are unable to store credit card information when the policy is set to false.
 
+    @Test
+    @MediumTest
+    @EnableFeatures({ChromeFeatureList.AUTOFILL_ENABLE_CVC_STORAGE})
+    public void testDeleteSavedCvcsConfirmationDialogDeleteButton_whenClicked_deleteCvcs()
+            throws Exception {
+        mAutofillTestHelper.addServerCreditCard(SAMPLE_CARD_WITH_CVC);
+        mMocker.mock(AutofillPaymentMethodsDelegateJni.TEST_HOOKS, mNativeMock);
+        when(mNativeMock.init(any(Profile.class)))
+                .thenReturn(NATIVE_AUTOFILL_PAYMENTS_METHODS_DELEGATE);
+
+        SettingsActivity activity = mSettingsActivityTestRule.startSettingsActivity();
+        Preference deleteSavedCvcsPreference =
+                getPreferenceScreen(activity)
+                        .findPreference(AutofillPaymentMethodsFragment.PREF_DELETE_SAVED_CVCS);
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> {
+                    deleteSavedCvcsPreference.performClick();
+                });
+        onView(withText(
+                R.string.autofill_delete_saved_cvcs_confirmation_dialog_delete_button_label))
+                    .inRoot(isDialog())
+                    .perform(click());
+
+        verify(mNativeMock).deleteSavedCvcs(NATIVE_AUTOFILL_PAYMENTS_METHODS_DELEGATE);
+    }
+
     private void setUpBiometricAuthenticationResult(boolean success) {
         // We have to manually invoke the passed-in callback.
         doAnswer(
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/automotive/AutomotiveUtilsUnitTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/automotive/AutomotiveUtilsUnitTest.java
new file mode 100644
index 0000000..e416245
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/automotive/AutomotiveUtilsUnitTest.java
@@ -0,0 +1,56 @@
+package org.chromium.chrome.browser.automotive;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import androidx.test.ext.junit.rules.ActivityScenarioRule;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.base.test.BaseRobolectricTestRunner;
+import org.chromium.chrome.test.AutomotiveContextWrapperTestRule;
+import org.chromium.ui.base.TestActivity;
+
+/** Tests logic in the {@link AutomotiveUtils} class. */
+@RunWith(BaseRobolectricTestRunner.class)
+public class AutomotiveUtilsUnitTest {
+
+    @Rule
+    public AutomotiveContextWrapperTestRule mAutomotiveContextWrapperTestRule =
+            new AutomotiveContextWrapperTestRule();
+
+    @Rule
+    public ActivityScenarioRule<TestActivity> mActivityScenarioRule =
+            new ActivityScenarioRule<>(TestActivity.class);
+
+    @Test
+    public void testGetAutomotiveToolbarHeightDp() {
+        mAutomotiveContextWrapperTestRule.setIsAutomotive(true);
+        mActivityScenarioRule
+                .getScenario()
+                .onActivity(
+                        activity -> {
+                            int automotiveToolbarHeightDp =
+                                    AutomotiveUtils.getAutomotiveToolbarHeightDp(activity);
+                            assertTrue(
+                                    "Automotive toolbar should exist on automotive devices.",
+                                    automotiveToolbarHeightDp > 0);
+                        });
+
+        mAutomotiveContextWrapperTestRule.setIsAutomotive(false);
+        mActivityScenarioRule
+                .getScenario()
+                .onActivity(
+                        activity -> {
+                            int automotiveToolbarHeightDp =
+                                    AutomotiveUtils.getAutomotiveToolbarHeightDp(activity);
+                            assertEquals(
+                                    "Automotive toolbar height should not exist on non automotive"
+                                            + " devices.",
+                                    0,
+                                    automotiveToolbarHeightDp);
+                        });
+    }
+}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/automotive/backbuttontoolbar/BackButtonToolbarTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/automotive/BackButtonToolbarTest.java
similarity index 99%
rename from chrome/android/javatests/src/org/chromium/chrome/browser/automotive/backbuttontoolbar/BackButtonToolbarTest.java
rename to chrome/android/javatests/src/org/chromium/chrome/browser/automotive/BackButtonToolbarTest.java
index 3ca055c..d908a9a 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/automotive/backbuttontoolbar/BackButtonToolbarTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/automotive/BackButtonToolbarTest.java
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-package org.chromium.chrome.browser.automotive.backbuttontoolbar;
+package org.chromium.chrome.browser.automotive;
 
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/ContextMenuLoadUrlParamsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/ContextMenuLoadUrlParamsTest.java
index 5a448fa..b669139 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/ContextMenuLoadUrlParamsTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/ContextMenuLoadUrlParamsTest.java
@@ -4,7 +4,7 @@
 
 package org.chromium.chrome.browser.tabmodel;
 
-import android.app.Activity;
+import android.content.Context;
 
 import androidx.test.filters.MediumTest;
 import androidx.test.platform.app.InstrumentationRegistry;
@@ -78,11 +78,9 @@
         }
 
         public RecordingTabModelSelector(
-                Activity activity,
                 OneshotSupplier<ProfileProvider> profileProviderSupplier,
                 TabCreatorManager tabCreatorManager,
-                TabModelFilterFactory tabModelFilterFactory,
-                int selectorIndex) {
+                TabModelFilterFactory tabModelFilterFactory) {
             super(
                     profileProviderSupplier,
                     tabCreatorManager,
@@ -104,17 +102,14 @@
                 new TabModelSelectorFactory() {
                     @Override
                     public TabModelSelector buildSelector(
-                            Activity activity,
+                            Context context,
                             OneshotSupplier<ProfileProvider> profileProviderSupplier,
                             TabCreatorManager tabCreatorManager,
-                            NextTabPolicySupplier nextTabPolicySupplier,
-                            int selectorIndex) {
+                            NextTabPolicySupplier nextTabPolicySupplier) {
                         return new RecordingTabModelSelector(
-                                activity,
                                 profileProviderSupplier,
                                 tabCreatorManager,
-                                new ChromeTabModelFilterFactory(activity),
-                                selectorIndex);
+                                new ChromeTabModelFilterFactory(context));
                     }
                 });
     }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabPersistentStoreTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabPersistentStoreTest.java
index c915e59..4e1563ab 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabPersistentStoreTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabPersistentStoreTest.java
@@ -4,7 +4,7 @@
 
 package org.chromium.chrome.browser.tabmodel;
 
-import android.app.Activity;
+import android.content.Context;
 import android.os.Looper;
 import android.util.Pair;
 
@@ -137,8 +137,8 @@
         // Required to ensure TabContentManager is not null.
         private final TabContentManager mMockTabContentManager;
 
-        public TestTabModelSelector(Activity activity) throws Exception {
-            super(new MockTabCreatorManager(), new ChromeTabModelFilterFactory(activity), false);
+        public TestTabModelSelector(Context context) throws Exception {
+            super(new MockTabCreatorManager(), new ChromeTabModelFilterFactory(context), false);
             ((MockTabCreatorManager) getTabCreatorManager()).initialize(this);
             mTabPersistentStoreObserver = new MockTabPersistentStoreObserver();
             // Use of a mockito object here is ok as this object is not important to the test. A
@@ -263,13 +263,12 @@
             new TabModelSelectorFactory() {
                 @Override
                 public TabModelSelector buildSelector(
-                        Activity activity,
+                        Context context,
                         OneshotSupplier<ProfileProvider> profileProviderSupplier,
                         TabCreatorManager tabCreatorManager,
-                        NextTabPolicySupplier nextTabPolicySupplier,
-                        int selectorIndex) {
+                        NextTabPolicySupplier nextTabPolicySupplier) {
                     try {
-                        return new TestTabModelSelector(activity);
+                        return new TestTabModelSelector(context);
                     } catch (Exception e) {
                         throw new RuntimeException(e);
                     }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabbedModeTabPersistencePolicyTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabbedModeTabPersistencePolicyTest.java
index 762a041b..5b8e6a01 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabbedModeTabPersistencePolicyTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabbedModeTabPersistencePolicyTest.java
@@ -7,6 +7,7 @@
 import static androidx.test.espresso.matcher.ViewMatchers.assertThat;
 
 import android.app.Activity;
+import android.content.Context;
 
 import androidx.test.filters.MediumTest;
 import androidx.test.platform.app.InstrumentationRegistry;
@@ -78,11 +79,10 @@
                 new TabModelSelectorFactory() {
                     @Override
                     public TabModelSelector buildSelector(
-                            Activity activity,
+                            Context context,
                             OneshotSupplier<ProfileProvider> profileProviderSupplier,
                             TabCreatorManager tabCreatorManager,
-                            NextTabPolicySupplier nextTabPolicySupplier,
-                            int selectorIndex) {
+                            NextTabPolicySupplier nextTabPolicySupplier) {
                         return new MockTabModelSelector(mProfile, mIncognitoProfile, 0, 0, null);
                     }
                 });
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/WebXrVrCardboardQrCodeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/WebXrVrCardboardQrCodeTest.java
new file mode 100644
index 0000000..113cc10
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/WebXrVrCardboardQrCodeTest.java
@@ -0,0 +1,110 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.vr;
+
+import static org.chromium.chrome.browser.vr.XrTestFramework.PAGE_LOAD_TIMEOUT_S;
+import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_NON_DAYDREAM;
+
+import androidx.test.filters.MediumTest;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.RuleChain;
+import org.junit.runner.RunWith;
+
+import org.chromium.base.test.params.ParameterAnnotations.ClassParameter;
+import org.chromium.base.test.params.ParameterAnnotations.UseRunnerDelegate;
+import org.chromium.base.test.params.ParameterSet;
+import org.chromium.base.test.params.ParameterizedRunner;
+import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.base.test.util.Restriction;
+import org.chromium.chrome.browser.flags.ChromeSwitches;
+import org.chromium.chrome.browser.vr.rules.XrActivityRestriction;
+import org.chromium.chrome.browser.vr.util.VrCardboardTestRuleUtils;
+import org.chromium.chrome.test.ChromeActivityTestRule;
+import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
+import org.chromium.components.webxr.CardboardUtils;
+
+import java.util.List;
+import java.util.concurrent.Callable;
+
+/** End-to-end tests for QR code scanning. */
+@RunWith(ParameterizedRunner.class)
+@UseRunnerDelegate(ChromeJUnit4RunnerDelegate.class)
+@CommandLineFlags.Add({
+    ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
+    "enable-features=LogJsConsoleMessages",
+    "force-webxr-runtime=cardboard"
+})
+public class WebXrVrCardboardQrCodeTest {
+    @ClassParameter
+    private static List<ParameterSet> sClassParams =
+            VrCardboardTestRuleUtils.generateDefaultTestRuleParameters();
+
+    @Rule public RuleChain mRuleChain;
+
+    private ChromeActivityTestRule mTestRule;
+    private WebXrVrTestFramework mWebXrVrTestFramework;
+
+    public WebXrVrCardboardQrCodeTest(Callable<ChromeActivityTestRule> callable) throws Exception {
+        mTestRule = callable.call();
+        mRuleChain = VrCardboardTestRuleUtils.wrapRuleInActivityRestrictionRule(mTestRule);
+    }
+
+    @Before
+    public void setUp() {
+        mWebXrVrTestFramework = new WebXrVrTestFramework(mTestRule);
+        CardboardUtils.useCardboardMockForTesting();
+    }
+
+    /**
+     * Tests that the QR code scanner is not attempted to be launched when the VR session is entered
+     * and there are device parameters saved on the device.
+     */
+    @Test
+    @MediumTest
+    @Restriction({RESTRICTION_TYPE_VIEWER_NON_DAYDREAM})
+    @CommandLineFlags.Add({"enable-features=WebXR,Cardboard"})
+    @XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL})
+    public void testQrCodeScannerIsNotLaunchedWhenEnteringVrSession() throws Exception {
+        mWebXrVrTestFramework.setPermissionPromptAction(
+                WebXrVrTestFramework.PERMISSION_PROMPT_ACTION_ALLOW);
+        mWebXrVrTestFramework.loadFileAndAwaitInitialization(
+                "generic_webxr_page", PAGE_LOAD_TIMEOUT_S);
+
+        // Ensure that there are saved device parameters.
+        CardboardUtils.useCardboardV1DeviceParamsForTesting();
+
+        // Launch VR session.
+        mWebXrVrTestFramework.enterSessionWithUserGestureOrFail();
+
+        // Assert that MockCardboardSdk::ScanQrCodeAndSaveDeviceParams() has
+        // not been executed since there were saved device parameters.
+        Assert.assertFalse(CardboardUtils.checkQrCodeScannerWasLaunchedForTesting());
+    }
+
+    /**
+     * Tests that the QR code scanner is attempted to be launched when the VR session is entered and
+     * there are no device parameters saved on the device.
+     */
+    @Test
+    @MediumTest
+    @Restriction({RESTRICTION_TYPE_VIEWER_NON_DAYDREAM})
+    @CommandLineFlags.Add({"enable-features=WebXR,Cardboard"})
+    @XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL})
+    public void testQrCodeScannerIsLaunchedWhenEnteringVrSession() throws Exception {
+        mWebXrVrTestFramework.setPermissionPromptAction(
+                WebXrVrTestFramework.PERMISSION_PROMPT_ACTION_ALLOW);
+        mWebXrVrTestFramework.loadFileAndAwaitInitialization(
+                "generic_webxr_page", PAGE_LOAD_TIMEOUT_S);
+        // Launch VR session.
+        mWebXrVrTestFramework.enterSessionWithUserGestureOrFail();
+        // Assert that MockCardboardSdk::ScanQrCodeAndSaveDeviceParams() has
+        // been executed since there were no saved device parameters.
+        Assert.assertTrue(CardboardUtils.checkQrCodeScannerWasLaunchedForTesting());
+    }
+}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/PwaRestoreBottomSheetIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/PwaRestoreBottomSheetIntegrationTest.java
index 4b9c300..53fd1352 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/PwaRestoreBottomSheetIntegrationTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/PwaRestoreBottomSheetIntegrationTest.java
@@ -5,16 +5,22 @@
 package org.chromium.chrome.browser.webapps;
 
 import static androidx.test.espresso.Espresso.onView;
+import static androidx.test.espresso.action.ViewActions.click;
 import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist;
 import static androidx.test.espresso.assertion.ViewAssertions.matches;
 import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.withId;
 import static androidx.test.espresso.matcher.ViewMatchers.withText;
 
+import android.view.ViewGroup;
+import android.widget.CheckBox;
+
 import androidx.test.filters.SmallTest;
 
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
+import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -32,6 +38,8 @@
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
 import org.chromium.chrome.test.util.browser.Features.EnableFeatures;
+import org.chromium.components.webapps.R;
+import org.chromium.ui.test.util.DisableAnimationsTestRule;
 
 /** Test the showing of the PWA Restore Bottom Sheet dialog. */
 @RunWith(ChromeJUnit4ClassRunner.class)
@@ -43,6 +51,10 @@
     public final ChromeTabbedActivityTestRule mActivityTestRule =
             new ChromeTabbedActivityTestRule();
 
+    @ClassRule
+    public static DisableAnimationsTestRule sDisableAnimationsRule =
+            new DisableAnimationsTestRule();
+
     private static @DisplayStage int sFlagValueMissing = DisplayStage.UNKNOWN_STATUS;
 
     private SharedPreferencesManager mPreferences;
@@ -148,6 +160,51 @@
         assertCurrentFlag(DisplayStage.PRE_EXISTING_PROFILE);
     }
 
+    @Test
+    @SmallTest
+    @Feature({"PwaRestrore"})
+    public void testClickForwarding() {
+        // Ensure the promo dialog shows.
+        mPreferences.writeInt(
+                ChromePreferenceKeys.PWA_RESTORE_PROMO_STAGE, DisplayStage.SHOW_PROMO);
+
+        mActivityTestRule.startMainActivityFromLauncher();
+        assertDialogShown(true);
+        onView(withId(R.id.review_button)).perform(click());
+
+        assertIsComboCheckedAtIndex(1, false);
+        onView(withText("Foo")).check(matches(isDisplayed()));
+        onView(withText("Foo")).perform(click());
+        assertIsComboCheckedAtIndex(1, true);
+    }
+
+    // A helper function to check whether a particular combo box in the PWA list ScrollView is
+    // checked.
+    private void assertIsComboCheckedAtIndex(int index, boolean checked) {
+        onView(withId(R.id.scroll_view_content))
+                .check(
+                        (view, e) -> {
+                            ViewGroup appList = (ViewGroup) view;
+                            Assert.assertTrue(appList != null);
+
+                            // The app list contains mostly appviews, but also generic views that
+                            // are separators, for example. For our purposes, we want to skip the
+                            // views that are not checkboxes.
+                            int checkboxCount = 0;
+                            for (int i = 0; i < appList.getChildCount(); ++i) {
+                                CheckBox checkBox =
+                                        appList.getChildAt(i).findViewById(R.id.checkbox);
+                                if (checkBox != null) {
+                                    if (index == checkboxCount) {
+                                        Assert.assertEquals(checked, checkBox.isChecked());
+                                        return;
+                                    }
+                                    checkboxCount += 1;
+                                }
+                            }
+                        });
+    }
+
     private void assertCurrentFlag(@DisplayStage int value) {
         Assert.assertEquals(
                 value,
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/multiwindow/MultiInstanceManagerApi31UnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/multiwindow/MultiInstanceManagerApi31UnitTest.java
index 385b6f13..74741c5 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/multiwindow/MultiInstanceManagerApi31UnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/multiwindow/MultiInstanceManagerApi31UnitTest.java
@@ -361,11 +361,10 @@
                 new TabModelSelectorFactory() {
                     @Override
                     public TabModelSelector buildSelector(
-                            Activity activity,
+                            Context context,
                             OneshotSupplier<ProfileProvider> profileProviderSupplier,
                             TabCreatorManager tabCreatorManager,
-                            NextTabPolicySupplier nextTabPolicySupplier,
-                            int selectorIndex) {
+                            NextTabPolicySupplier nextTabPolicySupplier) {
                         return new MockTabModelSelector(mProfile, mIncognitoProfile, 0, 0, null);
                     }
                 });
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/tab/TabUtilsUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/tab/TabUtilsUnitTest.java
index cb702fb..fa72c54 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/tab/TabUtilsUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/tab/TabUtilsUnitTest.java
@@ -10,14 +10,22 @@
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.app.Activity;
+import android.content.res.Configuration;
+import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.util.DisplayMetrics;
 import android.util.Size;
 
+import androidx.test.ext.junit.rules.ActivityScenarioRule;
+
+import org.chromium.chrome.browser.automotive.AutomotiveUtils;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -34,6 +42,7 @@
 
 import org.chromium.base.test.BaseRobolectricTestRunner;
 import org.chromium.base.test.util.JniMocker;
+import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.tab.TabUtils.UseDesktopUserAgentCaller;
 import org.chromium.chrome.browser.tasks.tab_management.TabThumbnailView;
@@ -44,6 +53,7 @@
 import org.chromium.components.content_settings.ContentSettingsType;
 import org.chromium.content_public.browser.NavigationController;
 import org.chromium.content_public.browser.WebContents;
+import org.chromium.ui.base.TestActivity;
 import org.chromium.ui.display.DisplayUtil;
 import org.chromium.url.GURL;
 import org.chromium.url.JUnitTestGURLs;
@@ -80,12 +90,24 @@
     public AutomotiveContextWrapperTestRule mAutomotiveContextWrapperTestRule =
             new AutomotiveContextWrapperTestRule();
 
+    @Rule
+    public ActivityScenarioRule<TestActivity> mActivityScenarioRule =
+            new ActivityScenarioRule<>(TestActivity.class);
+
+    private static final int TEST_SCREEN_WIDTH = 1000;
+    private static final int TEST_SCREEN_HEIGHT = 1000;
+    private static final float TEST_DENSITY = 1.3f;
+
     @Mock WebsitePreferenceBridge.Natives mWebsitePreferenceBridgeJniMock;
     @Mock private Tab mTab;
     @Mock private Tab mTabNative;
     @Mock private WebContents mWebContents;
     @Mock private NavigationController mNavigationController;
     @Mock private Profile mProfile;
+    @Mock private BrowserControlsStateProvider mBrowserControlsStateProvider;
+    @Mock private Resources mResources;
+    @Mock private Configuration mConfiguration;
+    @Mock private DisplayMetrics mDisplayMetrics;
 
     private boolean mRdsDefault;
     private @ContentSettingValues int mRdsException;
@@ -338,6 +360,38 @@
     }
 
     @Test
+    public void testGetTabThumbnailAspectRatioOnAutomotive() {
+        mAutomotiveContextWrapperTestRule.setIsAutomotive(true);
+
+        mActivityScenarioRule
+                .getScenario()
+                .onActivity(
+                        activity -> {
+                            Activity spyActivity = spy(activity);
+                            doReturn(mResources).when(spyActivity).getResources();
+                            doReturn(mConfiguration).when(mResources).getConfiguration();
+                            doReturn(mDisplayMetrics).when(mResources).getDisplayMetrics();
+                            doReturn(0).when(mBrowserControlsStateProvider).getTopControlsHeight();
+                            mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE;
+                            mConfiguration.screenWidthDp = TEST_SCREEN_WIDTH;
+                            mConfiguration.screenHeightDp = TEST_SCREEN_HEIGHT;
+                            mDisplayMetrics.density = TEST_DENSITY;
+                            int automotiveToolbarHeightDp =
+                                    AutomotiveUtils.getAutomotiveToolbarHeightDp(spyActivity);
+                            float expectedAspectRatio =
+                                    (TEST_SCREEN_WIDTH * 1.f)
+                                            / (TEST_SCREEN_HEIGHT - automotiveToolbarHeightDp);
+                            assertEquals(
+                                    "Thumbnail aspect ratio on automotive should take into account"
+                                            + " the automotive toolbar.",
+                                    expectedAspectRatio,
+                                    TabUtils.getTabThumbnailAspectRatio(
+                                            spyActivity, mBrowserControlsStateProvider),
+                                    0.01);
+                        });
+    }
+
+    @Test
     public void testUpdateThumbnailMatrix_notOnAutomotiveDevice_thumbnailImageHasOriginalDensity() {
         mAutomotiveContextWrapperTestRule.setIsAutomotive(false);
         int mockImageSize = 100;
@@ -372,9 +426,7 @@
         assertNotEquals("The bitmap image density should not be zero.", 0, bitmap.getDensity());
         assertEquals(
                 "The bitmap image's density should be scaled up on automotive.",
-                (int)
-                        (DisplayMetrics.DENSITY_DEFAULT
-                                * DisplayUtil.getUiScalingFactorForAutomotive()),
+                DisplayUtil.getUiDensityForAutomotive(DisplayMetrics.DENSITY_DEFAULT),
                 bitmap.getDensity());
     }
 }
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index d729c9d..eda957f 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -15505,6 +15505,9 @@
         =1 {This file or your device doesn’t meet some of your organization’s security policies. Check with your admin on what needs to be fixed.}
       other {These files don't meet some of your organization’s security policies. Check with your admin on what needs to be fixed.}}
     </message>
+    <message name="IDS_DEEP_SCANNING_DIALOG_UPLOAD_FAIL_CLOSED_MESSAGE" desc="Message shown in tab modal dialog after performing a deep scan of uploaded data when it triggers fail-closed settings of enterprise security policies">
+       Scan failed. This action is blocked by your administrator.
+    </message>
     <message name="IDS_DEEP_SCANNING_DIALOG_UPLOAD_WARNING_MESSAGE" desc="Message shown in tab modal dialog after performing a deep scan of uploaded data when it doesn't comply with enterprise security policies to warn the user and allow them to proceed or not">
       {NUM_FILES, plural,
         =0 {This data or your device doesn’t meet some of your organization’s security policies. Check with your admin on what needs to be fixed.}
diff --git a/chrome/app/generated_resources_grd/IDS_DEEP_SCANNING_DIALOG_UPLOAD_FAIL_CLOSED_MESSAGE.png.sha1 b/chrome/app/generated_resources_grd/IDS_DEEP_SCANNING_DIALOG_UPLOAD_FAIL_CLOSED_MESSAGE.png.sha1
new file mode 100644
index 0000000..bffa0ac
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_DEEP_SCANNING_DIALOG_UPLOAD_FAIL_CLOSED_MESSAGE.png.sha1
@@ -0,0 +1 @@
+98867b8910944b834ce68be44a7f4404aca26611
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings.grdp b/chrome/app/os_settings_strings.grdp
index 37c654c..9ff69976 100644
--- a/chrome/app/os_settings_strings.grdp
+++ b/chrome/app/os_settings_strings.grdp
@@ -64,6 +64,9 @@
   <message name="IDS_OS_SETTINGS_ABOUT_PAGE_BUILD_DETAILS_COPY_TOOLTIP_LABEL" desc="Tooltip label that describes the build details copy button.">
     Copy build details to clipboard
   </message>
+  <message name="IDS_OS_SETTINGS_ABOUT_PAGE_BUILD_DETAILS_COPIED_TO_CLIPBOARD_A11Y_LABEL" desc="A11y label that describes the ChromeOS build details were copied to the clipboard.">
+    Copied build details
+  </message>
   <message name="IDS_OS_SETTINGS_ABOUT_PAGE_ENTERPRISE_ENNROLLED_TITLE" desc="The title label for whether a device is enterprise enrolled.">
     Enterprise Enrolled
   </message>
diff --git a/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_ABOUT_PAGE_BUILD_DETAILS_COPIED_TO_CLIPBOARD_A11Y_LABEL.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_ABOUT_PAGE_BUILD_DETAILS_COPIED_TO_CLIPBOARD_A11Y_LABEL.png.sha1
new file mode 100644
index 0000000..81d5bbd
--- /dev/null
+++ b/chrome/app/os_settings_strings_grdp/IDS_OS_SETTINGS_ABOUT_PAGE_BUILD_DETAILS_COPIED_TO_CLIPBOARD_A11Y_LABEL.png.sha1
@@ -0,0 +1 @@
+38f1858fe33b6712d44f16b950a7c83a691b9fe6
\ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 847f297..c3e23fff 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -4194,6 +4194,8 @@
       "performance_manager/policies/revisit_cdf_container.h",
       "performance_manager/policies/revisit_count_revisit_estimator.cc",
       "performance_manager/policies/revisit_count_revisit_estimator.h",
+      "performance_manager/policies/revisit_probability_distributions.cc",
+      "performance_manager/policies/revisit_probability_distributions.h",
       "performance_manager/policies/urgent_page_discarding_policy.cc",
       "performance_manager/policies/urgent_page_discarding_policy.h",
       "performance_manager/public/user_tuning/battery_saver_mode_manager.h",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index ad1b35f..ad4119cf 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -11325,6 +11325,12 @@
      FEATURE_VALUE_TYPE(
          autofill::features::kAutofillEnableVcnEnrollLoadingAndConfirmation)},
 
+#if BUILDFLAG(IS_ANDROID)
+    {"boarding-pass-detector", flag_descriptions::kBoardingPassDetectorName,
+     flag_descriptions::kBoardingPassDetectorDescription, kOsAndroid,
+     FEATURE_VALUE_TYPE(chrome::android::kBoardingPassDetector)},
+#endif  // BUILDFLAG(IS_ANDROID)
+
     // NOTE: Adding a new flag requires adding a corresponding entry to enum
     // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag
     // Histograms" in tools/metrics/histograms/README.md (run the
diff --git a/chrome/browser/accessibility/accessibility_extension_api_ash.cc b/chrome/browser/accessibility/accessibility_extension_api_ash.cc
index 62923df..7f5901d 100644
--- a/chrome/browser/accessibility/accessibility_extension_api_ash.cc
+++ b/chrome/browser/accessibility/accessibility_extension_api_ash.cc
@@ -140,6 +140,29 @@
 }
 
 ExtensionFunction::ResponseAction
+AccessibilityPrivateSetCursorPositionFunction::Run() {
+  absl::optional<accessibility_private::SetCursorPosition::Params> params =
+      accessibility_private::SetCursorPosition::Params::Create(args());
+  EXTENSION_FUNCTION_VALIDATE(params);
+  gfx::Point location_in_screen(params->point.x, params->point.y);
+  const display::Display display =
+      display::Screen::GetScreen()->GetDisplayNearestPoint(location_in_screen);
+  auto* host = ash::GetWindowTreeHostForDisplay(display.id());
+  if (!host) {
+    return RespondNow(Error("Unable to find a window tree host"));
+  }
+  aura::Window* root_window = host->window();
+  if (!root_window) {
+    return RespondNow(Error("Unable to get root window"));
+  }
+  gfx::Point location_in_window(location_in_screen);
+  ::wm::ConvertPointFromScreen(root_window, &location_in_window);
+  host->MoveCursorToLocationInDIP(location_in_window);
+
+  return RespondNow(NoArguments());
+}
+
+ExtensionFunction::ResponseAction
 AccessibilityPrivateForwardKeyEventsToSwitchAccessFunction::Run() {
   absl::optional<accessibility_private::ForwardKeyEventsToSwitchAccess::Params>
       params =
@@ -475,7 +498,7 @@
 
   // Locations are assumed to be in screen coordinates.
   gfx::Point location_in_screen(mouse_data->x, mouse_data->y);
-  const display::Display& display =
+  const display::Display display =
       display::Screen::GetScreen()->GetDisplayNearestPoint(location_in_screen);
   auto* host = ash::GetWindowTreeHostForDisplay(display.id());
   if (!host) {
diff --git a/chrome/browser/accessibility/accessibility_extension_api_ash.h b/chrome/browser/accessibility/accessibility_extension_api_ash.h
index efe540e1..3ea055c 100644
--- a/chrome/browser/accessibility/accessibility_extension_api_ash.h
+++ b/chrome/browser/accessibility/accessibility_extension_api_ash.h
@@ -42,6 +42,15 @@
                              ACCESSIBILITY_PRIVATE_ENABLEMOUSEEVENTS)
 };
 
+// API function that sets the cursor position on the screen in absolute
+// coordinates.
+class AccessibilityPrivateSetCursorPositionFunction : public ExtensionFunction {
+  ~AccessibilityPrivateSetCursorPositionFunction() override {}
+  ResponseAction Run() override;
+  DECLARE_EXTENSION_FUNCTION("accessibilityPrivate.setCursorPosition",
+                             ACCESSIBILITY_PRIVATE_SETCURSORPOSITION)
+};
+
 // API function that requests that key events be forwarded to the Switch
 // Access extension.
 class AccessibilityPrivateForwardKeyEventsToSwitchAccessFunction
diff --git a/chrome/browser/android/preferences/autofill/autofill_payment_methods_delegate.cc b/chrome/browser/android/preferences/autofill/autofill_payment_methods_delegate.cc
index da5586f..31f3f16 100644
--- a/chrome/browser/android/preferences/autofill/autofill_payment_methods_delegate.cc
+++ b/chrome/browser/android/preferences/autofill/autofill_payment_methods_delegate.cc
@@ -97,4 +97,9 @@
       instrument_id, base::BindOnce(&base::android::RunBooleanCallbackAndroid,
                                     ScopedJavaGlobalRef<jobject>(jcallback)));
 }
+
+void AutofillPaymentMethodsDelegate::DeleteSavedCvcs(JNIEnv* env) {
+  personal_data_manager_->ClearLocalCvcs();
+  personal_data_manager_->ClearServerCvcs();
+}
 }  // namespace autofill
diff --git a/chrome/browser/android/preferences/autofill/autofill_payment_methods_delegate.h b/chrome/browser/android/preferences/autofill/autofill_payment_methods_delegate.h
index 61a719d6..f748fac8 100644
--- a/chrome/browser/android/preferences/autofill/autofill_payment_methods_delegate.h
+++ b/chrome/browser/android/preferences/autofill/autofill_payment_methods_delegate.h
@@ -53,6 +53,8 @@
                            int64_t instrument_id,
                            const JavaParamRef<jobject>& jcallback);
 
+  void DeleteSavedCvcs(JNIEnv* env);
+
  private:
   raw_ptr<Profile> profile_;                            // weak reference
   raw_ptr<PersonalDataManager> personal_data_manager_;  // weak reference
diff --git a/chrome/browser/ash/accessibility/accessibility_extension_api_browsertest.cc b/chrome/browser/ash/accessibility/accessibility_extension_api_browsertest.cc
index aa8eab8d..c9cbc27e 100644
--- a/chrome/browser/ash/accessibility/accessibility_extension_api_browsertest.cc
+++ b/chrome/browser/ash/accessibility/accessibility_extension_api_browsertest.cc
@@ -4,6 +4,7 @@
 
 #include "ash/accessibility/accessibility_controller_impl.h"
 #include "ash/accessibility/ui/accessibility_confirmation_dialog.h"
+#include "ash/display/screen_orientation_controller_test_api.h"
 #include "ash/shell.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
@@ -24,6 +25,8 @@
 #include "extensions/test/result_catcher.h"
 #include "ui/accessibility/accessibility_features.h"
 #include "ui/base/ui_base_features.h"
+#include "ui/display/test/display_manager_test_api.h"
+#include "ui/events/base_event_utils.h"
 
 namespace ash {
 
@@ -351,6 +354,26 @@
   ASSERT_TRUE(RunSubtest("testGetDlcContentsSuccess")) << message_;
 }
 
+IN_PROC_BROWSER_TEST_P(AccessibilityPrivateApiTest, SetCursorPosition) {
+  const std::string kTestCases[] = {"800x600", "1000x800*2.0",
+                                    "801+0-400x300,1+0-400x300"};
+  for (const auto& test : kTestCases) {
+    display::test::DisplayManagerTestApi(Shell::Get()->display_manager())
+        .UpdateDisplay(test);
+    ScreenOrientationControllerTestApi(
+        Shell::Get()->screen_orientation_controller())
+        .UpdateNaturalOrientation();
+    // The setCursorPosition method takes density-independent pixels.
+    ASSERT_TRUE(RunSubtest("testSetCursorPosition")) << message_;
+    // The screen point is in density-independent pixels, so it should always be
+    // the same as what the JS has set, (450, 350), assuming all the
+    // multiple-display and DPI math was correct.
+    const gfx::Point point =
+        display::Screen::GetScreen()->GetCursorScreenPoint();
+    EXPECT_EQ(point, gfx::Point(450, 350));
+  }
+}
+
 INSTANTIATE_TEST_SUITE_P(PersistentBackground,
                          AccessibilityPrivateApiTest,
                          ::testing::Values(ContextType::kPersistentBackground));
diff --git a/chrome/browser/ash/arc/intent_helper/arc_settings_service.cc b/chrome/browser/ash/arc/intent_helper/arc_settings_service.cc
index f296a70..df805ff 100644
--- a/chrome/browser/ash/arc/intent_helper/arc_settings_service.cc
+++ b/chrome/browser/ash/arc/intent_helper/arc_settings_service.cc
@@ -16,6 +16,7 @@
 #include "ash/components/arc/session/arc_bridge_service.h"
 #include "ash/constants/ash_features.h"
 #include "ash/constants/ash_pref_names.h"
+#include "ash/system/privacy_hub/privacy_hub_controller.h"
 #include "base/command_line.h"
 #include "base/functional/bind.h"
 #include "base/gtest_prod_util.h"
@@ -412,7 +413,7 @@
     SyncAccessibilityLargeMouseCursorEnabled();
   } else if (pref_name == ash::prefs::kAccessibilityVirtualKeyboardEnabled) {
     SyncAccessibilityVirtualKeyboardEnabled();
-  } else if (pref_name == ash::prefs::kUserGeolocationAllowed) {
+  } else if (pref_name == ash::prefs::kUserGeolocationAccessLevel) {
     SyncUserGeolocation();
   } else if (pref_name == ::language::prefs::kApplicationLocale ||
              pref_name == ::language::prefs::kPreferredLanguages) {
@@ -534,7 +535,7 @@
   AddPrefToObserve(ash::prefs::kAccessibilitySwitchAccessEnabled);
   AddPrefToObserve(ash::prefs::kAccessibilityVirtualKeyboardEnabled);
   AddPrefToObserve(ash::prefs::kDockedMagnifierEnabled);
-  AddPrefToObserve(ash::prefs::kUserGeolocationAllowed);
+  AddPrefToObserve(ash::prefs::kUserGeolocationAccessLevel);
   AddPrefToObserve(onc::prefs::kDeviceOpenNetworkConfiguration);
   AddPrefToObserve(onc::prefs::kOpenNetworkConfiguration);
   AddPrefToObserve(proxy_config::prefs::kProxy);
@@ -886,8 +887,18 @@
   // as we sync this property from Android. We might need to sync
   // in case of disable but not in case of enable (default).
 
-  SendBoolPrefSettingsBroadcast(
-      ash::prefs::kUserGeolocationAllowed,
+  // We need to map tri-state of ChromeOS toggle to boolean ARC++ toggle.
+  const PrefService::Preference* pref = registrar_.prefs()->FindPreference(
+      ash::prefs::kUserGeolocationAccessLevel);
+  DCHECK(pref);
+  DCHECK(pref->GetValue()->is_int());
+
+  bool enabled_for_arc =
+      ash::PrivacyHubController::CrosToArcGeolocationPermissionMapping(
+          static_cast<ash::GeolocationAccessLevel>(pref->GetValue()->GetInt()));
+
+  SendBoolValueSettingsBroadcast(
+      enabled_for_arc, !pref->IsUserModifiable(),
       "org.chromium.arc.intent_helper.SET_USER_GEOLOCATION");
 }
 
diff --git a/chrome/browser/ash/arc/intent_helper/chrome_arc_intent_helper_delegate.cc b/chrome/browser/ash/arc/intent_helper/chrome_arc_intent_helper_delegate.cc
index 8575c0f..eea1101 100644
--- a/chrome/browser/ash/arc/intent_helper/chrome_arc_intent_helper_delegate.cc
+++ b/chrome/browser/ash/arc/intent_helper/chrome_arc_intent_helper_delegate.cc
@@ -8,6 +8,7 @@
 
 #include "ash/components/arc/arc_prefs.h"
 #include "ash/constants/ash_pref_names.h"
+#include "ash/system/privacy_hub/privacy_hub_controller.h"
 #include "base/logging.h"
 #include "chrome/browser/ash/arc/session/arc_session_manager.h"
 #include "chrome/browser/profiles/profile.h"
@@ -60,8 +61,12 @@
 void ChromeArcIntentHelperDelegate::UpdateLocationSettings(bool is_enabled) {
   CHECK(profile_);
   VLOG(1) << "UpdateLocation toggle called with value: " << is_enabled;
-  profile_->GetPrefs()->SetBoolean(ash::prefs::kUserGeolocationAllowed,
-                                   is_enabled);
+
+  ash::GeolocationAccessLevel access_level_for_cros =
+      ash::PrivacyHubController::ArcToCrosGeolocationPermissionMapping(
+          is_enabled);
+  profile_->GetPrefs()->SetInteger(ash::prefs::kUserGeolocationAccessLevel,
+                                   static_cast<int>(access_level_for_cros));
 }
 
 bool ChromeArcIntentHelperDelegate::IsInitialLocationSettingsSyncRequired() {
diff --git a/chrome/browser/ash/arc/optin/arc_optin_preference_handler.cc b/chrome/browser/ash/arc/optin/arc_optin_preference_handler.cc
index 770b7df..3418bff 100644
--- a/chrome/browser/ash/arc/optin/arc_optin_preference_handler.cc
+++ b/chrome/browser/ash/arc/optin/arc_optin_preference_handler.cc
@@ -7,6 +7,7 @@
 #include "ash/components/arc/arc_prefs.h"
 #include "ash/constants/ash_features.h"
 #include "ash/constants/ash_pref_names.h"
+#include "ash/system/privacy_hub/privacy_hub_controller.h"
 #include "base/feature_list.h"
 #include "base/functional/bind.h"
 #include "chrome/browser/ash/arc/optin/arc_optin_preference_handler_observer.h"
@@ -131,13 +132,17 @@
           : true;
 
   // We should use device location setting during optin, in case user has
-  // disabled location of device we should show the same preference during.
-  // opt-in. Default value of kUserGeolocationAllowed is true.
+  // disabled location of device we should show the same preference during
+  // opt-in. Default value of kUserGeolocationAccessLevel is
+  // `AccessLevel::kAllowed`.
   if (base::FeatureList::IsEnabled(ash::features::kCrosPrivacyHub) &&
-      // TODO(vsomani): Remove managed user check once kUserGeolocationAllowed
-      // is in sync with the managed policy of arcgooglelocationservicesenabled.
+      // TODO(vsomani): Remove managed user check once
+      // kUserGeolocationAccessLevel is in sync with the managed policy of
+      // arcgooglelocationservicesenabled.
       !pref_service_->IsManagedPreference(prefs::kArcLocationServiceEnabled)) {
-    enabled = pref_service_->GetBoolean(ash::prefs::kUserGeolocationAllowed);
+    enabled = ash::PrivacyHubController::CrosToArcGeolocationPermissionMapping(
+        static_cast<ash::GeolocationAccessLevel>(pref_service_->GetInteger(
+            ash::prefs::kUserGeolocationAccessLevel)));
   }
   observer_->OnLocationServicesModeChanged(
       enabled,
@@ -167,7 +172,11 @@
   if (base::FeatureList::IsEnabled(ash::features::kCrosPrivacyHub)) {
     pref_service_->SetBoolean(prefs::kArcInitialLocationSettingSyncRequired,
                               false);
-    pref_service_->SetBoolean(ash::prefs::kUserGeolocationAllowed, is_enabled);
+    pref_service_->SetInteger(
+        ash::prefs::kUserGeolocationAccessLevel,
+        static_cast<int>(
+            ash::PrivacyHubController::ArcToCrosGeolocationPermissionMapping(
+                is_enabled)));
   }
 }
 
diff --git a/chrome/browser/ash/arc/optin/arc_terms_of_service_default_negotiator_unittest.cc b/chrome/browser/ash/arc/optin/arc_terms_of_service_default_negotiator_unittest.cc
index ceeff79..af03fba 100644
--- a/chrome/browser/ash/arc/optin/arc_terms_of_service_default_negotiator_unittest.cc
+++ b/chrome/browser/ash/arc/optin/arc_terms_of_service_default_negotiator_unittest.cc
@@ -11,6 +11,7 @@
 #include "ash/components/arc/arc_prefs.h"
 #include "ash/constants/ash_features.h"
 #include "ash/constants/ash_pref_names.h"
+#include "ash/system/privacy_hub/privacy_hub_controller.h"
 #include "base/functional/bind.h"
 #include "base/hash/sha1.h"
 #include "base/run_loop.h"
@@ -368,8 +369,9 @@
       prefs::kArcBackupRestoreEnabled, std::make_unique<base::Value>(false));
   EXPECT_FALSE(fake_arc_support()->backup_and_restore_mode());
   if (base::FeatureList::IsEnabled(ash::features::kCrosPrivacyHub)) {
-    profile()->GetTestingPrefService()->SetBoolean(
-        ash::prefs::kUserGeolocationAllowed, false);
+    profile()->GetTestingPrefService()->SetInteger(
+        ash::prefs::kUserGeolocationAccessLevel,
+        static_cast<int>(ash::GeolocationAccessLevel::kDisallowed));
   }
   profile()->GetTestingPrefService()->SetManagedPref(
       prefs::kArcLocationServiceEnabled, std::make_unique<base::Value>(false));
@@ -378,9 +380,10 @@
   if (base::FeatureList::IsEnabled(ash::features::kCrosPrivacyHub)) {
     // Toggle kArcLocationServiceEnabled to trigger the computation again as we
     // are listening on it. Now even with kArcLocationServiceEnabled false, we
-    // should still get true as we will now honor kUserGeolocationAllowed.
-    profile()->GetTestingPrefService()->SetBoolean(
-        ash::prefs::kUserGeolocationAllowed, true);
+    // should still get true as we will now honor kUserGeolocationAccessLevel.
+    profile()->GetTestingPrefService()->SetInteger(
+        ash::prefs::kUserGeolocationAccessLevel,
+        static_cast<int>(ash::GeolocationAccessLevel::kAllowed));
     profile()->GetTestingPrefService()->SetManagedPref(
         prefs::kArcLocationServiceEnabled, std::make_unique<base::Value>(true));
     profile()->GetTestingPrefService()->SetManagedPref(
@@ -397,7 +400,7 @@
   profile()->GetTestingPrefService()->RemoveManagedPref(
       prefs::kArcLocationServiceEnabled);
   // When CrosPrivacyHub is enabled this is true as we set
-  // kUserGeolocationAllowed to be true.
+  // `kUserGeolocationAccessLevel` to be `AccessLevel::kAllowed`.
   EXPECT_TRUE(fake_arc_support()->location_service_mode());
 
   // Make sure preference values are not yet updated.
@@ -426,8 +429,9 @@
   if (base::FeatureList::IsEnabled(ash::features::kCrosPrivacyHub)) {
     profile()->GetTestingPrefService()->SetBoolean(
         prefs::kArcInitialLocationSettingSyncRequired, true);
-    profile()->GetTestingPrefService()->SetBoolean(
-        ash::prefs::kUserGeolocationAllowed, true);
+    profile()->GetTestingPrefService()->SetInteger(
+        ash::prefs::kUserGeolocationAccessLevel,
+        static_cast<int>(ash::GeolocationAccessLevel::kAllowed));
   }
 
   // Show Terms of service page.
@@ -459,8 +463,10 @@
   if (base::FeatureList::IsEnabled(ash::features::kCrosPrivacyHub)) {
     EXPECT_FALSE(profile()->GetPrefs()->GetBoolean(
         prefs::kArcInitialLocationSettingSyncRequired));
-    EXPECT_FALSE(
-        profile()->GetPrefs()->GetBoolean(ash::prefs::kUserGeolocationAllowed));
+    EXPECT_EQ(ash::GeolocationAccessLevel::kDisallowed,
+              static_cast<ash::GeolocationAccessLevel>(
+                  profile()->GetPrefs()->GetInteger(
+                      ash::prefs::kUserGeolocationAccessLevel)));
   }
 }
 
diff --git a/chrome/browser/ash/crosapi/drive_integration_service_ash.cc b/chrome/browser/ash/crosapi/drive_integration_service_ash.cc
index 2a8560f..2dffe19 100644
--- a/chrome/browser/ash/crosapi/drive_integration_service_ash.cc
+++ b/chrome/browser/ash/crosapi/drive_integration_service_ash.cc
@@ -27,8 +27,7 @@
 
 base::FilePath GetMountPoint() {
   return GetDriveService() && GetDriveService()->IsMounted()
-             ? GetDriveService()->GetMountPointPath().Append(
-                   drive::util::kDriveMyDriveRootDirName)
+             ? GetDriveService()->GetMountPointPath()
              : base::FilePath();
 }
 
@@ -42,8 +41,8 @@
   receivers_.Add(this, std::move(pending_receiver));
 }
 
-void DriveIntegrationServiceAsh::GetMountPointPath(
-    GetMountPointPathCallback callback) {
+void DriveIntegrationServiceAsh::DeprecatedGetMountPointPath(
+    DeprecatedGetMountPointPathCallback callback) {
   std::move(callback).Run(GetMountPoint());
 }
 
diff --git a/chrome/browser/ash/crosapi/drive_integration_service_ash.h b/chrome/browser/ash/crosapi/drive_integration_service_ash.h
index ea5b33fc..660ba46 100644
--- a/chrome/browser/ash/crosapi/drive_integration_service_ash.h
+++ b/chrome/browser/ash/crosapi/drive_integration_service_ash.h
@@ -28,7 +28,8 @@
       mojo::PendingReceiver<mojom::DriveIntegrationService> receiver);
 
   // crosapi::mojom::DriveIntegrationService:
-  void GetMountPointPath(GetMountPointPathCallback callback) override;
+  void DeprecatedGetMountPointPath(
+      DeprecatedGetMountPointPathCallback callback) override;
   void AddDriveIntegrationServiceObserver(
       mojo::PendingRemote<mojom::DriveIntegrationServiceObserver> observer)
       override;
diff --git a/chrome/browser/ash/crosapi/prefs_ash.cc b/chrome/browser/ash/crosapi/prefs_ash.cc
index 1a251f8..ba9f5de 100644
--- a/chrome/browser/ash/crosapi/prefs_ash.cc
+++ b/chrome/browser/ash/crosapi/prefs_ash.cc
@@ -40,8 +40,8 @@
            ash::prefs::kAccessibilitySpokenFeedbackEnabled},
           {mojom::PrefPath::kAccessibilityPdfOcrAlwaysActive,
            ::prefs::kAccessibilityPdfOcrAlwaysActive},
-          {mojom::PrefPath::kGeolocationAllowed,
-           ash::prefs::kUserGeolocationAllowed},
+          {mojom::PrefPath::kUserGeolocationAccessLevel,
+           ash::prefs::kUserGeolocationAccessLevel},
           {mojom::PrefPath::kQuickAnswersEnabled,
            quick_answers::prefs::kQuickAnswersEnabled},
           {mojom::PrefPath::kQuickAnswersConsentStatus,
@@ -277,7 +277,7 @@
                    AshPrefSource::kNormal,
                    metrics::prefs::kMetricsReportingEnabled};
     case mojom::PrefPath::kAccessibilitySpokenFeedbackEnabled:
-    case mojom::PrefPath::kGeolocationAllowed:
+    case mojom::PrefPath::kUserGeolocationAccessLevel:
     case mojom::PrefPath::kQuickAnswersEnabled:
     case mojom::PrefPath::kQuickAnswersConsentStatus:
     case mojom::PrefPath::kQuickAnswersDefinitionEnabled:
diff --git a/chrome/browser/ash/geolocation/system_geolocation_source.cc b/chrome/browser/ash/geolocation/system_geolocation_source.cc
index b34f3cb9..c67a23b 100644
--- a/chrome/browser/ash/geolocation/system_geolocation_source.cc
+++ b/chrome/browser/ash/geolocation/system_geolocation_source.cc
@@ -9,6 +9,7 @@
 #include "ash/constants/ash_pref_names.h"
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
+#include "ash/system/privacy_hub/privacy_hub_controller.h"
 #include "ash/system/privacy_hub/sensor_disabled_notification_delegate.h"
 #include "base/check.h"
 #include "base/functional/callback_helpers.h"
@@ -46,7 +47,7 @@
     PermissionUpdateCallback callback) {
   permission_update_callback_ = std::move(callback);
   if (pref_change_registrar_) {
-    OnPrefChanged(prefs::kUserGeolocationAllowed);
+    OnPrefChanged(prefs::kUserGeolocationAccessLevel);
   }
 }
 
@@ -68,15 +69,15 @@
   pref_change_registrar_ = std::make_unique<PrefChangeRegistrar>();
   pref_change_registrar_->Init(pref_service);
   // value might have changed, hence we trigger the update function
-  OnPrefChanged(prefs::kUserGeolocationAllowed);
+  OnPrefChanged(prefs::kUserGeolocationAccessLevel);
   pref_change_registrar_->Add(
-      prefs::kUserGeolocationAllowed,
+      prefs::kUserGeolocationAccessLevel,
       base::BindRepeating(&SystemGeolocationSource::OnPrefChanged,
                           base::Unretained(this)));
 }
 
 void SystemGeolocationSource::OnPrefChanged(const std::string& pref_name) {
-  DCHECK_EQ(pref_name, prefs::kUserGeolocationAllowed);
+  DCHECK_EQ(pref_name, prefs::kUserGeolocationAccessLevel);
   DCHECK(pref_change_registrar_);
   // Get the actual permission status from CrOS by directly accessing pref
   // service.
@@ -86,7 +87,9 @@
   if (ash::features::IsCrosPrivacyHubLocationEnabled()) {
     PrefService* pref_service = pref_change_registrar_->prefs();
     if (pref_service) {
-      status = pref_service->GetBoolean(prefs::kUserGeolocationAllowed)
+      status = (static_cast<GeolocationAccessLevel>(pref_service->GetInteger(
+                    prefs::kUserGeolocationAccessLevel)) ==
+                GeolocationAccessLevel::kAllowed)
                    ? device::LocationSystemPermissionStatus::kAllowed
                    : device::LocationSystemPermissionStatus::kDenied;
     }
diff --git a/chrome/browser/ash/geolocation/system_geolocation_source_unittest.cc b/chrome/browser/ash/geolocation/system_geolocation_source_unittest.cc
index dc93af20..2462769 100644
--- a/chrome/browser/ash/geolocation/system_geolocation_source_unittest.cc
+++ b/chrome/browser/ash/geolocation/system_geolocation_source_unittest.cc
@@ -8,8 +8,10 @@
 #include <vector>
 
 #include "ash/constants/ash_pref_names.h"
+#include "ash/constants/geolocation_access_level.h"
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
+#include "ash/system/privacy_hub/privacy_hub_controller.h"
 #include "ash/test/ash_test_base.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_future.h"
@@ -26,9 +28,9 @@
   // AshTestBase:
   void SetUp() override { AshTestBase::SetUp(); }
 
-  void SetUserPref(bool allowed) {
-    Shell::Get()->session_controller()->GetActivePrefService()->SetBoolean(
-        prefs::kUserGeolocationAllowed, allowed);
+  void SetUserPref(GeolocationAccessLevel access_level) {
+    Shell::Get()->session_controller()->GetActivePrefService()->SetInteger(
+        prefs::kUserGeolocationAccessLevel, static_cast<int>(access_level));
   }
 
   base::test::ScopedFeatureList scoped_feature_list_;
@@ -46,12 +48,18 @@
   // Initial value should be to allow.
   EXPECT_EQ(device::LocationSystemPermissionStatus::kAllowed, status.Take());
 
-  // Change user settings to deny and check that the callback is called.
-  SetUserPref(false);
+  // Change user settings to "Blocked for all" and check that the callback is
+  // called.
+  SetUserPref(GeolocationAccessLevel::kDisallowed);
   EXPECT_EQ(device::LocationSystemPermissionStatus::kDenied, status.Take());
 
-  // Change user settings to allow and check that the callback is called.
-  SetUserPref(true);
+  // Change user settings to "Only allowed for system services" and check that
+  // callback is called.
+  SetUserPref(GeolocationAccessLevel::kOnlyAllowedForSystem);
+  EXPECT_EQ(device::LocationSystemPermissionStatus::kDenied, status.Take());
+
+  // Change user settings to "Allowed" and check that the callback is called.
+  SetUserPref(GeolocationAccessLevel::kAllowed);
   EXPECT_EQ(device::LocationSystemPermissionStatus::kAllowed, status.Take());
 }
 
@@ -68,14 +76,19 @@
   // The value should always be kAllowed.
   EXPECT_EQ(device::LocationSystemPermissionStatus::kAllowed, status.Take());
 
-  // Change user settings to deny and check that the sent value is still
-  // kAllowed.
-  SetUserPref(false);
+  // Change user settings to "Blocked for all" and check that the sent value is
+  // still `kAllowed`.
+  SetUserPref(GeolocationAccessLevel::kDisallowed);
   EXPECT_EQ(device::LocationSystemPermissionStatus::kAllowed, status.Take());
 
-  // Change user settings to deny and check that the sent value is still
-  // kAllowed.
-  SetUserPref(true);
+  // Change user settings "Only allowed for system services" and check that the
+  // sent value is still `kAllowed`.
+  SetUserPref(GeolocationAccessLevel::kOnlyAllowedForSystem);
+  EXPECT_EQ(device::LocationSystemPermissionStatus::kAllowed, status.Take());
+
+  // Change user settings to "Allowed" and check that the sent value is still
+  // `kAllowed`.
+  SetUserPref(GeolocationAccessLevel::kAllowed);
   EXPECT_EQ(device::LocationSystemPermissionStatus::kAllowed, status.Take());
 }
 
diff --git a/chrome/browser/ash/login/lock/screen_locker.cc b/chrome/browser/ash/login/lock/screen_locker.cc
index 1d648b92..aa988e6d 100644
--- a/chrome/browser/ash/login/lock/screen_locker.cc
+++ b/chrome/browser/ash/login/lock/screen_locker.cc
@@ -53,7 +53,6 @@
 #include "chromeos/ash/components/dbus/biod/constants.pb.h"
 #include "chromeos/ash/components/dbus/session_manager/session_manager_client.h"
 #include "chromeos/ash/components/login/auth/authenticator.h"
-#include "chromeos/ash/components/login/auth/extended_authenticator.h"
 #include "chromeos/ash/components/login/auth/public/auth_failure.h"
 #include "chromeos/ash/components/login/session/session_termination_manager.h"
 #include "components/password_manager/core/browser/hash_password_manager.h"
@@ -219,7 +218,6 @@
       ->DisableNonLockScreenLayouts();
 
   authenticator_ = UserSessionManager::GetInstance()->CreateAuthenticator(this);
-  extended_authenticator_ = ExtendedAuthenticator::Create(this);
 
   // Create ViewScreenLocker that calls into the views-based lock screen via
   // mojo.
@@ -720,10 +718,8 @@
 }
 
 void ScreenLocker::SetAuthenticatorsForTesting(
-    scoped_refptr<Authenticator> authenticator,
-    scoped_refptr<ExtendedAuthenticator> extended_authenticator) {
+    scoped_refptr<Authenticator> authenticator) {
   authenticator_ = std::move(authenticator);
-  extended_authenticator_ = std::move(extended_authenticator);
 }
 
 // static
@@ -757,8 +753,6 @@
 
   if (authenticator_)
     authenticator_->SetConsumer(nullptr);
-  if (extended_authenticator_)
-    extended_authenticator_->SetConsumer(nullptr);
 
   ClearErrors();
 
diff --git a/chrome/browser/ash/login/lock/screen_locker.h b/chrome/browser/ash/login/lock/screen_locker.h
index bf0e2f2..49c1d98 100644
--- a/chrome/browser/ash/login/lock/screen_locker.h
+++ b/chrome/browser/ash/login/lock/screen_locker.h
@@ -39,7 +39,6 @@
 namespace ash {
 
 class Authenticator;
-class ExtendedAuthenticator;
 class ViewsScreenLocker;
 
 // ScreenLocker displays the lock UI and takes care of authenticating the user
@@ -158,9 +157,7 @@
   bool IsAuthTemporarilyDisabledForUser(const AccountId& account_id);
 
   // Change the authenticators; should only be used by tests.
-  void SetAuthenticatorsForTesting(
-      scoped_refptr<Authenticator> authenticator,
-      scoped_refptr<ExtendedAuthenticator> extended_authenticator);
+  void SetAuthenticatorsForTesting(scoped_refptr<Authenticator> authenticator);
 
   static void SetClocksForTesting(const base::Clock* clock,
                                   const base::TickClock* tick_clock);
@@ -276,9 +273,6 @@
   // Used to authenticate the user to unlock.
   scoped_refptr<Authenticator> authenticator_;
 
-  // Used to authenticate the user to unlock supervised users.
-  scoped_refptr<ExtendedAuthenticator> extended_authenticator_;
-
   // True if the screen is locked, or false otherwise.  This changes
   // from false to true, but will never change from true to
   // false. Instead, ScreenLocker object gets deleted when unlocked.
diff --git a/chrome/browser/ash/login/lock/screen_locker_tester.cc b/chrome/browser/ash/login/lock/screen_locker_tester.cc
index 346c749d..6195bdd5 100644
--- a/chrome/browser/ash/login/lock/screen_locker_tester.cc
+++ b/chrome/browser/ash/login/lock/screen_locker_tester.cc
@@ -13,7 +13,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ash/login/lock/screen_locker.h"
 #include "chromeos/ash/components/login/auth/auth_status_consumer.h"
-#include "chromeos/ash/components/login/auth/fake_extended_authenticator.h"
 #include "chromeos/ash/components/login/auth/public/key.h"
 #include "chromeos/ash/components/login/auth/public/user_context.h"
 #include "chromeos/ash/components/login/auth/stub_authenticator.h"
@@ -130,8 +129,7 @@
   auto* locker = ScreenLocker::default_screen_locker();
   CHECK(locker);
   locker->SetAuthenticatorsForTesting(
-      base::MakeRefCounted<StubAuthenticator>(locker, user_context),
-      base::MakeRefCounted<FakeExtendedAuthenticator>(locker, user_context));
+      base::MakeRefCounted<StubAuthenticator>(locker, user_context));
 }
 
 bool ScreenLockerTester::IsLocked() {
diff --git a/chrome/browser/ash/login/ui/login_ui_pref_controller.cc b/chrome/browser/ash/login/ui/login_ui_pref_controller.cc
index eead9e8c6..dec33ae 100644
--- a/chrome/browser/ash/login/ui/login_ui_pref_controller.cc
+++ b/chrome/browser/ash/login/ui/login_ui_pref_controller.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/ash/login/ui/login_ui_pref_controller.h"
 
 #include "ash/constants/ash_pref_names.h"
+#include "ash/constants/geolocation_access_level.h"
 #include "ash/system/privacy_hub/privacy_hub_controller.h"
 #include "base/functional/bind.h"
 #include "base/logging.h"
@@ -71,17 +72,12 @@
 }
 
 void LoginUIPrefController::UpdateGeolocationUsageAllowed() {
-  auto access_level = static_cast<PrivacyHubController::AccessLevel>(
-      g_browser_process->local_state()->GetInteger(
-          ash::prefs::kDeviceGeolocationAllowed));
-  switch (access_level) {
-    case PrivacyHubController::AccessLevel::kAllowed:
-      SimpleGeolocationProvider::GetInstance()->AllowGeolocationUsage();
-      break;
-    case PrivacyHubController::AccessLevel::kDisallowed:
-    default:
-      SimpleGeolocationProvider::GetInstance()->DisallowGeolocationUsage();
-  }
+  // Set the log-in screen geolocation access permission to the
+  // `SimpleGeolocationProvider` global instance.
+  SimpleGeolocationProvider::GetInstance()->SetGeolocationAccessLevel(
+      static_cast<GeolocationAccessLevel>(
+          g_browser_process->local_state()->GetInteger(
+              ash::prefs::kDeviceGeolocationAllowed)));
 }
 
 void LoginUIPrefController::InitOwnerPreferences(bool success) {
diff --git a/chrome/browser/ash/nearby/presence/credential_storage/credential_storage_initializer_unittest.cc b/chrome/browser/ash/nearby/presence/credential_storage/credential_storage_initializer_unittest.cc
index a7936c68f..2ec15fd 100644
--- a/chrome/browser/ash/nearby/presence/credential_storage/credential_storage_initializer_unittest.cc
+++ b/chrome/browser/ash/nearby/presence/credential_storage/credential_storage_initializer_unittest.cc
@@ -51,6 +51,9 @@
       ash::nearby::presence::mojom::PublicCredentialType public_credential_type,
       GetPublicCredentialsCallback callback) override {}
   void GetPrivateCredentials(GetPrivateCredentialsCallback callback) override {}
+  void UpdateLocalCredential(
+      ash::nearby::presence::mojom::LocalCredentialPtr local_credential,
+      UpdateLocalCredentialCallback callback) override {}
 
   int GetInitializationCallsCount() { return initialization_calls_count_; }
 
diff --git a/chrome/browser/ash/nearby/presence/credential_storage/nearby_presence_credential_storage.cc b/chrome/browser/ash/nearby/presence/credential_storage/nearby_presence_credential_storage.cc
index ce6112d..9c84397 100644
--- a/chrome/browser/ash/nearby/presence/credential_storage/nearby_presence_credential_storage.cc
+++ b/chrome/browser/ash/nearby/presence/credential_storage/nearby_presence_credential_storage.cc
@@ -182,6 +182,49 @@
       weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
 }
 
+void NearbyPresenceCredentialStorage::UpdateLocalCredential(
+    mojom::LocalCredentialPtr local_credential,
+    UpdateLocalCredentialCallback callback) {
+  CHECK(callback);
+
+  ::nearby::internal::LocalCredential local_credential_proto =
+      proto::LocalCredentialFromMojom(local_credential.get());
+
+  // |UpdateEntriesWithRemoveFilter()| expects a unique_ptr, so we cannot
+  // create a vector with a single pair in-line using an initializer list.
+  auto credential_pair_to_update = std::make_unique<std::vector<
+      std::pair<std::string, ::nearby::internal::LocalCredential>>>();
+  credential_pair_to_update->emplace_back(std::make_pair(
+      local_credential_proto.secret_id(), local_credential_proto));
+
+  // Only match the credential being updated.
+  leveldb_proto::KeyFilter update_filter = base::BindRepeating(
+      [](const std::string& key, const std::string& target_key) {
+        return key == target_key;
+      },
+      local_credential_proto.secret_id());
+
+  private_db_->UpdateEntriesWithRemoveFilter(
+      /*entries_to_save=*/std::move(credential_pair_to_update),
+      /*delete_key_filter=*/update_filter,
+      base::BindOnce(&NearbyPresenceCredentialStorage::OnLocalCredentialUpdated,
+                     weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
+}
+
+void NearbyPresenceCredentialStorage::OnLocalCredentialUpdated(
+    UpdateLocalCredentialCallback callback,
+    bool success) {
+  CHECK(callback);
+
+  if (!success) {
+    LOG(ERROR) << __func__ << ": failed to update private credential.";
+    std::move(callback).Run(mojo_base::mojom::AbslStatusCode::kAborted);
+    return;
+  }
+
+  std::move(callback).Run(mojo_base::mojom::AbslStatusCode::kOk);
+}
+
 void NearbyPresenceCredentialStorage::OnPrivateCredentialsRetrieved(
     GetPrivateCredentialsCallback callback,
     bool success,
diff --git a/chrome/browser/ash/nearby/presence/credential_storage/nearby_presence_credential_storage.h b/chrome/browser/ash/nearby/presence/credential_storage/nearby_presence_credential_storage.h
index 28b1c866..b7b20bb7 100644
--- a/chrome/browser/ash/nearby/presence/credential_storage/nearby_presence_credential_storage.h
+++ b/chrome/browser/ash/nearby/presence/credential_storage/nearby_presence_credential_storage.h
@@ -65,6 +65,8 @@
   void GetPublicCredentials(mojom::PublicCredentialType public_credential_type,
                             GetPublicCredentialsCallback callback) override;
   void GetPrivateCredentials(GetPrivateCredentialsCallback callback) override;
+  void UpdateLocalCredential(mojom::LocalCredentialPtr local_credential,
+                             UpdateLocalCredentialCallback callback) override;
 
  protected:
   NearbyPresenceCredentialStorage(
@@ -81,6 +83,8 @@
           remote_public_db);
 
  private:
+  void OnLocalCredentialUpdated(UpdateLocalCredentialCallback callback,
+                                bool success);
   void OnPrivateCredentialsRetrieved(
       GetPrivateCredentialsCallback callback,
       bool success,
diff --git a/chrome/browser/ash/nearby/presence/credential_storage/nearby_presence_credential_storage_unittest.cc b/chrome/browser/ash/nearby/presence/credential_storage/nearby_presence_credential_storage_unittest.cc
index b9aeccbf..e5c7f249 100644
--- a/chrome/browser/ash/nearby/presence/credential_storage/nearby_presence_credential_storage_unittest.cc
+++ b/chrome/browser/ash/nearby/presence/credential_storage/nearby_presence_credential_storage_unittest.cc
@@ -903,4 +903,94 @@
   }
 }
 
+TEST_F(NearbyPresenceCredentialStorageTest, UpdateLocalCredential_Success) {
+  {
+    base::RunLoop run_loop;
+    FullyInitializeDatabases(run_loop);
+    run_loop.Run();
+  }
+
+  {
+    base::RunLoop run_loop;
+    PrepopulateCredentials(run_loop,
+                           ash::nearby::presence::mojom::PublicCredentialType::
+                               kLocalPublicCredential);
+    run_loop.Run();
+  }
+
+  // Since the pre-population step populates credentials with each parameter
+  // to the matching number (ie, _1 values are assigned to kSecretId_Local_1),
+  // update the credential details for _1 to _2.
+  auto local_credential_to_be_updated = CreateLocalCredential(
+      kSecretId_Local_1, kKeySeed_2, kStartTimeMillis_2,
+      kMetadataEncryptionKeyV0_2, AdvertisementSigningKeyCertificateAlias_2,
+      kAdvertisementPrivateKey_2, ConnectionSigningKeyCertificateAlias_2,
+      kConnectionPrivateKey_2, mojom::IdentityType::kIdentityTypePrivate,
+      kConsumedSalts_2, kMetadataEncryptionKeyV1_2);
+
+  {
+    base::RunLoop run_loop;
+    credential_storage_->UpdateLocalCredential(
+        std::move(local_credential_to_be_updated),
+        base::BindLambdaForTesting(
+            [&run_loop](mojo_base::mojom::AbslStatusCode status) {
+              EXPECT_EQ(status, mojo_base::mojom::AbslStatusCode::kOk);
+              run_loop.Quit();
+            }));
+
+    private_db_->UpdateCallback(true);
+    run_loop.Run();
+  }
+
+  std::string secretId(kSecretId_Local_1.begin(), kSecretId_Local_1.end());
+  auto it = private_db_entries_.find(secretId);
+  ASSERT_NE(it, private_db_entries_.end());
+  auto updated_local_credential = it->second;
+
+  EXPECT_EQ(std::vector<uint8_t>(updated_local_credential.key_seed().begin(),
+                                 updated_local_credential.key_seed().end()),
+            kKeySeed_2);
+  EXPECT_EQ(std::vector<uint8_t>(
+                updated_local_credential.metadata_encryption_key_v1().begin(),
+                updated_local_credential.metadata_encryption_key_v1().end()),
+            kMetadataEncryptionKeyV1_2);
+}
+
+TEST_F(NearbyPresenceCredentialStorageTest, UpdateLocalCredential_Failure) {
+  {
+    base::RunLoop run_loop;
+    FullyInitializeDatabases(run_loop);
+    run_loop.Run();
+  }
+
+  {
+    base::RunLoop run_loop;
+    PrepopulateCredentials(run_loop,
+                           ash::nearby::presence::mojom::PublicCredentialType::
+                               kLocalPublicCredential);
+    run_loop.Run();
+  }
+
+  auto local_credential_to_be_updated = CreateLocalCredential(
+      kSecretId_Local_1, kKeySeed_2, kStartTimeMillis_2,
+      kMetadataEncryptionKeyV0_2, AdvertisementSigningKeyCertificateAlias_2,
+      kAdvertisementPrivateKey_2, ConnectionSigningKeyCertificateAlias_2,
+      kConnectionPrivateKey_2, mojom::IdentityType::kIdentityTypePrivate,
+      kConsumedSalts_2, kMetadataEncryptionKeyV1_2);
+
+  {
+    base::RunLoop run_loop;
+    credential_storage_->UpdateLocalCredential(
+        std::move(local_credential_to_be_updated),
+        base::BindLambdaForTesting(
+            [&run_loop](mojo_base::mojom::AbslStatusCode status) {
+              EXPECT_EQ(status, mojo_base::mojom::AbslStatusCode::kAborted);
+              run_loop.Quit();
+            }));
+
+    private_db_->UpdateCallback(false);
+    run_loop.Run();
+  }
+}
+
 }  // namespace ash::nearby::presence
diff --git a/chrome/browser/ash/preferences.cc b/chrome/browser/ash/preferences.cc
index 8c16dddd..e40bfb43 100644
--- a/chrome/browser/ash/preferences.cc
+++ b/chrome/browser/ash/preferences.cc
@@ -11,6 +11,7 @@
 #include "ash/constants/ash_features.h"
 #include "ash/constants/ash_pref_names.h"
 #include "ash/constants/ash_switches.h"
+#include "ash/constants/geolocation_access_level.h"
 #include "ash/public/ash_interfaces.h"
 #include "ash/public/cpp/ash_prefs.h"
 #include "ash/shell.h"
@@ -688,7 +689,7 @@
                                          g_browser_process->local_state(),
                                          callback);
   pref_change_registrar_.Init(prefs);
-  pref_change_registrar_.Add(ash::prefs::kUserGeolocationAllowed, callback);
+  pref_change_registrar_.Add(ash::prefs::kUserGeolocationAccessLevel, callback);
   pref_change_registrar_.Add(::prefs::kUserTimezone, callback);
   pref_change_registrar_.Add(::prefs::kResolveTimezoneByGeolocationMethod,
                              callback);
@@ -1142,24 +1143,25 @@
   // TODO(b/277061508): Move this logic inside
   // GeolocationPrivacySwitchController.
   if (reason == REASON_INITIALIZATION ||
-      (pref_name == ash::prefs::kUserGeolocationAllowed &&
+      (pref_name == ash::prefs::kUserGeolocationAccessLevel &&
        reason == REASON_PREF_CHANGED)) {
-    const bool user_geolocation_permission_enabled =
-        prefs_->GetBoolean(ash::prefs::kUserGeolocationAllowed);
+    const auto user_geolocation_access_level =
+        static_cast<GeolocationAccessLevel>(
+            prefs_->GetInteger(ash::prefs::kUserGeolocationAccessLevel));
 
-    if (user_geolocation_permission_enabled) {
-      SimpleGeolocationProvider::GetInstance()->AllowGeolocationUsage();
-    } else {
-      SimpleGeolocationProvider::GetInstance()->DisallowGeolocationUsage();
-    }
+    // Notify `SimpleGeolocationProvider` of the user geolocation permission
+    // change.
+    SimpleGeolocationProvider::GetInstance()->SetGeolocationAccessLevel(
+        user_geolocation_access_level);
 
     // Log-in screen follows the owner's geolocation setting.
     if (user_is_owner) {
-      PrivacyHubController::AccessLevel access_level;
-      if (user_geolocation_permission_enabled) {
-        access_level = PrivacyHubController::AccessLevel::kAllowed;
+      GeolocationAccessLevel access_level;
+      if (SimpleGeolocationProvider::GetInstance()
+              ->IsGeolocationUsageAllowedForSystem()) {
+        access_level = GeolocationAccessLevel::kAllowed;
       } else {
-        access_level = PrivacyHubController::AccessLevel::kDisallowed;
+        access_level = GeolocationAccessLevel::kDisallowed;
       }
       g_browser_process->local_state()->SetInteger(
           ash::prefs::kDeviceGeolocationAllowed,
diff --git a/chrome/browser/ash/system/timezone_resolver_manager.cc b/chrome/browser/ash/system/timezone_resolver_manager.cc
index ebd0448..5195abb9 100644
--- a/chrome/browser/ash/system/timezone_resolver_manager.cc
+++ b/chrome/browser/ash/system/timezone_resolver_manager.cc
@@ -6,6 +6,7 @@
 
 #include "ash/constants/ash_pref_names.h"
 #include "ash/constants/ash_switches.h"
+#include "ash/constants/geolocation_access_level.h"
 #include "ash/shell.h"
 #include "ash/system/privacy_hub/privacy_hub_controller.h"
 #include "base/check.h"
@@ -102,7 +103,7 @@
 
 // Returns service configuration for the signin screen.
 ServiceConfiguration GetServiceConfigurationForSigninScreen() {
-  using AccessLevel = PrivacyHubController::AccessLevel;
+  using AccessLevel = GeolocationAccessLevel;
 
   const AccessLevel device_geolocation_permission =
       static_cast<AccessLevel>(g_browser_process->local_state()->GetInteger(
@@ -193,8 +194,10 @@
   }
 
   // User is logged in at this point.
-  // Check that System-wide location permission is granted by the primary user.
-  if (!primary_user_prefs_->GetBoolean(ash::prefs::kUserGeolocationAllowed)) {
+  // Check that user location permission is granted for system services.
+  if (static_cast<GeolocationAccessLevel>(primary_user_prefs_->GetInteger(
+          ash::prefs::kUserGeolocationAccessLevel)) ==
+      GeolocationAccessLevel::kDisallowed) {
     return false;
   }
 
@@ -233,8 +236,10 @@
   }
 
   // User is logged in at this point.
-  // Check that System-wide location permission is granted by the primary user.
-  if (!primary_user_prefs_->GetBoolean(ash::prefs::kUserGeolocationAllowed)) {
+  // Check that user location permission is granted for system services.
+  if (static_cast<GeolocationAccessLevel>(primary_user_prefs_->GetInteger(
+          ash::prefs::kUserGeolocationAccessLevel)) ==
+      GeolocationAccessLevel::kDisallowed) {
     return false;
   }
 
@@ -306,7 +311,7 @@
 bool TimeZoneResolverManager::TimeZoneResolverShouldBeRunning() {
   // System geolocation permission is required for automatic timezone
   // resolution.
-  if (!geolocation_provider_->IsGeolocationUsageAllowed()) {
+  if (!geolocation_provider_->IsGeolocationUsageAllowedForSystem()) {
     return false;
   }
 
diff --git a/chrome/browser/ash/system/timezone_resolver_manager_browsertest.cc b/chrome/browser/ash/system/timezone_resolver_manager_browsertest.cc
index 3f8cc110..a99d24b 100644
--- a/chrome/browser/ash/system/timezone_resolver_manager_browsertest.cc
+++ b/chrome/browser/ash/system/timezone_resolver_manager_browsertest.cc
@@ -6,6 +6,7 @@
 
 #include "ash/constants/ash_pref_names.h"
 #include "ash/constants/ash_switches.h"
+#include "ash/constants/geolocation_access_level.h"
 #include "ash/system/privacy_hub/privacy_hub_controller.h"
 #include "chrome/browser/ash/login/login_manager_test.h"
 #include "chrome/browser/ash/login/test/device_state_mixin.h"
@@ -111,18 +112,19 @@
   }
 
   void UpdateUserGeolocationPermission(PrefService* pref_service,
-                                       bool enabled) {
-    pref_service->SetBoolean(ash::prefs::kUserGeolocationAllowed, enabled);
+                                       GeolocationAccessLevel access_level) {
+    pref_service->SetInteger(ash::prefs::kUserGeolocationAccessLevel,
+                             static_cast<int>(access_level));
   }
 
   void UpdateDeviceGeolocationPermission(bool enabled) {
     PrefService* local_state = g_browser_process->local_state();
 
-    PrivacyHubController::AccessLevel access_level;
+    GeolocationAccessLevel access_level;
     if (enabled) {
-      access_level = PrivacyHubController::AccessLevel::kAllowed;
+      access_level = GeolocationAccessLevel::kAllowed;
     } else {
-      access_level = PrivacyHubController::AccessLevel::kDisallowed;
+      access_level = GeolocationAccessLevel::kDisallowed;
     }
 
     local_state->SetInteger(ash::prefs::kDeviceGeolocationAllowed,
@@ -418,8 +420,9 @@
       g_browser_process->profile_manager()->GetActiveUserProfile()->GetPrefs();
 
   // Check the default configuration: TZResolver should be running.
-  EXPECT_TRUE(
-      SimpleGeolocationProvider::GetInstance()->IsGeolocationUsageAllowed());
+  EXPECT_EQ(
+      SimpleGeolocationProvider::GetInstance()->GetGeolocationAccessLevel(),
+      GeolocationAccessLevel::kAllowed);
   EXPECT_TRUE(tz_resolver_manager->TimeZoneResolverShouldBeRunning());
   EXPECT_EQ(
       system::TimeZoneResolverManager::GetEffectiveUserTimeZoneResolveMethod(
@@ -427,22 +430,27 @@
       system::TimeZoneResolverManager::TimeZoneResolveMethod::IP_ONLY);
   EXPECT_TRUE(tz_resolver->IsRunning());
 
-  UpdateUserGeolocationPermission(pref_service, false);
-  // Change of `kUserGeolocationPermission` will trigger the
+  // Disable geolocation permission.
+  UpdateUserGeolocationPermission(pref_service,
+                                  GeolocationAccessLevel::kDisallowed);
+  // Change of `kUserGeolocationAccessLevel` will trigger the
   // `OnGeolocationPermissionChanged()`, stopping the scheduler.
-  EXPECT_FALSE(
-      SimpleGeolocationProvider::GetInstance()->IsGeolocationUsageAllowed());
   EXPECT_FALSE(tz_resolver_manager->TimeZoneResolverShouldBeRunning());
   EXPECT_FALSE(tz_resolver->IsRunning());
 
-  // Re-enable geolocation permission and select automatic timezone again.
-  // Check that the resolver is working again.
-  UpdateUserGeolocationPermission(pref_service, true);
-  SetUserTimeZoneResolveMethod(
-      pref_service, system::TimeZoneResolverManager::TimeZoneResolveMethod::
-                        SEND_ALL_LOCATION_INFO);
-  EXPECT_TRUE(
-      SimpleGeolocationProvider::GetInstance()->IsGeolocationUsageAllowed());
+  // Re-enable geolocation permission and check that the resolver is working
+  // again.
+  UpdateUserGeolocationPermission(pref_service,
+                                  GeolocationAccessLevel::kAllowed);
+  EXPECT_TRUE(tz_resolver_manager->TimeZoneResolverShouldBeRunning());
+  EXPECT_TRUE(tz_resolver->IsRunning());
+
+  // Disable and re-enable geolocation permission with `kOnlyAllowedForSystem`.
+  // Check that the resolver is working.
+  UpdateUserGeolocationPermission(pref_service,
+                                  GeolocationAccessLevel::kDisallowed);
+  UpdateUserGeolocationPermission(
+      pref_service, GeolocationAccessLevel::kOnlyAllowedForSystem);
   EXPECT_TRUE(tz_resolver_manager->TimeZoneResolverShouldBeRunning());
   EXPECT_TRUE(tz_resolver->IsRunning());
 }
diff --git a/chrome/browser/ash/system_web_apps/apps/personalization_app/personalization_app_sea_pen_provider_impl.cc b/chrome/browser/ash/system_web_apps/apps/personalization_app/personalization_app_sea_pen_provider_impl.cc
index 4bf0ada..03eca072 100644
--- a/chrome/browser/ash/system_web_apps/apps/personalization_app/personalization_app_sea_pen_provider_impl.cc
+++ b/chrome/browser/ash/system_web_apps/apps/personalization_app/personalization_app_sea_pen_provider_impl.cc
@@ -18,6 +18,7 @@
 #include "chrome/browser/ash/wallpaper_handlers/wallpaper_fetcher_delegate.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/manta/features.h"
+#include "components/manta/proto/manta.pb.h"
 #include "content/public/browser/web_ui.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/abseil-cpp/absl/utility/utility.h"
@@ -53,10 +54,10 @@
   }
   auto* sea_pen_fetcher = GetOrCreateSeaPenFetcher();
   CHECK(sea_pen_fetcher);
-  sea_pen_fetcher->Start(
-      text,
-      base::BindOnce(&PersonalizationAppSeaPenProviderImpl::OnSeaPenFetcherDone,
-                     weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
+  sea_pen_fetcher->FetchThumbnails(
+      text, base::BindOnce(
+                &PersonalizationAppSeaPenProviderImpl::OnFetchThumbnailsDone,
+                weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
 }
 
 void PersonalizationAppSeaPenProviderImpl::SelectSeaPenThumbnail(
@@ -67,9 +68,14 @@
     sea_pen_receiver_.ReportBadMessage("Unknown wallpaper image selected");
     return;
   }
-  auto* wallpaper_controller = ash::WallpaperController::Get();
-  wallpaper_controller->SetSeaPenWallpaper(GetAccountId(profile_), it->second,
-                                           std::move(callback));
+
+  auto* sea_pen_fetcher = GetOrCreateSeaPenFetcher();
+  CHECK(sea_pen_fetcher);
+  sea_pen_fetcher->FetchWallpaper(
+      it->second,
+      base::BindOnce(
+          &PersonalizationAppSeaPenProviderImpl::OnFetchWallpaperDone,
+          weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
 }
 
 wallpaper_handlers::SeaPenFetcher*
@@ -81,7 +87,7 @@
   return sea_pen_fetcher_.get();
 }
 
-void PersonalizationAppSeaPenProviderImpl::OnSeaPenFetcherDone(
+void PersonalizationAppSeaPenProviderImpl::OnFetchThumbnailsDone(
     SearchWallpaperCallback callback,
     absl::optional<std::vector<SeaPenImage>> images) {
   if (!images) {
@@ -100,4 +106,17 @@
   std::move(callback).Run(std::move(result));
 }
 
+void PersonalizationAppSeaPenProviderImpl::OnFetchWallpaperDone(
+    SelectSeaPenThumbnailCallback callback,
+    absl::optional<SeaPenImage> image) {
+  if (!image) {
+    std::move(callback).Run(/*success=*/false);
+    return;
+  }
+
+  auto* wallpaper_controller = ash::WallpaperController::Get();
+  wallpaper_controller->SetSeaPenWallpaper(GetAccountId(profile_), *image,
+                                           std::move(callback));
+}
+
 }  // namespace ash::personalization_app
diff --git a/chrome/browser/ash/system_web_apps/apps/personalization_app/personalization_app_sea_pen_provider_impl.h b/chrome/browser/ash/system_web_apps/apps/personalization_app/personalization_app_sea_pen_provider_impl.h
index 13d2fca..f33a592 100644
--- a/chrome/browser/ash/system_web_apps/apps/personalization_app/personalization_app_sea_pen_provider_impl.h
+++ b/chrome/browser/ash/system_web_apps/apps/personalization_app/personalization_app_sea_pen_provider_impl.h
@@ -56,8 +56,11 @@
  private:
   wallpaper_handlers::SeaPenFetcher* GetOrCreateSeaPenFetcher();
 
-  void OnSeaPenFetcherDone(SearchWallpaperCallback callback,
-                           absl::optional<std::vector<SeaPenImage>> images);
+  void OnFetchThumbnailsDone(SearchWallpaperCallback callback,
+                             absl::optional<std::vector<SeaPenImage>> images);
+
+  void OnFetchWallpaperDone(SelectSeaPenThumbnailCallback callback,
+                            absl::optional<SeaPenImage> image);
 
   // Pointer to profile of user that opened personalization SWA. Not owned.
   const raw_ptr<Profile> profile_;
@@ -68,10 +71,10 @@
   // A map of image id to image.
   std::map<uint32_t, const SeaPenImage> sea_pen_images_;
 
-  // Performs a network request to search available wallpapers. Constructed
-  // lazily at the time of the first request and then persists for the rest of
-  // the delegate's lifetime, unless preemptively or subsequently replaced by a
-  // mock in a test.
+  // Perform a network request to search/upscale available wallpapers.
+  // Constructed lazily at the time of the first request and then persists for
+  // the rest of the delegate's lifetime, unless preemptively or subsequently
+  // replaced by a mock in a test.
   std::unique_ptr<wallpaper_handlers::SeaPenFetcher> sea_pen_fetcher_;
 
   mojo::Receiver<mojom::SeaPenProvider> sea_pen_receiver_{this};
diff --git a/chrome/browser/ash/wallpaper_handlers/mock_sea_pen_fetcher.cc b/chrome/browser/ash/wallpaper_handlers/mock_sea_pen_fetcher.cc
index 6e9d970..c6fb889 100644
--- a/chrome/browser/ash/wallpaper_handlers/mock_sea_pen_fetcher.cc
+++ b/chrome/browser/ash/wallpaper_handlers/mock_sea_pen_fetcher.cc
@@ -31,14 +31,21 @@
 }  // namespace
 
 MockSeaPenFetcher::MockSeaPenFetcher() {
-  ON_CALL(*this, Start)
+  ON_CALL(*this, FetchThumbnails)
       .WillByDefault(
-          [](const std::string& text, OnWallpaperSearchComplete callback) {
+          [](const std::string& text, OnFetchThumbnailsComplete callback) {
             DVLOG(2) << __PRETTY_FUNCTION__ << " text=" << text;
             base::ThreadPool::PostTaskAndReplyWithResult(
                 FROM_HERE, base::BindOnce(&MakeFakeImageResults, text),
                 std::move(callback));
           });
+
+  ON_CALL(*this, FetchWallpaper)
+      .WillByDefault(
+          [](const ash::SeaPenImage& image, OnFetchWallpaperComplete callback) {
+            std::move(callback).Run(ash::SeaPenImage(
+                image.jpg_bytes, image.id, image.query, image.resolution));
+          });
 }
 
 MockSeaPenFetcher::~MockSeaPenFetcher() = default;
diff --git a/chrome/browser/ash/wallpaper_handlers/mock_sea_pen_fetcher.h b/chrome/browser/ash/wallpaper_handlers/mock_sea_pen_fetcher.h
index 4ea8bfa..c1a5f5c 100644
--- a/chrome/browser/ash/wallpaper_handlers/mock_sea_pen_fetcher.h
+++ b/chrome/browser/ash/wallpaper_handlers/mock_sea_pen_fetcher.h
@@ -23,9 +23,15 @@
   ~MockSeaPenFetcher() override;
 
   MOCK_METHOD(void,
-              Start,
+              FetchThumbnails,
               (const std::string& query,
-               SeaPenFetcher::OnWallpaperSearchComplete callback),
+               SeaPenFetcher::OnFetchThumbnailsComplete callback),
+              (override));
+
+  MOCK_METHOD(void,
+              FetchWallpaper,
+              (const ash::SeaPenImage& image,
+               SeaPenFetcher::OnFetchWallpaperComplete callback),
               (override));
 };
 
diff --git a/chrome/browser/ash/wallpaper_handlers/sea_pen_fetcher.cc b/chrome/browser/ash/wallpaper_handlers/sea_pen_fetcher.cc
index aabd944..640409a 100644
--- a/chrome/browser/ash/wallpaper_handlers/sea_pen_fetcher.cc
+++ b/chrome/browser/ash/wallpaper_handlers/sea_pen_fetcher.cc
@@ -4,8 +4,10 @@
 
 #include "chrome/browser/ash/wallpaper_handlers/sea_pen_fetcher.h"
 
+#include <cstdint>
 #include <memory>
 #include <string>
+#include <string_view>
 #include <vector>
 
 #include "ash/constants/ash_features.h"
@@ -35,6 +37,7 @@
 #include "base/rand_util.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
+#include "base/types/cxx23_to_underlying.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/gfx/codec/jpeg_codec.h"
@@ -79,20 +82,61 @@
 
   ~FakeSeaPenFetcher() override = default;
 
-  void Start(const std::string& query,
-             OnWallpaperSearchComplete callback) override {
+  void FetchThumbnails(const std::string& query,
+                       OnFetchThumbnailsComplete callback) override {
     VLOG(1) << "Running query: " << query;
     sequenced_task_runner_->PostTaskAndReplyWithResult(
         FROM_HERE, base::BindOnce(&MakeFakeSeaPenImages, query),
         std::move(callback));
   }
 
+  void FetchWallpaper(ash::SeaPenImage image,
+                      OnFetchWallpaperComplete callback) override {
+    VLOG(1) << "Fetching wallpaper: " << image.query
+            << " target_resolution=" << base::to_underlying(target_resolution);
+    std::move(callback).Run(std::move(image));
+  }
+
  private:
   scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner_;
 };
 
 #else  // defined(FAKE_SEA_PEN_FETCHER_FOR_DEBUG)
 
+// Helper function to validate the Manta API output data.
+bool IsValidOutput(manta::proto::OutputData output,
+                   const std::string_view source) {
+  if (!output.has_generation_seed()) {
+    LOG(WARNING) << "Manta output data missing id for " << source;
+    return false;
+  }
+  if (!output.has_image() || !output.image().has_serialized_bytes()) {
+    LOG(WARNING) << "Manta output data missing image for" << source;
+    return false;
+  }
+  return true;
+}
+
+// Common helper function between `FetchThumbnails` and `FetchWallpaper`.
+manta::proto::Request CreateMantaRequest(
+    const std::string& query,
+    absl::optional<uint32_t> generation_seed,
+    int num_output,
+    manta::proto::ImageResolution target_resolution) {
+  manta::proto::Request request;
+  request.set_feature_name(manta::proto::FeatureName::CHROMEOS_WALLPAPER);
+  manta::proto::RequestConfig& request_config =
+      *request.mutable_request_config();
+  if (generation_seed) {
+    request_config.set_generation_seed(*generation_seed);
+  }
+  request_config.set_num_outputs(num_output);
+  request_config.set_image_resolution(target_resolution);
+  manta::proto::InputData& input_data = *request.add_input_data();
+  input_data.set_text(query);
+  return request;
+}
+
 class SeaPenFetcherImpl : public SeaPenFetcher {
  public:
   explicit SeaPenFetcherImpl(Profile* profile) {
@@ -109,8 +153,8 @@
 
   ~SeaPenFetcherImpl() override = default;
 
-  void Start(const std::string& query,
-             OnWallpaperSearchComplete callback) override {
+  void FetchThumbnails(const std::string& query,
+                       OnFetchThumbnailsComplete callback) override {
     if (!snapper_provider_) {
       LOG(WARNING) << "SnapperProvider not available";
       std::move(callback).Run(absl::nullopt);
@@ -123,54 +167,98 @@
       return;
     }
     weak_ptr_factory_.InvalidateWeakPtrs();
-    if (pending_callback_) {
-      std::move(pending_callback_).Run(absl::nullopt);
+    if (pending_fetch_thumbnails_callback_) {
+      std::move(pending_fetch_thumbnails_callback_).Run(absl::nullopt);
     }
-    pending_callback_ = std::move(callback);
-    manta::proto::Request request;
-    request.set_feature_name(manta::proto::FeatureName::CHROMEOS_WALLPAPER);
-    manta::proto::RequestConfig& request_config =
-        *request.mutable_request_config();
-    request_config.set_num_outputs(6);
+    pending_fetch_thumbnails_callback_ = std::move(callback);
     auto target_resolution = manta::proto::ImageResolution::RESOLUTION_1024;
-    request_config.set_image_resolution(target_resolution);
-    manta::proto::InputData& input_data = *request.add_input_data();
-    input_data.set_text(query);
     snapper_provider_->Call(
-        request, base::BindOnce(&SeaPenFetcherImpl::OnSnapperDone,
-                                weak_ptr_factory_.GetWeakPtr(), query,
-                                target_resolution));
+        CreateMantaRequest(query, absl::nullopt, /*num_output=*/6,
+                           target_resolution),
+        base::BindOnce(&SeaPenFetcherImpl::OnFetchThumbnailsDone,
+                       weak_ptr_factory_.GetWeakPtr(), query,
+                       target_resolution));
   }
 
-  void OnSnapperDone(const std::string& query,
-                     manta::proto::ImageResolution resolution,
-                     std::unique_ptr<manta::proto::Response> response,
-                     manta::MantaStatus status) {
-    DCHECK(pending_callback_);
+  void OnFetchThumbnailsDone(const std::string& query,
+                             manta::proto::ImageResolution resolution,
+                             std::unique_ptr<manta::proto::Response> response,
+                             manta::MantaStatus status) {
+    DCHECK(pending_fetch_thumbnails_callback_);
     if (status.status_code != manta::MantaStatusCode::kOk || !response) {
       LOG(WARNING) << "Failed to fetch manta response: " << status.message;
-      std::move(pending_callback_).Run(absl::nullopt);
+      std::move(pending_fetch_thumbnails_callback_).Run(absl::nullopt);
       return;
     }
     std::vector<ash::SeaPenImage> images;
     for (auto& data : *response->mutable_output_data()) {
-      if (!data.has_generation_seed()) {
-        LOG(WARNING) << "Manta output data missing id";
-        continue;
-      }
-      if (!data.has_image() || !data.image().has_serialized_bytes()) {
-        LOG(WARNING) << "Manta output data missing image";
+      if (!IsValidOutput(data, __func__)) {
         continue;
       }
       images.emplace_back(
           std::move(*data.mutable_image()->mutable_serialized_bytes()),
           data.generation_seed(), query, resolution);
     }
-    std::move(pending_callback_).Run(std::move(images));
+    std::move(pending_fetch_thumbnails_callback_).Run(std::move(images));
+  }
+
+  void FetchWallpaper(const ash::SeaPenImage& thumbnail,
+                      OnFetchWallpaperComplete callback) override {
+    if (!snapper_provider_) {
+      LOG(WARNING) << "SnapperProvider not available";
+      std::move(callback).Run(absl::nullopt);
+      return;
+    }
+    CHECK_LE(thumbnail.query.size(),
+             ash::personalization_app::mojom::kMaximumSearchWallpaperTextBytes);
+    weak_ptr_factory_.InvalidateWeakPtrs();
+    if (pending_fetch_wallpaper_callback_) {
+      std::move(pending_fetch_wallpaper_callback_).Run(absl::nullopt);
+    }
+    pending_fetch_wallpaper_callback_ = std::move(callback);
+    // TODO(b/300129219): Add higher resolution when supported
+    auto target_resolution = manta::proto::ImageResolution::RESOLUTION_1024;
+    snapper_provider_->Call(
+        CreateMantaRequest(thumbnail.query, thumbnail.id, /*num_output=*/1,
+                           target_resolution),
+        base::BindOnce(&SeaPenFetcherImpl::OnFetchWallpaperDone,
+                       weak_ptr_factory_.GetWeakPtr(), thumbnail.query,
+                       target_resolution));
+  }
+
+  void OnFetchWallpaperDone(const std::string& query,
+                            manta::proto::ImageResolution resolution,
+                            std::unique_ptr<manta::proto::Response> response,
+                            manta::MantaStatus status) {
+    DCHECK(pending_fetch_wallpaper_callback_);
+    if (status.status_code != manta::MantaStatusCode::kOk || !response) {
+      LOG(WARNING) << "Failed to fetch manta response: " << status.message;
+      std::move(pending_fetch_wallpaper_callback_).Run(absl::nullopt);
+      return;
+    }
+    std::vector<ash::SeaPenImage> images;
+    for (auto& data : *response->mutable_output_data()) {
+      if (!IsValidOutput(data, __func__)) {
+        continue;
+      }
+      images.emplace_back(
+          std::move(*data.mutable_image()->mutable_serialized_bytes()),
+          data.generation_seed(), query, resolution);
+    }
+    if (images.empty()) {
+      LOG(WARNING) << "Got empty images";
+      std::move(pending_fetch_wallpaper_callback_).Run(absl::nullopt);
+      return;
+    }
+    if (images.size() > 1) {
+      LOG(WARNING) << "Got more than 1 output image";
+    }
+    std::move(pending_fetch_wallpaper_callback_).Run(std::move(images.at(0)));
   }
 
  private:
-  OnWallpaperSearchComplete pending_callback_;
+  OnFetchThumbnailsComplete pending_fetch_thumbnails_callback_;
+  OnFetchWallpaperComplete pending_fetch_wallpaper_callback_;
   std::unique_ptr<manta::SnapperProvider> snapper_provider_;
   base::WeakPtrFactory<SeaPenFetcherImpl> weak_ptr_factory_{this};
 };
diff --git a/chrome/browser/ash/wallpaper_handlers/sea_pen_fetcher.h b/chrome/browser/ash/wallpaper_handlers/sea_pen_fetcher.h
index 4f860cd..a121fcf 100644
--- a/chrome/browser/ash/wallpaper_handlers/sea_pen_fetcher.h
+++ b/chrome/browser/ash/wallpaper_handlers/sea_pen_fetcher.h
@@ -11,6 +11,7 @@
 
 #include "ash/public/cpp/wallpaper/sea_pen_image.h"
 #include "base/functional/callback_forward.h"
+#include "components/manta/proto/manta.pb.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 class Profile;
@@ -19,8 +20,10 @@
 
 class SeaPenFetcher {
  public:
-  using OnWallpaperSearchComplete = base::OnceCallback<void(
+  using OnFetchThumbnailsComplete = base::OnceCallback<void(
       absl::optional<std::vector<ash::SeaPenImage>> images)>;
+  using OnFetchWallpaperComplete =
+      base::OnceCallback<void(absl::optional<ash::SeaPenImage> image)>;
 
   SeaPenFetcher();
 
@@ -31,8 +34,12 @@
 
   // Run `query` against the Manta API. `query` is required to be a valid UTF-8
   // string no longer than `kMaximumSearchWallpaperTextBytes`.
-  virtual void Start(const std::string& query,
-                     OnWallpaperSearchComplete callback) = 0;
+  virtual void FetchThumbnails(const std::string& query,
+                               OnFetchThumbnailsComplete callback) = 0;
+
+  // Calls the Manta API to fetch a higher resolution image of the thumbnail.
+  virtual void FetchWallpaper(const ash::SeaPenImage& thumbnail,
+                              OnFetchWallpaperComplete callback) = 0;
 
  private:
   // Allow delegate to view the constructor function.
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index e819129..7216453 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -1020,9 +1020,11 @@
 #endif  // !BUILDFLAG(IS_ANDROID)
 
 #if BUILDFLAG(IS_WIN)
+#if !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
   // This is needed to enable ETW exporting. This is only relevant for the
   // browser process, as other processes enable it separately.
   base::trace_event::TraceEventETWExport::EnableETWExport();
+#endif
 #endif  // BUILDFLAG(IS_WIN)
 
   // Reset the command line in the crash report details, since we may have
diff --git a/chrome/browser/compose/chrome_compose_client.cc b/chrome/browser/compose/chrome_compose_client.cc
index c6c99b61..e0bb65f 100644
--- a/chrome/browser/compose/chrome_compose_client.cc
+++ b/chrome/browser/compose/chrome_compose_client.cc
@@ -9,6 +9,7 @@
 #include <utility>
 
 #include "base/functional/bind.h"
+#include "base/strings/utf_string_conversion_utils.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/bind_post_task.h"
 #include "base/task/thread_pool.h"
@@ -161,11 +162,15 @@
     // Insert or replace with a new session.
     sessions_.insert_or_assign(active_compose_field_id_.value(),
                                std::move(new_session));
+
+    // Only record the selection length for new sessions.
+    auto utf8_chars = base::CountUnicodeCharacters(selected_text);
+    compose::LogComposeDialogSelectionLength(
+        utf8_chars.has_value() ? utf8_chars.value() : 0);
   } else {
     current_session = it->second.get();
     current_session->set_compose_callback(std::move(callback));
   }
-
   current_session->InitializeWithText(selected_text);
 }
 
diff --git a/chrome/browser/compose/chrome_compose_client_unittest.cc b/chrome/browser/compose/chrome_compose_client_unittest.cc
index 4e10276..ad137cf 100644
--- a/chrome/browser/compose/chrome_compose_client_unittest.cc
+++ b/chrome/browser/compose/chrome_compose_client_unittest.cc
@@ -8,6 +8,7 @@
 
 #include "base/functional/callback_helpers.h"
 #include "base/memory/raw_ptr.h"
+#include "base/strings/utf_string_conversion_utils.h"
 #include "base/test/bind.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/metrics/histogram_tester.h"
@@ -236,8 +237,6 @@
 };
 
 TEST_F(ChromeComposeClientTest, TestCompose) {
-  base::HistogramTester histogram_tester;
-
   ShowDialogAndBindMojo();
   EXPECT_CALL(model_executor(), ExecuteModel(_, _, _))
       .WillOnce(testing::WithArg<2>(testing::Invoke(
@@ -265,12 +264,12 @@
   EXPECT_EQ("Cucumbers", result->result);
 
   // Check that a response result OK metric was emitted.
-  histogram_tester.ExpectUniqueSample(compose::kComposeResponseStatus,
-                                      compose::mojom::ComposeStatus::kOk, 1);
+  histograms().ExpectUniqueSample(compose::kComposeResponseStatus,
+                                  compose::mojom::ComposeStatus::kOk, 1);
   // Check that a response duration OK metric was emitted.
-  histogram_tester.ExpectTotalCount(compose::kComposeResponseDurationOk, 1);
+  histograms().ExpectTotalCount(compose::kComposeResponseDurationOk, 1);
   // Check that a no response duration Error metric was emitted.
-  histogram_tester.ExpectTotalCount(compose::kComposeResponseDurationError, 0);
+  histograms().ExpectTotalCount(compose::kComposeResponseDurationError, 0);
 }
 
 TEST_F(ChromeComposeClientTest, TestComposeParams) {
@@ -335,7 +334,6 @@
 // Tests that we return an error if Optimization Guide is unable to parse the
 // response. In this case the response will be absl::nullopt.
 TEST_F(ChromeComposeClientTest, TestComposeNoParsedAny) {
-  base::HistogramTester histogram_tester;
   ShowDialogAndBindMojo();
   EXPECT_CALL(model_executor(), ExecuteModel(_, _, _))
       .WillOnce(testing::WithArg<2>(testing::Invoke(
@@ -360,13 +358,12 @@
   EXPECT_EQ(compose::mojom::ComposeStatus::kTryAgain, result->status);
 
   // Check that a response result Try-Again metric was emitted.
-  histogram_tester.ExpectUniqueSample(compose::kComposeResponseStatus,
-                                      compose::mojom::ComposeStatus::kTryAgain,
-                                      1);
+  histograms().ExpectUniqueSample(compose::kComposeResponseStatus,
+                                  compose::mojom::ComposeStatus::kTryAgain, 1);
   // Check that a response duration Error metric was emitted.
-  histogram_tester.ExpectTotalCount(compose::kComposeResponseDurationError, 1);
+  histograms().ExpectTotalCount(compose::kComposeResponseDurationError, 1);
   // Check that a no response duration OK metric was emitted.
-  histogram_tester.ExpectTotalCount(compose::kComposeResponseDurationOk, 0);
+  histograms().ExpectTotalCount(compose::kComposeResponseDurationOk, 0);
 }
 
 TEST_F(ChromeComposeClientTest, TestOptimizationGuideDisabled) {
@@ -863,9 +860,19 @@
   EXPECT_CALL(model_executor(), ExecuteModel(_, _, _))
       .WillOnce(base::test::RunOnceClosure(execute_model_future.GetCallback()));
 
-  SetSelection(u"testing alpha bravo charlie");
+  std::u16string selected_text = u"ŧëśŧĩňĝ âľpħâ ƅřâɤō ĉħâŗľĩë";
+  std::string selected_text_utf8 = base::UTF16ToUTF8(selected_text);
+  SetSelection(selected_text);
   ShowDialogAndBindMojo();
 
+  // Check that the UTF8 byte length has zero counts.
+  histograms().ExpectBucketCount(compose::kComposeDialogSelectionLength,
+                                 base::UTF16ToUTF8(selected_text).size(), 0);
+  // Check that the number of UTF8 code points has one count.
+  histograms().ExpectBucketCount(
+      compose::kComposeDialogSelectionLength,
+      base::CountUnicodeCharacters(selected_text_utf8).value(), 1);
+
   base::test::TestFuture<compose::mojom::OpenMetadataPtr> open_test_future;
   page_handler()->RequestInitialState(open_test_future.GetCallback());
   compose::mojom::OpenMetadataPtr result = open_test_future.Take();
@@ -882,6 +889,9 @@
   SetSelection(words);
   ShowDialogAndBindMojo();
 
+  histograms().ExpectBucketCount(compose::kComposeDialogSelectionLength,
+                                 base::UTF16ToUTF8(words).size(), 1);
+
   base::test::TestFuture<compose::mojom::OpenMetadataPtr> open_test_future;
   page_handler()->RequestInitialState(open_test_future.GetCallback());
   compose::mojom::OpenMetadataPtr result = open_test_future.Take();
diff --git a/chrome/browser/compose/compose_dialog_browsertest.cc b/chrome/browser/compose/compose_dialog_browsertest.cc
new file mode 100644
index 0000000..4487159
--- /dev/null
+++ b/chrome/browser/compose/compose_dialog_browsertest.cc
@@ -0,0 +1,66 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/compose/compose_session.h"
+
+#include "base/test/scoped_feature_list.h"
+#include "chrome/app/chrome_command_ids.h"
+#include "chrome/browser/renderer_context_menu/render_view_context_menu_test_util.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/tabs/tab_enums.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "components/compose/core/browser/compose_features.h"
+#include "components/optimization_guide/core/optimization_guide_features.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/test/browser_test.h"
+#include "content/public/test/browser_test_utils.h"
+#include "ui/gfx/geometry/point_conversions.h"
+
+namespace compose {
+
+//  IDC_CONTEXT_COMPOSE
+
+class ComposeSessionBrowserTest : public InProcessBrowserTest {
+ public:
+  void SetUp() override {
+    feature_list()->InitWithFeatures(
+        {compose::features::kEnableCompose,
+         optimization_guide::features::kOptimizationGuideModelExecution},
+        {});
+    InProcessBrowserTest::SetUp();
+  }
+
+  base::test::ScopedFeatureList* feature_list() { return &feature_list_; }
+
+ protected:
+  base::test::ScopedFeatureList feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_F(ComposeSessionBrowserTest, LifetimeOfBubbleWrapper) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents();
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(
+      browser(), embedded_test_server()->GetURL("/compose/test2.html")));
+  ASSERT_NE(nullptr, ChromeComposeClient::FromWebContents(web_contents));
+  auto* client = ChromeComposeClient::FromWebContents(web_contents);
+  client->GetComposeEnabling().SetEnabledForTesting();
+
+  // get point of element
+  gfx::PointF textarea_center =
+      content::GetCenterCoordinatesOfElementWithId(web_contents, "elem1");
+  autofill::FormFieldData field_data;
+  field_data.bounds = gfx::RectF((textarea_center), gfx::SizeF(1, 1));
+
+  client->ShowComposeDialog(
+      autofill::AutofillComposeDelegate::UiEntryPoint::kAutofillPopup,
+      field_data, std::nullopt, base::NullCallback());
+
+  // close window right away
+  browser()->tab_strip_model()->CloseWebContentsAt(0,
+                                                   TabCloseTypes::CLOSE_NONE);
+}
+
+}  // namespace compose
diff --git a/chrome/browser/compose/compose_enabling.cc b/chrome/browser/compose/compose_enabling.cc
index 26f0f3f..f13d6e176 100644
--- a/chrome/browser/compose/compose_enabling.cc
+++ b/chrome/browser/compose/compose_enabling.cc
@@ -203,6 +203,8 @@
       GetOptimizationGuidanceForUrl(url, profile);
   if (decision ==
       compose::ComposeHintDecision::COMPOSE_HINT_DECISION_COMPOSE_DISABLED) {
+    compose::LogComposeContextMenuShowStatus(
+        compose::ComposeShowStatus::kPerUrlChecksFailed);
     return false;
   }
 
diff --git a/chrome/browser/compose/compose_enabling_unittest.cc b/chrome/browser/compose/compose_enabling_unittest.cc
index eb401e09..52e1dfa 100644
--- a/chrome/browser/compose/compose_enabling_unittest.cc
+++ b/chrome/browser/compose/compose_enabling_unittest.cc
@@ -102,7 +102,7 @@
         std::make_unique<testing::NiceMock<MockTranslateManager>>(
             mock_translate_client_.get());
 
-    AddTab(browser(), GURL("http://foo/1"));
+    AddTab(browser(), GURL(kExampleURL));
     context_menu_params_.is_content_editable_for_autofill = true;
     context_menu_params_.frame_origin = GetOrigin();
   }
@@ -580,3 +580,45 @@
   EXPECT_EQ(compose::ComposeHintDecision::COMPOSE_HINT_DECISION_UNSPECIFIED,
             decision);
 }
+
+TEST_F(ComposeEnablingTest, ShouldTriggerContextMenuOutOfPolicyURLTest) {
+  ComposeEnabling compose_enabling(&mock_translate_language_provider_);
+  // Enable everything.
+  compose_enabling.SetEnabledForTesting();
+  // Set the language to something we support.
+  SetLanguage("en");
+
+  // Set ContextMenuParams to textarea, which we support.
+  context_menu_params_.is_content_editable_for_autofill = false;
+  context_menu_params_.form_control_type =
+      blink::mojom::FormControlType::kTextArea;
+
+  base::HistogramTester histogram_tester;
+
+  // Set up a fake metadata to return from the mock.
+  optimization_guide::OptimizationMetadata test_metadata;
+  compose::ComposeHintMetadata compose_hint_metadata;
+  compose_hint_metadata.set_decision(
+      compose::ComposeHintDecision::COMPOSE_HINT_DECISION_COMPOSE_DISABLED);
+  test_metadata.SetAnyMetadataForTesting(compose_hint_metadata);
+
+  EXPECT_CALL(opt_guide(),
+              CanApplyOptimization(
+                  GURL(kExampleURL),
+                  optimization_guide::proto::OptimizationType::COMPOSE,
+                  ::testing::An<optimization_guide::OptimizationMetadata*>()))
+      .WillRepeatedly(testing::DoAll(
+          testing::SetArgPointee<2>(test_metadata),
+          testing::Return(
+              optimization_guide::OptimizationGuideDecision::kTrue)));
+  compose_enabling.SetOptimizationGuideForTest(&opt_guide());
+
+  EXPECT_FALSE(compose_enabling.ShouldTriggerContextMenu(
+      GetProfile(), mock_translate_manager_.get(), /*rfh=*/GetRenderFrameHost(),
+      context_menu_params_));
+
+  // Verify the metrics reflect the decision not to show the page.
+  histogram_tester.ExpectUniqueSample(
+      compose::kComposeShowStatus,
+      compose::ComposeShowStatus::kPerUrlChecksFailed, 1);
+}
diff --git a/chrome/browser/compose/compose_session.cc b/chrome/browser/compose/compose_session.cc
index 08f9b1e..187678e 100644
--- a/chrome/browser/compose/compose_session.cc
+++ b/chrome/browser/compose/compose_session.cc
@@ -26,6 +26,7 @@
 #include "components/compose/core/browser/compose_metrics.h"
 #include "components/compose/core/browser/config.h"
 #include "components/optimization_guide/core/model_execution/optimization_guide_model_execution_error.h"
+#include "components/optimization_guide/core/model_quality/feature_type_map.h"
 #include "components/optimization_guide/core/optimization_guide_features.h"
 #include "components/optimization_guide/core/optimization_guide_util.h"
 #include "components/optimization_guide/proto/features/compose.pb.h"
@@ -87,6 +88,18 @@
 
 ComposeSession::~ComposeSession() {
   LogComposeSessionCloseReason(close_reason_);
+
+  // If we have a modeling quality log entry, upload it.
+  if (modeling_log_entry_) {
+    optimization_guide::proto::ComposeQuality* quality =
+        modeling_log_entry_.get()
+            ->quality_data<optimization_guide::ComposeFeatureTypeMap>();
+    if (quality) {
+      quality->set_final_status(final_status_);
+    }
+    // Ensure that log gets uploaded on destruction.
+    modeling_log_entry_.reset();
+  }
 }
 
 void ComposeSession::Bind(
@@ -206,6 +219,11 @@
   if (dialog_remote_.is_bound()) {
     dialog_remote_->ResponseReceived(std::move(ui_response));
   }
+
+  // If log entry is null don't do anything.
+  if (log_entry.get()) {
+    modeling_log_entry_ = std::move(log_entry);
+  }
 }
 
 void ComposeSession::ProcessError(compose::mojom::ComposeStatus error) {
@@ -328,4 +346,20 @@
 void ComposeSession::SetCloseReason(
     compose::ComposeSessionCloseReason close_reason) {
   close_reason_ = close_reason;
+  switch (close_reason) {
+    case compose::ComposeSessionCloseReason::kCloseButtonPressed:
+      final_status_ = optimization_guide::proto::FinalStatus::STATUS_ABANDONED;
+      break;
+    case compose::ComposeSessionCloseReason::kEndedImplicitly:
+      final_status_ = optimization_guide::proto::FinalStatus::
+          STATUS_FINISHED_WITHOUT_INSERT;
+      break;
+    case compose::ComposeSessionCloseReason::kAcceptedSuggestion:
+      final_status_ = optimization_guide::proto::FinalStatus::STATUS_INSERTED;
+      break;
+    default:
+      final_status_ =
+          optimization_guide::proto::FinalStatus::STATUS_UNSPECIFIED;
+      break;
+  }
 }
diff --git a/chrome/browser/compose/compose_session.h b/chrome/browser/compose/compose_session.h
index d4bb071..57f072f 100644
--- a/chrome/browser/compose/compose_session.h
+++ b/chrome/browser/compose/compose_session.h
@@ -145,6 +145,8 @@
 
   // Reason that a compose session was exited, used for metrics.
   compose::ComposeSessionCloseReason close_reason_;
+  // Reason that a compose session was exited, used for quality logging.
+  optimization_guide::proto::FinalStatus final_status_;
 
   // ComposeSession is owned by WebContentsUserData, so `web_contents_` outlives
   // `this`.
@@ -160,6 +162,8 @@
 
   base::OnceCallback<void(const std::string&)> continue_compose_;
 
+  std::unique_ptr<optimization_guide::ModelQualityLogEntry> modeling_log_entry_;
+
   base::WeakPtrFactory<ComposeSession> weak_ptr_factory_;
 };
 
diff --git a/chrome/browser/download/download_dir_util.cc b/chrome/browser/download/download_dir_util.cc
index f7f60ae..5d946c84 100644
--- a/chrome/browser/download/download_dir_util.cc
+++ b/chrome/browser/download/download_dir_util.cc
@@ -14,16 +14,9 @@
 #include "chrome/browser/ash/drive/drive_integration_service.h"
 #elif BUILDFLAG(IS_CHROMEOS_LACROS)
 #include "chrome/common/chrome_paths_lacros.h"
+#include "components/drive/file_system_core_util.h"
 #endif
 
-namespace {
-#if BUILDFLAG(IS_CHROMEOS)
-// Drive root folder relative to its mount point.
-const base::FilePath::CharType* kRootRelativeToDriveMount =
-    FILE_PATH_LITERAL("root");
-#endif  // BUILDFLAG(IS_CHROMEOS)
-}  // namespace
-
 namespace download_dir_util {
 
 #if BUILDFLAG(IS_CHROMEOS)
@@ -57,7 +50,7 @@
 #endif
 
   base::FilePath::StringType google_drive_root =
-      google_drive.Append(kRootRelativeToDriveMount).value();
+      google_drive.Append(drive::util::kDriveMyDriveRootDirName).value();
   std::string expanded_value = old_path.value();
   *new_path = base::FilePath(expanded_value.replace(
       position, strlen(kDriveNamePolicyVariableName), google_drive_root));
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.cc b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.cc
index e718abd..17d6a931 100644
--- a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.cc
+++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.cc
@@ -291,23 +291,36 @@
 
   UploadDataStatus upload_data_status = delegate->UploadData();
 
-  // Only show UI if work is in progress in the background, the user must
-  // wait for a verdict.
-  // TODO(b/301996782): Add UI for kNoLocalClientFound case.
-  bool show_ui = upload_data_status == UploadDataStatus::kInProgress &&
-                 wait_for_verdict && (*UIEnabledStorage());
+  // Only show UI if one of the two conditions is met:
+  // 1. work is ongoing in the background and that the user must wait for a
+  // verdict.
+  // 2. no local client is found and fail-closed setting is on.
+  bool show_in_progress_ui =
+      upload_data_status == UploadDataStatus::kInProgress && wait_for_verdict &&
+      (*UIEnabledStorage());
+  bool show_fail_closed_ui =
+      upload_data_status == UploadDataStatus::kNoLocalClientFound &&
+      !should_allow_by_default && (*UIEnabledStorage());
+
+  DVLOG(1) << __func__ << ": show_fail_closed_ui=" << show_fail_closed_ui;
 
   // If the UI is enabled, create the modal dialog.
-  if (show_ui) {
+  if (show_in_progress_ui || show_fail_closed_ui) {
     ContentAnalysisDelegate* delegate_ptr = delegate.get();
     int files_count = delegate_ptr->data_.paths.size();
 
+    // Update the result early if fail-closed is determined, otherwise set it to
+    // the default state.
+    FinalContentAnalysisResult result =
+        show_fail_closed_ui ? FinalContentAnalysisResult::FAIL_CLOSED
+                            : FinalContentAnalysisResult::SUCCESS;
+
     // This dialog is owned by the constrained_window code.
     delegate_ptr->dialog_ = new ContentAnalysisDialog(
         std::move(delegate),
         delegate_ptr->data_.settings.cloud_or_local_settings
             .is_cloud_analysis(),
-        web_contents, access_point, files_count);
+        web_contents, access_point, files_count, result);
     return;
   }
 
@@ -790,11 +803,12 @@
 }
 
 bool ContentAnalysisDelegate::UpdateDialog() {
-  // Only show final result UI in the case of a cloud analysis.
-  // In the local case, the local agent does that.
-  return data_.settings.cloud_or_local_settings.is_cloud_analysis()
-             ? ShowFinalResultInDialog()
-             : CancelDialog();
+  // In the case of fail-closed, show the final result UI regardless of cloud or
+  // local analysis. Otherwise, only show the result for cloud analysis.
+  bool show_ui = final_result_ == FinalContentAnalysisResult::FAIL_CLOSED ||
+                 data_.settings.cloud_or_local_settings.is_cloud_analysis();
+
+  return show_ui ? ShowFinalResultInDialog() : CancelDialog();
 }
 
 void ContentAnalysisDelegate::MaybeCompleteScanRequest() {
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_browsertest.cc b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_browsertest.cc
index 88046caf..a6fa921 100644
--- a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_browsertest.cc
+++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_browsertest.cc
@@ -1382,6 +1382,105 @@
   content_analysis_run_loop.Run();
 }
 
+// This class tests if ContentAnalysisDelegate handles the settings
+// `default_action` from Connector policies correctly, specifically for cloud
+// analysis.
+class ContentAnalysisDelegateDefaultActionSettingBrowserTest
+    : public ContentAnalysisDelegateBrowserTestBase,
+      public testing::WithParamInterface<
+          std::tuple<safe_browsing::BinaryUploadService::Result, bool>> {
+ public:
+  ContentAnalysisDelegateDefaultActionSettingBrowserTest()
+      : ContentAnalysisDelegateBrowserTestBase(/*machine_scope=*/true) {}
+
+  safe_browsing::BinaryUploadService::Result upload_result() const {
+    return std::get<0>(GetParam());
+  }
+
+  bool setting_param() const { return std::get<1>(GetParam()); }
+
+  // Use a string since the setting value is inserted into a JSON policy.
+  const char* default_action_setting_value() const {
+    return setting_param() ? "block" : "allow";
+  }
+
+  bool expected_result() const { return !setting_param(); }
+};
+
+INSTANTIATE_TEST_SUITE_P(
+    ,
+    ContentAnalysisDelegateDefaultActionSettingBrowserTest,
+    testing::Combine(
+        testing::Values(
+            safe_browsing::BinaryUploadService::Result::UPLOAD_FAILURE,
+            safe_browsing::BinaryUploadService::Result::TIMEOUT,
+            safe_browsing::BinaryUploadService::Result::FAILED_TO_GET_TOKEN,
+            safe_browsing::BinaryUploadService::Result::TOO_MANY_REQUESTS,
+            safe_browsing::BinaryUploadService::Result::UNKNOWN),
+        testing::Bool()));
+
+IN_PROC_BROWSER_TEST_P(ContentAnalysisDelegateDefaultActionSettingBrowserTest,
+                       DefaultAction) {
+  base::ScopedAllowBlockingForTesting allow_blocking;
+
+  // Set up delegate and upload service.
+  EnableUploadsScanningAndReporting();
+  constexpr char kDefaultActionPref[] = R"({
+    "service_provider": "google",
+    "enable": [
+      {
+        "url_list": ["*"],
+        "tags": ["dlp"]
+      }
+    ],
+    "block_until_verdict": 1,
+    "default_action": "%s"
+  })";
+  enterprise_connectors::test::SetAnalysisConnector(
+      browser()->profile()->GetPrefs(), BULK_DATA_ENTRY,
+      base::StringPrintf(kDefaultActionPref, default_action_setting_value()),
+      /*machine_scope=*/true);
+
+  base::RunLoop content_analysis_run_loop;
+  ContentAnalysisDelegate::SetFactoryForTesting(
+      base::BindRepeating(&MinimalFakeContentAnalysisDelegate::Create,
+                          content_analysis_run_loop.QuitClosure()));
+
+  FakeBinaryUploadServiceStorage()->SetAuthorized(true);
+
+  // Create test data.
+  ContentAnalysisDelegate::Data data;
+  data.text.emplace_back(text());
+  ASSERT_TRUE(ContentAnalysisDelegate::IsEnabled(
+      browser()->profile(), GURL(kTestUrl), &data, BULK_DATA_ENTRY));
+  ContentAnalysisResponse text_response;
+  FakeBinaryUploadServiceStorage()->SetResponseForText(upload_result(),
+                                                       text_response);
+
+  bool called = false;
+  base::RunLoop run_loop;
+  SetQuitClosure(run_loop.QuitClosure());
+
+  // Start test.
+  ContentAnalysisDelegate::CreateForWebContents(
+      browser()->tab_strip_model()->GetActiveWebContents(), std::move(data),
+      base::BindLambdaForTesting(
+          [this, &called](const ContentAnalysisDelegate::Data& data,
+                          ContentAnalysisDelegate::Result& result) {
+            ASSERT_EQ(result.text_results[0], expected_result());
+            called = true;
+          }),
+      safe_browsing::DeepScanAccessPoint::PASTE);
+
+  FakeBinaryUploadServiceStorage()->ReturnAuthorizedResponse();
+
+  run_loop.Run();
+  EXPECT_TRUE(called);
+
+  // Ensure the ContentAnalysisDelegate is destroyed before the end of the test.
+  content_analysis_run_loop.Run();
+}
+
 // This class tests that ContentAnalysisDelegate is handled correctly when the
 // requests are already unauthorized. The test parameter represents if the scan
 // is set to be blocking through policy.
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_unittest.cc b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_unittest.cc
index 4092fef..bbe14f8 100644
--- a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_unittest.cc
+++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_unittest.cc
@@ -1440,8 +1440,10 @@
     return is_cloud() ? "google" : "local_system_agent";
   }
 
+  bool should_fail_closed() const { return std::get<2>(GetParam()); }
+
   const char* default_action_setting() const {
-    return std::get<2>(GetParam()) ? "block" : "allow";
+    return should_fail_closed() ? "block" : "allow";
   }
 
   ContentAnalysisResponse ConnectorStatusCallback(const std::string& contents,
@@ -1453,6 +1455,18 @@
  protected:
   ScopedSetDMToken scoped_dm_token_{
       policy::DMToken::CreateValidToken(kDmToken)};
+
+  bool ResultIsFailClosed(safe_browsing::BinaryUploadService::Result result) {
+    return result ==
+               safe_browsing::BinaryUploadService::Result::UPLOAD_FAILURE ||
+           result == safe_browsing::BinaryUploadService::Result::TIMEOUT ||
+           result == safe_browsing::BinaryUploadService::Result::
+                         FAILED_TO_GET_TOKEN ||
+           result ==
+               safe_browsing::BinaryUploadService::Result::TOO_MANY_REQUESTS ||
+           result == safe_browsing::BinaryUploadService::Result::UNKNOWN;
+  }
+
 #if BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
   // This installs a fake SDK manager that creates fake SDK clients when
   // its GetClient() method is called. This is needed so that calls to
@@ -1495,8 +1509,16 @@
   RunUntilDone();
   EXPECT_TRUE(called);
 
-  EXPECT_EQ(is_cloud(), test::FakeContentAnalysisDelegate::WasDialogShown());
-  EXPECT_NE(is_cloud(), test::FakeContentAnalysisDelegate::WasDialogCanceled());
+  // Dialog should be shown for fail-close cases, regardless of local or cloud,
+  // otherwise dialog should be hidden for local analysis.
+  if (ResultIsFailClosed(result()) && should_fail_closed()) {
+    EXPECT_TRUE(test::FakeContentAnalysisDelegate::WasDialogShown());
+    EXPECT_FALSE(test::FakeContentAnalysisDelegate::WasDialogCanceled());
+  } else {
+    EXPECT_EQ(is_cloud(), test::FakeContentAnalysisDelegate::WasDialogShown());
+    EXPECT_NE(is_cloud(),
+              test::FakeContentAnalysisDelegate::WasDialogCanceled());
+  }
 }
 
 INSTANTIATE_TEST_SUITE_P(
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog.cc b/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog.cc
index eb3aeff..e2ef4c9a 100644
--- a/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog.cc
+++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog.cc
@@ -488,6 +488,7 @@
   switch (final_result_) {
     case FinalContentAnalysisResult::ENCRYPTED_FILES:
     case FinalContentAnalysisResult::LARGE_FILES:
+    case FinalContentAnalysisResult::FAIL_CLOSED:
     case FinalContentAnalysisResult::FAILURE:
       dialog_state_ = State::FAILURE;
       break;
@@ -543,11 +544,15 @@
 void ContentAnalysisDialog::UpdateDialog() {
   if (!contents_view_) {
     // If the dialog is no longer pending, a final verdict was received before
-    // the dalog was displayed.  If the verdict is success and this is not a
-    // cloud analysis, don't bother the user at all and close the dialog.
-    // Otherwise make sure it show right away with the verdict.
+    // the dialog was displayed.  If the verdict is success or it is not fail
+    // closed for local analysis, don't bother the user at all and close the
+    // dialog. Otherwise make sure it shows right away with the verdict.
     if (!is_pending()) {
-      if (is_success() || !is_cloud_) {
+      bool display_ui_for_local =
+          !is_cloud_ &&
+          final_result_ == FinalContentAnalysisResult::FAIL_CLOSED;
+      DVLOG(1) << __func__ << ": display_ui_for_local=" << display_ui_for_local;
+      if (is_success() || !display_ui_for_local) {
         CancelDialogAndDelete();
       } else {
         ShowDialogNow();
@@ -798,6 +803,12 @@
   if (has_custom_message())
     return GetCustomMessage();
 
+  if (final_result_ == FinalContentAnalysisResult::FAIL_CLOSED) {
+    DVLOG(1) << __func__ << ": display fail-closed message.";
+    return l10n_util::GetStringUTF16(
+        IDS_DEEP_SCANNING_DIALOG_UPLOAD_FAIL_CLOSED_MESSAGE);
+  }
+
   if (final_result_ == FinalContentAnalysisResult::LARGE_FILES) {
     if (is_print_scan()) {
       return l10n_util::GetStringUTF16(
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog_browsertest.cc b/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog_browsertest.cc
index 8d46556b..8d9b7c0 100644
--- a/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog_browsertest.cc
+++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog_browsertest.cc
@@ -959,6 +959,16 @@
 }
 
 IN_PROC_BROWSER_TEST_F(ContentAnalysisDialogPlainTests,
+                       TestOpenInFailClosedState) {
+  ContentAnalysisDialog* dialog =
+      CreateContentAnalysisDialog(std::make_unique<MockDelegate>(),
+                                  FinalContentAnalysisResult::FAIL_CLOSED);
+  EXPECT_EQ(nullptr, dialog->GetSideIconSpinnerForTesting());
+  EXPECT_EQ(dialog->GetMessageForTesting()->GetText(),
+            u"Scan failed. This action is blocked by your administrator.");
+}
+
+IN_PROC_BROWSER_TEST_F(ContentAnalysisDialogPlainTests,
                        TestOpenInLargeFilesState) {
   ContentAnalysisDialog* dialog =
       CreateContentAnalysisDialog(std::make_unique<MockDelegate>(),
diff --git a/chrome/browser/enterprise/connectors/analysis/files_request_handler_unittest.cc b/chrome/browser/enterprise/connectors/analysis/files_request_handler_unittest.cc
index f746ce29..305e427 100644
--- a/chrome/browser/enterprise/connectors/analysis/files_request_handler_unittest.cc
+++ b/chrome/browser/enterprise/connectors/analysis/files_request_handler_unittest.cc
@@ -171,6 +171,9 @@
     case FinalContentAnalysisResult::FAILURE:
       *os << "FAILURE";
       break;
+    case FinalContentAnalysisResult::FAIL_CLOSED:
+      *os << "FAIL_CLOSED";
+      break;
     case FinalContentAnalysisResult::LARGE_FILES:
       *os << "LARGE_FILES";
       break;
diff --git a/chrome/browser/enterprise/connectors/common.cc b/chrome/browser/enterprise/connectors/common.cc
index 3b8debb..e6c5210 100644
--- a/chrome/browser/enterprise/connectors/common.cc
+++ b/chrome/browser/enterprise/connectors/common.cc
@@ -28,6 +28,8 @@
 #include "components/policy/core/common/policy_loader_lacros.h"
 #endif
 
+using safe_browsing::BinaryUploadService;
+
 namespace enterprise_connectors {
 
 namespace {
@@ -59,12 +61,11 @@
 
 }  // namespace
 
-bool ResultShouldAllowDataUse(
-    const AnalysisSettings& settings,
-    safe_browsing::BinaryUploadService::Result upload_result) {
+bool ResultShouldAllowDataUse(const AnalysisSettings& settings,
+                              BinaryUploadService::Result upload_result) {
   bool default_action_allow_data_use =
       settings.default_action == DefaultAction::kAllow;
-  using safe_browsing::BinaryUploadService;
+
   // Keep this implemented as a switch instead of a simpler if statement so that
   // new values added to BinaryUploadService::Result cause a compiler error.
   switch (upload_result) {
@@ -99,7 +100,7 @@
 
 RequestHandlerResult CalculateRequestHandlerResult(
     const AnalysisSettings& settings,
-    safe_browsing::BinaryUploadService::Result upload_result,
+    BinaryUploadService::Result upload_result,
     const ContentAnalysisResponse& response) {
   std::string tag;
   auto action = GetHighestPrecedenceAction(response, &tag);
@@ -111,21 +112,26 @@
   result.complies = file_complies;
   result.request_token = response.request_token();
   result.tag = tag;
-  if (!file_complies) {
-    if (upload_result ==
-        safe_browsing::BinaryUploadService::Result::FILE_TOO_LARGE) {
-      result.final_result = FinalContentAnalysisResult::LARGE_FILES;
-    } else if (upload_result ==
-               safe_browsing::BinaryUploadService::Result::FILE_ENCRYPTED) {
-      result.final_result = FinalContentAnalysisResult::ENCRYPTED_FILES;
-    } else if (action == TriggeredRule::WARN) {
-      result.final_result = FinalContentAnalysisResult::WARNING;
-    } else {
-      result.final_result = FinalContentAnalysisResult::FAILURE;
-    }
-  } else {
+
+  if (file_complies) {
     result.final_result = FinalContentAnalysisResult::SUCCESS;
+    return result;
   }
+
+  // If file is non-compliant, map it to the specific case.
+  if (ResultIsFailClosed(upload_result)) {
+    DVLOG(1) << __func__ << ": result mapped to fail-closed.";
+    result.final_result = FinalContentAnalysisResult::FAIL_CLOSED;
+  } else if (upload_result == BinaryUploadService::Result::FILE_TOO_LARGE) {
+    result.final_result = FinalContentAnalysisResult::LARGE_FILES;
+  } else if (upload_result == BinaryUploadService::Result::FILE_ENCRYPTED) {
+    result.final_result = FinalContentAnalysisResult::ENCRYPTED_FILES;
+  } else if (action == TriggeredRule::WARN) {
+    result.final_result = FinalContentAnalysisResult::WARNING;
+  } else {
+    result.final_result = FinalContentAnalysisResult::FAILURE;
+  }
+
   return result;
 }
 
@@ -435,14 +441,22 @@
       /* file_count */ 1, state, download_item);
 }
 
-bool CloudResultIsFailure(safe_browsing::BinaryUploadService::Result result) {
-  return result != safe_browsing::BinaryUploadService::Result::SUCCESS;
+bool CloudResultIsFailure(BinaryUploadService::Result result) {
+  return result != BinaryUploadService::Result::SUCCESS;
 }
 
-bool LocalResultIsFailure(safe_browsing::BinaryUploadService::Result result) {
-  return result != safe_browsing::BinaryUploadService::Result::SUCCESS &&
-         result != safe_browsing::BinaryUploadService::Result::FILE_TOO_LARGE &&
-         result != safe_browsing::BinaryUploadService::Result::FILE_ENCRYPTED;
+bool LocalResultIsFailure(BinaryUploadService::Result result) {
+  return result != BinaryUploadService::Result::SUCCESS &&
+         result != BinaryUploadService::Result::FILE_TOO_LARGE &&
+         result != BinaryUploadService::Result::FILE_ENCRYPTED;
+}
+
+bool ResultIsFailClosed(BinaryUploadService::Result result) {
+  return result == BinaryUploadService::Result::UPLOAD_FAILURE ||
+         result == BinaryUploadService::Result::TIMEOUT ||
+         result == BinaryUploadService::Result::FAILED_TO_GET_TOKEN ||
+         result == BinaryUploadService::Result::TOO_MANY_REQUESTS ||
+         result == BinaryUploadService::Result::UNKNOWN;
 }
 
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
diff --git a/chrome/browser/enterprise/connectors/common.h b/chrome/browser/enterprise/connectors/common.h
index 86de775..ae77bc8 100644
--- a/chrome/browser/enterprise/connectors/common.h
+++ b/chrome/browser/enterprise/connectors/common.h
@@ -159,17 +159,20 @@
   // Show that an issue was found and that the upload is blocked.
   FAILURE = 0,
 
+  // Show that the scan failed and that the upload is blocked.
+  FAIL_CLOSED = 1,
+
   // Show that files were not uploaded since they were too large.
-  LARGE_FILES = 1,
+  LARGE_FILES = 2,
 
   // Show that files were not uploaded since they were encrypted.
-  ENCRYPTED_FILES = 2,
+  ENCRYPTED_FILES = 3,
 
   // Show that DLP checks failed, but that the user can proceed if they want.
-  WARNING = 3,
+  WARNING = 4,
 
   // Show that no issue was found and that the user may proceed.
-  SUCCESS = 4,
+  SUCCESS = 5,
 };
 
 // Result for a single request of the RequestHandler classes.
@@ -244,14 +247,19 @@
                               base::OnceClosure keep_closure,
                               base::OnceClosure discard_closure);
 
-// Returns true if `result` as returned by FileAnalysisRequest is considered a
+// Returns true if `result` as returned by BinaryUploadService is considered a
 // a failed result when attempting a cloud-based content analysis.
 bool CloudResultIsFailure(safe_browsing::BinaryUploadService::Result result);
 
-// Returns true if `result` as returned by FileAnalysisRequest is considered a
+// Returns true if `result` as returned by BinaryUploadService is considered a
 // a failed result when attempting a local content analysis.
 bool LocalResultIsFailure(safe_browsing::BinaryUploadService::Result result);
 
+// Returns true if `result` as returned by BinaryUploadService is considered a
+// fail-closed result, regardless of attempting a cloud-based or a local-based
+// content analysis.
+bool ResultIsFailClosed(safe_browsing::BinaryUploadService::Result result);
+
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
 // Returns the single main profile, or nullptr if none is found.
 Profile* GetMainProfileLacros();
diff --git a/chrome/browser/extensions/api/pdf_viewer_private/pdf_viewer_private_api_unittest.cc b/chrome/browser/extensions/api/pdf_viewer_private/pdf_viewer_private_api_unittest.cc
index f9e96d2..5f10f5df 100644
--- a/chrome/browser/extensions/api/pdf_viewer_private/pdf_viewer_private_api_unittest.cc
+++ b/chrome/browser/extensions/api/pdf_viewer_private/pdf_viewer_private_api_unittest.cc
@@ -77,7 +77,7 @@
 
     auto* manager = pdf_viewer_stream_manager();
     manager->AddStreamContainer(
-        embedder_host->GetFrameTreeNodeId(),
+        embedder_host->GetFrameTreeNodeId(), "internal_id",
         pdf_test_util::GenerateSampleStreamContainer(1));
     manager->ClaimStreamInfoForTesting(embedder_host);
 
diff --git a/chrome/browser/extensions/api/quick_unlock_private/quick_unlock_private_api_unittest.cc b/chrome/browser/extensions/api/quick_unlock_private/quick_unlock_private_api_unittest.cc
index c2d3098..810c523 100644
--- a/chrome/browser/extensions/api/quick_unlock_private/quick_unlock_private_api_unittest.cc
+++ b/chrome/browser/extensions/api/quick_unlock_private/quick_unlock_private_api_unittest.cc
@@ -44,7 +44,6 @@
 #include "chromeos/ash/components/cryptohome/system_salt_getter.h"
 #include "chromeos/ash/components/dbus/userdataauth/fake_cryptohome_misc_client.h"
 #include "chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.h"
-#include "chromeos/ash/components/login/auth/fake_extended_authenticator.h"
 #include "chromeos/ash/components/login/auth/public/cryptohome_key_constants.h"
 #include "chromeos/ash/components/osauth/impl/auth_parts_impl.h"
 #include "chromeos/ash/components/osauth/impl/auth_session_storage_impl.h"
diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc
index 2e31f84..0c36d4a 100644
--- a/chrome/browser/extensions/api/settings_private/prefs_util.cc
+++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc
@@ -975,8 +975,8 @@
       settings_api::PrefType::kBoolean;
   (*s_allowlist)[ash::prefs::kUserSpeakOnMuteDetectionEnabled] =
       settings_api::PrefType::kBoolean;
-  (*s_allowlist)[ash::prefs::kUserGeolocationAllowed] =
-      settings_api::PrefType::kBoolean;
+  (*s_allowlist)[ash::prefs::kUserGeolocationAccessLevel] =
+      settings_api::PrefType::kNumber;
 #else
   // System settings.
   (*s_allowlist)[::prefs::kBackgroundModeEnabled] =
diff --git a/chrome/browser/extensions/api/streams_private/streams_private_api.cc b/chrome/browser/extensions/api/streams_private/streams_private_api.cc
index 508f34fc..8cea5bf 100644
--- a/chrome/browser/extensions/api/streams_private/streams_private_api.cc
+++ b/chrome/browser/extensions/api/streams_private/streams_private_api.cc
@@ -34,7 +34,8 @@
     bool embedded,
     int frame_tree_node_id,
     blink::mojom::TransferrableURLLoaderPtr transferrable_loader,
-    const GURL& original_url) {
+    const GURL& original_url,
+    const std::string& internal_id) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
   content::WebContents* web_contents =
@@ -91,7 +92,8 @@
       extension_id == extension_misc::kPdfExtensionId) {
     pdf::PdfViewerStreamManager::CreateForWebContents(web_contents);
     pdf::PdfViewerStreamManager::FromWebContents(web_contents)
-        ->AddStreamContainer(frame_tree_node_id, std::move(stream_container));
+        ->AddStreamContainer(frame_tree_node_id, internal_id,
+                             std::move(stream_container));
     return;
   }
 #endif  // BUILDFLAG(ENABLE_PDF)
diff --git a/chrome/browser/extensions/api/streams_private/streams_private_api.h b/chrome/browser/extensions/api/streams_private/streams_private_api.h
index b5fbd5e..2dce9407 100644
--- a/chrome/browser/extensions/api/streams_private/streams_private_api.h
+++ b/chrome/browser/extensions/api/streams_private/streams_private_api.h
@@ -27,7 +27,8 @@
       bool embedded,
       int frame_tree_node_id,
       blink::mojom::TransferrableURLLoaderPtr transferrable_loader,
-      const GURL& original_url);
+      const GURL& original_url,
+      const std::string& internal_id);
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index b7d6fe91..0d4015a 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -870,6 +870,11 @@
     "expiry_milestone": 111
   },
   {
+    "name": "boarding-pass-detector",
+    "owners": ["hanfeng@google.com"],
+    "expiry_milestone": 140
+  },
+  {
     "name": "bookmarks-improved-save-flow",
     "owners": ["wylieb@chromium.org", "fgorski@chromium.org", "mdjones@chromium.org"],
     "expiry_milestone": 115
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 1358ce3..180ea24 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -3902,6 +3902,9 @@
 const char kBackGestureRefactorAndroidDescription[] =
     "Enable Back Gesture Refactor.";
 
+const char kBoardingPassDetectorName[] = "Boarding Pass Detector";
+const char kBoardingPassDetectorDescription[] = "Enable Boarding Pass Detector";
+
 const char kCCTBrandTransparencyName[] =
     "Chrome Custom Tabs Brand Transparency";
 const char kCCTBrandTransparencyDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 4cd9853..fc20224 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -2263,6 +2263,9 @@
 extern const char kBackGestureRefactorAndroidName[];
 extern const char kBackGestureRefactorAndroidDescription[];
 
+extern const char kBoardingPassDetectorName[];
+extern const char kBoardingPassDetectorDescription[];
+
 extern const char kCCTBrandTransparencyName[];
 extern const char kCCTBrandTransparencyDescription[];
 
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index 8ac66a1..0fe294c 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -1003,7 +1003,7 @@
 
 BASE_FEATURE(kRestoreTabsOnFRE,
              "RestoreTabsOnFRE",
-             base::FEATURE_DISABLED_BY_DEFAULT);
+             base::FEATURE_ENABLED_BY_DEFAULT);
 
 BASE_FEATURE(kScrollToTLDOptimization,
              "ScrollToTLDOptimization",
@@ -1089,7 +1089,7 @@
 
 BASE_FEATURE(kThumbnailPlaceholder,
              "ThumbnailPlaceholder",
-             base::FEATURE_DISABLED_BY_DEFAULT);
+             base::FEATURE_ENABLED_BY_DEFAULT);
 
 BASE_FEATURE(kToolbarMicIphAndroid,
              "ToolbarMicIphAndroid",
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
index def22c7..69f2331 100644
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -264,6 +264,8 @@
     public static final String DRAW_WEB_EDGE_TO_EDGE = "DrawWebEdgeToEdge";
     public static final String DYNAMIC_TOP_CHROME = "DynamicTopChrome";
     public static final String EARLY_INITIALIZE_STARTUP_METRICS = "EarlyInitializeStartupMetrics";
+    public static final String ENABLE_BOOKMARK_FOLDERS_FOR_ACCOUNT_STORAGE =
+            "EnableBookmarkFoldersForAccountStorage";
     public static final String ENABLE_PROTO_API_FOR_CLASSIFY_URL = "EnableProtoApiForClassifyUrl";
     public static final String EXPERIMENTS_FOR_AGSA = "ExperimentsForAgsa";
     public static final String EMPTY_STATES = "EmptyStates";
diff --git a/chrome/browser/lacros/geolocation/system_geolocation_source_lacros_browsertest.cc b/chrome/browser/lacros/geolocation/system_geolocation_source_lacros_browsertest.cc
index 6c21350..4ec5533 100644
--- a/chrome/browser/lacros/geolocation/system_geolocation_source_lacros_browsertest.cc
+++ b/chrome/browser/lacros/geolocation/system_geolocation_source_lacros_browsertest.cc
@@ -46,7 +46,7 @@
 
   // By default, the the geolocation is allowed in ash.
   base::test::TestFuture<absl::optional<::base::Value>> future;
-  prefs->GetPref(crosapi::mojom::PrefPath::kGeolocationAllowed,
+  prefs->GetPref(crosapi::mojom::PrefPath::kUserGeolocationAccessLevel,
                  future.GetCallback());
 
   auto out_value = future.Take();
@@ -66,7 +66,7 @@
 
   // Change the value in ash.
   base::test::TestFuture<void> set_future;
-  prefs->SetPref(crosapi::mojom::PrefPath::kGeolocationAllowed,
+  prefs->SetPref(crosapi::mojom::PrefPath::kUserGeolocationAccessLevel,
                  ::base::Value(false), set_future.GetCallback());
   EXPECT_TRUE(set_future.Wait());
   set_future.Clear();
@@ -75,7 +75,7 @@
   EXPECT_EQ(device::LocationSystemPermissionStatus::kDenied, status.Take());
 
   // Change the value in ash.
-  prefs->SetPref(crosapi::mojom::PrefPath::kGeolocationAllowed,
+  prefs->SetPref(crosapi::mojom::PrefPath::kUserGeolocationAccessLevel,
                  ::base::Value(true), set_future.GetCallback());
   EXPECT_TRUE(set_future.Wait());
 
@@ -113,7 +113,7 @@
       chromeos::LacrosService::Get()->GetRemote<crosapi::mojom::Prefs>();
 
   // By default, the the geolocation is allowed in ash.
-  prefs->GetPref(crosapi::mojom::PrefPath::kGeolocationAllowed,
+  prefs->GetPref(crosapi::mojom::PrefPath::kUserGeolocationAccessLevel,
                  future.GetCallback());
 
   // As we are adding the crosapi change to ash in the same commit, we may be
@@ -134,7 +134,7 @@
 
   // Change the value in ash.
   base::test::TestFuture<void> set_future;
-  prefs->SetPref(crosapi::mojom::PrefPath::kGeolocationAllowed,
+  prefs->SetPref(crosapi::mojom::PrefPath::kUserGeolocationAccessLevel,
                  ::base::Value(false), set_future.GetCallback());
   EXPECT_TRUE(set_future.Wait());
 
@@ -143,7 +143,7 @@
             observer.status_.Take());
 
   // Change the value in ash.
-  prefs->SetPref(crosapi::mojom::PrefPath::kGeolocationAllowed,
+  prefs->SetPref(crosapi::mojom::PrefPath::kUserGeolocationAccessLevel,
                  ::base::Value(true), set_future.GetCallback());
   EXPECT_TRUE(set_future.Wait());
 
diff --git a/chrome/browser/media/router/BUILD.gn b/chrome/browser/media/router/BUILD.gn
index ab58ab7..da057dc 100644
--- a/chrome/browser/media/router/BUILD.gn
+++ b/chrome/browser/media/router/BUILD.gn
@@ -82,6 +82,7 @@
     "//components/keyed_service/content",
     "//components/keyed_service/core",
     "//components/media_router/common/providers/cast/channel",
+    "//components/media_router/common/providers/cast/channel:capability",
     "//components/openscreen_platform",
     "//content/public/browser",
     "//content/public/common",
@@ -225,6 +226,7 @@
       "//components/media_router/common/mojom:media_router",
       "//components/media_router/common/mojom:media_router_test_interfaces",
       "//components/media_router/common/providers/cast/channel",
+      "//components/media_router/common/providers/cast/channel:capability",
       "//components/media_router/common/providers/cast/channel:test_support",
       "//testing/gmock",
     ]
@@ -268,6 +270,7 @@
     "//components/media_router/browser:test_support",
     "//components/media_router/common:test_support",
     "//components/media_router/common/providers/cast/channel",
+    "//components/media_router/common/providers/cast/channel:capability",
     "//components/media_router/common/providers/cast/channel:test_support",
     "//components/webapps/common",
     "//content/test:test_support",
diff --git a/chrome/browser/media/router/discovery/access_code/BUILD.gn b/chrome/browser/media/router/discovery/access_code/BUILD.gn
index 250df0f8..8dec1cc 100644
--- a/chrome/browser/media/router/discovery/access_code/BUILD.gn
+++ b/chrome/browser/media/router/discovery/access_code/BUILD.gn
@@ -53,6 +53,7 @@
       "//components/media_router/common",
       "//components/media_router/common/mojom:logger",
       "//components/media_router/common/mojom:media_router",
+      "//components/media_router/common/providers/cast/channel:capability",
     ]
     deps = [
       ":access_code_cast_feature",
diff --git a/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service.cc b/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service.cc
index 546998c..8dece446 100644
--- a/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service.cc
+++ b/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service.cc
@@ -509,8 +509,7 @@
   return cast_channel::CastSocketOpenParams(
       sink.cast_data().ip_endpoint, base::Seconds(kConnectTimeoutInSeconds),
       base::Seconds(kLivenessTimeoutInSeconds),
-      base::Seconds(kPingIntervalInSeconds),
-      cast_channel::CastDeviceCapability::NONE);
+      base::Seconds(kPingIntervalInSeconds), /*CastDeviceCapabilitySet*/ {});
 }
 
 void AccessCodeCastSinkService::OnChannelOpenedResult(
diff --git a/chrome/browser/media/router/discovery/access_code/access_code_media_sink_util.cc b/chrome/browser/media/router/discovery/access_code/access_code_media_sink_util.cc
index e2dcd06..3c4889ba 100644
--- a/chrome/browser/media/router/discovery/access_code/access_code_media_sink_util.cc
+++ b/chrome/browser/media/router/discovery/access_code/access_code_media_sink_util.cc
@@ -14,7 +14,7 @@
 #include "base/values.h"
 #include "components/media_router/common/discovery/media_sink_internal.h"
 #include "components/media_router/common/mojom/media_router.mojom.h"
-#include "components/media_router/common/providers/cast/channel/cast_socket.h"
+#include "components/media_router/common/providers/cast/channel/cast_device_capability.h"
 #include "net/base/host_port_pair.h"
 #include "net/base/ip_address.h"
 #include "net/base/port_util.h"
@@ -24,6 +24,9 @@
 
 namespace {
 
+using cast_channel::CastDeviceCapability;
+using cast_channel::CastDeviceCapabilitySet;
+
 constexpr char kSinkDictKey[] = "sink";
 constexpr char kSinkIdKey[] = "sink_id";
 constexpr char kDisplayNameKey[] = "display_name";
@@ -34,27 +37,20 @@
 constexpr char kModelName[] = "model_name";
 constexpr char kDefaultAccessCodeModelName[] = "Chromecast Cast Moderator";
 
-uint8_t ConvertDeviceCapabilitiesToInt(
+CastDeviceCapabilitySet ConvertDeviceCapabilities(
     chrome_browser_media::proto::DeviceCapabilities proto) {
-  // Meaning of capacity value for each bit:
-  // NONE: 0,
-  // VIDEO_OUT: 1 << 0,
-  // VIDEO_IN: 1 << 1,
-  // AUDIO_OUT: 1 << 2,
-  // AUDIO_IN: 1 << 3,
-  // DEV_MODE: 1 << 4,
-  uint8_t bool_sum = 0;
+  CastDeviceCapabilitySet capabilities;
   if (proto.video_out())
-    bool_sum += 1 << 0;
+    capabilities.Put(CastDeviceCapability::kVideoOut);
   if (proto.video_in())
-    bool_sum += 1 << 1;
+    capabilities.Put(CastDeviceCapability::kVideoIn);
   if (proto.audio_out())
-    bool_sum += 1 << 2;
+    capabilities.Put(CastDeviceCapability::kAudioOut);
   if (proto.audio_in())
-    bool_sum += 1 << 3;
+    capabilities.Put(CastDeviceCapability::kAudioIn);
   if (proto.dev_mode())
-    bool_sum += 1 << 4;
-  return bool_sum;
+    capabilities.Put(CastDeviceCapability::kDevMode);
+  return capabilities;
 }
 
 absl::optional<net::IPAddress> GetIPAddress(NetworkInfo network_info) {
@@ -116,7 +112,7 @@
         absl::nullopt, CreateCastMediaSinkResult::kMissingDeviceCapabilities);
   }
   extra_data.capabilities =
-      ConvertDeviceCapabilitiesToInt(discovery_device.device_capabilities());
+      ConvertDeviceCapabilities(discovery_device.device_capabilities());
   extra_data.discovery_type = CastDiscoveryType::kAccessCodeManualEntry;
   // Various pieces of Chrome make decisions about how to support casting based
   // on the device's model name, generally speaking treating anything that
@@ -143,7 +139,9 @@
   const CastSinkExtraData& extra_data = sink.cast_data();
 
   base::Value::Dict extra_data_dict;
-  extra_data_dict.Set(kCapabilitiesKey, extra_data.capabilities);
+  extra_data_dict.Set(
+      kCapabilitiesKey,
+      static_cast<int>(extra_data.capabilities.ToEnumBitmask()));
   extra_data_dict.Set(kPortKey, extra_data.ip_endpoint.port());
   extra_data_dict.Set(kIpAddressKey,
                       extra_data.ip_endpoint.address().ToString());
@@ -196,7 +194,8 @@
 
   CastSinkExtraData extra_data;
   extra_data.ip_endpoint = net::IPEndPoint(ip_address, port.value());
-  extra_data.capabilities = capabilities.value();
+  extra_data.capabilities =
+      CastDeviceCapabilitySet::FromEnumBitmask(capabilities.value());
   extra_data.discovery_type = CastDiscoveryType::kAccessCodeRememberedDevice;
   const std::string* model_name = extra_data_dict->FindString(kModelName);
   extra_data.model_name =
diff --git a/chrome/browser/media/router/discovery/access_code/access_code_media_sink_util_unittest.cc b/chrome/browser/media/router/discovery/access_code/access_code_media_sink_util_unittest.cc
index 71124b1..634d50a 100644
--- a/chrome/browser/media/router/discovery/access_code/access_code_media_sink_util_unittest.cc
+++ b/chrome/browser/media/router/discovery/access_code/access_code_media_sink_util_unittest.cc
@@ -104,9 +104,12 @@
   media_router::MediaSinkInternal expected_sink_internal;
   media_router::CastSinkExtraData expected_extra_data;
 
-  expected_extra_data.capabilities =
-      cast_channel::VIDEO_OUT | cast_channel::VIDEO_IN |
-      cast_channel::AUDIO_OUT | cast_channel::AUDIO_IN | cast_channel::DEV_MODE;
+  expected_extra_data.capabilities = {
+      cast_channel::CastDeviceCapability::kVideoOut,
+      cast_channel::CastDeviceCapability::kVideoIn,
+      cast_channel::CastDeviceCapability::kAudioOut,
+      cast_channel::CastDeviceCapability::kAudioIn,
+      cast_channel::CastDeviceCapability::kDevMode};
   net::IPAddress expected_ip;
 
   // Must use equality to bypass `warn_unused_result`.
@@ -157,9 +160,12 @@
   media_router::MediaSinkInternal expected_sink_internal;
   media_router::CastSinkExtraData expected_extra_data;
 
-  expected_extra_data.capabilities =
-      cast_channel::VIDEO_OUT | cast_channel::VIDEO_IN |
-      cast_channel::AUDIO_OUT | cast_channel::AUDIO_IN | cast_channel::DEV_MODE;
+  expected_extra_data.capabilities = {
+      cast_channel::CastDeviceCapability::kVideoOut,
+      cast_channel::CastDeviceCapability::kVideoIn,
+      cast_channel::CastDeviceCapability::kAudioOut,
+      cast_channel::CastDeviceCapability::kAudioIn,
+      cast_channel::CastDeviceCapability::kDevMode};
   net::IPAddress expected_ip;
 
   // Must use equality to bypass `warn_unused_result`.
diff --git a/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_impl.cc b/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_impl.cc
index 004b9844..27968048 100644
--- a/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_impl.cc
+++ b/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_impl.cc
@@ -21,6 +21,7 @@
 #include "components/media_router/common/media_sink.h"
 #include "components/media_router/common/mojom/media_router.mojom.h"
 #include "components/media_router/common/providers/cast/channel/cast_channel_enum.h"
+#include "components/media_router/common/providers/cast/channel/cast_device_capability.h"
 #include "components/media_router/common/providers/cast/channel/cast_socket_service.h"
 #include "components/net_log/chrome_net_log.h"
 #include "content/public/browser/browser_thread.h"
@@ -51,7 +52,6 @@
       net::IPEndPoint(dial_sink.dial_data().ip_address, kCastControlPort);
   extra_data.model_name = dial_sink.dial_data().model_name;
   extra_data.discovery_type = CastDiscoveryType::kDial;
-  extra_data.capabilities = cast_channel::CastDeviceCapability::NONE;
 
   return MediaSinkInternal(sink, extra_data);
 }
@@ -464,7 +464,7 @@
       sink.cast_data().ip_endpoint, base::Seconds(connect_timeout_in_seconds),
       base::Seconds(liveness_timeout_in_seconds),
       base::Seconds(open_params_.ping_interval_in_seconds),
-      cast_channel::CastDeviceCapability::NONE);
+      /*CastDeviceCapabilitySet*/ {});
 }
 
 void CastMediaSinkServiceImpl::OpenChannel(
@@ -627,10 +627,11 @@
   // Manually set device capabilities for sinks discovered via DIAL as DIAL
   // discovery does not provide capability info.
   if (cast_sink.cast_data().discovery_type == CastDiscoveryType::kDial) {
-    extra_data.capabilities = cast_channel::CastDeviceCapability::AUDIO_OUT;
-    if (!socket->audio_only())
-      extra_data.capabilities |= cast_channel::CastDeviceCapability::VIDEO_OUT;
-
+    extra_data.capabilities.Put(cast_channel::CastDeviceCapability::kAudioOut);
+    if (!socket->audio_only()) {
+      extra_data.capabilities.Put(
+          cast_channel::CastDeviceCapability::kVideoOut);
+    }
     // We can now set the proper icon type now that capabilities is determined.
     cast_sink.sink().set_icon_type(
         GetCastSinkIconType(extra_data.capabilities));
diff --git a/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_unittest.cc b/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_unittest.cc
index 8e1ab4f..319369e 100644
--- a/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_unittest.cc
+++ b/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/media/router/discovery/mdns/cast_media_sink_service.h"
 
+#include <inttypes.h>
 #include <string>
 
 #include "base/memory/raw_ptr.h"
@@ -17,6 +18,7 @@
 #include "chrome/browser/media/router/discovery/mdns/media_sink_util.h"
 #include "chrome/browser/media/router/test/mock_dns_sd_registry.h"
 #include "chrome/browser/media/router/test/provider_test_helpers.h"
+#include "components/media_router/common/providers/cast/channel/cast_device_capability.h"
 #include "components/media_router/common/providers/cast/channel/cast_socket.h"
 #include "components/media_router/common/providers/cast/channel/cast_socket_service.h"
 #include "components/media_router/common/providers/cast/channel/cast_test_util.h"
@@ -28,6 +30,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 using cast_channel::CastDeviceCapability;
+using cast_channel::CastDeviceCapabilitySet;
 using ::testing::_;
 using ::testing::InvokeWithoutArgs;
 using ::testing::NiceMock;
@@ -43,7 +46,9 @@
   return net::IPEndPoint(ip_address, 8009 + num);
 }
 
-media_router::DnsSdService CreateDnsService(int num, int capabilities) {
+media_router::DnsSdService CreateDnsService(
+    int num,
+    CastDeviceCapabilitySet capabilities) {
   net::IPEndPoint ip_endpoint = CreateIPEndPoint(num);
   media_router::DnsSdService service;
   service.service_name =
@@ -54,7 +59,8 @@
   service.service_data.push_back(
       base::StringPrintf("fn=friendly name %d", num));
   service.service_data.push_back(base::StringPrintf("md=model name %d", num));
-  service.service_data.push_back(base::StringPrintf("ca=%d", capabilities));
+  service.service_data.push_back(
+      base::StringPrintf("ca=%" PRIu64, capabilities.ToEnumBitmask()));
 
   return service;
 }
@@ -120,10 +126,10 @@
 
 TEST_F(CastMediaSinkServiceTest, TestOnDnsSdEvent) {
   DnsSdService service1 = CreateDnsService(
-      1, CastDeviceCapability::VIDEO_OUT | CastDeviceCapability::AUDIO_OUT);
+      1, {CastDeviceCapability::kVideoOut, CastDeviceCapability::kAudioOut});
   DnsSdService service2 =
-      CreateDnsService(2, CastDeviceCapability::MULTIZONE_GROUP);
-  DnsSdService service3 = CreateDnsService(3, CastDeviceCapability::NONE);
+      CreateDnsService(2, {CastDeviceCapability::kMultizoneGroup});
+  DnsSdService service3 = CreateDnsService(3, {});
 
   // Add dns services.
   DnsSdRegistry::DnsSdServiceList service_list{service1, service2, service3};
diff --git a/chrome/browser/media/router/discovery/mdns/media_sink_util.cc b/chrome/browser/media/router/discovery/mdns/media_sink_util.cc
index 99f1f6b..4bd34d82 100644
--- a/chrome/browser/media/router/discovery/mdns/media_sink_util.cc
+++ b/chrome/browser/media/router/discovery/mdns/media_sink_util.cc
@@ -13,18 +13,19 @@
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/media/router/discovery/mdns/dns_sd_delegate.h"
 #include "components/media_router/common/mojom/media_router.mojom.h"
-#include "components/media_router/common/providers/cast/channel/cast_socket.h"
 #include "net/base/host_port_pair.h"
 #include "net/base/ip_address.h"
 #include "net/base/url_util.h"
 
 namespace media_router {
 
-SinkIconType GetCastSinkIconType(uint8_t capabilities) {
-  if (capabilities & cast_channel::CastDeviceCapability::VIDEO_OUT)
+SinkIconType GetCastSinkIconType(
+    cast_channel::CastDeviceCapabilitySet capabilities) {
+  if (capabilities.Has(cast_channel::CastDeviceCapability::kVideoOut)) {
     return SinkIconType::CAST;
+  }
 
-  return capabilities & cast_channel::CastDeviceCapability::MULTIZONE_GROUP
+  return capabilities.Has(cast_channel::CastDeviceCapability::kMultizoneGroup)
              ? SinkIconType::CAST_AUDIO_GROUP
              : SinkIconType::CAST_AUDIO;
 }
@@ -63,11 +64,14 @@
   extra_data.ip_endpoint =
       net::IPEndPoint(ip_address, service.service_host_port.port());
   extra_data.model_name = service_data["md"];
-  extra_data.capabilities = cast_channel::CastDeviceCapability::NONE;
 
-  unsigned capacities;
-  if (base::StringToUint(service_data["ca"], &capacities))
-    extra_data.capabilities = capacities;
+  {
+    uint64_t capabilities = 0;
+    if (base::StringToUint64(service_data["ca"], &capabilities)) {
+      extra_data.capabilities =
+          cast_channel::CastDeviceCapabilitySet::FromEnumBitmask(capabilities);
+    }
+  }
 
   std::string processed_uuid = MediaSinkInternal::ProcessDeviceUUID(unique_id);
   std::string sink_id = base::StringPrintf("cast:%s", processed_uuid.c_str());
diff --git a/chrome/browser/media/router/discovery/mdns/media_sink_util.h b/chrome/browser/media/router/discovery/mdns/media_sink_util.h
index 44ec80828..6a8f630 100644
--- a/chrome/browser/media/router/discovery/mdns/media_sink_util.h
+++ b/chrome/browser/media/router/discovery/mdns/media_sink_util.h
@@ -8,6 +8,7 @@
 #include <vector>
 
 #include "components/media_router/common/discovery/media_sink_internal.h"
+#include "components/media_router/common/providers/cast/channel/cast_device_capability.h"
 
 namespace media_router {
 
@@ -18,7 +19,8 @@
 
 // Returns the icon type to use according to |capabilities|. |capabilities| is
 // a bit set of cast_channel::CastDeviceCapabilities in CastSinkExtraData.
-SinkIconType GetCastSinkIconType(uint8_t capabilities);
+SinkIconType GetCastSinkIconType(
+    cast_channel::CastDeviceCapabilitySet capabilities);
 
 enum CreateCastMediaSinkResult {
   kOk,
diff --git a/chrome/browser/media/router/mojo/media_sink_service_status.cc b/chrome/browser/media/router/mojo/media_sink_service_status.cc
index a072640..5ff080d 100644
--- a/chrome/browser/media/router/mojo/media_sink_service_status.cc
+++ b/chrome/browser/media/router/mojo/media_sink_service_status.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/media/router/mojo/media_sink_service_status.h"
 
 #include "base/json/json_string_value_serializer.h"
+#include "base/numerics/safe_conversions.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
@@ -72,7 +73,8 @@
     CastSinkExtraData extra_data = sink_internal.cast_data();
     dict.Set("ip_endpoint", base::Value(extra_data.ip_endpoint.ToString()));
     dict.Set("model_name", base::Value(extra_data.model_name));
-    dict.Set("capabilities", base::Value(extra_data.capabilities));
+    dict.Set("capabilities", base::Value(base::checked_cast<int>(
+                                 extra_data.capabilities.ToEnumBitmask())));
     dict.Set("channel_id", base::Value(extra_data.cast_channel_id));
     dict.Set("discovered_by_dial", base::Value(extra_data.discovery_type ==
                                                CastDiscoveryType::kDial));
diff --git a/chrome/browser/media/router/providers/cast/cast_activity_manager.cc b/chrome/browser/media/router/providers/cast/cast_activity_manager.cc
index b21f5c3..7e8cea1e 100644
--- a/chrome/browser/media/router/providers/cast/cast_activity_manager.cc
+++ b/chrome/browser/media/router/providers/cast/cast_activity_manager.cc
@@ -31,6 +31,7 @@
 #include "components/media_router/browser/media_router_metrics.h"
 #include "components/media_router/common/media_source.h"
 #include "components/media_router/common/mojom/media_router.mojom.h"
+#include "components/media_router/common/providers/cast/channel/cast_device_capability.h"
 #include "components/media_router/common/providers/cast/channel/cast_message_util.h"
 #include "components/media_router/common/providers/cast/channel/enum_table.h"
 #include "components/media_router/common/route_request_result.h"
@@ -1046,9 +1047,7 @@
 std::string CastActivityManager::ChooseAppId(
     const CastMediaSource& source,
     const MediaSinkInternal& sink) const {
-  const auto sink_capabilities =
-      BitwiseOr<cast_channel::CastDeviceCapability>::FromBits(
-          sink.cast_data().capabilities);
+  const auto& sink_capabilities = sink.cast_data().capabilities;
   for (const auto& info : source.app_infos()) {
     if (sink_capabilities.HasAll(info.required_capabilities))
       return info.app_id;
diff --git a/chrome/browser/media/router/providers/cast/cast_app_availability_tracker.cc b/chrome/browser/media/router/providers/cast/cast_app_availability_tracker.cc
index fc97cd3..62b2f0c 100644
--- a/chrome/browser/media/router/providers/cast/cast_app_availability_tracker.cc
+++ b/chrome/browser/media/router/providers/cast/cast_app_availability_tracker.cc
@@ -152,8 +152,7 @@
 
 CastAppAvailabilityTracker::CapabilitiesAndAvailabilityMap::
     CapabilitiesAndAvailabilityMap(const MediaSinkInternal& sink)
-    : capabilities(BitwiseOr<cast_channel::CastDeviceCapability>::FromBits(
-          sink.cast_data().capabilities)) {}
+    : capabilities(sink.cast_data().capabilities) {}
 
 CastAppAvailabilityTracker::CapabilitiesAndAvailabilityMap::
     CapabilitiesAndAvailabilityMap(const CapabilitiesAndAvailabilityMap&) =
diff --git a/chrome/browser/media/router/providers/cast/cast_app_availability_tracker.h b/chrome/browser/media/router/providers/cast/cast_app_availability_tracker.h
index b3fd2c96..02e078c 100644
--- a/chrome/browser/media/router/providers/cast/cast_app_availability_tracker.h
+++ b/chrome/browser/media/router/providers/cast/cast_app_availability_tracker.h
@@ -14,6 +14,7 @@
 #include "components/media_router/common/discovery/media_sink_internal.h"
 #include "components/media_router/common/media_source.h"
 #include "components/media_router/common/providers/cast/cast_media_source.h"
+#include "components/media_router/common/providers/cast/channel/cast_device_capability.h"
 #include "components/media_router/common/providers/cast/channel/cast_message_util.h"
 
 namespace media_router {
@@ -114,7 +115,7 @@
     CapabilitiesAndAvailabilityMap(const CapabilitiesAndAvailabilityMap&);
     ~CapabilitiesAndAvailabilityMap();
 
-    BitwiseOr<cast_channel::CastDeviceCapability> capabilities;
+    cast_channel::CastDeviceCapabilitySet capabilities;
     AppAvailabilityMap availabilities;
   };
 
diff --git a/chrome/browser/media/router/providers/cast/cast_app_availability_tracker_unittest.cc b/chrome/browser/media/router/providers/cast/cast_app_availability_tracker_unittest.cc
index d6bf195..40eb22fd 100644
--- a/chrome/browser/media/router/providers/cast/cast_app_availability_tracker_unittest.cc
+++ b/chrome/browser/media/router/providers/cast/cast_app_availability_tracker_unittest.cc
@@ -11,8 +11,8 @@
 #include "components/media_router/common/media_sink.h"
 #include "components/media_router/common/mojom/media_router.mojom.h"
 #include "components/media_router/common/providers/cast/cast_media_source.h"
+#include "components/media_router/common/providers/cast/channel/cast_device_capability.h"
 #include "components/media_router/common/providers/cast/channel/cast_message_util.h"
-#include "components/media_router/common/providers/cast/channel/cast_socket.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -194,10 +194,12 @@
       "cast:AUDIOSRC?clientId=3&capabilities=audio_out");
 
   MediaSinkInternal video_sink = CreateSink("video-sink");
-  video_sink.cast_data().capabilities =
-      cast_channel::VIDEO_OUT | cast_channel::AUDIO_OUT;
+  video_sink.cast_data().capabilities = {
+      cast_channel::CastDeviceCapability::kVideoOut,
+      cast_channel::CastDeviceCapability::kAudioOut};
   MediaSinkInternal audio_sink = CreateSink("audio-sink");
-  audio_sink.cast_data().capabilities = cast_channel::AUDIO_OUT;
+  audio_sink.cast_data().capabilities = {
+      cast_channel::CastDeviceCapability::kAudioOut};
 
   // Make both sinks claim that they're compatible with the two sources.
   SetAvailable({video_sink, audio_sink}, "VIDEOSRC");
diff --git a/chrome/browser/media/router/providers/cast/cast_internal_message_util.cc b/chrome/browser/media/router/providers/cast/cast_internal_message_util.cc
index 2cd1a29e..f081416 100644
--- a/chrome/browser/media/router/providers/cast/cast_internal_message_util.cc
+++ b/chrome/browser/media/router/providers/cast/cast_internal_message_util.cc
@@ -15,9 +15,12 @@
 #include "base/strings/string_piece.h"
 #include "components/media_router/common/discovery/media_sink_internal.h"
 #include "components/media_router/common/providers/cast/cast_media_source.h"
-#include "components/media_router/common/providers/cast/channel/cast_socket.h"
+#include "components/media_router/common/providers/cast/channel/cast_device_capability.h"
 #include "components/media_router/common/providers/cast/channel/enum_table.h"
 
+using cast_channel::CastDeviceCapability;
+using cast_channel::CastDeviceCapabilitySet;
+
 namespace cast_util {
 
 using media_router::CastInternalMessage;
@@ -119,18 +122,24 @@
 constexpr char kReceiverActionTypeCast[] = "cast";
 constexpr char kReceiverActionTypeStop[] = "stop";
 
-base::Value::List CapabilitiesToListValue(uint8_t capabilities) {
+base::Value::List CapabilitiesToListValue(
+    CastDeviceCapabilitySet capabilities) {
   base::Value::List value;
-  if (capabilities & cast_channel::VIDEO_OUT)
+  if (capabilities.Has(CastDeviceCapability::kVideoOut)) {
     value.Append("video_out");
-  if (capabilities & cast_channel::VIDEO_IN)
+  }
+  if (capabilities.Has(CastDeviceCapability::kVideoIn)) {
     value.Append("video_in");
-  if (capabilities & cast_channel::AUDIO_OUT)
+  }
+  if (capabilities.Has(CastDeviceCapability::kAudioOut)) {
     value.Append("audio_out");
-  if (capabilities & cast_channel::AUDIO_IN)
+  }
+  if (capabilities.Has(CastDeviceCapability::kAudioIn)) {
     value.Append("audio_in");
-  if (capabilities & cast_channel::MULTIZONE_GROUP)
+  }
+  if (capabilities.Has(CastDeviceCapability::kMultizoneGroup)) {
     value.Append("multizone_group");
+  }
   return value;
 }
 
diff --git a/chrome/browser/media/router/providers/cast/mirroring_activity.cc b/chrome/browser/media/router/providers/cast/mirroring_activity.cc
index 76288e1..9be7307 100644
--- a/chrome/browser/media/router/providers/cast/mirroring_activity.cc
+++ b/chrome/browser/media/router/providers/cast/mirroring_activity.cc
@@ -42,8 +42,8 @@
 #include "components/media_router/browser/mirroring_to_flinging_switcher.h"
 #include "components/media_router/common/discovery/media_sink_internal.h"
 #include "components/media_router/common/mojom/media_router.mojom.h"
+#include "components/media_router/common/providers/cast/channel/cast_device_capability.h"
 #include "components/media_router/common/providers/cast/channel/cast_message_util.h"
-#include "components/media_router/common/providers/cast/channel/cast_socket.h"
 #include "components/media_router/common/providers/cast/channel/enum_table.h"
 #include "components/media_router/common/route_request_result.h"
 #include "components/mirroring/mojom/session_parameters.mojom.h"
@@ -791,11 +791,11 @@
 
   // Derive session type by intersecting the sink capabilities with what the
   // media source can provide.
-  const bool has_audio = (cast_data_.capabilities &
-                          static_cast<uint8_t>(cast_channel::AUDIO_OUT)) != 0 &&
+  const bool has_audio = cast_data_.capabilities.Has(
+                             cast_channel::CastDeviceCapability::kAudioOut) &&
                          cast_source->ProvidesStreamingAudioCapture();
-  const bool has_video = (cast_data_.capabilities &
-                          static_cast<uint8_t>(cast_channel::VIDEO_OUT)) != 0;
+  const bool has_video = cast_data_.capabilities.Has(
+      cast_channel::CastDeviceCapability::kVideoOut);
   if (!has_audio && !has_video) {
     return;
   }
diff --git a/chrome/browser/media/router/providers/cast/mirroring_activity_unittest.cc b/chrome/browser/media/router/providers/cast/mirroring_activity_unittest.cc
index fd1a154..b49adb0 100644
--- a/chrome/browser/media/router/providers/cast/mirroring_activity_unittest.cc
+++ b/chrome/browser/media/router/providers/cast/mirroring_activity_unittest.cc
@@ -24,6 +24,7 @@
 #include "chrome/browser/media/router/test/media_router_mojo_test.h"
 #include "chrome/browser/media/router/test/mock_mojo_media_router.h"
 #include "components/media_router/common/mojom/debugger.mojom.h"
+#include "components/media_router/common/providers/cast/channel/cast_device_capability.h"
 #include "components/media_router/common/providers/cast/channel/cast_test_util.h"
 #include "components/mirroring/mojom/session_parameters.mojom.h"
 #include "media/base/media_switches.h"
@@ -175,7 +176,8 @@
                     bool enable_rtcp_reporting = false) {
     CastSinkExtraData cast_data;
     cast_data.cast_channel_id = kChannelId;
-    cast_data.capabilities = cast_channel::AUDIO_OUT | cast_channel::VIDEO_OUT;
+    cast_data.capabilities = {cast_channel::CastDeviceCapability::kAudioOut,
+                              cast_channel::CastDeviceCapability::kVideoOut};
     cast_data.discovery_type = discovery_type;
     MediaRoute route(kRouteId, source, kSinkId, kDescription, route_is_local_);
     route.set_presentation_id(kPresentationId);
diff --git a/chrome/browser/media/router/test/provider_test_helpers.cc b/chrome/browser/media/router/test/provider_test_helpers.cc
index cfb4e25..a6658a7 100644
--- a/chrome/browser/media/router/test/provider_test_helpers.cc
+++ b/chrome/browser/media/router/test/provider_test_helpers.cc
@@ -10,6 +10,7 @@
 #include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/media/router/discovery/dial/dial_app_discovery_service.h"
 #include "components/media_router/common/media_source.h"
+#include "components/media_router/common/providers/cast/channel/cast_device_capability.h"
 #include "components/media_router/common/test/test_helper.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
@@ -166,8 +167,8 @@
   extra_data.port = ip_endpoint.port();
   extra_data.model_name = base::StringPrintf("model name %d", num);
   extra_data.cast_channel_id = num;
-  extra_data.capabilities = cast_channel::CastDeviceCapability::AUDIO_OUT |
-                            cast_channel::CastDeviceCapability::VIDEO_OUT;
+  extra_data.capabilities = {cast_channel::CastDeviceCapability::kAudioOut,
+                             cast_channel::CastDeviceCapability::kVideoOut};
   return MediaSinkInternal(sink, extra_data);
 }
 
diff --git a/chrome/browser/pdf/pdf_viewer_stream_manager.cc b/chrome/browser/pdf/pdf_viewer_stream_manager.cc
index 2751f75..bff346a 100644
--- a/chrome/browser/pdf/pdf_viewer_stream_manager.cc
+++ b/chrome/browser/pdf/pdf_viewer_stream_manager.cc
@@ -47,12 +47,9 @@
 }
 
 PdfViewerStreamManager::StreamInfo::StreamInfo(
+    const std::string& embed_internal_id,
     std::unique_ptr<extensions::StreamContainer> stream_container)
-    : stream(std::move(stream_container)) {}
-
-PdfViewerStreamManager::StreamInfo::StreamInfo(
-    StreamInfo&& stream_info) noexcept
-    : stream(std::move(stream_info.stream)) {}
+    : internal_id(embed_internal_id), stream(std::move(stream_container)) {}
 
 PdfViewerStreamManager::StreamInfo::~StreamInfo() = default;
 
@@ -64,6 +61,7 @@
 
 void PdfViewerStreamManager::AddStreamContainer(
     int frame_tree_node_id,
+    const std::string& internal_id,
     std::unique_ptr<extensions::StreamContainer> stream_container) {
   CHECK(stream_container);
 
@@ -76,7 +74,7 @@
   // will be used instead.
   auto embedder_host_info = GetUnclaimedEmbedderHostInfo(frame_tree_node_id);
   stream_infos_[embedder_host_info] =
-      std::make_unique<StreamInfo>(std::move(stream_container));
+      std::make_unique<StreamInfo>(internal_id, std::move(stream_container));
 }
 
 base::WeakPtr<extensions::StreamContainer>
diff --git a/chrome/browser/pdf/pdf_viewer_stream_manager.h b/chrome/browser/pdf/pdf_viewer_stream_manager.h
index b0e7e3aa..086e7dc 100644
--- a/chrome/browser/pdf/pdf_viewer_stream_manager.h
+++ b/chrome/browser/pdf/pdf_viewer_stream_manager.h
@@ -76,6 +76,7 @@
   // to another PDF URL before the original `StreamContainer` is claimed.
   void AddStreamContainer(
       int frame_tree_node_id,
+      const std::string& internal_id,
       std::unique_ptr<extensions::StreamContainer> stream_container);
 
   // Returns a pointer to a stream container that `embedder_host` has claimed or
@@ -103,19 +104,23 @@
                            AddAndGetStreamContainer);
 
   // Stream container stored for a single PDF navigation.
-  // TODO(crbug.com/1445746): Add other info needed for PDFs, such as the
-  // internal id.
   struct StreamInfo {
-    explicit StreamInfo(
-        std::unique_ptr<extensions::StreamContainer> stream_container);
-
-    StreamInfo(StreamInfo&& stream_info) noexcept;
+    StreamInfo(const std::string& embed_internal_id,
+               std::unique_ptr<extensions::StreamContainer> stream_container);
 
     StreamInfo(const StreamInfo&) = delete;
     StreamInfo& operator=(const StreamInfo&) = delete;
 
     ~StreamInfo();
 
+    // A unique ID for the PDF viewer instance. Used to set up postMessage
+    // support for the full-page PDF viewer.
+    // TODO(crbug.com/1445746): Currently an unused field. Use it to set up
+    // postMessage.
+    const std::string internal_id;
+
+    // A container for the PDF stream. Holds data needed to load the PDF in the
+    // PDF viewer.
     std::unique_ptr<extensions::StreamContainer> stream;
 
     // True if the extension host has navigated to the PDF extension URL. Used
diff --git a/chrome/browser/pdf/pdf_viewer_stream_manager_unittest.cc b/chrome/browser/pdf/pdf_viewer_stream_manager_unittest.cc
index f1ef2307..1769901 100644
--- a/chrome/browser/pdf/pdf_viewer_stream_manager_unittest.cc
+++ b/chrome/browser/pdf/pdf_viewer_stream_manager_unittest.cc
@@ -78,7 +78,7 @@
   int frame_tree_node_id = embedder_host->GetFrameTreeNodeId();
 
   PdfViewerStreamManager* manager = pdf_viewer_stream_manager();
-  manager->AddStreamContainer(frame_tree_node_id,
+  manager->AddStreamContainer(frame_tree_node_id, "internal_id",
                               pdf_test_util::GenerateSampleStreamContainer(1));
   EXPECT_TRUE(manager->ContainsUnclaimedStreamInfo(frame_tree_node_id));
   manager->ClaimStreamInfoForTesting(embedder_host);
@@ -108,9 +108,9 @@
   int frame_tree_node_id = embedder_host->GetFrameTreeNodeId();
 
   PdfViewerStreamManager* manager = pdf_viewer_stream_manager();
-  manager->AddStreamContainer(frame_tree_node_id,
+  manager->AddStreamContainer(frame_tree_node_id, "internal_id1",
                               pdf_test_util::GenerateSampleStreamContainer(1));
-  manager->AddStreamContainer(frame_tree_node_id,
+  manager->AddStreamContainer(frame_tree_node_id, "internal_id2",
                               pdf_test_util::GenerateSampleStreamContainer(2));
   manager->ClaimStreamInfoForTesting(embedder_host);
 
@@ -137,6 +137,7 @@
 
   PdfViewerStreamManager* manager = pdf_viewer_stream_manager();
   manager->AddStreamContainer(embedder_host->GetFrameTreeNodeId(),
+                              "internal_id",
                               pdf_test_util::GenerateSampleStreamContainer(1));
   manager->ClaimStreamInfoForTesting(embedder_host);
 
@@ -153,8 +154,9 @@
 
   PdfViewerStreamManager* manager = pdf_viewer_stream_manager();
   manager->AddStreamContainer(embedder_host->GetFrameTreeNodeId(),
+                              "internal_id1",
                               pdf_test_util::GenerateSampleStreamContainer(1));
-  manager->AddStreamContainer(child_host->GetFrameTreeNodeId(),
+  manager->AddStreamContainer(child_host->GetFrameTreeNodeId(), "internal_id2",
                               pdf_test_util::GenerateSampleStreamContainer(2));
   manager->ClaimStreamInfoForTesting(embedder_host);
   manager->ClaimStreamInfoForTesting(child_host);
@@ -197,8 +199,9 @@
 
   PdfViewerStreamManager* manager = pdf_viewer_stream_manager();
   manager->AddStreamContainer(embedder_host->GetFrameTreeNodeId(),
+                              "internal_id1",
                               pdf_test_util::GenerateSampleStreamContainer(1));
-  manager->AddStreamContainer(child_host->GetFrameTreeNodeId(),
+  manager->AddStreamContainer(child_host->GetFrameTreeNodeId(), "internal_id2",
                               pdf_test_util::GenerateSampleStreamContainer(2));
   manager->ClaimStreamInfoForTesting(embedder_host);
   manager->ClaimStreamInfoForTesting(child_host);
@@ -220,7 +223,7 @@
   actual_host = NavigateAndCommit(actual_host, GURL(kOriginalUrl1));
 
   PdfViewerStreamManager* manager = pdf_viewer_stream_manager();
-  manager->AddStreamContainer(actual_host->GetFrameTreeNodeId(),
+  manager->AddStreamContainer(actual_host->GetFrameTreeNodeId(), "internal_id",
                               pdf_test_util::GenerateSampleStreamContainer(1));
   manager->ClaimStreamInfoForTesting(actual_host);
   ASSERT_TRUE(manager->GetStreamContainer(actual_host));
@@ -243,7 +246,7 @@
   auto* new_host = CreateChildRenderFrameHost(old_host, "new host");
 
   PdfViewerStreamManager* manager = pdf_viewer_stream_manager();
-  manager->AddStreamContainer(old_host->GetFrameTreeNodeId(),
+  manager->AddStreamContainer(old_host->GetFrameTreeNodeId(), "internal_id",
                               pdf_test_util::GenerateSampleStreamContainer(1));
   manager->ClaimStreamInfoForTesting(old_host);
   ASSERT_TRUE(manager->GetStreamContainer(old_host));
@@ -271,7 +274,7 @@
   int frame_tree_node_id = embedder_host->GetFrameTreeNodeId();
 
   PdfViewerStreamManager* manager = pdf_viewer_stream_manager();
-  manager->AddStreamContainer(frame_tree_node_id,
+  manager->AddStreamContainer(frame_tree_node_id, "internal_id",
                               pdf_test_util::GenerateSampleStreamContainer(1));
   manager->ClaimStreamInfoForTesting(embedder_host);
   ASSERT_TRUE(manager->GetStreamContainer(embedder_host));
@@ -293,6 +296,7 @@
 
   PdfViewerStreamManager* manager = pdf_viewer_stream_manager();
   manager->AddStreamContainer(embedder_host->GetFrameTreeNodeId(),
+                              "internal_id",
                               pdf_test_util::GenerateSampleStreamContainer(1));
   manager->ClaimStreamInfoForTesting(embedder_host);
   ASSERT_TRUE(manager->GetStreamContainer(embedder_host));
@@ -332,8 +336,10 @@
 
   PdfViewerStreamManager* manager = pdf_viewer_stream_manager();
   manager->AddStreamContainer(embedder_host1->GetFrameTreeNodeId(),
+                              "internal_id1",
                               pdf_test_util::GenerateSampleStreamContainer(1));
   manager->AddStreamContainer(embedder_host2->GetFrameTreeNodeId(),
+                              "internal_id2",
                               pdf_test_util::GenerateSampleStreamContainer(2));
   manager->ClaimStreamInfoForTesting(main_rfh());
   manager->ClaimStreamInfoForTesting(embedder_host2);
@@ -372,6 +378,7 @@
       NavigateAndCommit(main_rfh(), GURL(kOriginalUrl1));
   PdfViewerStreamManager* manager = pdf_viewer_stream_manager();
   manager->AddStreamContainer(embedder_host->GetFrameTreeNodeId(),
+                              "internal_id",
                               pdf_test_util::GenerateSampleStreamContainer(1));
   EXPECT_FALSE(manager->GetStreamContainer(embedder_host));
 
diff --git a/chrome/browser/performance_manager/chrome_browser_main_extra_parts_performance_manager.cc b/chrome/browser/performance_manager/chrome_browser_main_extra_parts_performance_manager.cc
index 633c8e3..aab689b 100644
--- a/chrome/browser/performance_manager/chrome_browser_main_extra_parts_performance_manager.cc
+++ b/chrome/browser/performance_manager/chrome_browser_main_extra_parts_performance_manager.cc
@@ -72,6 +72,7 @@
 #include "chrome/browser/performance_manager/policies/high_efficiency_mode_policy.h"
 #include "chrome/browser/performance_manager/policies/page_discarding_helper.h"
 #include "chrome/browser/performance_manager/policies/page_freezing_policy.h"
+#include "chrome/browser/performance_manager/policies/probabilistic_memory_saver_policy.h"
 #include "chrome/browser/performance_manager/policies/urgent_page_discarding_policy.h"
 #include "chrome/browser/performance_manager/public/user_tuning/battery_saver_mode_manager.h"
 #include "chrome/browser/performance_manager/public/user_tuning/user_performance_tuning_manager.h"
@@ -199,6 +200,14 @@
   graph->PassToGraph(
       std::make_unique<
           performance_manager::policies::HighEfficiencyModePolicy>());
+
+  if (base::FeatureList::IsEnabled(
+          performance_manager::features::kProbabilisticProactiveDiscarding) &&
+      performance_manager::features::kProactiveDiscardingSimulationMode.Get()) {
+    graph->PassToGraph(
+        std::make_unique<performance_manager::ProbabilisticMemorySaverPolicy>(
+            /*simulation_mode=*/true));
+  }
 #endif  // !BUILDFLAG(IS_ANDROID)
 
   graph->PassToGraph(
diff --git a/chrome/browser/performance_manager/policies/high_efficiency_mode_policy_unittest.cc b/chrome/browser/performance_manager/policies/high_efficiency_mode_policy_unittest.cc
index f9d497f..1310959c5 100644
--- a/chrome/browser/performance_manager/policies/high_efficiency_mode_policy_unittest.cc
+++ b/chrome/browser/performance_manager/policies/high_efficiency_mode_policy_unittest.cc
@@ -313,7 +313,7 @@
   policy()->OnHighEfficiencyModeChanged(true);
 
   PageNodeImpl* page_node = CreateOtherPageNode();
-  EXPECT_EQ(PageType::kUnknown, page_node->type());
+  EXPECT_EQ(PageType::kUnknown, page_node->GetType());
 
   page_node->SetIsVisible(false);
   policy()->OnBeforePageNodeRemoved(page_node);
@@ -329,7 +329,7 @@
   policy()->OnHighEfficiencyModeChanged(true);
 
   PageNodeImpl* page_node = CreateOtherPageNode();
-  EXPECT_EQ(PageType::kUnknown, page_node->type());
+  EXPECT_EQ(PageType::kUnknown, page_node->GetType());
 
   page_node->SetType(PageType::kTab);
 
diff --git a/chrome/browser/performance_manager/policies/page_discarding_helper_unittest.cc b/chrome/browser/performance_manager/policies/page_discarding_helper_unittest.cc
index fc00d54..5c76602 100644
--- a/chrome/browser/performance_manager/policies/page_discarding_helper_unittest.cc
+++ b/chrome/browser/performance_manager/policies/page_discarding_helper_unittest.cc
@@ -189,7 +189,7 @@
                                                 42, kUrl, "text/html");
   new_frame_node->OnNavigationCommitted(kUrl, false);
 
-  EXPECT_FALSE(new_page_node->is_audible());
+  EXPECT_FALSE(new_page_node->IsAudible());
 
   // Use a short `minimum_time_in_background` so that the page is discardable
   // but still created inside kTabAudioProtectionTime. It should NOT be blocked
@@ -706,8 +706,8 @@
   page_node2->SetIsVisible(false);
   AdvanceClock(base::Minutes(30));
   EXPECT_TRUE(CanDiscard(page_node2.get(), DiscardReason::URGENT));
-  EXPECT_GT(page_node()->TimeSinceLastVisibilityChange(),
-            page_node2->TimeSinceLastVisibilityChange());
+  EXPECT_GT(page_node()->GetTimeSinceLastVisibilityChange(),
+            page_node2->GetTimeSinceLastVisibilityChange());
 
   process_node()->set_resident_set_kb(1024);
   process_node2->set_resident_set_kb(2048);
@@ -790,8 +790,8 @@
   page_node()->SetIsVisible(false);
   AdvanceClock(base::Minutes(30));
   EXPECT_TRUE(CanDiscard(page_node(), DiscardReason::URGENT));
-  EXPECT_GT(page_node2->TimeSinceLastVisibilityChange(),
-            page_node()->TimeSinceLastVisibilityChange());
+  EXPECT_GT(page_node2->GetTimeSinceLastVisibilityChange(),
+            page_node()->GetTimeSinceLastVisibilityChange());
 
   // |page_node2| should be discarded as there's no RSS data for any of the
   // pages and it's the least recently visible page.
@@ -820,8 +820,8 @@
   page_node()->SetIsVisible(false);
   AdvanceClock(base::Minutes(30));
   EXPECT_TRUE(CanDiscard(page_node(), DiscardReason::URGENT));
-  EXPECT_GT(page_node2->TimeSinceLastVisibilityChange(),
-            page_node()->TimeSinceLastVisibilityChange());
+  EXPECT_GT(page_node2->GetTimeSinceLastVisibilityChange(),
+            page_node()->GetTimeSinceLastVisibilityChange());
 
   // |page_node2| should be discarded as there's no RSS data for any of the
   // pages and it's the least recently visible page.
diff --git a/chrome/browser/performance_manager/policies/probabilistic_memory_saver_policy.cc b/chrome/browser/performance_manager/policies/probabilistic_memory_saver_policy.cc
index 7acca0d..337c8d0 100644
--- a/chrome/browser/performance_manager/policies/probabilistic_memory_saver_policy.cc
+++ b/chrome/browser/performance_manager/policies/probabilistic_memory_saver_policy.cc
@@ -7,13 +7,16 @@
 #include "chrome/browser/performance_manager/policies/page_discarding_helper.h"
 #include "chrome/browser/performance_manager/policies/probabilistic_memory_saver_sampler.h"
 #include "chrome/browser/performance_manager/policies/revisit_count_revisit_estimator.h"
+#include "chrome/browser/performance_manager/policies/revisit_probability_distributions.h"
 
 namespace performance_manager {
 
 ProbabilisticMemorySaverPolicy::ProbabilisticMemorySaverPolicy(
+    bool is_simulation_mode,
     ProbabilisticMemorySaverPolicy::EstimatorCreationFunc
         estimator_creation_function)
-    : estimator_creation_function_(estimator_creation_function) {}
+    : is_simulation_mode_(is_simulation_mode),
+      estimator_creation_function_(estimator_creation_function) {}
 
 ProbabilisticMemorySaverPolicy::~ProbabilisticMemorySaverPolicy() = default;
 
@@ -37,18 +40,20 @@
 std::unique_ptr<ProactiveDiscardEvaluator::RevisitProbabilityEstimator>
 ProbabilisticMemorySaverPolicy::CreateDefaultEstimator(Graph* graph) {
   return std::make_unique<RevisitCountRevisitEstimator>(
-      graph, std::map<int64_t, RevisitCdfContainer>{},
-      std::map<int64_t, float>{});
+      graph, CreatePerRevisitCountTimeToRevisitCdfs(),
+      CreatePerRevisitCountRevisitProbability());
 }
 
 void ProbabilisticMemorySaverPolicy::OnShouldDiscard(
     const TabPageDecorator::TabHandle* tab_handle) {
   CHECK(graph_);
   CHECK(tab_handle);
-  policies::PageDiscardingHelper::GetFromGraph(graph_)
-      ->ImmediatelyDiscardSpecificPage(
-          tab_handle->page_node(),
-          policies::PageDiscardingHelper::DiscardReason::PROACTIVE);
+  if (!is_simulation_mode_) {
+    policies::PageDiscardingHelper::GetFromGraph(graph_)
+        ->ImmediatelyDiscardSpecificPage(
+            tab_handle->page_node(),
+            policies::PageDiscardingHelper::DiscardReason::PROACTIVE);
+  }
 }
 
 }  // namespace performance_manager
diff --git a/chrome/browser/performance_manager/policies/probabilistic_memory_saver_policy.h b/chrome/browser/performance_manager/policies/probabilistic_memory_saver_policy.h
index d4dc647..9eca57f 100644
--- a/chrome/browser/performance_manager/policies/probabilistic_memory_saver_policy.h
+++ b/chrome/browser/performance_manager/policies/probabilistic_memory_saver_policy.h
@@ -17,7 +17,8 @@
  public:
   using EstimatorCreationFunc = base::RepeatingCallback<std::unique_ptr<
       ProactiveDiscardEvaluator::RevisitProbabilityEstimator>(Graph*)>;
-  explicit ProbabilisticMemorySaverPolicy(
+  ProbabilisticMemorySaverPolicy(
+      bool simulation_mode,
       EstimatorCreationFunc estimator_creation_function = base::BindRepeating(
           &ProbabilisticMemorySaverPolicy::CreateDefaultEstimator));
   ~ProbabilisticMemorySaverPolicy() override;
@@ -31,6 +32,10 @@
   CreateDefaultEstimator(Graph* graph);
   void OnShouldDiscard(const TabPageDecorator::TabHandle* tab_handle);
 
+  // When true, histograms are recorded as-if tabs were discarded but the
+  // discard isn't triggered.
+  bool is_simulation_mode_ = true;
+
   std::unique_ptr<ProactiveDiscardEvaluator> evaluator_;
   raw_ptr<Graph> graph_;
   EstimatorCreationFunc estimator_creation_function_;
diff --git a/chrome/browser/performance_manager/policies/probabilistic_memory_saver_policy_unittest.cc b/chrome/browser/performance_manager/policies/probabilistic_memory_saver_policy_unittest.cc
index 6798f44..7c76229 100644
--- a/chrome/browser/performance_manager/policies/probabilistic_memory_saver_policy_unittest.cc
+++ b/chrome/browser/performance_manager/policies/probabilistic_memory_saver_policy_unittest.cc
@@ -40,6 +40,7 @@
             static_cast<PageNode*>(page_node())->GetBrowserContextID(), {});
 
     auto policy = std::make_unique<ProbabilisticMemorySaverPolicy>(
+        /*simulation_mode=*/false,
         base::BindRepeating(&ProbabilisticMemoySaverPolicyTest::CreateEstimator,
                             base::Unretained(this)));
     policy_ = policy.get();
diff --git a/chrome/browser/performance_manager/policies/revisit_cdf_container.cc b/chrome/browser/performance_manager/policies/revisit_cdf_container.cc
index 1619059..c771c2d5 100644
--- a/chrome/browser/performance_manager/policies/revisit_cdf_container.cc
+++ b/chrome/browser/performance_manager/policies/revisit_cdf_container.cc
@@ -28,7 +28,6 @@
 }
 
 RevisitCdfContainer::RevisitCdfContainer(const RevisitCdfContainer&) = default;
-
 RevisitCdfContainer::~RevisitCdfContainer() = default;
 
 float RevisitCdfContainer::GetProbability(uint64_t value) const {
diff --git a/chrome/browser/performance_manager/policies/revisit_probability_distributions.cc b/chrome/browser/performance_manager/policies/revisit_probability_distributions.cc
new file mode 100644
index 0000000..a1d2e8bb
--- /dev/null
+++ b/chrome/browser/performance_manager/policies/revisit_probability_distributions.cc
@@ -0,0 +1,26 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/performance_manager/policies/revisit_probability_distributions.h"
+
+namespace performance_manager {
+
+std::map<int64_t, RevisitCdfContainer>
+CreatePerRevisitCountTimeToRevisitCdfs() {
+  // TODO(crbug.com/1469337): Compute these distributions from UMA data and
+  // include the values here. Returning the empty map is safe because the
+  // estimators will consider the probability of revisit as 1.0 if the
+  // distributions needed for the computation don't exist.
+  return {};
+}
+
+std::map<int64_t, float> CreatePerRevisitCountRevisitProbability() {
+  // TODO(crbug.com/1469337): Compute these distributions from UMA data and
+  // include the values here. Returning the empty map is safe because the
+  // estimators will consider the probability of revisit as 1.0 if the
+  // distributions needed for the computation don't exist.
+  return {};
+}
+
+}  // namespace performance_manager
diff --git a/chrome/browser/performance_manager/policies/revisit_probability_distributions.h b/chrome/browser/performance_manager/policies/revisit_probability_distributions.h
new file mode 100644
index 0000000..75729d0
--- /dev/null
+++ b/chrome/browser/performance_manager/policies/revisit_probability_distributions.h
@@ -0,0 +1,25 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_PERFORMANCE_MANAGER_POLICIES_REVISIT_PROBABILITY_DISTRIBUTIONS_H_
+#define CHROME_BROWSER_PERFORMANCE_MANAGER_POLICIES_REVISIT_PROBABILITY_DISTRIBUTIONS_H_
+
+#include <map>
+
+#include "chrome/browser/performance_manager/policies/revisit_cdf_container.h"
+
+namespace performance_manager {
+
+// Returns a map of revisit count -> cumulative distribution function of the
+// time to revisit a background tab. There should be
+// `TabRevisitTracker::kMaxNumRevisit` entries in the map.
+std::map<int64_t, RevisitCdfContainer> CreatePerRevisitCountTimeToRevisitCdfs();
+
+// Returns a map of revisit count -> probability of tab being revisited. There
+// should be `TabRevisitTracker::kMaxNumRevisit` entries in the map.
+std::map<int64_t, float> CreatePerRevisitCountRevisitProbability();
+
+}  // namespace performance_manager
+
+#endif  // CHROME_BROWSER_PERFORMANCE_MANAGER_POLICIES_REVISIT_PROBABILITY_DISTRIBUTIONS_H_
diff --git a/chrome/browser/performance_manager/user_tuning/user_performance_tuning_notifier_unittest.cc b/chrome/browser/performance_manager/user_tuning/user_performance_tuning_notifier_unittest.cc
index 4a8939e5..78cdd3c 100644
--- a/chrome/browser/performance_manager/user_tuning/user_performance_tuning_notifier_unittest.cc
+++ b/chrome/browser/performance_manager/user_tuning/user_performance_tuning_notifier_unittest.cc
@@ -162,8 +162,8 @@
   EXPECT_EQ(1, receiver_->memory_refreshed_count_);
 
   std::vector<uint64_t> expected_pmf_kb{
-      frame1->private_footprint_kb_estimate(),
-      frame2->private_footprint_kb_estimate()};
+      frame1->GetPrivateFootprintKbEstimate(),
+      frame2->GetPrivateFootprintKbEstimate()};
   EXPECT_EQ(std::size(expected_pmf_kb), receiver_->pages_pmf_kb_.size());
   EXPECT_THAT(expected_pmf_kb,
               testing::UnorderedElementsAreArray(receiver_->pages_pmf_kb_));
diff --git a/chrome/browser/plugins/plugin_response_interceptor_url_loader_throttle.cc b/chrome/browser/plugins/plugin_response_interceptor_url_loader_throttle.cc
index bf0b24e0..4841d11 100644
--- a/chrome/browser/plugins/plugin_response_interceptor_url_loader_throttle.cc
+++ b/chrome/browser/plugins/plugin_response_interceptor_url_loader_throttle.cc
@@ -9,6 +9,7 @@
 
 #include "base/feature_list.h"
 #include "base/functional/bind.h"
+#include "base/unguessable_token.h"
 #include "base/uuid.h"
 #include "chrome/browser/extensions/api/streams_private/streams_private_api.h"
 #include "chrome/browser/plugins/plugin_utils.h"
@@ -154,14 +155,14 @@
       new_client.BindNewPipeAndPassReceiver();
 
   std::string payload;
+  const std::string internal_id = base::UnguessableToken::Create().ToString();
 #if BUILDFLAG(ENABLE_PDF)
   if (base::FeatureList::IsEnabled(chrome_pdf::features::kPdfOopif) &&
       response_head->mime_type == "application/pdf") {
     // For the PDF viewer, set the payload without creating a MimeHandlerView.
     payload =
         extensions::MimeHandlerViewAttachHelper::CreateTemplateMimeHandlerPage(
-            response_url, response_head->mime_type,
-            /*internal_id=*/base::UnguessableToken::Create().ToString());
+            response_url, response_head->mime_type, internal_id);
     // Schedule `ResumeLoad()` for later to provide an opportunity for other UI
     // thread initializations.
     content::GetUIThreadTaskRunner({})->PostTask(
@@ -175,7 +176,7 @@
     payload = extensions::MimeHandlerViewAttachHelper::
         OverrideBodyForInterceptedResponse(
             frame_tree_node_id_, response_url, response_head->mime_type,
-            stream_id,
+            stream_id, internal_id,
             base::BindOnce(
                 &PluginResponseInterceptorURLLoaderThrottle::ResumeLoad,
                 weak_factory_.GetWeakPtr()));
@@ -230,7 +231,7 @@
       base::BindOnce(
           &extensions::StreamsPrivateAPI::SendExecuteMimeTypeHandlerEvent,
           extension_id, stream_id, embedded, frame_tree_node_id_,
-          std::move(transferrable_loader), response_url));
+          std::move(transferrable_loader), response_url, internal_id));
 }
 
 void PluginResponseInterceptorURLLoaderThrottle::ResumeLoad() {
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 24bebc8..73cab9b 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -953,7 +953,12 @@
 constexpr char kNightLightCachedLatitude[] = "ash.night_light.cached_latitude";
 constexpr char kNightLightCachedLongitude[] =
     "ash.night_light.cached_longitude";
-#endif
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
+// Deprecated 11/2023
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+constexpr char kUserGeolocationAllowed[] = "ash.user.geolocation_allowed";
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 // Deprecated 11/2023.
 const char kPrivacySandboxAntiAbuseInitialized[] =
@@ -1370,6 +1375,11 @@
 #if BUILDFLAG(IS_CHROMEOS_ASH)
   registry->RegisterBooleanPref(kSystemTrayExpanded, true);
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
+// Deprecated 11/2023
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  registry->RegisterBooleanPref(kUserGeolocationAllowed, true);
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 }
 
 void ClearSyncRequestedPrefAndMaybeMigrate(PrefService* profile_prefs) {
@@ -2565,6 +2575,11 @@
   profile_prefs->ClearPref(kSystemTrayExpanded);
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  // Added 11/2023
+  profile_prefs->ClearPref(kUserGeolocationAllowed);
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
   // Please don't delete the following line. It is used by PRESUBMIT.py.
   // END_MIGRATE_OBSOLETE_PROFILE_PREFS
 
diff --git a/chrome/browser/printing/system_access_process_print_browsertest.cc b/chrome/browser/printing/system_access_process_print_browsertest.cc
index a76ea11b..b922236 100644
--- a/chrome/browser/printing/system_access_process_print_browsertest.cc
+++ b/chrome/browser/printing/system_access_process_print_browsertest.cc
@@ -2127,6 +2127,88 @@
   EXPECT_EQ(error_dialog_shown_count(), 0u);
   EXPECT_EQ(print_job_destruction_count(), 0);
 }
+
+// TODO(crbug.com/1501950):  Enable test for Linux and macOS once renderer
+// RunLoop behavior can be made to work with test expectations.
+IN_PROC_BROWSER_TEST_P(SystemAccessProcessPrintBrowserTest,
+                       SystemPrintAfterSystemPrintFromPrintPreview) {
+  // TODO(crbug.com/1497945):  Let test run once crash is resolved.
+  if (UseService()) {
+    GTEST_SKIP();
+  }
+
+  AddPrinter("printer1");
+  SetPrinterNameForSubsequentContexts("printer1");
+  PrimeForCancelInAskUserForSettings();
+
+  ASSERT_TRUE(embedded_test_server()->Started());
+  GURL url(embedded_test_server()->GetURL("/printing/test3.html"));
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
+
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  ASSERT_TRUE(web_contents);
+  SetUpPrintViewManager(web_contents);
+
+  // First invoke system print from Print Preview.  Wait until the
+  // PrintPreviewUI is done before proceeding to the second part of the
+  // test.
+  SetCheckForPrintPreviewDone(/*check=*/true);
+
+  if (UseService()) {
+    // Once the transition to system print is initiated, the expected events
+    // are:
+    // 1.  Update the print settings.  This internally invokes the system
+    //     print dialog which cancels.
+    // 2.  Print Preview is done.
+    // No print job is created because of such an early cancel.
+    SetNumExpectedMessages(/*num=*/2);
+  } else {
+    // Once the transition to system print is initiated, the expected events
+    // are:
+    // 1.  Update the print settings.
+    // 2.  Print Preview is done.
+    // No print job is created because of such an early cancel.
+    SetNumExpectedMessages(/*num=*/2);
+  }
+  SystemPrintFromPreviewOnceReadyAndLoaded(/*wait_for_callback=*/true);
+
+  if (UseService()) {
+    // Windows invokes system print dialog from UpdatePrintSettings().
+    EXPECT_EQ(update_print_settings_result(), mojom::ResultCode::kCanceled);
+  } else {
+    // User settings are invoked from within UpdatePrintSettings().
+    EXPECT_FALSE(did_use_default_settings());
+    EXPECT_FALSE(did_get_settings_with_ui());
+
+    // `PrintBackendService` should never be used when printing in-browser.
+    EXPECT_FALSE(print_backend_service_use_detected());
+  }
+
+  // Reset before initiating system print.
+  PrepareRunloop();
+  ResetNumReceivedMessages();
+
+  // The expected events for this are:
+  // 1.  Get the default settings.
+  // 2.  Ask the user for settings, which cancels out.  No further printing
+  // calls are made.
+  SetNumExpectedMessages(/*num=*/2);
+
+  StartBasicPrint(web_contents);
+
+  WaitUntilCallbackReceived();
+
+  if (UseService()) {
+    EXPECT_EQ(use_default_settings_result(), mojom::ResultCode::kSuccess);
+    EXPECT_EQ(ask_user_for_settings_result(), mojom::ResultCode::kCanceled);
+  } else {
+    EXPECT_TRUE(did_use_default_settings());
+    EXPECT_TRUE(did_get_settings_with_ui());
+  }
+  EXPECT_EQ(error_dialog_shown_count(), 0u);
+  EXPECT_EQ(print_job_destruction_count(), 0);
+}
 #endif  // BUILDFLAG(IS_WIN)
 
 IN_PROC_BROWSER_TEST_F(SystemAccessProcessSandboxedServicePrintBrowserTest,
diff --git a/chrome/browser/privacy_sandbox/tracking_protection_notice_browsertest.cc b/chrome/browser/privacy_sandbox/tracking_protection_notice_browsertest.cc
index 57f14d6..d69beee 100644
--- a/chrome/browser/privacy_sandbox/tracking_protection_notice_browsertest.cc
+++ b/chrome/browser/privacy_sandbox/tracking_protection_notice_browsertest.cc
@@ -194,8 +194,9 @@
 class TrackingProtectionBaseNoticeBrowserTest : public InProcessBrowserTest {
  protected:
   explicit TrackingProtectionBaseNoticeBrowserTest(
-      const std::vector<base::test::FeatureRef>& enabled_features) {
-    feature_list_.InitAndEnableFeatures(enabled_features);
+      const std::vector<base::test::FeatureRef>& enabled_features,
+      const std::vector<base::test::FeatureRef>& disabled_features = {}) {
+    feature_list_.InitAndEnableFeatures(enabled_features, disabled_features);
   }
 
   void SetUpOnMainThread() override {
@@ -218,6 +219,7 @@
   }
 
   virtual std::vector<base::test::FeatureRef> EnabledFeatures() = 0;
+  virtual std::vector<base::test::FeatureRef> DisabledFeatures() { return {}; }
 
   net::EmbeddedTestServer https_server_{net::EmbeddedTestServer::TYPE_HTTPS};
   base::HistogramTester histogram_tester_;
@@ -230,13 +232,18 @@
     : public TrackingProtectionBaseNoticeBrowserTest {
  protected:
   TrackingProtectionOnboardingNoticeBrowserTest()
-      : TrackingProtectionBaseNoticeBrowserTest(EnabledFeatures()) {}
+      : TrackingProtectionBaseNoticeBrowserTest(EnabledFeatures(),
+                                                DisabledFeatures()) {}
 
   std::vector<base::test::FeatureRef> EnabledFeatures() override {
     return {feature_engagement::kIPHTrackingProtectionOnboardingFeature,
             feature_engagement::kIPHTrackingProtectionOffboardingFeature};
   }
 
+  std::vector<base::test::FeatureRef> DisabledFeatures() override {
+    return {privacy_sandbox::kTrackingProtectionOnboardingRollback};
+  }
+
   bool IsOnboardingPromoActive(Browser* browser) {
     return GetFeaturePromoController(browser)->IsPromoActive(
         feature_engagement::kIPHTrackingProtectionOnboardingFeature);
diff --git a/chrome/browser/recent_tabs/android/java/src/org/chromium/chrome/browser/recent_tabs/RestoreTabsFeatureHelper.java b/chrome/browser/recent_tabs/android/java/src/org/chromium/chrome/browser/recent_tabs/RestoreTabsFeatureHelper.java
index 308e785..2941694 100644
--- a/chrome/browser/recent_tabs/android/java/src/org/chromium/chrome/browser/recent_tabs/RestoreTabsFeatureHelper.java
+++ b/chrome/browser/recent_tabs/android/java/src/org/chromium/chrome/browser/recent_tabs/RestoreTabsFeatureHelper.java
@@ -88,9 +88,10 @@
         // fulfilled, it can be assumed this will be the second time the promo shows. Note that this
         // logic only works for the 2 count max for promo showing. The hasEverTriggered call must be
         // before the shouldTriggerHelpUI call, otherwise it will always return true.
-        int showCount = tracker.hasEverTriggered(FeatureConstants.RESTORE_TABS_ON_FRE_FEATURE, true)
-                ? 2
-                : 1;
+        int showCount =
+                tracker.hasEverTriggered(FeatureConstants.RESTORE_TABS_ON_FRE_FEATURE, false)
+                        ? 2
+                        : 1;
         RestoreTabsMetricsHelper.setPromoShownCount(showCount);
 
         // The difference between wouldTriggerHelpUI and shouldTriggerHelpUI is that the latter
diff --git a/chrome/browser/recent_tabs/internal/android/java/src/org/chromium/chrome/browser/recent_tabs/RestoreTabsMetricsHelper.java b/chrome/browser/recent_tabs/internal/android/java/src/org/chromium/chrome/browser/recent_tabs/RestoreTabsMetricsHelper.java
index 0ff0e3e2..c7f7ec6d9 100644
--- a/chrome/browser/recent_tabs/internal/android/java/src/org/chromium/chrome/browser/recent_tabs/RestoreTabsMetricsHelper.java
+++ b/chrome/browser/recent_tabs/internal/android/java/src/org/chromium/chrome/browser/recent_tabs/RestoreTabsMetricsHelper.java
@@ -96,12 +96,14 @@
         switch (count) {
             case 1:
                 RecordHistogram.recordEnumeratedHistogram(
-                        "Android.RestoreTabsOnFRE.ResultActionFirstShow", action,
+                        "Android.RestoreTabsOnFRE.ResultActionFirstShow2",
+                        action,
                         RestoreTabsOnFREResultAction.NUM_ENTRIES);
                 break;
             case 2:
                 RecordHistogram.recordEnumeratedHistogram(
-                        "Android.RestoreTabsOnFRE.ResultActionSecondShow", action,
+                        "Android.RestoreTabsOnFRE.ResultActionSecondShow2",
+                        action,
                         RestoreTabsOnFREResultAction.NUM_ENTRIES);
                 break;
         }
diff --git a/chrome/browser/resources/ash/settings/os_about_page/detailed_build_info_subpage.ts b/chrome/browser/resources/ash/settings/os_about_page/detailed_build_info_subpage.ts
index 4f21939..353bb510 100644
--- a/chrome/browser/resources/ash/settings/os_about_page/detailed_build_info_subpage.ts
+++ b/chrome/browser/resources/ash/settings/os_about_page/detailed_build_info_subpage.ts
@@ -18,6 +18,7 @@
 import './edit_hostname_dialog.js';
 
 import {PrefsMixin} from 'chrome://resources/cr_components/settings_prefs/prefs_mixin.js';
+import {getInstance as getAnnouncerInstance} from 'chrome://resources/cr_elements/cr_a11y_announcer/cr_a11y_announcer.js';
 import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
 import {CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_mixin.js';
 import {WebUiListenerMixin} from 'chrome://resources/cr_elements/web_ui_listener_mixin.js';
@@ -371,6 +372,9 @@
     }
 
     navigator.clipboard.writeText(entries.join('\n'));
+
+    getAnnouncerInstance().announce(
+        this.i18n('aboutBuildDetailsCopiedToClipboardA11yLabel'));
   }
 
   private onConsumerAutoUpdateToggled_(_event: Event): void {
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/chromevox_range.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/chromevox_range.js
index 59676ace..0d8be53 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/chromevox_range.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/chromevox_range.js
@@ -71,11 +71,6 @@
     return null;
   }
 
-  /** @return {?CursorRange} */
-  static get pageSel() {
-    return ChromeVoxRange.instance.pageSel_;
-  }
-
   /** @param {?CursorRange} newPageSel */
   static set pageSel(newPageSel) {
     ChromeVoxRange.instance.pageSel_ = newPageSel;
@@ -423,14 +418,14 @@
    * @private
    */
   toggleSelection_() {
-    if (!ChromeVoxRange.pageSel) {
+    if (!this.pageSel_) {
       ChromeVox.earcons.playEarcon(EarconId.SELECTION);
-      ChromeVoxRange.pageSel = ChromeVoxRange.current;
+      this.pageSel_ = ChromeVoxRange.current;
       DesktopAutomationInterface.instance.ignoreDocumentSelectionFromAction(
           true);
       return true;
     } else {
-      const root = ChromeVoxRange.current.start.node.root;
+      const root = this.current_.start.node.root;
       if (root && root.selectionStartObject && root.selectionEndObject &&
           !isNaN(Number(root.selectionStartOffset)) &&
           !isNaN(Number(root.selectionEndOffset))) {
@@ -450,7 +445,7 @@
         DesktopAutomationInterface.instance.ignoreDocumentSelectionFromAction(
             false);
       }
-      ChromeVoxRange.pageSel = null;
+      this.pageSel_ = null;
       return false;
     }
   }
diff --git a/chrome/browser/resources/chromeos/accessibility/common/automation_predicate.js b/chrome/browser/resources/chromeos/accessibility/common/automation_predicate.js
index e70928be..d8641244 100644
--- a/chrome/browser/resources/chromeos/accessibility/common/automation_predicate.js
+++ b/chrome/browser/resources/chromeos/accessibility/common/automation_predicate.js
@@ -5,10 +5,12 @@
 /**
  * @fileoverview Predicates for the automation extension API.
  */
-
 import {constants} from './constants.js';
 
+const ActionType = chrome.automation.ActionType;
 const AutomationNode = chrome.automation.AutomationNode;
+const DefaultActionVerb = chrome.automation.DefaultActionVerb;
+const Dir = constants.Dir;
 const InvalidState = chrome.automation.InvalidState;
 const MarkerType = chrome.automation.MarkerType;
 const Restriction = chrome.automation.Restriction;
@@ -27,8 +29,7 @@
   // Static text nodes are never actionable for the purposes of navigation even
   // if they have default action verb set.
   if (node.role !== Role.STATIC_TEXT && node.defaultActionVerb &&
-      (node.defaultActionVerb !==
-           chrome.automation.DefaultActionVerb.CLICK_ANCESTOR ||
+      (node.defaultActionVerb !== DefaultActionVerb.CLICK_ANCESTOR ||
        sawClickAncestorAction)) {
     return true;
   }
@@ -38,8 +39,7 @@
   }
 
   sawClickAncestorAction = sawClickAncestorAction || !node.defaultActionVerb ||
-      node.defaultActionVerb ===
-          chrome.automation.DefaultActionVerb.CLICK_ANCESTOR;
+      node.defaultActionVerb === DefaultActionVerb.CLICK_ANCESTOR;
   for (let i = 0; i < node.children.length; i++) {
     if (isActionableOrHasActionableDescendant(
             node.children[i], sawClickAncestorAction)) {
@@ -57,8 +57,7 @@
  */
 const hasActionableDescendant = function(node) {
   const sawClickAncestorAction = !node.defaultActionVerb ||
-      node.defaultActionVerb ===
-          chrome.automation.DefaultActionVerb.CLICK_ANCESTOR;
+      node.defaultActionVerb === DefaultActionVerb.CLICK_ANCESTOR;
   for (let i = 0; i < node.children.length; i++) {
     if (isActionableOrHasActionableDescendant(
             node.children[i], sawClickAncestorAction)) {
@@ -633,7 +632,7 @@
    * Returns a predicate that will match against the directed next cell taking
    * into account the current ancestor cell's position in the table.
    * @param {AutomationNode} start
-   * @param {{dir: (constants.Dir|undefined),
+   * @param {{dir: (Dir|undefined),
    *           row: (boolean|undefined),
    *          col: (boolean|undefined)}} opts
    * |dir|, specifies direction for |row or/and |col| movement by one cell.
@@ -648,7 +647,7 @@
       throw new Error('You must set either row or col to true');
     }
 
-    const dir = opts.dir || constants.Dir.FORWARD;
+    const dir = opts.dir || Dir.FORWARD;
 
     // Compute the row/col index defaulting to 0.
     let rowIndex = 0;
@@ -676,7 +675,7 @@
         throw 'Unsupported option.';
       }
 
-      if (dir === constants.Dir.FORWARD) {
+      if (dir === Dir.FORWARD) {
         return function(node) {
           return AutomationPredicate.cellLike(node) &&
               node.tableCellColumnIndex === colIndex &&
@@ -693,10 +692,10 @@
 
     // Adjust for the next/previous row/col.
     if (opts.row) {
-      rowIndex = dir === constants.Dir.FORWARD ? rowIndex + 1 : rowIndex - 1;
+      rowIndex = dir === Dir.FORWARD ? rowIndex + 1 : rowIndex - 1;
     }
     if (opts.col) {
-      colIndex = dir === constants.Dir.FORWARD ? colIndex + 1 : colIndex - 1;
+      colIndex = dir === Dir.FORWARD ? colIndex + 1 : colIndex - 1;
     }
 
     return function(node) {
@@ -748,10 +747,8 @@
    */
   static autoScrollable(node) {
     return Boolean(node.scrollable) &&
-        (node.standardActions.includes(
-             chrome.automation.ActionType.SCROLL_FORWARD) ||
-         node.standardActions.includes(
-             chrome.automation.ActionType.SCROLL_BACKWARD)) &&
+        (node.standardActions.includes(ActionType.SCROLL_FORWARD) ||
+         node.standardActions.includes(ActionType.SCROLL_BACKWARD)) &&
         (node.role === Role.GRID || node.role === Role.LIST ||
          node.role === Role.POP_UP_BUTTON || node.role === Role.SCROLL_VIEW);
   }
@@ -952,8 +949,7 @@
     AutomationPredicate.button,
     AutomationPredicate.link,
     node => {
-      return node.defaultActionVerb ===
-          chrome.automation.DefaultActionVerb.CLICK;
+      return node.defaultActionVerb === DefaultActionVerb.CLICK;
     },
   ],
   anyAttribute: {clickable: true},
diff --git a/chrome/browser/resources/tab_search/tab_organization_in_progress.html b/chrome/browser/resources/tab_search/tab_organization_in_progress.html
index 8d4b519..1392120 100644
--- a/chrome/browser/resources/tab_search/tab_organization_in_progress.html
+++ b/chrome/browser/resources/tab_search/tab_organization_in_progress.html
@@ -1,93 +1,30 @@
 <style include="tab-organization-shared-style">
-  :host {
-    --border-height: 220px;
-    --border-width: 100%;
-    --primary-background-color: var(--color-tab-organization-gradient1);
-    --secondary-background-color: var(--color-tab-organization-gradient2);
-  }
-
-  .background {
-    --border-thickness: 2px;
-    background-color: var(--color-sys-surface);
-    border-radius: 6px;
-    height: calc(var(--border-height)
-                     - 2 * var(--border-thickness));
-    width: calc(var(--border-width)
-                    - 2 * var(--border-thickness));
-  }
-
-  .border {
-    align-items: center;
+  #loading-container {
+    border: solid 2px var(--color-loading-gradient-border);
     border-radius: 8px;
-    display: flex;
-    height: var(--border-height);
-    justify-content: center;
-    width: var(--border-width);
-  }
-
-  .gradient {
-    animation: gradient 5s linear infinite;
-    background: linear-gradient(
-      -45deg,
-      var(--primary-background-color) 0%,
-      var(--secondary-background-color) 33%,
-      var(--primary-background-color) 66%,
-      var(--secondary-background-color) 100%);
-    background-position: 20% 0;
-    background-size: 400% 400%;
-  }
-
-  /* 20% 0% is an experimentally derived start position which allows the
-   * gradient to loop without perceivable jitter.
-   */
-  @keyframes gradient {
-    0% {
-      background-position: 20% 0;
-    }
-    100% {
-      background-position: 100% 100%;
-    }
-  }
-
-  .mask {
-    clip-path: url(#clip_path);
-    height: 100%;
-    width: 100%;
+    padding: 14px;
   }
 </style>
 
 <div class="tab-organization-container">
   <div class="tab-organization-header">$i18n{inProgressTitle}</div>
-  <div class="gradient border">
-    <div class="background">
-      <div class="gradient mask">
-        <svg>
-          <defs>
-            <clipPath id="clip_path" x="14" y="14" width="248" height="191">
-              <rect x="14" y="14" width="248" height="35" rx="8" fill="white">
-              </rect>
-              <rect x="14" y="69" width="40" height="40" rx="8" fill="white">
-              </rect>
-              <rect x="70" y="71" width="116" height="16" rx="4" fill="white">
-              </rect>
-              <rect x="70" y="119" width="116" height="16" rx="4" fill="white">
-              </rect>
-              <rect x="70" y="167" width="116" height="16" rx="4" fill="white">
-              </rect>
-              <rect x="70" y="93" width="76" height="14" rx="4" fill="white">
-              </rect>
-              <rect x="70" y="141" width="76" height="14" rx="4" fill="white">
-              </rect>
-              <rect x="70" y="189" width="76" height="14" rx="4" fill="white">
-              </rect>
-              <rect x="14" y="117" width="40" height="40" rx="8" fill="white">
-              </rect>
-              <rect x="14" y="165" width="40" height="40" rx="8" fill="white">
-              </rect>
-            </clipPath>
-          </defs>
+  <div id="loading-container">
+    <cr-loading-gradient>
+        <svg width="100%" height="191">
+          <clipPath>
+            <rect x="0" y="0" width="100%" height="35" rx="8"></rect>
+            <rect x="0" y="55" width="40" height="40" rx="8"></rect>
+            <rect x="56" y="57" width="116" height="16" rx="4"></rect>
+            <rect x="56" y="105" width="116" height="16" rx="4"></rect>
+            <rect x="56" y="153" width="116" height="16" rx="4"></rect>
+            <rect x="56" y="79" width="76" height="14" rx="4"></rect>
+            <rect x="56" y="127" width="76" height="14" rx="4"></rect>
+            <rect x="56" y="175" width="76" height="14" rx="4"></rect>
+            <rect x="0" y="103" width="40" height="40" rx="8"></rect>
+            <rect x="0" y="151" width="40" height="40" rx="8"></rect>
+          </clipPath>
         </svg>
-      </div>
+      </cr-loading-gradient>
     </div>
   </div>
 </div>
diff --git a/chrome/browser/resources/tab_search/tab_organization_in_progress.ts b/chrome/browser/resources/tab_search/tab_organization_in_progress.ts
index 35a8fb4..63c689f 100644
--- a/chrome/browser/resources/tab_search/tab_organization_in_progress.ts
+++ b/chrome/browser/resources/tab_search/tab_organization_in_progress.ts
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import './tab_organization_shared_style.css.js';
+import 'chrome://resources/cr_elements/cr_loading_gradient/cr_loading_gradient.js';
 
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
diff --git a/chrome/browser/storage_access_api/api_browsertest.cc b/chrome/browser/storage_access_api/api_browsertest.cc
index a0bdcfe..4794eff 100644
--- a/chrome/browser/storage_access_api/api_browsertest.cc
+++ b/chrome/browser/storage_access_api/api_browsertest.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "base/containers/adapters.h"
+#include "base/feature_list.h"
 #include "base/functional/bind.h"
 #include "base/path_service.h"
 #include "base/strings/escape.h"
@@ -26,6 +27,7 @@
 #include "components/content_settings/core/browser/host_content_settings_map.h"
 #include "components/content_settings/core/common/content_settings.h"
 #include "components/content_settings/core/common/content_settings_types.h"
+#include "components/content_settings/core/common/features.h"
 #include "components/content_settings/core/common/pref_names.h"
 #include "components/permissions/features.h"
 #include "components/permissions/permission_request_manager.h"
@@ -874,6 +876,10 @@
   NavigateToPageWithTwoFrames(kHostA);
   NavigateFirstFrameTo(EchoCookiesURL(kHostB));
   NavigateSecondFrameTo(EchoCookiesURL(kHostC));
+  CookieSettingsFactory::GetForProfile(browser()->profile())
+      ->SetCookieSetting(GetURL(kHostB), CONTENT_SETTING_ALLOW);
+  CookieSettingsFactory::GetForProfile(browser()->profile())
+      ->SetCookieSetting(GetURL(kHostC), CONTENT_SETTING_ALLOW);
 
   // Verify that both same-origin subresource request and cross-origin
   // subresource request can access cookies for the kHostB iframe.
@@ -886,6 +892,10 @@
   ASSERT_EQ(CookiesFromFetch(GetSecondFrame(), kHostB), "cross-site=b.test");
 
   SetBlockThirdPartyCookies(true);
+  CookieSettingsFactory::GetForProfile(browser()->profile())
+      ->ResetCookieSetting(GetURL(kHostB));
+  CookieSettingsFactory::GetForProfile(browser()->profile())
+      ->ResetCookieSetting(GetURL(kHostC));
   // Navigate the first iframe to kHostB and grant Storage Access.
   NavigateFirstFrameTo(EchoCookiesURL(kHostB));
   EXPECT_EQ(ReadCookiesAndContent(GetFirstFrame(), kHostB),
@@ -1719,12 +1729,16 @@
                        ThirdPartyIFrameStorageRequestsAccess) {
   NavigateToPageWithFrame(kHostA);
   NavigateFrameTo(kHostB, "/browsing_data/site_data.html");
+  CookieSettingsFactory::GetForProfile(browser()->profile())
+      ->SetCookieSetting(GetURL(kHostB), CONTENT_SETTING_ALLOW);
 
   ExpectStorage(GetFrame(), false);
   SetStorage(GetFrame());
   ExpectStorage(GetFrame(), true);
 
   SetBlockThirdPartyCookies(true);
+  CookieSettingsFactory::GetForProfile(browser()->profile())
+      ->ResetCookieSetting(GetURL(kHostB));
 
   NavigateToPageWithFrame(kHostA);
   NavigateFrameTo(kHostB, "/browsing_data/site_data.html");
@@ -1751,12 +1765,20 @@
   NavigateToPageWithFrame(kHostA);
   NavigateFrameTo(kHostB, "/iframe.html");
   NavigateNestedFrameTo(kHostC, "/browsing_data/site_data.html");
+  CookieSettingsFactory::GetForProfile(browser()->profile())
+      ->SetCookieSetting(GetURL(kHostB), CONTENT_SETTING_ALLOW);
+  CookieSettingsFactory::GetForProfile(browser()->profile())
+      ->SetCookieSetting(GetURL(kHostC), CONTENT_SETTING_ALLOW);
 
   ExpectStorage(GetNestedFrame(), false);
   SetStorage(GetNestedFrame());
   ExpectStorage(GetNestedFrame(), true);
 
   SetBlockThirdPartyCookies(true);
+  CookieSettingsFactory::GetForProfile(browser()->profile())
+      ->ResetCookieSetting(GetURL(kHostB));
+  CookieSettingsFactory::GetForProfile(browser()->profile())
+      ->ResetCookieSetting(GetURL(kHostC));
 
   NavigateToPageWithFrame(kHostA);
   NavigateFrameTo(kHostB, "/iframe.html");
@@ -1785,6 +1807,8 @@
 IN_PROC_BROWSER_TEST_P(StorageAccessAPIStorageBrowserTest, MultiTabTest) {
   NavigateToPageWithFrame(kHostA);
   NavigateFrameTo(kHostB, "/browsing_data/site_data.html");
+  CookieSettingsFactory::GetForProfile(browser()->profile())
+      ->SetCookieSetting(GetURL(kHostB), CONTENT_SETTING_ALLOW);
 
   storage::test::ExpectCrossTabInfoForFrame(GetFrame(), false);
   storage::test::SetCrossTabInfoForFrame(GetFrame());
@@ -1804,6 +1828,8 @@
   EXPECT_TRUE(storage::test::HasStorageAccessForFrame(GetFrame()));
 
   SetBlockThirdPartyCookies(true);
+  CookieSettingsFactory::GetForProfile(browser()->profile())
+      ->ResetCookieSetting(GetURL(kHostB));
 
   NavigateToPageWithFrame(kHostA);
   NavigateFrameTo(kHostB, "/browsing_data/site_data.html");
@@ -2302,6 +2328,8 @@
                        PartitionedStorage) {
   // Navigate to Origin B, setup storage, and expect storage.
   NavigateToPage(kHostB, "/browsing_data/site_data.html");
+  CookieSettingsFactory::GetForProfile(browser()->profile())
+      ->SetCookieSetting(GetURL(kHostB), CONTENT_SETTING_ALLOW);
   storage::test::ExpectStorageForFrame(GetPrimaryMainFrame(),
                                        /*expected=*/false);
   storage::test::SetStorageForFrame(GetPrimaryMainFrame(),
@@ -2544,6 +2572,10 @@
  public:
   StorageAccessAPIWith3PCEnabledBrowserTest()
       : StorageAccessAPIBaseBrowserTest(/*is_storage_partitioned=*/false) {}
+
+  std::vector<base::test::FeatureRef> GetDisabledFeatures() override {
+    return {content_settings::features::kTrackingProtection3pcd};
+  }
 };
 
 IN_PROC_BROWSER_TEST_F(StorageAccessAPIWith3PCEnabledBrowserTest,
diff --git a/chrome/browser/sync/test/integration/encryption_helper.cc b/chrome/browser/sync/test/integration/encryption_helper.cc
index 22f30ed8..0e5bfee 100644
--- a/chrome/browser/sync/test/integration/encryption_helper.cc
+++ b/chrome/browser/sync/test/integration/encryption_helper.cc
@@ -130,7 +130,7 @@
 
 TrustedVaultKeysChangedStateChecker::TrustedVaultKeysChangedStateChecker(
     syncer::SyncServiceImpl* service)
-    : service_(service), keys_changed_(false) {
+    : service_(service) {
   service->GetSyncClientForTest()->GetTrustedVaultClient()->AddObserver(this);
 }
 
diff --git a/chrome/browser/sync/test/integration/encryption_helper.h b/chrome/browser/sync/test/integration/encryption_helper.h
index c27efa5f..d31a7c37 100644
--- a/chrome/browser/sync/test/integration/encryption_helper.h
+++ b/chrome/browser/sync/test/integration/encryption_helper.h
@@ -118,7 +118,7 @@
 
  private:
   const raw_ptr<syncer::SyncServiceImpl> service_;
-  bool keys_changed_;
+  bool keys_changed_ = false;
 };
 
 // Used to wait until IsTrustedVaultRecoverabilityDegraded() returns the desired
diff --git a/chrome/browser/sync/test/integration/passwords_helper.cc b/chrome/browser/sync/test/integration/passwords_helper.cc
index 2cdb5d8..6605a43 100644
--- a/chrome/browser/sync/test/integration/passwords_helper.cc
+++ b/chrome/browser/sync/test/integration/passwords_helper.cc
@@ -338,9 +338,7 @@
 SamePasswordFormsAsVerifierChecker::SamePasswordFormsAsVerifierChecker(int i)
     : SingleClientStatusChangeChecker(
           sync_datatype_helper::test()->GetSyncService(i)),
-      index_(i),
-      in_progress_(false),
-      needs_recheck_(false) {}
+      index_(i) {}
 
 // This method uses the same re-entrancy prevention trick as
 // the SamePasswordFormsChecker.
@@ -371,9 +369,7 @@
     const std::vector<password_manager::PasswordForm>& expected_forms)
     : SingleClientStatusChangeChecker(
           sync_datatype_helper::test()->GetSyncService(index)),
-      index_(index),
-      in_progress_(false),
-      needs_recheck_(false) {
+      index_(index) {
   for (const password_manager::PasswordForm& password_form : expected_forms) {
     expected_forms_.push_back(
         std::make_unique<password_manager::PasswordForm>(password_form));
diff --git a/chrome/browser/sync/test/integration/passwords_helper.h b/chrome/browser/sync/test/integration/passwords_helper.h
index 441f9c7..02c15a52 100644
--- a/chrome/browser/sync/test/integration/passwords_helper.h
+++ b/chrome/browser/sync/test/integration/passwords_helper.h
@@ -160,9 +160,9 @@
   bool IsExitConditionSatisfied(std::ostream* os) override;
 
  private:
-  int index_;
-  bool in_progress_;
-  bool needs_recheck_;
+  const int index_;
+  bool in_progress_ = false;
+  bool needs_recheck_ = false;
 };
 
 // Checker to block until specified profile contains the given password forms.
@@ -181,8 +181,8 @@
 
   const int index_;
   std::vector<std::unique_ptr<password_manager::PasswordForm>> expected_forms_;
-  bool in_progress_;
-  bool needs_recheck_;
+  bool in_progress_ = false;
+  bool needs_recheck_ = false;
 };
 
 // Checker to block until server has the given password forms encrypted with
diff --git a/chrome/browser/sync/test/integration/sync_app_helper.cc b/chrome/browser/sync/test/integration/sync_app_helper.cc
index b0104b1..a41f4789 100644
--- a/chrome/browser/sync/test/integration/sync_app_helper.cc
+++ b/chrome/browser/sync/test/integration/sync_app_helper.cc
@@ -221,6 +221,6 @@
   ExtensionSystem::Get(profile)->app_sorting()->FixNTPOrdinalCollisions();
 }
 
-SyncAppHelper::SyncAppHelper() : setup_completed_(false) {}
+SyncAppHelper::SyncAppHelper() = default;
 
 SyncAppHelper::~SyncAppHelper() = default;
diff --git a/chrome/browser/sync/test/integration/sync_app_helper.h b/chrome/browser/sync/test/integration/sync_app_helper.h
index 79c18e4..f28fe5f 100644
--- a/chrome/browser/sync/test/integration/sync_app_helper.h
+++ b/chrome/browser/sync/test/integration/sync_app_helper.h
@@ -60,7 +60,7 @@
   SyncAppHelper();
   ~SyncAppHelper();
 
-  bool setup_completed_;
+  bool setup_completed_ = false;
 };
 
 #endif  // CHROME_BROWSER_SYNC_TEST_INTEGRATION_SYNC_APP_HELPER_H_
diff --git a/chrome/browser/sync/test/integration/sync_extension_helper.cc b/chrome/browser/sync/test/integration/sync_extension_helper.cc
index ec17562b..b8274095 100644
--- a/chrome/browser/sync/test/integration/sync_extension_helper.cc
+++ b/chrome/browser/sync/test/integration/sync_extension_helper.cc
@@ -49,7 +49,7 @@
   return instance;
 }
 
-SyncExtensionHelper::SyncExtensionHelper() : setup_completed_(false) {}
+SyncExtensionHelper::SyncExtensionHelper() = default;
 
 SyncExtensionHelper::~SyncExtensionHelper() = default;
 
diff --git a/chrome/browser/sync/test/integration/sync_extension_helper.h b/chrome/browser/sync/test/integration/sync_extension_helper.h
index 6268a945..d3d8a79 100644
--- a/chrome/browser/sync/test/integration/sync_extension_helper.h
+++ b/chrome/browser/sync/test/integration/sync_extension_helper.h
@@ -124,7 +124,7 @@
   ProfileExtensionNameMap profile_extensions_;
   StringMap id_to_name_;
   TypeMap id_to_type_;
-  bool setup_completed_;
+  bool setup_completed_ = false;
 };
 
 #endif  // CHROME_BROWSER_SYNC_TEST_INTEGRATION_SYNC_EXTENSION_HELPER_H_
diff --git a/chrome/browser/sync/test/integration/sync_test.cc b/chrome/browser/sync/test/integration/sync_test.cc
index fdc02af5..4cdd674 100644
--- a/chrome/browser/sync/test/integration/sync_test.cc
+++ b/chrome/browser/sync/test/integration/sync_test.cc
@@ -942,7 +942,8 @@
       // initialized.
       base::FilePath user_data_dir;
       base::PathService::Get(chrome::DIR_USER_DATA, &user_data_dir);
-      fake_server_ = std::make_unique<fake_server::FakeServer>(user_data_dir);
+      fake_server_ = std::make_unique<fake_server::FakeServer>(
+          user_data_dir.AppendASCII("FakeServer"));
       fake_server_sync_invalidation_sender_ =
           std::make_unique<fake_server::FakeServerSyncInvalidationSender>(
               fake_server_.get());
diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.java
index b658444..dcfa3ed 100644
--- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.java
+++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.java
@@ -340,4 +340,7 @@
     @Nullable
     @TabLaunchType
     Integer getTabLaunchTypeAtCreation();
+
+    /** Sets the TabLaunchType for tabs launched with an unset launch type. */
+    void setTabLaunchType(@TabLaunchType int launchType);
 }
diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabCreator.java b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabCreator.java
index 6d0eda3..5564209 100644
--- a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabCreator.java
+++ b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabCreator.java
@@ -55,15 +55,6 @@
      */
     public abstract Tab createFrozenTab(TabState state, int id, int index);
 
-    /*
-     * Creates a new tab which is detached from the tab model.
-     * @params type Information about where the tab was created from.
-     * @params boolean initializeRenderer whether to initialize renderer during WebContents creation
-     * or not.
-     */
-    public abstract @Nullable Tab buildDetachedSpareTab(
-            @TabLaunchType int type, boolean initializeRenderer);
-
     /**
      * Creates a new tab and loads the specified URL in it. This is a convenience method for
      * {@link #createNewTab} with the default {@link LoadUrlParams} and no parent tab.
diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorFactory.java b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorFactory.java
index f3e9b184..f3059641 100644
--- a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorFactory.java
+++ b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorFactory.java
@@ -4,7 +4,7 @@
 
 package org.chromium.chrome.browser.tabmodel;
 
-import android.app.Activity;
+import android.content.Context;
 
 import org.chromium.base.supplier.OneshotSupplier;
 import org.chromium.chrome.browser.profiles.ProfileProvider;
@@ -17,17 +17,15 @@
     /**
      * Builds a {@link TabModelSelector}.
      *
-     * @param activity An {@link Activity} instance.
+     * @param context An {@link Context} instance.
      * @param profileProviderSupplier Provides the Profiles used in this selector.
      * @param tabCreatorManager A {@link TabCreatorManager} instance.
      * @param nextTabPolicySupplier A {@link NextTabPolicySupplier} instance.
-     * @param selectorIndex The index of the {@link TabModelSelector}.
      * @return A new {@link TabModelSelector} instance.
      */
     TabModelSelector buildSelector(
-            Activity activity,
+            Context context,
             OneshotSupplier<ProfileProvider> profileProviderSupplier,
             TabCreatorManager tabCreatorManager,
-            NextTabPolicySupplier nextTabPolicySupplier,
-            int selectorIndex);
+            NextTabPolicySupplier nextTabPolicySupplier);
 }
diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerTest.java b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerTest.java
index 06a1ac4..b6db51c 100644
--- a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerTest.java
+++ b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerTest.java
@@ -5,6 +5,7 @@
 package org.chromium.chrome.browser.tabmodel;
 
 import android.app.Activity;
+import android.content.Context;
 import android.os.Build;
 import android.util.Pair;
 
@@ -65,11 +66,10 @@
                 new TabModelSelectorFactory() {
                     @Override
                     public TabModelSelector buildSelector(
-                            Activity activity,
+                            Context context,
                             OneshotSupplier<ProfileProvider> profileProviderSupplier,
                             TabCreatorManager tabCreatorManager,
-                            NextTabPolicySupplier nextTabPolicySupplier,
-                            int selectorIndex) {
+                            NextTabPolicySupplier nextTabPolicySupplier) {
                         return new MockTabModelSelector(mProfile, mIncognitoProfile, 0, 0, null);
                     }
                 };
diff --git a/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerImpl.java b/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerImpl.java
index 4dc661c..f86d599a 100644
--- a/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerImpl.java
+++ b/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerImpl.java
@@ -89,8 +89,7 @@
                         activity,
                         profileProviderSupplier,
                         tabCreatorManager,
-                        nextTabPolicySupplier,
-                        index);
+                        nextTabPolicySupplier);
         mSelectors.set(index, selector);
         mAssignments.put(activity, selector);
 
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 4d3d438..ad69eba 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -1898,8 +1898,8 @@
       "webui/sync_file_system_internals/sync_file_system_internals_handler.h",
       "webui/sync_file_system_internals/sync_file_system_internals_ui.cc",
       "webui/sync_file_system_internals/sync_file_system_internals_ui.h",
-      "webui/system_info_ui.cc",
-      "webui/system_info_ui.h",
+      "webui/system/system_info_ui.cc",
+      "webui/system/system_info_ui.h",
       "webui/tab_search/tab_search_page_handler.cc",
       "webui/tab_search/tab_search_page_handler.h",
       "webui/tab_search/tab_search_prefs.cc",
@@ -5017,8 +5017,6 @@
       "views/commerce/price_tracking_view.h",
       "views/commerce/shopping_collection_iph_view.cc",
       "views/commerce/shopping_collection_iph_view.h",
-      "views/compose/compose_dialog_view.cc",
-      "views/compose/compose_dialog_view.h",
       "views/confirm_bubble_views.cc",
       "views/confirm_bubble_views.h",
       "views/constrained_web_dialog_delegate_views.cc",
@@ -6282,6 +6280,8 @@
       sources += [
         "views/compose/chrome_compose_dialog_controller.cc",
         "views/compose/chrome_compose_dialog_controller.h",
+        "views/compose/compose_dialog_view.cc",
+        "views/compose/compose_dialog_view.h",
       ]
 
       deps += [ "//components/compose/core/browser" ]
diff --git a/chrome/browser/ui/android/tab_model/tab_model.h b/chrome/browser/ui/android/tab_model/tab_model.h
index efdfb38..aeabec21 100644
--- a/chrome/browser/ui/android/tab_model/tab_model.h
+++ b/chrome/browser/ui/android/tab_model/tab_model.h
@@ -113,6 +113,9 @@
     FROM_RESTORE_TABS_UI,
     // Opened to load an omnibox search query in a new tab.
     FROM_OMNIBOX,
+    // Used for tab pre-warming where the reason for tab creation is not yet
+    // known.
+    UNSET,
     // Must be last.
     SIZE
   };
diff --git a/chrome/browser/ui/ash/in_session_auth_dialog_client.cc b/chrome/browser/ui/ash/in_session_auth_dialog_client.cc
index f4d94cb..0c5c97a 100644
--- a/chrome/browser/ui/ash/in_session_auth_dialog_client.cc
+++ b/chrome/browser/ui/ash/in_session_auth_dialog_client.cc
@@ -35,7 +35,6 @@
 
 using ::ash::AuthenticationError;
 using ::ash::AuthStatusConsumer;
-using ::ash::ExtendedAuthenticator;
 using ::ash::Key;
 using ::ash::UserContext;
 
@@ -80,14 +79,6 @@
       user_context_->GetAccountId());
 }
 
-ExtendedAuthenticator* InSessionAuthDialogClient::GetExtendedAuthenticator() {
-  // Lazily allocate |extended_authenticator_| so that tests can inject a fake.
-  if (!extended_authenticator_)
-    extended_authenticator_ = ExtendedAuthenticator::Create(this);
-
-  return extended_authenticator_.get();
-}
-
 void InSessionAuthDialogClient::StartFingerprintAuthSession(
     const AccountId& account_id,
     base::OnceCallback<void(bool)> callback) {
diff --git a/chrome/browser/ui/ash/in_session_auth_dialog_client.h b/chrome/browser/ui/ash/in_session_auth_dialog_client.h
index 27b94466..61167b9 100644
--- a/chrome/browser/ui/ash/in_session_auth_dialog_client.h
+++ b/chrome/browser/ui/ash/in_session_auth_dialog_client.h
@@ -19,7 +19,6 @@
 #include "chromeos/ash/components/dbus/userdataauth/userdataauth_client.h"
 #include "chromeos/ash/components/login/auth/auth_performer.h"
 #include "chromeos/ash/components/login/auth/auth_status_consumer.h"
-#include "chromeos/ash/components/login/auth/extended_authenticator.h"
 #include "chromeos/ash/components/login/auth/public/authentication_error.h"
 #include "chromeos/ash/components/login/auth/public/session_auth_factors.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -83,12 +82,6 @@
                         bool is_complete,
                         int percent_complete) override {}
 
-  // For testing:
-  void SetExtendedAuthenticator(
-      scoped_refptr<ash::ExtendedAuthenticator> extended_authenticator) {
-    extended_authenticator_ = std::move(extended_authenticator);
-  }
-
  private:
   // State associated with a pending authentication attempt. Only for Password
   // and PIN, not for fingerprint, since the fingerprint path needs to surface
@@ -101,10 +94,6 @@
     base::OnceCallback<void(bool)> callback;
   };
 
-  // Returns a pointer to the ExtendedAuthenticator instance if there is one.
-  // Otherwise creates one.
-  ash::ExtendedAuthenticator* GetExtendedAuthenticator();
-
   // Attempts to authenticate user in `user_context` with the given `password`.
   void AuthenticateWithPassword(std::unique_ptr<ash::UserContext> user_context,
                                 const std::string& password);
@@ -150,9 +139,6 @@
       bool is_pin_auth_available,
       std::unique_ptr<ash::UserContext> user_context);
 
-  // Used to authenticate the user to unlock supervised users.
-  scoped_refptr<ash::ExtendedAuthenticator> extended_authenticator_;
-
   // State associated with a pending authentication attempt.
   absl::optional<AuthState> pending_auth_state_;
 
diff --git a/chrome/browser/ui/ash/in_session_auth_dialog_client_unittest.cc b/chrome/browser/ui/ash/in_session_auth_dialog_client_unittest.cc
index 0c9e4c5..f04b1d1 100644
--- a/chrome/browser/ui/ash/in_session_auth_dialog_client_unittest.cc
+++ b/chrome/browser/ui/ash/in_session_auth_dialog_client_unittest.cc
@@ -18,14 +18,12 @@
 #include "chromeos/ash/components/dbus/userdataauth/fake_cryptohome_misc_client.h"
 #include "chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.h"
 #include "chromeos/ash/components/dbus/userdataauth/userdataauth_client.h"
-#include "chromeos/ash/components/login/auth/fake_extended_authenticator.h"
 #include "chromeos/ash/components/login/auth/public/cryptohome_key_constants.h"
 #include "components/account_id/account_id.h"
 #include "components/user_manager/scoped_user_manager.h"
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-using ::ash::FakeExtendedAuthenticator;
 using ::ash::Key;
 using ::ash::UserContext;
 
@@ -88,12 +86,6 @@
     ash::ProfileHelper::Get()->SetUserToProfileMappingForTesting(user, nullptr);
   }
 
-  void SetExpectedContext(const UserContext& expected_user_context) {
-    fake_authenticator_ = base::MakeRefCounted<FakeExtendedAuthenticator>(
-        client_.get(), expected_user_context);
-    client_->SetExtendedAuthenticator(fake_authenticator_);
-  }
-
   void AuthenticateUserWithPasswordOrPin(
       const std::string& password,
       bool authenticated_by_pin,
@@ -129,8 +121,6 @@
   }
 
  protected:
-  // The ExtendedAuthenticator::AuthenticateToCheck task is posted to main (UI)
-  // thread.
   const content::BrowserTaskEnvironment task_environment_;
 
   raw_ptr<ash::FakeChromeUserManager, DanglingUntriaged | ExperimentalAsh>
@@ -140,7 +130,6 @@
   std::unique_ptr<FakeInSessionAuthDialogController> fake_controller_{
       std::make_unique<FakeInSessionAuthDialogController>()};
   std::unique_ptr<InSessionAuthDialogClient> client_;
-  scoped_refptr<ash::FakeExtendedAuthenticator> fake_authenticator_;
 };
 
 TEST_F(InSessionAuthDialogClientTest, WrongPassword) {
@@ -151,7 +140,6 @@
   Key key(Key::KEY_TYPE_PASSWORD_PLAIN, std::string(), kPassword);
   expected_user_context.SetKey(key);
 
-  SetExpectedContext(expected_user_context);
   ConfigureExistingUserWithPassword(user->GetAccountId(), kPassword);
   StartAuthSessionForActiveUser();
 
@@ -176,8 +164,6 @@
   expected_user_context.SetKey(
       Key(Key::KEY_TYPE_PASSWORD_PLAIN, std::string(), kPassword));
 
-  SetExpectedContext(expected_user_context);
-
   ConfigureExistingUserWithPassword(user->GetAccountId(), kPassword);
   StartAuthSessionForActiveUser();
 
diff --git a/chrome/browser/ui/autofill/autofill_popup_controller_impl.h b/chrome/browser/ui/autofill/autofill_popup_controller_impl.h
index aea3331..7d56df4 100644
--- a/chrome/browser/ui/autofill/autofill_popup_controller_impl.h
+++ b/chrome/browser/ui/autofill/autofill_popup_controller_impl.h
@@ -257,7 +257,8 @@
   std::vector<Suggestion> suggestions_;
 
   // The trigger source of the `suggestions_`.
-  AutofillSuggestionTriggerSource trigger_source_;
+  AutofillSuggestionTriggerSource trigger_source_ =
+      AutofillSuggestionTriggerSource::kUnspecified;
 
   // If set to true, the popup will stay open regardless of external changes on
   // the machine that would normally cause the popup to be hidden.
diff --git a/chrome/browser/ui/startup/startup_browser_creator.h b/chrome/browser/ui/startup/startup_browser_creator.h
index e22ea9b7..5e961db0 100644
--- a/chrome/browser/ui/startup/startup_browser_creator.h
+++ b/chrome/browser/ui/startup/startup_browser_creator.h
@@ -105,7 +105,7 @@
 // - nullptr for `kProfilePicker` and `kError`
 // TODO(https://crbug.com/1150326): return a guest profile for the Guest mode.
 struct StartupProfileInfo {
-  raw_ptr<Profile, LeakedDanglingUntriaged> profile;
+  raw_ptr<Profile> profile;
   StartupProfileMode mode;
 };
 
diff --git a/chrome/browser/ui/toolbar/toolbar_actions_model_browsertest.cc b/chrome/browser/ui/toolbar/toolbar_actions_model_browsertest.cc
index 13c27420..4872a31 100644
--- a/chrome/browser/ui/toolbar/toolbar_actions_model_browsertest.cc
+++ b/chrome/browser/ui/toolbar/toolbar_actions_model_browsertest.cc
@@ -35,11 +35,16 @@
     ASSERT_TRUE(toolbar_model_);
   }
 
+  void TearDownOnMainThread() override {
+    toolbar_model_ = nullptr;
+    extensions::ExtensionBrowserTest::TearDownOnMainThread();
+  }
+
   ToolbarActionsModel* toolbar_model() { return toolbar_model_; }
   base::HistogramTester* histogram_tester() { return &histogram_tester_; }
 
  private:
-  raw_ptr<ToolbarActionsModel, DanglingUntriaged> toolbar_model_ = nullptr;
+  raw_ptr<ToolbarActionsModel> toolbar_model_ = nullptr;
   base::HistogramTester histogram_tester_;
 };
 
@@ -118,8 +123,9 @@
   auto get_extension_by_name =
       [registry](const char* name) -> const extensions::Extension* {
     for (const auto& extension : registry->enabled_extensions()) {
-      if (extension->name() == name)
+      if (extension->name() == name) {
         return extension.get();
+      }
     }
     return nullptr;
   };
diff --git a/chrome/browser/ui/views/compose/chrome_compose_dialog_controller.cc b/chrome/browser/ui/views/compose/chrome_compose_dialog_controller.cc
index 5c1a64c..3066cc6 100644
--- a/chrome/browser/ui/views/compose/chrome_compose_dialog_controller.cc
+++ b/chrome/browser/ui/views/compose/chrome_compose_dialog_controller.cc
@@ -52,31 +52,29 @@
 
   Profile* profile =
       Profile::FromBrowserContext(web_contents_->GetBrowserContext());
-  bubble_wrapper_ = std::make_unique<BubbleContentsWrapperT<ComposeUI>>(
+  auto bubble_wrapper = std::make_unique<BubbleContentsWrapperT<ComposeUI>>(
       GURL(kComposeURL), profile, IDS_COMPOSE_TITLE);
-  bubble_wrapper_->ReloadWebContents();
+  bubble_wrapper->ReloadWebContents();
 
   // This WebUI needs to know the calling BrowserContents so that the compose
   // request/result can be properly associated with the triggering form.
-  bubble_wrapper_->GetWebUIController()->set_triggering_web_contents(
+  bubble_wrapper->GetWebUIController()->set_triggering_web_contents(
       web_contents_.get());
 
-  auto bubble_view = std::make_unique<WebUIBubbleDialogView>(
-      anchor_view, bubble_wrapper_.get(),
-      gfx::ToRoundedRect(element_bounds_in_screen));
-
-  // Allows the bubble bounds to escape the browser window.
-  bubble_view->set_has_parent(false);
-
-  bubble_ = bubble_view->GetWeakPtr();
-  views::BubbleDialogDelegateView::CreateBubble(std::move(bubble_view));
-
-  bubble_->set_adjust_if_offscreen(true);
+  auto compose_dialog_view = std::make_unique<ComposeDialogView>(
+      anchor_view, std::move(bubble_wrapper),
+      gfx::ToRoundedRect(element_bounds_in_screen),
+      views::BubbleBorder::Arrow::NONE);
+  bubble_ = compose_dialog_view->GetWeakPtr();
+  views::BubbleDialogDelegateView::CreateBubble(std::move(compose_dialog_view));
 }
 
 BubbleContentsWrapperT<ComposeUI>*
 ChromeComposeDialogController::GetBubbleWrapper() const {
-  return bubble_wrapper_.get();
+  if (bubble_) {
+    return bubble_->bubble_wrapper();
+  }
+  return nullptr;
 }
 
 void ChromeComposeDialogController::ShowUI() {
@@ -87,8 +85,10 @@
 
 // TODO(b/300939629): Flesh out implementation and cover other closing paths.
 void ChromeComposeDialogController::Close() {
-  bubble_wrapper_->CloseUI();
-  bubble_wrapper_.reset();
+  auto* wrapper = GetBubbleWrapper();
+  if (wrapper) {
+    wrapper->CloseUI();
+  }
 }
 
 ChromeComposeDialogController::ChromeComposeDialogController(
diff --git a/chrome/browser/ui/views/compose/chrome_compose_dialog_controller.h b/chrome/browser/ui/views/compose/chrome_compose_dialog_controller.h
index 2e149a1..4839c2d7 100644
--- a/chrome/browser/ui/views/compose/chrome_compose_dialog_controller.h
+++ b/chrome/browser/ui/views/compose/chrome_compose_dialog_controller.h
@@ -42,8 +42,7 @@
  private:
   friend class ChromeComposeDialogControllerTest;
 
-  std::unique_ptr<BubbleContentsWrapperT<ComposeUI>> bubble_wrapper_;
-  base::WeakPtr<WebUIBubbleDialogView> bubble_;
+  base::WeakPtr<ComposeDialogView> bubble_;
   base::WeakPtr<content::WebContents> web_contents_;
 
   base::WeakPtrFactory<ChromeComposeDialogController> weak_ptr_factory_{this};
diff --git a/chrome/browser/ui/views/compose/compose_dialog_view.cc b/chrome/browser/ui/views/compose/compose_dialog_view.cc
index ad5a7c6..bf70beac 100644
--- a/chrome/browser/ui/views/compose/compose_dialog_view.cc
+++ b/chrome/browser/ui/views/compose/compose_dialog_view.cc
@@ -8,33 +8,25 @@
 #include "ui/gfx/geometry/skia_conversions.h"
 #include "ui/views/bubble/bubble_border.h"
 
-namespace compose {
-
-// Default size from Figma spec. The size of the view will follow the requested
-// size of the WebUI, once these are connected.
-constexpr gfx::Size kInputDialogSize(448, 216);
-
 ComposeDialogView::~ComposeDialogView() = default;
 
-ComposeDialogView::ComposeDialogView(View* anchor_view,
-                                     views::BubbleBorder::Arrow anchor_position,
-                                     const gfx::Rect bounds,
-                                     content::WebContents* web_contents)
-    : BubbleDialogDelegateView(anchor_view, anchor_position) {
-  // For testing, a test Window widget is used. Otherwise, no |anchor_view| is
-  // given and the parent Window must be manually set.
-  if (!anchor_view) {
-    set_parent_window(web_contents->GetNativeView());
-    SetAnchorRect(bounds);
-  }
+ComposeDialogView::ComposeDialogView(
+    View* anchor_view,
+    std::unique_ptr<BubbleContentsWrapperT<ComposeUI>> bubble_wrapper,
+    const gfx::Rect& anchor_bounds,
+    views::BubbleBorder::Arrow anchor_position)
+    : WebUIBubbleDialogView(anchor_view,
+                            bubble_wrapper.get(),
+                            anchor_bounds,
+                            anchor_position),
+      bubble_wrapper_(std::move(bubble_wrapper)) {
+  set_has_parent(false);
+  set_adjust_if_offscreen(true);
+}
 
-  SetButtons(ui::DIALOG_BUTTON_NONE);
-  SetPreferredSize(kInputDialogSize);
-
-  // Empty contents, to be populated by WebUI.
+base::WeakPtr<ComposeDialogView> ComposeDialogView::GetWeakPtr() {
+  return weak_ptr_factory_.GetWeakPtr();
 }
 
 BEGIN_METADATA(ComposeDialogView, views::View)
 END_METADATA
-
-}  // namespace compose
diff --git a/chrome/browser/ui/views/compose/compose_dialog_view.h b/chrome/browser/ui/views/compose/compose_dialog_view.h
index 196e9d8d..2db755e 100644
--- a/chrome/browser/ui/views/compose/compose_dialog_view.h
+++ b/chrome/browser/ui/views/compose/compose_dialog_view.h
@@ -5,26 +5,34 @@
 #ifndef CHROME_BROWSER_UI_VIEWS_COMPOSE_COMPOSE_DIALOG_VIEW_H_
 #define CHROME_BROWSER_UI_VIEWS_COMPOSE_COMPOSE_DIALOG_VIEW_H_
 
+#include "chrome/browser/ui/views/bubble/webui_bubble_dialog_view.h"
+#include "chrome/browser/ui/webui/compose/compose_ui.h"
 #include "content/public/browser/web_contents.h"
 #include "ui/base/metadata/metadata_header_macros.h"
-#include "ui/views/bubble/bubble_dialog_delegate_view.h"
 #include "ui/views/view.h"
 
-namespace compose {
-
 // A view for the contents area of the Compose dialog.
-class ComposeDialogView : public views::BubbleDialogDelegateView {
+class ComposeDialogView : public WebUIBubbleDialogView {
  public:
   METADATA_HEADER(ComposeDialogView);
 
-  explicit ComposeDialogView(View* anchor_view,
-                             views::BubbleBorder::Arrow anchor_position,
-                             const gfx::Rect bounds,
-                             content::WebContents* web_contents);
+  explicit ComposeDialogView(
+      View* anchor_view,
+      std::unique_ptr<BubbleContentsWrapperT<ComposeUI>> bubble_wrapper,
+      const gfx::Rect& anchor_bounds,
+      views::BubbleBorder::Arrow anchor_position);
 
   ~ComposeDialogView() override;
-};
 
-}  // namespace compose
+  BubbleContentsWrapperT<ComposeUI>* bubble_wrapper() {
+    return bubble_wrapper_.get();
+  }
+
+  base::WeakPtr<ComposeDialogView> GetWeakPtr();
+
+ private:
+  std::unique_ptr<BubbleContentsWrapperT<ComposeUI>> bubble_wrapper_;
+  base::WeakPtrFactory<ComposeDialogView> weak_ptr_factory_{this};
+};
 
 #endif  // CHROME_BROWSER_UI_VIEWS_COMPOSE_COMPOSE_DIALOG_VIEW_H_
diff --git a/chrome/browser/ui/views/download/bubble/download_bubble_security_view.cc b/chrome/browser/ui/views/download/bubble/download_bubble_security_view.cc
index 301fe93..a261a29 100644
--- a/chrome/browser/ui/views/download/bubble/download_bubble_security_view.cc
+++ b/chrome/browser/ui/views/download/bubble/download_bubble_security_view.cc
@@ -876,13 +876,7 @@
   }
   // Announce that the subpage was opened to inform the user about the changes
   // in the UI.
-#if BUILDFLAG(IS_MAC)
-  GetViewAccessibility().OverrideRole(ax::mojom::Role::kAlert);
-  GetViewAccessibility().OverrideName(ui_info_.warning_summary);
-  NotifyAccessibilityEvent(ax::mojom::Event::kAlert, true);
-#else
   GetViewAccessibility().AnnounceText(ui_info_.warning_summary);
-#endif
 
   // Focus the back button by default to ensure that focus is set when new
   // content is displayed.
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
index 0afcd7a..15bd1909 100644
--- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
+++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
@@ -579,8 +579,7 @@
       // A valid role must be set prior to setting the name.
       // TODO(crbug.com/1361281): Consider using AnnounceText instead of a
       // virtual view.
-      alert_virtual_view_->GetCustomData().role =
-          ax::mojom::Role::kGenericContainer;
+      alert_virtual_view_->GetCustomData().role = ax::mojom::Role::kAlert;
       alert_virtual_view_->GetCustomData().SetNameChecked(label);
       alert_virtual_view_->NotifyAccessibilityEvent(ax::mojom::Event::kAlert);
     }
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
index 1801e58..9c0e82d 100644
--- a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
@@ -311,13 +311,7 @@
 void PageInfoBubbleView::AnnouncePageOpened(std::u16string announcement) {
   // Announce that the subpage was opened to inform the user about the changes
   // in the UI.
-#if BUILDFLAG(IS_MAC)
-  GetViewAccessibility().OverrideRole(ax::mojom::Role::kAlert);
-  GetViewAccessibility().OverrideName(announcement);
-  NotifyAccessibilityEvent(ax::mojom::Event::kAlert, true);
-#else
   GetViewAccessibility().AnnounceText(announcement);
-#endif
 
   // Focus the back button by default to ensure that focus is set when new
   // content is displayed.
diff --git a/chrome/browser/ui/views/permissions/chip_controller.cc b/chrome/browser/ui/views/permissions/chip_controller.cc
index 1e6726ae..261896e0 100644
--- a/chrome/browser/ui/views/permissions/chip_controller.cc
+++ b/chrome/browser/ui/views/permissions/chip_controller.cc
@@ -435,13 +435,7 @@
 
 void ChipController::AnnouncePermissionRequestForAccessibility(
     const std::u16string& text) {
-#if BUILDFLAG(IS_MAC)
-  chip_->GetViewAccessibility().OverrideName(text);
-  chip_->NotifyAccessibilityEvent(ax::mojom::Event::kAlert, true);
-#else
-
   chip_->GetViewAccessibility().AnnounceText(text);
-#endif
 }
 
 void ChipController::CollapsePrompt(bool allow_restart) {
diff --git a/chrome/browser/ui/views/toolbar/toolbar_controller_interactive_uitest.cc b/chrome/browser/ui/views/toolbar/toolbar_controller_interactive_uitest.cc
index 75fb4e4..760a61d 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_controller_interactive_uitest.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_controller_interactive_uitest.cc
@@ -16,6 +16,7 @@
 #include "chrome/test/interaction/interactive_browser_test.h"
 #include "content/public/test/browser_test.h"
 #include "content/public/test/browser_test_utils.h"
+#include "ui/views/test/views_test_utils.h"
 #include "ui/views/view_class_properties.h"
 
 namespace {
@@ -153,7 +154,12 @@
   }
 
   void SetBrowserWidth(int width) {
-    browser_view_->SetSize({width, browser_view_->size().height()});
+    int widget_width = browser_view_->GetWidget()->GetSize().width();
+    int browser_width = browser_view_->size().width();
+    browser_view_->GetWidget()->SetSize(
+        {width + widget_width - browser_width,
+         browser_view_->GetWidget()->GetSize().height()});
+    views::test::RunScheduledLayout(browser_view_);
   }
 
   const views::View* FindToolbarElementWithId(ui::ElementIdentifier id) const {
diff --git a/chrome/browser/ui/views/translate/partial_translate_bubble_view.cc b/chrome/browser/ui/views/translate/partial_translate_bubble_view.cc
index 8f76d73..96d0a18 100644
--- a/chrome/browser/ui/views/translate/partial_translate_bubble_view.cc
+++ b/chrome/browser/ui/views/translate/partial_translate_bubble_view.cc
@@ -1040,29 +1040,15 @@
     std::u16string full_text = l10n_util::GetStringFUTF16(
         IDS_CONCAT_TWO_STRINGS_WITH_COMMA, base_text, model_->GetTargetText());
 
-#if BUILDFLAG(IS_MAC)
-    partial_text_label_->GetViewAccessibility().OverrideName(full_text);
-    partial_text_label_->NotifyAccessibilityEvent(ax::mojom::Event::kAlert,
-                                                  true);
-#else
     if (target_language_changed_) {
       partial_text_label_->GetViewAccessibility().AnnounceText(full_text);
     } else {
       partial_text_label_->GetViewAccessibility().AnnounceText(base_text);
     }
-#endif
   } else if (view_state == PartialTranslateBubbleModel::VIEW_STATE_ERROR) {
-#if BUILDFLAG(IS_MAC)
-    partial_text_label_->GetViewAccessibility().OverrideName(
-        l10n_util::GetStringUTF16(
-            IDS_TRANSLATE_BUBBLE_COULD_NOT_TRANSLATE_TITLE));
-    partial_text_label_->NotifyAccessibilityEvent(ax::mojom::Event::kAlert,
-                                                  true);
-#else
     partial_text_label_->GetViewAccessibility().AnnounceText(
         l10n_util::GetStringUTF16(
             IDS_TRANSLATE_BUBBLE_COULD_NOT_TRANSLATE_TITLE));
-#endif
   }
 }
 void PartialTranslateBubbleView::SwitchTabForViewState(
diff --git a/chrome/browser/ui/views/translate/translate_bubble_view.cc b/chrome/browser/ui/views/translate/translate_bubble_view.cc
index 95f87e0..0b89d21 100644
--- a/chrome/browser/ui/views/translate/translate_bubble_view.cc
+++ b/chrome/browser/ui/views/translate/translate_bubble_view.cc
@@ -1009,15 +1009,7 @@
 
 void TranslateBubbleView::AnnounceTextToScreenReader(
     const std::u16string& announcement_text) {
-#if BUILDFLAG(IS_MAC)
-  // TODO(https://crbug.com/1377831): Remove this Mac workaround once
-  // AnnounceText() works as expected on Mac.
-  GetViewAccessibility().OverrideRole(ax::mojom::Role::kAlertDialog);
-  GetViewAccessibility().OverrideName(announcement_text);
-  NotifyAccessibilityEvent(ax::mojom::Event::kAlert, true);
-#else
   GetViewAccessibility().AnnounceText(announcement_text);
-#endif
 }
 
 void TranslateBubbleView::SwitchTabForViewState(
diff --git a/chrome/browser/ui/views/webid/account_selection_bubble_view.cc b/chrome/browser/ui/views/webid/account_selection_bubble_view.cc
index b9944be..bb0adcd 100644
--- a/chrome/browser/ui/views/webid/account_selection_bubble_view.cc
+++ b/chrome/browser/ui/views/webid/account_selection_bubble_view.cc
@@ -359,14 +359,7 @@
     return;
 
   views::View* const root_view = widget->GetRootView();
-#if BUILDFLAG(IS_MAC)
-  if (!announcement.empty())
-    root_view->GetViewAccessibility().OverrideName(announcement);
-  root_view->NotifyAccessibilityEvent(ax::mojom::Event::kAlert, true);
-#else
-  if (!announcement.empty())
-    root_view->GetViewAccessibility().AnnounceText(announcement);
-#endif
+  root_view->GetViewAccessibility().AnnounceText(announcement);
 }
 
 // Selects string for disclosure text based on passed-in `privacy_policy_url`
diff --git a/chrome/browser/ui/webui/about/about_ui.cc b/chrome/browser/ui/webui/about/about_ui.cc
index f113006..f5e6fa4 100644
--- a/chrome/browser/ui/webui/about/about_ui.cc
+++ b/chrome/browser/ui/webui/about/about_ui.cc
@@ -23,6 +23,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted_memory.h"
 #include "base/strings/escape.h"
+#include "base/strings/strcat.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
@@ -47,6 +48,8 @@
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/url_data_source.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/browser/webui_config_map.h"
+#include "content/public/common/url_constants.h"
 #include "net/base/filename_util.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/resource_bundle.h"
@@ -100,68 +103,6 @@
 
 constexpr char kTerminaCreditsPath[] = "about_os_credits.html";
 
-// APAC region name.
-constexpr char kApac[] = "apac";
-// EMEA region name.
-constexpr char kEmea[] = "emea";
-// EU region name.
-constexpr char kEu[] = "eu";
-
-// List of countries that belong to APAC.
-const char* const kApacCountries[] = {"au", "bd", "cn", "hk", "id", "in", "jp",
-                                      "kh", "la", "lk", "mm", "mn", "my", "nz",
-                                      "np", "ph", "sg", "th", "tw", "vn"};
-
-// List of countries that belong to EMEA.
-const char* const kEmeaCountries[] = {"na", "za", "am", "az", "ch", "eg", "ge",
-                                      "il", "is", "ke", "kg", "li", "mk", "no",
-                                      "rs", "ru", "tr", "tz", "ua", "ug", "za"};
-
-// List of countries that belong to EU.
-const char* const kEuCountries[] = {
-    "at", "be", "bg", "cz", "dk", "es", "fi", "fr", "gb", "gr", "hr", "hu",
-    "ie", "it", "lt", "lu", "lv", "nl", "pl", "pt", "ro", "se", "si", "sk"};
-
-// Maps country to one of 3 regions: APAC, EMEA, EU.
-typedef std::map<std::string, std::string> CountryRegionMap;
-
-// Returns country to region map with EU, EMEA and APAC countries.
-CountryRegionMap CreateCountryRegionMap() {
-  CountryRegionMap region_map;
-  for (size_t i = 0; i < std::size(kApacCountries); ++i) {
-    region_map.emplace(kApacCountries[i], kApac);
-  }
-
-  for (size_t i = 0; i < std::size(kEmeaCountries); ++i) {
-    region_map.emplace(kEmeaCountries[i], kEmea);
-  }
-
-  for (size_t i = 0; i < std::size(kEuCountries); ++i) {
-    region_map.emplace(kEuCountries[i], kEu);
-  }
-  return region_map;
-}
-
-// Reads device region from VPD. Returns "us" in case of read or parsing errors.
-std::string ReadDeviceRegionFromVpd() {
-  std::string region = "us";
-  ash::system::StatisticsProvider* provider =
-      ash::system::StatisticsProvider::GetInstance();
-  if (const absl::optional<base::StringPiece> region_statistic =
-          provider->GetMachineStatistic(ash::system::kRegionKey)) {
-    // We only need the first part of the complex region codes like ca.ansi.
-    std::vector<std::string> region_pieces =
-        base::SplitString(region_statistic.value(), ".", base::TRIM_WHITESPACE,
-                          base::SPLIT_WANT_NONEMPTY);
-    if (!region_pieces.empty())
-      region = region_pieces[0];
-  } else {
-    LOG(WARNING) << "Device region for Play Store ToS not found in VPD - "
-                    "defaulting to US.";
-  }
-  return base::ToLowerASCII(region);
-}
-
 // Loads bundled terms of service contents (Eula, OEM Eula, Play Store Terms).
 // The online version of terms is fetched in OOBE screen javascript. This is
 // intentional because chrome://terms runs in a privileged webui context and
@@ -227,30 +168,6 @@
     }
   }
 
-  std::vector<std::string> CreateArcLocaleLookupArray() {
-    // To get Play Store asset we look for the first locale match in the
-    // following order:
-    // * language and device region combination
-    // * default region (APAC, EMEA, EU)
-    // * en-US
-    // Note: AMERICAS region defaults to en-US and to simplify it is not
-    // included in the country region map.
-    std::vector<std::string> locale_lookup_array;
-    const std::string device_region = ReadDeviceRegionFromVpd();
-    locale_lookup_array.push_back(base::StrCat(
-        {base::ToLowerASCII(language::ExtractBaseLanguage(locale_)), "-",
-         device_region}));
-
-    const CountryRegionMap country_region_map = CreateCountryRegionMap();
-    const auto region = country_region_map.find(device_region);
-    if (region != country_region_map.end()) {
-      locale_lookup_array.push_back(region->second.c_str());
-    }
-
-    locale_lookup_array.push_back("en-us");
-    return locale_lookup_array;
-  }
-
   void ResponseOnUIThread() {
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
     // If we fail to load Chrome OS EULA from disk, load it from resources.
@@ -551,7 +468,22 @@
 
 namespace {
 
-std::string ChromeURLs() {
+bool CompareConfigInfos(const content::WebUIConfigInfo& config1,
+                        const content::WebUIConfigInfo& config2) {
+  // Schemes must be either chrome:// or chrome-untrusted://
+  CHECK(config1.origin.scheme() == content::kChromeUIScheme ||
+        config1.origin.scheme() == content::kChromeUIUntrustedScheme);
+  CHECK(config2.origin.scheme() == content::kChromeUIScheme ||
+        config2.origin.scheme() == content::kChromeUIUntrustedScheme);
+  // Sort chrome:// before chrome-untrusted://. If the schemes are not equal,
+  // given the check above one must be chrome:// and one chrome-untrusted://.
+  if (config1.origin.scheme() != config2.origin.scheme()) {
+    return config1.origin.scheme() == content::kChromeUIScheme;
+  }
+  return config1.origin.host() < config2.origin.host();
+}
+
+std::string ChromeURLs(content::BrowserContext* browser_context) {
   std::string html;
   AppendHeader(&html, "Chrome URLs");
   AppendBody(&html);
@@ -560,7 +492,26 @@
   std::vector<std::string> hosts(
       chrome::kChromeHostURLs,
       chrome::kChromeHostURLs + chrome::kNumberOfChromeHostURLs);
-  std::sort(hosts.begin(), hosts.end());
+  std::vector<content::WebUIConfigInfo> infos;
+  for (const std::string& host : hosts) {
+    GURL url(base::StrCat(
+        {content::kChromeUIScheme, url::kStandardSchemeSeparator, host}));
+    infos.push_back({.origin = url::Origin::Create(url), .enabled = true});
+  }
+
+  // Add any extra hosts found in the config map
+  auto& map = content::WebUIConfigMap::GetInstance();
+  for (const content::WebUIConfigInfo& config_info :
+       map.GetWebUIConfigList(browser_context)) {
+    if (config_info.origin.scheme() == content::kChromeUIUntrustedScheme ||
+        std::find(hosts.begin(), hosts.end(), config_info.origin.host()) ==
+            hosts.end()) {
+      infos.push_back(config_info);
+    }
+  }
+
+  // Sort the URLs.
+  std::sort(infos.begin(), infos.end(), &CompareConfigInfos);
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
   const bool is_lacros_primary = about_ui::isLacrosPrimaryOrCurrentBrowser();
@@ -583,9 +534,15 @@
 #else
   {
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
-    for (const std::string& host : hosts) {
-      html += "<li><a href='chrome://" + host + "/'>chrome://" + host +
-              "</a></li>\n";
+    for (const content::WebUIConfigInfo& info : infos) {
+      std::string host = info.origin.host();
+      std::string scheme = info.origin.scheme();
+      std::string url =
+          base::StrCat({scheme, url::kStandardSchemeSeparator, host});
+      html +=
+          info.enabled
+              ? base::StrCat({"<li><a href='", url, "/'>", url, "</a></li>\n"})
+              : base::StrCat({"<li>", url, "</li>\n"});
     }
 
     html +=
@@ -676,7 +633,7 @@
   std::string response;
   // Add your data source here, in alphabetical order.
   if (source_name_ == chrome::kChromeUIChromeURLsHost) {
-    response = ChromeURLs();
+    response = ChromeURLs(profile_);
   } else if (source_name_ == chrome::kChromeUICreditsHost) {
     int idr = IDR_ABOUT_UI_CREDITS_HTML;
     if (path == kCreditsJsPath)
diff --git a/chrome/browser/ui/webui/about/about_ui_unittest.cc b/chrome/browser/ui/webui/about/about_ui_unittest.cc
index e8c77fd..92e5996 100644
--- a/chrome/browser/ui/webui/about/about_ui_unittest.cc
+++ b/chrome/browser/ui/webui/about/about_ui_unittest.cc
@@ -8,33 +8,38 @@
 #include <string>
 
 #include "base/base64.h"
+#include "base/containers/contains.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
-#include "base/files/scoped_temp_dir.h"
 #include "base/functional/bind.h"
 #include "base/functional/callback_helpers.h"
 #include "base/memory/ref_counted_memory.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
-#include "chrome/browser/ash/login/demo_mode/demo_setup_controller.h"
-#include "chrome/browser/ash/login/ui/fake_login_display_host.h"
-#include "chrome/browser/ash/login/wizard_controller.h"
-#include "chrome/browser/ui/webui/ash/login/demo_preferences_screen_handler.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/common/webui_url_constants.h"
 #include "chrome/test/base/scoped_browser_locale.h"
-#include "chromeos/ash/components/dbus/dbus_thread_manager.h"
-#include "chromeos/ash/components/system/fake_statistics_provider.h"
-#include "chromeos/ash/components/system/statistics_provider.h"
+#include "chrome/test/base/testing_profile.h"
 #include "content/public/browser/browser_thread.h"
+#include "content/public/browser/webui_config.h"
 #include "content/public/test/browser_task_environment.h"
+#include "content/public/test/scoped_web_ui_controller_factory_registration.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
+#include "ash/webui/file_manager/url_constants.h"
+#include "base/files/scoped_temp_dir.h"
+#include "chrome/browser/ash/login/demo_mode/demo_setup_controller.h"
+#include "chrome/browser/ash/login/ui/fake_login_display_host.h"
+#include "chrome/browser/ash/login/wizard_controller.h"
+#include "chrome/browser/ui/webui/ash/login/demo_preferences_screen_handler.h"
+#include "chromeos/ash/components/dbus/dbus_thread_manager.h"
+#include "chromeos/ash/components/system/fake_statistics_provider.h"
+#include "chromeos/ash/components/system/statistics_provider.h"
 #include "third_party/zlib/google/compression_utils.h"
-#endif
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 namespace {
 
@@ -70,6 +75,7 @@
 
 }  // namespace
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
 // Base class for ChromeOS offline terms tests.
 class ChromeOSTermsTest : public testing::Test {
  public:
@@ -163,7 +169,6 @@
   EXPECT_EQ("", privacy_policy_data_receiver.data());
 }
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
 // Base class for ChromeOS offline terms tests.
 class ChromeOSCreditsTest : public testing::Test {
  public:
@@ -255,3 +260,99 @@
 }
 
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
+// Test config class, to add to the WebUIConfigMap for testing.
+class TestWebUIConfig : public content::WebUIConfig {
+ public:
+  TestWebUIConfig(const std::string& scheme,
+                  const std::string& host,
+                  bool enabled)
+      : content::WebUIConfig(scheme, host), enabled_(enabled) {}
+
+  ~TestWebUIConfig() override = default;
+
+  bool IsWebUIEnabled(content::BrowserContext* browser_context) override {
+    return enabled_;
+  }
+
+  std::unique_ptr<content::WebUIController> CreateWebUIController(
+      content::WebUI* web_ui,
+      const GURL& url) override {
+    return nullptr;
+  }
+
+ private:
+  bool enabled_;
+};
+
+// Base class for chrome://chrome-urls test
+class ChromeURLsTest : public testing::Test {
+ public:
+  ChromeURLsTest(const ChromeURLsTest&) = delete;
+  ChromeURLsTest& operator=(const ChromeURLsTest&) = delete;
+
+ protected:
+  ChromeURLsTest() = default;
+  ~ChromeURLsTest() override = default;
+
+  void SetUp() override {
+    tested_html_source_ = std::make_unique<AboutUIHTMLSource>(
+        chrome::kChromeUIChromeURLsHost, &profile_);
+  }
+
+  // Starts data request with the |request_url|.
+  void StartRequest(const std::string& request_url,
+                    TestDataReceiver* data_receiver) {
+    content::WebContents::Getter wc_getter;
+    tested_html_source_->StartDataRequest(
+        GURL(base::StrCat(
+            {"chrome://", chrome::kChromeUIChromeURLsHost, "/", request_url})),
+        std::move(wc_getter),
+        base::BindOnce(&TestDataReceiver::OnDataReceived,
+                       base::Unretained(data_receiver)));
+    task_environment_.RunUntilIdle();
+  }
+
+ private:
+  content::BrowserTaskEnvironment task_environment_;
+
+  std::unique_ptr<AboutUIHTMLSource> tested_html_source_;
+  TestingProfile profile_;
+};
+
+TEST_F(ChromeURLsTest, ContainsConfigURLs) {
+  content::ScopedWebUIConfigRegistration config(
+      std::make_unique<TestWebUIConfig>(content::kChromeUIScheme, "foo", true));
+  content::ScopedWebUIConfigRegistration config_untrusted(
+      std::make_unique<TestWebUIConfig>(content::kChromeUIUntrustedScheme,
+                                        "bar", true));
+  content::ScopedWebUIConfigRegistration config_disabled(
+      std::make_unique<TestWebUIConfig>(content::kChromeUIScheme, "cats",
+                                        false));
+  content::ScopedWebUIConfigRegistration config_untrusted_disabled(
+      std::make_unique<TestWebUIConfig>(content::kChromeUIUntrustedScheme,
+                                        "dogs", false));
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  // Redirect the files app config because it assumes an Ash Shell exists
+  // in IsWebUIEnabled(), and the shell does not exist in unit tests.
+  content::ScopedWebUIConfigRegistration replace_files_app(
+      std::make_unique<TestWebUIConfig>(
+          content::kChromeUIScheme, ash::file_manager::kChromeUIFileManagerHost,
+          true));
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
+  TestDataReceiver chrome_urls_data_receiver;
+  StartRequest("", &chrome_urls_data_receiver);
+
+  ASSERT_TRUE(chrome_urls_data_receiver.data_received());
+  const char kFooEntry[] = "<li><a href='chrome://foo/'>chrome://foo</a></li>";
+  const char kBarEntry[] =
+      "<li><a href='chrome-untrusted://bar/'>chrome-untrusted://bar</a></li>";
+  const char kCatsEntry[] = "<li>chrome://cats</li>";
+  const char kDogsEntry[] = "<li>chrome-untrusted://dogs</li>";
+
+  EXPECT_TRUE(base::Contains(chrome_urls_data_receiver.data(), kFooEntry));
+  EXPECT_TRUE(base::Contains(chrome_urls_data_receiver.data(), kBarEntry));
+  EXPECT_TRUE(base::Contains(chrome_urls_data_receiver.data(), kCatsEntry));
+  EXPECT_TRUE(base::Contains(chrome_urls_data_receiver.data(), kDogsEntry));
+}
diff --git a/chrome/browser/ui/webui/ash/arc_graphics_tracing/arc_graphics_tracing_handler.cc b/chrome/browser/ui/webui/ash/arc_graphics_tracing/arc_graphics_tracing_handler.cc
index 07dc844e..cdb4750 100644
--- a/chrome/browser/ui/webui/ash/arc_graphics_tracing/arc_graphics_tracing_handler.cc
+++ b/chrome/browser/ui/webui/ash/arc_graphics_tracing/arc_graphics_tracing_handler.cc
@@ -272,10 +272,6 @@
 ArcGraphicsTracingHandler::~ArcGraphicsTracingHandler() {
   wm_helper_->RemoveActivationObserver(this);
   DiscardActiveArcWindow();
-
-  if (active_trace_) {
-    StopTracing();
-  }
 }
 
 void ArcGraphicsTracingHandler::RegisterMessages() {
@@ -292,7 +288,7 @@
 void ArcGraphicsTracingHandler::OnWindowActivated(ActivationReason reason,
                                                   aura::Window* gained_active,
                                                   aura::Window* lost_active) {
-  // Handle ARC current active window if any.
+  // Handle ARC current active window if any. This stops any ongoing trace.
   DiscardActiveArcWindow();
 
   if (!gained_active)
@@ -306,11 +302,6 @@
   arc_active_window_->AddObserver(this);
   arc_active_window_->AddPreTargetHandler(this);
 
-  // Limit tracing by newly activated window.
-  if (active_trace_) {
-    active_trace_->time_min = SystemTicksNow();
-  }
-
   exo::Surface* const surface = exo::GetShellRootSurface(arc_active_window_);
   CHECK(surface);
 
@@ -469,11 +460,9 @@
   active_trace_ = std::make_unique<ActiveTrace>();
 
   active_trace_->system_stat_collector.Start(max_tracing_time_);
-
-  // Timestamp and app information would be updated when |OnTracingStarted| is
-  // called.
   active_trace_->timestamp = Now();
   UpdateActiveArcWindowInfo();
+  active_trace_->time_min = SystemTicksNow();
 
   StartTracingOnController(
       GetTracingConfig(),
@@ -523,10 +512,6 @@
     return;
   }
 
-  active_trace_->timestamp = Now();
-  UpdateActiveArcWindowInfo();
-
-  active_trace_->time_min = SystemTicksNow();
   active_trace_->stop_timer.emplace();
   active_trace_->stop_timer->Start(
       FROM_HERE, active_trace_->system_stat_collector.max_interval(),
diff --git a/chrome/browser/ui/webui/ash/settings/pages/about/about_section.cc b/chrome/browser/ui/webui/ash/settings/pages/about/about_section.cc
index 79b2e52a..ced56eb 100644
--- a/chrome/browser/ui/webui/ash/settings/pages/about/about_section.cc
+++ b/chrome/browser/ui/webui/ash/settings/pages/about/about_section.cc
@@ -357,6 +357,8 @@
     {version_ui::kARC, IDS_ARC_LABEL},
     {"aboutBuildDetailsCopyTooltipLabel",
      IDS_OS_SETTINGS_ABOUT_PAGE_BUILD_DETAILS_COPY_TOOLTIP_LABEL},
+    {"aboutBuildDetailsCopiedToClipboardA11yLabel",
+     IDS_OS_SETTINGS_ABOUT_PAGE_BUILD_DETAILS_COPIED_TO_CLIPBOARD_A11Y_LABEL},
     {"aboutIsArcStatusTitle", IDS_OS_SETTINGS_ABOUT_ARC_STATUS_TITLE},
     {"aboutIsDeveloperModeTitle", IDS_OS_SETTINGS_ABOUT_DEVELOPER_MODE},
     {"isEnterpriseManagedTitle",
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
index 03ac937..60deb74 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -171,7 +171,7 @@
 #include "chrome/browser/ui/webui/signin/sync_confirmation_ui.h"
 #include "chrome/browser/ui/webui/support_tool/support_tool_ui.h"
 #include "chrome/browser/ui/webui/sync_file_system_internals/sync_file_system_internals_ui.h"
-#include "chrome/browser/ui/webui/system_info_ui.h"
+#include "chrome/browser/ui/webui/system/system_info_ui.h"
 #include "chrome/browser/ui/webui/tab_search/tab_search_ui.h"
 #include "chrome/browser/ui/webui/web_app_internals/web_app_internals_ui.h"
 #include "chrome/browser/ui/webui/webui_gallery/webui_gallery_ui.h"
diff --git a/chrome/browser/ui/webui/compose/compose_ui.cc b/chrome/browser/ui/webui/compose/compose_ui.cc
index 62d5615..bf4f226 100644
--- a/chrome/browser/ui/webui/compose/compose_ui.cc
+++ b/chrome/browser/ui/webui/compose/compose_ui.cc
@@ -90,9 +90,12 @@
   content::WebContents* web_contents = triggering_web_contents_
                                            ? triggering_web_contents_.get()
                                            : web_ui()->GetWebContents();
-  ChromeComposeClient::FromWebContents(web_contents)
-      ->BindComposeDialog(std::move(close_handler), std::move(handler),
-                          std::move(dialog));
+  ChromeComposeClient* client =
+      ChromeComposeClient::FromWebContents(web_contents);
+  if (client) {
+    client->BindComposeDialog(std::move(close_handler), std::move(handler),
+                              std::move(dialog));
+  }
 }
 
 WEB_UI_CONTROLLER_TYPE_IMPL(ComposeUI)
diff --git a/chrome/browser/ui/webui/discards/graph_dump_impl.h b/chrome/browser/ui/webui/discards/graph_dump_impl.h
index 7ec8f2f..ab01df1f 100644
--- a/chrome/browser/ui/webui/discards/graph_dump_impl.h
+++ b/chrome/browser/ui/webui/discards/graph_dump_impl.h
@@ -106,7 +106,7 @@
   // Ignored.
   void OnIsAudibleChanged(
       const performance_manager::FrameNode* frame_node) override {}
-  void OnIsCapturingVideoStreamChanged(
+  void OnIsCapturingMediaStreamChanged(
       const performance_manager::FrameNode* frame_node) override {}
   // Ignored.
   void OnFirstContentfulPaint(
diff --git a/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc b/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc
index a50ba5f..31b19e0 100644
--- a/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc
+++ b/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc
@@ -52,6 +52,10 @@
 #include "chrome/common/printing/printer_capabilities_mac.h"
 #endif
 
+#if BUILDFLAG(IS_CHROMEOS)
+#include "components/drive/file_system_core_util.h"
+#endif
+
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 #include "chrome/browser/ash/drive/drive_integration_service.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
@@ -59,7 +63,7 @@
 #include "chrome/browser/ui/ash/holding_space/holding_space_keyed_service_factory.h"
 #include "components/user_manager/user.h"
 #elif BUILDFLAG(IS_CHROMEOS_LACROS)
-#include "chromeos/crosapi/mojom/drive_integration_service.mojom.h"
+#include "chrome/common/chrome_paths_lacros.h"
 #include "chromeos/crosapi/mojom/holding_space_service.mojom.h"
 #include "chromeos/lacros/lacros_service.h"
 #endif
@@ -436,19 +440,6 @@
 
   sticky_settings_->SaveInPrefs(profile_->GetPrefs());
 
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  auto* service = chromeos::LacrosService::Get();
-  if (use_drive_mount_ && service &&
-      service->IsAvailable<crosapi::mojom::DriveIntegrationService>()) {
-    service->GetRemote<crosapi::mojom::DriveIntegrationService>()
-        ->GetMountPointPath(
-            base::BindOnce(&PdfPrinterHandler::OnSaveLocationReady,
-                           weak_ptr_factory_.GetWeakPtr(),
-                           std::move(default_filename), prompt_user));
-    return;
-  }
-#endif
-
 #if BUILDFLAG(IS_FUCHSIA)
   // Fuchsia does not support system dialog yet. So skip the dialog
   // and store the default download directory. See crbug.com/1226242 for the
@@ -564,6 +555,11 @@
     return drive_service->GetMountPointPath().Append(
         drive::util::kDriveMyDriveRootDirName);
   }
+#elif BUILDFLAG(IS_CHROMEOS_LACROS)
+  base::FilePath drivefs;
+  if (use_drive_mount_ && chrome::GetDriveFsMountPointPath(&drivefs)) {
+    return drivefs.Append(drive::util::kDriveMyDriveRootDirName);
+  }
 #endif
   DownloadPrefs* download_prefs = DownloadPrefs::FromBrowserContext(profile_);
   return download_prefs->SaveFilePath();
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
index 2b52075..589df232 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
@@ -89,7 +89,7 @@
 #include "chrome/browser/ash/crosapi/local_printer_ash.h"
 #include "chrome/browser/ash/drive/drive_integration_service.h"
 #elif BUILDFLAG(IS_CHROMEOS_LACROS)
-#include "chromeos/crosapi/mojom/drive_integration_service.mojom.h"
+#include "chrome/common/chrome_paths_lacros.h"
 #include "chromeos/lacros/lacros_service.h"
 #endif
 
@@ -417,13 +417,6 @@
   } else {
     LOG(ERROR) << "Local printer not available";
   }
-
-  if (service->IsAvailable<crosapi::mojom::DriveIntegrationService>()) {
-    drive_integration_service_ =
-        service->GetRemote<crosapi::mojom::DriveIntegrationService>().get();
-  } else {
-    LOG(ERROR) << "Drive integration service not available";
-  }
 #endif
   ReportUserActionHistogram(UserActionBuckets::kPreviewStarted);
 }
@@ -1006,27 +999,17 @@
 #elif BUILDFLAG(IS_CHROMEOS_LACROS)
   // The "Save to Google Drive" option is only allowed for the primary profile
   // in the Lacros browser.
-  if (Profile::FromWebUI(web_ui())->IsMainProfile() &&
-      drive_integration_service_) {
-    drive_integration_service_->GetMountPointPath(base::BindOnce(
-        &PrintPreviewHandler::OnDrivePathReady, weak_factory_.GetWeakPtr(),
-        std::move(initial_settings), callback_id));
-    return;
+  if (Profile::FromWebUI(web_ui())->IsMainProfile()) {
+    base::FilePath drive_path;
+    initial_settings.Set(
+        kIsDriveMounted,
+        chrome::GetDriveFsMountPointPath(&drive_path) && !drive_path.empty());
   }
 #endif
 
   ResolveJavascriptCallback(base::Value(callback_id), initial_settings);
 }
 
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-void PrintPreviewHandler::OnDrivePathReady(base::Value::Dict initial_settings,
-                                           const std::string& callback_id,
-                                           const base::FilePath& drive_path) {
-  initial_settings.Set(kIsDriveMounted, !drive_path.empty());
-  ResolveJavascriptCallback(base::Value(callback_id), initial_settings);
-}
-#endif
-
 void PrintPreviewHandler::ClosePreviewDialog() {
   print_preview_ui()->OnClosePrintPreviewDialog();
 }
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.h b/chrome/browser/ui/webui/print_preview/print_preview_handler.h
index 9890bb9..0f630d46 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_handler.h
+++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.h
@@ -35,12 +35,10 @@
 }  // namespace base
 
 #if BUILDFLAG(IS_CHROMEOS)
-namespace crosapi {
-namespace mojom {
-class DriveIntegrationService;
+namespace crosapi::mojom {
 class LocalPrinter;
 }
-}  // namespace crosapi
+
 #endif
 
 namespace content {
@@ -229,13 +227,6 @@
                            base::Value::Dict policies,
                            const std::string& default_printer);
 
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  // Sets |kIsDriveMounted| for Lacros chrome then returns the initial settings.
-  void OnDrivePathReady(base::Value::Dict initial_settings,
-                        const std::string& callback_id,
-                        const base::FilePath& drive_path);
-#endif
-
   // Sends the printer capabilities to the Web UI. |settings_info| contains
   // printer capabilities information. If |settings_info| is empty, sends
   // error notification to the Web UI instead.
@@ -336,13 +327,6 @@
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
   // Version number of the LocalPrinter mojo service.
   int local_printer_version_ = 0;
-
-  // Used to transmit mojo interface method calls to ash chrome.
-  // Null if the interface is unavailable.
-  // The pointer is constant - if ash crashes and the mojo connection is lost,
-  // lacros will automatically be restarted.
-  raw_ptr<crosapi::mojom::DriveIntegrationService, DanglingUntriaged>
-      drive_integration_service_ = nullptr;
 #endif
 
   base::WeakPtrFactory<PrintPreviewHandler> weak_factory_{this};
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc
index 6d9d2bb..3dc9b61 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc
@@ -80,8 +80,6 @@
 #include "chromeos/ash/components/login/login_state/login_state.h"
 #elif BUILDFLAG(IS_CHROMEOS_LACROS)
 #include "chrome/test/chromeos/printing/fake_local_printer_chromeos.h"
-#include "chromeos/components/drivefs/mojom/drivefs_native_messaging.mojom.h"
-#include "chromeos/crosapi/mojom/drive_integration_service.mojom.h"
 #endif
 
 namespace printing {
@@ -353,32 +351,6 @@
   absl::optional<crosapi::mojom::Policies> policies_;
   std::vector<mojom::PrinterType> deny_list_;
 };
-
-class FakeDriveIntegrationService
-    : public crosapi::mojom::DriveIntegrationService {
- public:
-  FakeDriveIntegrationService() = default;
-  FakeDriveIntegrationService(const FakeDriveIntegrationService&) = delete;
-  FakeDriveIntegrationService& operator=(const FakeDriveIntegrationService&) =
-      delete;
-  ~FakeDriveIntegrationService() override = default;
-
-  void GetMountPointPath(GetMountPointPathCallback callback) override {
-    std::move(callback).Run(base::FilePath("/drive/path"));
-  }
-  void AddDriveIntegrationServiceObserver(
-      mojo::PendingRemote<crosapi::mojom::DriveIntegrationServiceObserver>)
-      override {}
-  void CreateNativeHostSession(
-      drivefs::mojom::ExtensionConnectionParamsPtr params,
-      mojo::PendingReceiver<drivefs::mojom::NativeMessagingHost>
-          drivefs_receiver,
-      mojo::PendingRemote<drivefs::mojom::NativeMessagingPort> extension_remote)
-      override {}
-  void RegisterDriveFsNativeMessageHostBridge(
-      mojo::PendingRemote<crosapi::mojom::DriveFsNativeMessageHostBridge>
-          bridge) override {}
-};
 #endif
 
 class TestPrintPreviewHandler : public PrintPreviewHandler {
@@ -523,7 +495,6 @@
 #elif BUILDFLAG(IS_CHROMEOS_LACROS)
     handler_->local_printer_ = &local_printer_;
     handler_->local_printer_version_ = crosapi::mojom::LocalPrinter::Version_;
-    handler_->drive_integration_service_ = &drive_integration_service_;
 #endif
 
     auto preview_ui = std::make_unique<FakePrintPreviewUI>(
@@ -802,7 +773,6 @@
   std::unique_ptr<crosapi::CrosapiManager> manager_;
 #elif BUILDFLAG(IS_CHROMEOS_LACROS)
   TestLocalPrinter local_printer_;
-  FakeDriveIntegrationService drive_integration_service_;
 #endif
   TestingProfile profile_;
   std::unique_ptr<content::TestWebUI> web_ui_;
diff --git a/chrome/browser/ui/webui/realbox/realbox_handler.cc b/chrome/browser/ui/webui/realbox/realbox_handler.cc
index 79a7601f..4b358d0 100644
--- a/chrome/browser/ui/webui/realbox/realbox_handler.cc
+++ b/chrome/browser/ui/webui/realbox/realbox_handler.cc
@@ -655,6 +655,11 @@
   source->AddBoolean(
       "realboxLensDirectUpload",
       base::FeatureList::IsEnabled(ntp_features::kNtpLensDirectUpload));
+  source->AddBoolean(
+      "realboxCr23ExpandedStateLayout",
+      base::FeatureList::IsEnabled(
+          ntp_features::kRealboxCr23ExpandedStateLayout) ||
+          base::FeatureList::IsEnabled(ntp_features::kRealboxCr23All));
 }
 
 // static
diff --git a/chrome/browser/ui/webui/system_info_ui.cc b/chrome/browser/ui/webui/system/system_info_ui.cc
similarity index 98%
rename from chrome/browser/ui/webui/system_info_ui.cc
rename to chrome/browser/ui/webui/system/system_info_ui.cc
index 9819344..2813f72 100644
--- a/chrome/browser/ui/webui/system_info_ui.cc
+++ b/chrome/browser/ui/webui/system/system_info_ui.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ui/webui/system_info_ui.h"
+#include "chrome/browser/ui/webui/system/system_info_ui.h"
 
 #include <memory>
 #include <utility>
diff --git a/chrome/browser/ui/webui/system_info_ui.h b/chrome/browser/ui/webui/system/system_info_ui.h
similarity index 70%
rename from chrome/browser/ui/webui/system_info_ui.h
rename to chrome/browser/ui/webui/system/system_info_ui.h
index 2106e024..240c6860e 100644
--- a/chrome/browser/ui/webui/system_info_ui.h
+++ b/chrome/browser/ui/webui/system/system_info_ui.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_UI_WEBUI_SYSTEM_INFO_UI_H_
-#define CHROME_BROWSER_UI_WEBUI_SYSTEM_INFO_UI_H_
+#ifndef CHROME_BROWSER_UI_WEBUI_SYSTEM_SYSTEM_INFO_UI_H_
+#define CHROME_BROWSER_UI_WEBUI_SYSTEM_SYSTEM_INFO_UI_H_
 
 #include "content/public/browser/web_ui_controller.h"
 
@@ -15,4 +15,4 @@
   SystemInfoUI& operator=(const SystemInfoUI&) = delete;
 };
 
-#endif  // CHROME_BROWSER_UI_WEBUI_SYSTEM_INFO_UI_H_
+#endif  // CHROME_BROWSER_UI_WEBUI_SYSTEM_SYSTEM_INFO_UI_H_
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index 4a914e0..6af8524 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1699963157-0e18b6e8c2a2e5ebbc8495c28cd0ed330dc79e4f.profdata
+chrome-linux-main-1699984792-ca491f29d26120dbf7385047a9f86632f55caba7.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index 5dc58de..88cc882 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1699963157-b4fc4b3c5cb9e2c98723e3e13d363c3aed8a779d.profdata
+chrome-mac-main-1699984792-bd4e895afb8c2c81476335d740740b0d2ad7085e.profdata
diff --git a/chrome/build/win-arm64.pgo.txt b/chrome/build/win-arm64.pgo.txt
index cf85176..2f68a6b 100644
--- a/chrome/build/win-arm64.pgo.txt
+++ b/chrome/build/win-arm64.pgo.txt
@@ -1 +1 @@
-chrome-win-arm64-main-1699963157-edb4f76f52cf862dfabe31f2e43bdb3397e8daba.profdata
+chrome-win-arm64-main-1699984792-35013a22c84f0c8ac60f35b8e5e9dd9e386d3086.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 35a5716..ec9199e 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1699973819-151cc7e236df33560ba4546a5f96aa119240f6da.profdata
+chrome-win32-main-1699984792-01f446cd92e796d6d47926d89bd020f8b8a5debb.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index dd2e2597..6b0d217a 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1699973819-b2a80080c484abf23128ca292c3b67675b3edb87.profdata
+chrome-win64-main-1699984792-68886e2d232eb5779379a749f796930deed9f929.profdata
diff --git a/chrome/common/chrome_paths_lacros.h b/chrome/common/chrome_paths_lacros.h
index d886475..156380ca 100644
--- a/chrome/common/chrome_paths_lacros.h
+++ b/chrome/common/chrome_paths_lacros.h
@@ -37,6 +37,10 @@
 // in case drive is disabled in Ash. `SetDriveFsMountPointPath()` is triggered
 // in case drive availability in Ash is changed.
 void SetDriveFsMountPointPath(const base::FilePath& drivefs);
+
+// Sets `result` to the the DriveFS mount point path, which is passed in by Ash
+// and continually updated as it changes in Ash. The mount point path does not
+// contain the trailing '/root'; this is the 'MyDrive' directory specifically.
 // Returns false if Drive is not enabled in Ash.
 bool GetDriveFsMountPointPath(base::FilePath* result);
 
diff --git a/chrome/common/extensions/api/accessibility_private.json b/chrome/common/extensions/api/accessibility_private.json
index 45ede16..e9809227 100644
--- a/chrome/common/extensions/api/accessibility_private.json
+++ b/chrome/common/extensions/api/accessibility_private.json
@@ -643,6 +643,18 @@
         ]
       },
       {
+        "name": "setCursorPosition",
+        "type": "function",
+        "description": "Sets the cursor position on the screen in absolute screen coordinates.",
+        "parameters": [
+          {
+            "name": "point",
+            "$ref": "ScreenPoint",
+            "description": "The screen point at which to put the cursor."
+          }
+        ]
+      },
+      {
         "name": "sendSyntheticMouseEvent",
         "type": "function",
         "description": "Sends a fabricated mouse event.",
diff --git a/chrome/renderer/autofill/form_autocomplete_browsertest.cc b/chrome/renderer/autofill/form_autocomplete_browsertest.cc
index 7cec6c0..49cca55d 100644
--- a/chrome/renderer/autofill/form_autocomplete_browsertest.cc
+++ b/chrome/renderer/autofill/form_autocomplete_browsertest.cc
@@ -818,16 +818,16 @@
       "<form><input type='text' name='excluded'/></form>"
       "</html>");
 
-  FormData result;
-  autofill_agent_->CollectFormlessElements(&result);
+  std::optional<FormData> result = autofill_agent_->CollectFormlessElements();
+  ASSERT_TRUE(result);
 
   // Asserting size 4 also ensures that 'excluded' field inside <form> is not
   // collected.
-  ASSERT_EQ(4U, result.fields.size());
-  EXPECT_EQ(u"text_input", result.fields[0].name);
-  EXPECT_EQ(u"check_input", result.fields[1].name);
-  EXPECT_EQ(u"number_input", result.fields[2].name);
-  EXPECT_EQ(u"select_input", result.fields[3].name);
+  ASSERT_EQ(4U, result->fields.size());
+  EXPECT_EQ(u"text_input", result->fields[0].name);
+  EXPECT_EQ(u"check_input", result->fields[1].name);
+  EXPECT_EQ(u"number_input", result->fields[2].name);
+  EXPECT_EQ(u"select_input", result->fields[3].name);
 }
 
 // Unit test for AutofillAgent::AcceptDataListSuggestion.
diff --git a/chrome/services/sharing/nearby/platform/credential_storage_unittest.cc b/chrome/services/sharing/nearby/platform/credential_storage_unittest.cc
index fbb222b..450fdbd 100644
--- a/chrome/services/sharing/nearby/platform/credential_storage_unittest.cc
+++ b/chrome/services/sharing/nearby/platform/credential_storage_unittest.cc
@@ -286,6 +286,13 @@
                             std::move(local_credentials));
   }
 
+  void UpdateLocalCredential(
+      ash::nearby::presence::mojom::LocalCredentialPtr local_credential,
+      UpdateLocalCredentialCallback callback) override {
+    // TODO(b/287334012): Implement this feature when CredentialStorage consumes
+    // it.
+  }
+
   void SetShouldCredentialsSuccessfullySave(bool should_succeed) {
     should_credentials_successfully_save_ = should_succeed;
   }
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index b0325462..217f5a4 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -2844,7 +2844,12 @@
     ]
 
     if (enable_compose) {
-      sources += [ "../browser/compose/compose_inner_text_browsertest.cc" ]
+      sources += [
+        "../browser/compose/compose_dialog_browsertest.cc",
+        "../browser/compose/compose_inner_text_browsertest.cc",
+      ]
+
+      deps += [ "//components/compose/core/browser:features" ]
     }
 
     if (enable_supervised_users) {
@@ -7874,6 +7879,7 @@
       "../browser/ui/views/webid/fedcm_account_selection_view_desktop_unittest.cc",
       "../browser/ui/views/webid/fedcm_modal_dialog_view_unittest.cc",
       "../browser/ui/webauthn/sheet_models_unittest.cc",
+      "../browser/ui/webui/about/about_ui_unittest.cc",
       "../browser/ui/webui/access_code_cast/access_code_cast_handler_unittest.cc",
       "../browser/ui/webui/browser_command/browser_command_handler_unittest.cc",
       "../browser/ui/webui/commerce/shopping_list_context_menu_controller_unittest.cc",
@@ -9193,7 +9199,6 @@
         "../browser/extensions/system_display/display_info_provider_chromeos_unittest.cc",
         "../browser/media_galleries/chromeos/mtp_device_object_enumerator_unittest.cc",
         "../browser/policy/restricted_mgs_policy_provider_ash_unittest.cc",
-        "../browser/ui/webui/about/about_ui_unittest.cc",
         "../browser/ui/webui/ash/parent_access/parent_access_ui_handler_impl_unittest.cc",
         "../common/chromeos/extensions/chromeos_system_extension_info_unittest.cc",
         "../common/chromeos/extensions/manifest_tests/extension_manifests_chromeos_system_extension_unittest.cc",
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/tabmodel/MockTabCreator.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/tabmodel/MockTabCreator.java
index ad9b1e79..e045ea4 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/tabmodel/MockTabCreator.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/tabmodel/MockTabCreator.java
@@ -75,11 +75,6 @@
     }
 
     @Override
-    public Tab buildDetachedSpareTab(@TabLaunchType int type, boolean initializeRenderer) {
-        return null;
-    }
-
-    @Override
     public boolean createTabWithWebContents(
             Tab parent, WebContents webContents, @TabLaunchType int type, GURL url) {
         return false;
diff --git a/chrome/test/data/compose/test2.html b/chrome/test/data/compose/test2.html
new file mode 100644
index 0000000..699e41d2
--- /dev/null
+++ b/chrome/test/data/compose/test2.html
@@ -0,0 +1,11 @@
+<html>
+  <head>
+    <meta name="viewport" content="width=device-width,minimum-scale=1"></meta>
+  </head>
+  <body>
+    <textarea id="elem1" rows="4" style="font-family: monospace; width: 50ch">
+The
+textarea tag  defines a multi-line text input control.
+</textarea>
+  </body>
+</html>
diff --git a/chrome/test/data/extensions/api_test/accessibility_private/background.js b/chrome/test/data/extensions/api_test/accessibility_private/background.js
index fb5d76f9..5294a8ab7 100644
--- a/chrome/test/data/extensions/api_test/accessibility_private/background.js
+++ b/chrome/test/data/extensions/api_test/accessibility_private/background.js
@@ -233,6 +233,11 @@
           'Fake DLC file content', new TextDecoder().decode(contents));
       chrome.test.succeed();
     });
+  },
+
+  function testSetCursorPosition() {
+    chrome.accessibilityPrivate.setCursorPosition({x: 450, y: 350});
+    chrome.test.succeed();
   }
 ];
 
diff --git a/chrome/test/data/extensions/api_test/automation/tests/tabs/sanity_check.js b/chrome/test/data/extensions/api_test/automation/tests/tabs/sanity_check.js
index 1f1b848e..f5989b7 100644
--- a/chrome/test/data/extensions/api_test/automation/tests/tabs/sanity_check.js
+++ b/chrome/test/data/extensions/api_test/automation/tests/tabs/sanity_check.js
@@ -61,9 +61,10 @@
     assertEq(body, cancelButton.parent);
 
     assertEq(undefined, okButton.previousSibling);
-    assertEq({}, okButton.firstChild);
+    const buttonChild = okButton.firstChild;
+    assertEq('genericContainer', buttonChild.role);
+    assertEq(buttonChild, okButton.lastChild);
     assertEq(userNameInput, okButton.nextSibling);
-    assertEq({}, okButton.lastChild);
 
     assertEq(okButton, userNameInput.previousSibling);
     assertEq(cancelButton, userNameInput.nextSibling);
diff --git a/chrome/test/data/webui/chromeos/firmware_update/.gitignore b/chrome/test/data/webui/chromeos/firmware_update/.gitignore
new file mode 100644
index 0000000..79f93fdd
--- /dev/null
+++ b/chrome/test/data/webui/chromeos/firmware_update/.gitignore
@@ -0,0 +1,2 @@
+# Generated from ash/webui/personalization_app/tools/gen_tsconfig.py
+tsconfig.json
\ No newline at end of file
diff --git a/chrome/updater/BUILD.gn b/chrome/updater/BUILD.gn
index dcc680b6..63cf5c79 100644
--- a/chrome/updater/BUILD.gn
+++ b/chrome/updater/BUILD.gn
@@ -903,7 +903,7 @@
       sources += [
         "mac/keystone/ksadmin_unittest.cc",
         "mac/privileged_helper/privileged_helper_unittests.mm",
-        "mac/setup/keystone_unittest.cc",
+        "mac/setup/keystone_unittest.mm",
         "mac/setup/ks_tickets_unittest.mm",
         "mac/setup/setup_unittest.mm",
         "mac/setup/wake_task_unittest.mm",
diff --git a/chrome/updater/mac/setup/keystone.h b/chrome/updater/mac/setup/keystone.h
index 656986f..46eea8f 100644
--- a/chrome/updater/mac/setup/keystone.h
+++ b/chrome/updater/mac/setup/keystone.h
@@ -16,6 +16,9 @@
 
 struct RegistrationRequest;
 
+// Create a plist file with an empty dictionary.
+bool CreateEmptyPlistFile(const base::FilePath& file_path);
+
 // Installs Keystone and the necessary supporting files.
 bool InstallKeystone(UpdaterScope scope);
 
diff --git a/chrome/updater/mac/setup/keystone.mm b/chrome/updater/mac/setup/keystone.mm
index b0ea1d8..6dd1f66 100644
--- a/chrome/updater/mac/setup/keystone.mm
+++ b/chrome/updater/mac/setup/keystone.mm
@@ -4,6 +4,8 @@
 
 #include "chrome/updater/mac/setup/keystone.h"
 
+#import <Foundation/Foundation.h>
+
 #include <optional>
 #include <string>
 #include <vector>
@@ -178,13 +180,36 @@
   return true;
 }
 
-bool CreateEmptyFileInDirectory(const base::FilePath& dir,
-                                const std::string& file_name) {
+bool CreateKeystoneLaunchCtlPlistFiles(UpdaterScope scope) {
+  // If not all Keystone launchctl plist files are present, Keystone installer
+  // will proceed regardless of the bundle state. The empty launchctl files
+  // created here make legacy Keystone installer believe that a healthy newer
+  // version updater already exists and thus won't over-install.
+  if (IsSystemInstall(scope) &&
+      !CreateEmptyPlistFile(
+          GetLibraryFolderPath(scope)
+              ->Append("LaunchDaemons")
+              .AppendASCII(base::ToLowerASCII(LEGACY_GOOGLE_UPDATE_APPID
+                                              ".daemon.plist")))) {
+    return false;
+  }
+
+  base::FilePath launch_agent_dir =
+      GetLibraryFolderPath(scope)->Append("LaunchAgents");
+  return CreateEmptyPlistFile(launch_agent_dir.AppendASCII(
+             base::ToLowerASCII(LEGACY_GOOGLE_UPDATE_APPID ".agent.plist"))) &&
+         CreateEmptyPlistFile(launch_agent_dir.AppendASCII(base::ToLowerASCII(
+             LEGACY_GOOGLE_UPDATE_APPID ".xpcservice.plist")));
+}
+
+}  // namespace
+
+bool CreateEmptyPlistFile(const base::FilePath& file_path) {
   constexpr int kPermissionsMask = base::FILE_PERMISSION_READ_BY_USER |
                                    base::FILE_PERMISSION_WRITE_BY_USER |
                                    base::FILE_PERMISSION_READ_BY_GROUP |
                                    base::FILE_PERMISSION_READ_BY_OTHERS;
-
+  const base::FilePath dir = file_path.DirName();
   if (!base::PathExists(dir)) {
     base::File::Error error;
     if (!base::CreateDirectoryAndGetError(dir, &error) ||
@@ -195,20 +220,19 @@
     }
   }
 
-  base::FilePath file_path = dir.AppendASCII(file_name);
-  int64_t file_size;
-  if (base::GetFileSize(file_path, &file_size) && file_size == 0) {
-    VLOG(1) << "Skipping creation of " << file_path << ": file already empty.";
-    return true;
+  @autoreleasepool {
+    NSURL* const url = base::apple::FilePathToNSURL(file_path);
+    if (base::PathExists(file_path) && [@{
+        } isEqualToDictionary:[NSDictionary dictionaryWithContentsOfURL:url]]) {
+      VLOG(2) << "Skipping updating " << file_path;
+      return true;
+    }
+    if (![@{} writeToURL:url atomically:YES]) {
+      LOG(ERROR) << "Failed to write " << url;
+      return false;
+    }
   }
-  base::File file(file_path,
-                  base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE);
-  file.Close();
 
-  if (!base::PathExists(file_path)) {
-    LOG(ERROR) << "Failed to create file: " << file_path.value().c_str();
-    return false;
-  }
   if (!base::SetPosixFilePermissions(file_path, kPermissionsMask)) {
     LOG(ERROR) << "Failed to set permissions: " << file_path.value().c_str();
     return false;
@@ -217,30 +241,6 @@
   return true;
 }
 
-bool CreateKeystoneLaunchCtlPlistFiles(UpdaterScope scope) {
-  // If not all Keystone launchctl plist files are present, Keystone installer
-  // will proceed regardless of the bundle state. The empty launchctl files
-  // created here are used to make legacy Keystone installer believe that a
-  // healthy newer version updater already exists and thus won't over-install.
-  if (IsSystemInstall(scope) &&
-      !CreateEmptyFileInDirectory(
-          GetLibraryFolderPath(scope)->Append("LaunchDaemons"),
-          base::ToLowerASCII(LEGACY_GOOGLE_UPDATE_APPID ".daemon.plist"))) {
-    return false;
-  }
-
-  base::FilePath launch_agent_dir =
-      GetLibraryFolderPath(scope)->Append("LaunchAgents");
-  return CreateEmptyFileInDirectory(
-             launch_agent_dir,
-             base::ToLowerASCII(LEGACY_GOOGLE_UPDATE_APPID ".agent.plist")) &&
-         CreateEmptyFileInDirectory(
-             launch_agent_dir, base::ToLowerASCII(LEGACY_GOOGLE_UPDATE_APPID
-                                                  ".xpcservice.plist"));
-}
-
-}  // namespace
-
 bool InstallKeystone(UpdaterScope scope) {
   return CopyKeystoneBundle(scope) && CreateKeystoneLaunchCtlPlistFiles(scope);
 }
diff --git a/chrome/updater/mac/setup/keystone_unittest.cc b/chrome/updater/mac/setup/keystone_unittest.mm
similarity index 64%
rename from chrome/updater/mac/setup/keystone_unittest.cc
rename to chrome/updater/mac/setup/keystone_unittest.mm
index fbae707..b51a711f 100644
--- a/chrome/updater/mac/setup/keystone_unittest.cc
+++ b/chrome/updater/mac/setup/keystone_unittest.mm
@@ -4,13 +4,18 @@
 
 #include "chrome/updater/mac/setup/keystone.h"
 
+#import <Foundation/Foundation.h>
+
 #include <vector>
 
+#include "base/apple/foundation_util.h"
+#include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/path_service.h"
 #include "base/test/bind.h"
+#include "base/time/time.h"
 #include "base/version.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/updater/registration_data.h"
@@ -45,6 +50,49 @@
   base::ScopedTempDir temp_keystone_dir_;
 };
 
+TEST_F(KeystoneTest, CreateEmptyPlistFile) {
+  constexpr int kPermissionsMask = base::FILE_PERMISSION_READ_BY_USER |
+                                   base::FILE_PERMISSION_WRITE_BY_USER |
+                                   base::FILE_PERMISSION_READ_BY_GROUP |
+                                   base::FILE_PERMISSION_READ_BY_OTHERS;
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  // Verify plist file is created if not present.
+  const base::FilePath plist_path =
+      temp_dir.GetPath().AppendASCII("empty.plist");
+  EXPECT_TRUE(CreateEmptyPlistFile(plist_path));
+  EXPECT_TRUE(base::PathExists(plist_path));
+  int mode = 0;
+  EXPECT_TRUE(base::GetPosixFilePermissions(plist_path, &mode));
+  EXPECT_EQ(mode, kPermissionsMask);
+
+  {
+    // Verify the plist is not re-created when contents didn't change.
+    base::Time previous_mtime = base::Time::Now() - base::Days(1);
+    EXPECT_TRUE(base::TouchFile(plist_path, previous_mtime, previous_mtime));
+    EXPECT_TRUE(CreateEmptyPlistFile(plist_path));
+    base::File::Info info;
+    EXPECT_TRUE(base::GetFileInfo(plist_path, &info));
+    EXPECT_EQ(info.last_modified, previous_mtime);
+  }
+
+  @autoreleasepool {
+    // Verify the plist is re-created when contents needs update.
+    NSURL* const url = base::apple::FilePathToNSURL(plist_path);
+    EXPECT_TRUE([@{@"foo": @2} writeToURL:url atomically:YES]);
+    base::Time previous_mtime = base::Time::Now() - base::Days(1);
+    EXPECT_TRUE(base::TouchFile(plist_path, previous_mtime, previous_mtime));
+    EXPECT_TRUE(CreateEmptyPlistFile(plist_path));
+    base::File::Info info;
+    EXPECT_TRUE(base::GetFileInfo(plist_path, &info));
+    EXPECT_NE(info.last_modified, previous_mtime);
+    mode = 0;
+    EXPECT_TRUE(base::GetPosixFilePermissions(plist_path, &mode));
+    EXPECT_EQ(mode, kPermissionsMask);
+  }
+}
+
 TEST_F(KeystoneTest, MigrateKeystoneApps) {
   std::vector<RegistrationRequest> registration_requests;
   MigrateKeystoneApps(
diff --git a/chromeos/ash/components/geolocation/BUILD.gn b/chromeos/ash/components/geolocation/BUILD.gn
index e426fb5..19de332a 100644
--- a/chromeos/ash/components/geolocation/BUILD.gn
+++ b/chromeos/ash/components/geolocation/BUILD.gn
@@ -10,6 +10,7 @@
 component("geolocation") {
   defines = [ "IS_CHROMEOS_ASH_COMPONENTS_GEOLOCATION_IMPL" ]
   deps = [
+    "//ash/constants",
     "//base",
     "//chromeos/ash/components/network",
     "//google_apis",
@@ -32,6 +33,7 @@
   testonly = true
   deps = [
     ":geolocation",
+    "//ash/constants",
     "//base",
     "//base/test:test_support",
     "//chromeos/ash/components/dbus/shill",
diff --git a/chromeos/ash/components/geolocation/DEPS b/chromeos/ash/components/geolocation/DEPS
index e08948e..a1e4986 100644
--- a/chromeos/ash/components/geolocation/DEPS
+++ b/chromeos/ash/components/geolocation/DEPS
@@ -1,6 +1,7 @@
 noparent = True
 
 include_rules = [
+  "+ash/constants",
   "+base",
   "+chromeos/ash/components/network",
   "+google_apis",
diff --git a/chromeos/ash/components/geolocation/simple_geolocation_provider.cc b/chromeos/ash/components/geolocation/simple_geolocation_provider.cc
index 0f7f773..44c7872 100644
--- a/chromeos/ash/components/geolocation/simple_geolocation_provider.cc
+++ b/chromeos/ash/components/geolocation/simple_geolocation_provider.cc
@@ -7,6 +7,7 @@
 #include <iterator>
 #include <memory>
 
+#include "ash/constants/geolocation_access_level.h"
 #include "base/check_is_test.h"
 #include "base/functional/bind.h"
 #include "base/memory/ptr_util.h"
@@ -47,20 +48,17 @@
   return g_geolocation_provider;
 }
 
-void SimpleGeolocationProvider::AllowGeolocationUsage() {
-  bool need_to_notify = (geolocation_usage_allowed_ == false);
-  geolocation_usage_allowed_ = true;
-
-  if (need_to_notify) {
-    NotifyObservers();
-  }
+GeolocationAccessLevel SimpleGeolocationProvider::GetGeolocationAccessLevel()
+    const {
+  return geolocation_access_level_;
 }
 
-void SimpleGeolocationProvider::DisallowGeolocationUsage() {
-  bool need_to_notify = (geolocation_usage_allowed_ == true);
-  geolocation_usage_allowed_ = false;
+void SimpleGeolocationProvider::SetGeolocationAccessLevel(
+    GeolocationAccessLevel geolocation_access_level) {
+  bool system_geo_usage_allowed = IsGeolocationUsageAllowedForSystem();
+  geolocation_access_level_ = geolocation_access_level;
 
-  if (need_to_notify) {
+  if (system_geo_usage_allowed != IsGeolocationUsageAllowedForSystem()) {
     NotifyObservers();
   }
 }
@@ -84,8 +82,9 @@
     SimpleGeolocationRequest::ResponseCallback callback) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
-  // Drop request if the system geolocation permission is not granted.
-  if (!IsGeolocationUsageAllowed()) {
+  // Drop request if the system geolocation permission is not granted for
+  // system services.
+  if (!IsGeolocationUsageAllowedForSystem()) {
     return;
   }
 
@@ -143,6 +142,16 @@
   url_for_testing_ = url;
 }
 
+bool SimpleGeolocationProvider::IsGeolocationUsageAllowedForSystem() {
+  switch (geolocation_access_level_) {
+    case GeolocationAccessLevel::kAllowed:
+    case GeolocationAccessLevel::kOnlyAllowedForSystem:
+      return true;
+    case GeolocationAccessLevel::kDisallowed:
+      return false;
+  }
+}
+
 void SimpleGeolocationProvider::OnGeolocationResponse(
     SimpleGeolocationRequest* request,
     SimpleGeolocationRequest::ResponseCallback callback,
@@ -174,7 +183,7 @@
 
 void SimpleGeolocationProvider::NotifyObservers() {
   for (auto& obs : observer_list_) {
-    obs.OnGeolocationPermissionChanged(geolocation_usage_allowed_);
+    obs.OnGeolocationPermissionChanged(IsGeolocationUsageAllowedForSystem());
   }
 }
 
diff --git a/chromeos/ash/components/geolocation/simple_geolocation_provider.h b/chromeos/ash/components/geolocation/simple_geolocation_provider.h
index 5ef6e728..fd07afb 100644
--- a/chromeos/ash/components/geolocation/simple_geolocation_provider.h
+++ b/chromeos/ash/components/geolocation/simple_geolocation_provider.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <vector>
 
+#include "ash/constants/geolocation_access_level.h"
 #include "base/check_is_test.h"
 #include "base/component_export.h"
 #include "base/gtest_prod_util.h"
@@ -30,13 +31,11 @@
 
 class GeolocationHandler;
 
-// This class implements Google Maps Geolocation API.
-//
-// `SimpleGeolocationProvider` must be created and used on the same thread.
-//
-// Note: this should probably be a singleton to monitor requests rate.
-// But as it is used only during ChromeOS Out-of-Box, it can be owned by
-// WizardController for now.
+// `SimpleGeolocationProvider` watches geolocation permissions and serves
+// geolocation requests to its clients by implementing Google Maps Geolocation
+// API. All system services need to use this class to get geolocation data and
+// subscribe to it for permission updates.
+// Note: Arc++ and PWAs have different pipelines for retrieving geolocation.
 class COMPONENT_EXPORT(CHROMEOS_ASH_COMPONENTS_GEOLOCATION)
     SimpleGeolocationProvider {
  public:
@@ -61,9 +60,13 @@
     return GURL(kGeolocationProviderUrl);
   }
 
-  bool IsGeolocationUsageAllowed() const { return geolocation_usage_allowed_; }
-  void AllowGeolocationUsage();
-  void DisallowGeolocationUsage();
+  GeolocationAccessLevel GetGeolocationAccessLevel() const;
+  void SetGeolocationAccessLevel(
+      GeolocationAccessLevel geolocation_access_level);
+
+  // Convenience method for clients to read underlying `GeolocationAccessLevel`
+  // as a boolean value.
+  bool IsGeolocationUsageAllowedForSystem();
 
   void AddObserver(Observer* obs);
   void RemoveObserver(Observer* obs);
@@ -106,8 +109,8 @@
       bool server_error,
       const base::TimeDelta elapsed);
 
-  // Returns `DefaultGeolocaitonProivdeURL()` for production. Can be overridden
-  // in tests.
+  // Returns `DefaultGeolocaitonProivdeURL()` for production. Can be
+  // overridden in tests.
   std::string GetGeolocationProviderUrl() const;
 
   void set_geolocation_handler(GeolocationHandler* geolocation_handler) {
@@ -116,18 +119,19 @@
 
   void NotifyObservers();
 
-  // Source of truth whether the clients can use geolocation or not.
-  // Takes into consideration geolocation policy, log-in or in-session
-  // geolocation prefs.
-  bool geolocation_usage_allowed_ = true;
+  // Source of truth for the current geolocation access level.
+  // Takes into consideration geolocation policies, log-in and in-session
+  // geolocation prefs and is being updated on relevant events.
+  GeolocationAccessLevel geolocation_access_level_ =
+      GeolocationAccessLevel::kAllowed;
 
   base::ObserverList<Observer> observer_list_;
 
   scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory_;
 
   // Requests in progress.
-  // `SimpleGeolocationProvider` owns all requests, so this vector is deleted on
-  // destroy.
+  // `SimpleGeolocationProvider` owns all requests, so this vector is deleted
+  // on destroy.
   std::vector<std::unique_ptr<SimpleGeolocationRequest>> requests_;
 
   raw_ptr<GeolocationHandler, ExperimentalAsh> geolocation_handler_ = nullptr;
diff --git a/chromeos/ash/components/geolocation/simple_geolocation_unittest.cc b/chromeos/ash/components/geolocation/simple_geolocation_unittest.cc
index e08932f..f931585 100644
--- a/chromeos/ash/components/geolocation/simple_geolocation_unittest.cc
+++ b/chromeos/ash/components/geolocation/simple_geolocation_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "ash/constants/geolocation_access_level.h"
 #include "base/containers/contains.h"
 #include "base/functional/bind.h"
 #include "base/memory/raw_ptr.h"
@@ -208,11 +209,13 @@
   ~SimpleGeolocationTestBase() = default;
 
   void EnableGeolocationUsage() {
-    SimpleGeolocationProvider::GetInstance()->AllowGeolocationUsage();
+    SimpleGeolocationProvider::GetInstance()->SetGeolocationAccessLevel(
+        GeolocationAccessLevel::kAllowed);
   }
 
   void DisableGeolocatioUsage() {
-    SimpleGeolocationProvider::GetInstance()->DisallowGeolocationUsage();
+    SimpleGeolocationProvider::GetInstance()->SetGeolocationAccessLevel(
+        GeolocationAccessLevel::kDisallowed);
   }
 
  protected:
@@ -436,14 +439,6 @@
     base::RunLoop().RunUntilIdle();
   }
 
-  void EnableGeolocationUsage() {
-    SimpleGeolocationProvider::GetInstance()->AllowGeolocationUsage();
-  }
-
-  void DisableGeolocatioUsage() {
-    SimpleGeolocationProvider::GetInstance()->DisallowGeolocationUsage();
-  }
-
  protected:
   base::test::SingleThreadTaskEnvironment task_environment_{
       base::test::SingleThreadTaskEnvironment::MainThreadType::UI};
diff --git a/chromeos/ash/components/growth/campaigns_matcher.cc b/chromeos/ash/components/growth/campaigns_matcher.cc
index 77aa4cb..f48d052 100644
--- a/chromeos/ash/components/growth/campaigns_matcher.cc
+++ b/chromeos/ash/components/growth/campaigns_matcher.cc
@@ -234,9 +234,9 @@
     return false;
   }
 
-  return MatchSessionTargeting(SessionTargeting(*targeting)) &&
-         MaybeMatchDemoModeTargeting(DemoModeTargeting(*targeting)) &&
-         MatchDeviceTargeting(DeviceTargeting(*targeting));
+  return MatchSessionTargeting(SessionTargeting(targeting)) &&
+         MaybeMatchDemoModeTargeting(DemoModeTargeting(targeting)) &&
+         MatchDeviceTargeting(DeviceTargeting(targeting));
 }
 
 }  // namespace growth
diff --git a/chromeos/ash/components/growth/campaigns_model.cc b/chromeos/ash/components/growth/campaigns_model.cc
index 315988e8..3fade9e1be 100644
--- a/chromeos/ash/components/growth/campaigns_model.cc
+++ b/chromeos/ash/components/growth/campaigns_model.cc
@@ -83,34 +83,34 @@
 }
 
 // Targeting Base.
-TargetingBase::TargetingBase(const Targeting& targeting_dict,
+TargetingBase::TargetingBase(const Targeting* targeting_dict,
                              const char* targeting_path)
     : targeting_(targeting_dict), targeting_path_(targeting_path) {}
 
 TargetingBase::~TargetingBase() = default;
 
 bool TargetingBase::IsValid() const {
-  return !!targeting_.FindDict(targeting_path_);
+  return !!targeting_->FindDict(targeting_path_);
 }
 
 const base::Value::List* TargetingBase::GetListCriteria(
     const char* path_suffix) const {
-  return targeting_.FindListByDottedPath(GetCriteriaPath(path_suffix));
+  return targeting_->FindListByDottedPath(GetCriteriaPath(path_suffix));
 }
 
 const absl::optional<bool> TargetingBase::GetBoolCriteria(
     const char* path_suffix) const {
-  return targeting_.FindBoolByDottedPath(GetCriteriaPath(path_suffix));
+  return targeting_->FindBoolByDottedPath(GetCriteriaPath(path_suffix));
 }
 
 const absl::optional<int> TargetingBase::GetIntCriteria(
     const char* path_suffix) const {
-  return targeting_.FindIntByDottedPath(GetCriteriaPath(path_suffix));
+  return targeting_->FindIntByDottedPath(GetCriteriaPath(path_suffix));
 }
 
 const std::string* TargetingBase::GetStringCriteria(
     const char* path_suffix) const {
-  return targeting_.FindStringByDottedPath(GetCriteriaPath(path_suffix));
+  return targeting_->FindStringByDottedPath(GetCriteriaPath(path_suffix));
 }
 
 const std::string TargetingBase::GetCriteriaPath(
@@ -119,7 +119,7 @@
 }
 
 // Demo Mode Targeting.
-DemoModeTargeting::DemoModeTargeting(const Targeting& targeting_dict)
+DemoModeTargeting::DemoModeTargeting(const Targeting* targeting_dict)
     : TargetingBase(targeting_dict, kDemoModeTargeting) {}
 
 DemoModeTargeting::~DemoModeTargeting() = default;
@@ -153,7 +153,7 @@
 }
 
 // Device Targeting.
-DeviceTargeting::DeviceTargeting(const Targeting& targeting_dict)
+DeviceTargeting::DeviceTargeting(const Targeting* targeting_dict)
     : TargetingBase(targeting_dict, kDeviceTargeting) {}
 
 DeviceTargeting::~DeviceTargeting() = default;
@@ -196,7 +196,7 @@
 }
 
 // Session Targeting.
-SessionTargeting::SessionTargeting(const Targeting& targeting_dict)
+SessionTargeting::SessionTargeting(const Targeting* targeting_dict)
     : TargetingBase(targeting_dict, kSessionTargeting) {}
 
 SessionTargeting::~SessionTargeting() = default;
diff --git a/chromeos/ash/components/growth/campaigns_model.h b/chromeos/ash/components/growth/campaigns_model.h
index 3c13ced..9c6c967c 100644
--- a/chromeos/ash/components/growth/campaigns_model.h
+++ b/chromeos/ash/components/growth/campaigns_model.h
@@ -120,7 +120,7 @@
 
 class TargetingBase {
  public:
-  explicit TargetingBase(const Targeting& targeting_dict,
+  explicit TargetingBase(const Targeting* targeting_dict,
                          const char* targeting_path);
   TargetingBase(const TargetingBase&) = delete;
   TargetingBase& operator=(const TargetingBase) = delete;
@@ -142,7 +142,7 @@
 
   // The dictionary that contains targeting definition. Owned by
   // `CampaignsManager`.
-  const Targeting& targeting_;
+  raw_ptr<const Targeting, ExperimentalAsh> targeting_;
   // The targeting path.
   const char* targeting_path_;
 };
@@ -159,7 +159,7 @@
 // }
 class DemoModeTargeting : public TargetingBase {
  public:
-  explicit DemoModeTargeting(const Targeting& targeting_dict);
+  explicit DemoModeTargeting(const Targeting* targeting_dict);
   DemoModeTargeting(const DemoModeTargeting&) = delete;
   DemoModeTargeting& operator=(const DemoModeTargeting) = delete;
   ~DemoModeTargeting();
@@ -183,7 +183,7 @@
 // }
 class DeviceTargeting : public TargetingBase {
  public:
-  explicit DeviceTargeting(const Targeting& targeting_dict);
+  explicit DeviceTargeting(const Targeting* targeting_dict);
   DeviceTargeting(const DeviceTargeting&) = delete;
   DeviceTargeting& operator=(const DeviceTargeting) = delete;
   ~DeviceTargeting();
@@ -224,7 +224,7 @@
 // }
 class SessionTargeting : public TargetingBase {
  public:
-  explicit SessionTargeting(const Targeting& targeting_dict);
+  explicit SessionTargeting(const Targeting* targeting_dict);
   SessionTargeting(const SessionTargeting&) = delete;
   SessionTargeting& operator=(const SessionTargeting) = delete;
   ~SessionTargeting();
diff --git a/chromeos/ash/components/login/auth/BUILD.gn b/chromeos/ash/components/login/auth/BUILD.gn
index 44dee57..2fcd03b 100644
--- a/chromeos/ash/components/login/auth/BUILD.gn
+++ b/chromeos/ash/components/login/auth/BUILD.gn
@@ -115,8 +115,6 @@
     "//testing/gtest",
   ]
   sources = [
-    "fake_extended_authenticator.cc",
-    "fake_extended_authenticator.h",
     "mock_auth_performer.cc",
     "mock_auth_performer.h",
     "mock_auth_status_consumer.cc",
diff --git a/chromeos/ash/components/login/auth/fake_extended_authenticator.cc b/chromeos/ash/components/login/auth/fake_extended_authenticator.cc
deleted file mode 100644
index e71d695..0000000
--- a/chromeos/ash/components/login/auth/fake_extended_authenticator.cc
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2014 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chromeos/ash/components/login/auth/fake_extended_authenticator.h"
-
-#include "base/notreached.h"
-#include "chromeos/ash/components/login/auth/auth_status_consumer.h"
-#include "chromeos/ash/components/login/auth/public/auth_failure.h"
-#include "components/account_id/account_id.h"
-
-namespace ash {
-
-FakeExtendedAuthenticator::FakeExtendedAuthenticator(
-    AuthStatusConsumer* consumer,
-    const UserContext& expected_user_context)
-    : consumer_(consumer), expected_user_context_(expected_user_context) {}
-
-FakeExtendedAuthenticator::~FakeExtendedAuthenticator() = default;
-
-void FakeExtendedAuthenticator::SetConsumer(AuthStatusConsumer* consumer) {
-  consumer_ = consumer;
-}
-
-void FakeExtendedAuthenticator::AuthenticateToCheck(
-    const UserContext& context,
-    base::OnceClosure success_callback) {
-  DoAuthenticateToCheck(context, /*unlock_webauthn_secret=*/false,
-                        std::move(success_callback));
-}
-
-void FakeExtendedAuthenticator::TransformKeyIfNeeded(
-    const UserContext& user_context,
-    ContextCallback callback) {
-  if (callback)
-    std::move(callback).Run(user_context);
-}
-
-void FakeExtendedAuthenticator::DoAuthenticateToCheck(
-    const UserContext& context,
-    bool unlock_webauthn_secret,
-    base::OnceClosure success_callback) {
-  if (expected_user_context_ == context) {
-    if (success_callback)
-      std::move(success_callback).Run();
-    OnAuthSuccess(context);
-    return;
-  }
-
-  OnAuthFailure(FAILED_MOUNT, AuthFailure(AuthFailure::UNLOCK_FAILED));
-}
-
-void FakeExtendedAuthenticator::OnAuthSuccess(const UserContext& context) {
-  if (consumer_)
-    consumer_->OnAuthSuccess(context);
-}
-
-void FakeExtendedAuthenticator::OnAuthFailure(AuthState state,
-                                              const AuthFailure& error) {
-  if (consumer_)
-    consumer_->OnAuthFailure(error);
-}
-
-}  // namespace ash
diff --git a/chromeos/ash/components/login/auth/fake_extended_authenticator.h b/chromeos/ash/components/login/auth/fake_extended_authenticator.h
deleted file mode 100644
index 5256517..0000000
--- a/chromeos/ash/components/login/auth/fake_extended_authenticator.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2014 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROMEOS_ASH_COMPONENTS_LOGIN_AUTH_FAKE_EXTENDED_AUTHENTICATOR_H_
-#define CHROMEOS_ASH_COMPONENTS_LOGIN_AUTH_FAKE_EXTENDED_AUTHENTICATOR_H_
-
-#include "base/component_export.h"
-#include "base/memory/raw_ptr.h"
-#include "chromeos/ash/components/login/auth/extended_authenticator.h"
-#include "chromeos/ash/components/login/auth/public/user_context.h"
-
-namespace ash {
-
-class AuthFailure;
-
-class COMPONENT_EXPORT(CHROMEOS_ASH_COMPONENTS_LOGIN_AUTH)
-    FakeExtendedAuthenticator : public ExtendedAuthenticator {
- public:
-  FakeExtendedAuthenticator(AuthStatusConsumer* consumer,
-                            const UserContext& expected_user_context);
-
-  FakeExtendedAuthenticator(const FakeExtendedAuthenticator&) = delete;
-  FakeExtendedAuthenticator& operator=(const FakeExtendedAuthenticator&) =
-      delete;
-
-  // ExtendedAuthenticator:
-  void SetConsumer(AuthStatusConsumer* consumer) override;
-  void AuthenticateToCheck(const UserContext& context,
-                           base::OnceClosure success_callback) override;
-  void TransformKeyIfNeeded(const UserContext& user_context,
-                            ContextCallback callback) override;
-
-  bool last_unlock_webauthn_secret() const {
-    return last_unlock_webauthn_secret_;
-  }
-
- private:
-  ~FakeExtendedAuthenticator() override;
-
-  void DoAuthenticateToCheck(const UserContext& context,
-                             bool unlock_webauthn_secret,
-                             base::OnceClosure success_callback);
-  void OnAuthSuccess(const UserContext& context);
-  void OnAuthFailure(AuthState state, const AuthFailure& error);
-
-  raw_ptr<AuthStatusConsumer, ExperimentalAsh> consumer_;
-
-  UserContext expected_user_context_;
-  bool last_unlock_webauthn_secret_ = false;
-};
-
-}  // namespace ash
-
-#endif  // CHROMEOS_ASH_COMPONENTS_LOGIN_AUTH_FAKE_EXTENDED_AUTHENTICATOR_H_
diff --git a/chromeos/ash/services/nearby/public/mojom/nearby_presence_credential_storage.mojom b/chromeos/ash/services/nearby/public/mojom/nearby_presence_credential_storage.mojom
index 056e707..91d5c84 100644
--- a/chromeos/ash/services/nearby/public/mojom/nearby_presence_credential_storage.mojom
+++ b/chromeos/ash/services/nearby/public/mojom/nearby_presence_credential_storage.mojom
@@ -34,4 +34,10 @@
   // local_credentials will be null.
   GetPrivateCredentials() => (mojo_base.mojom.AbslStatusCode status,
           array<LocalCredential>? local_credentials);
+
+  // UpdateLocalCredential finds an existing entry in the private database
+  // with a 'secret_id' matching that of 'local_credential', and updates it
+  // if it exists.
+  UpdateLocalCredential(LocalCredential local_credential)
+      => (mojo_base.mojom.AbslStatusCode status);
 };
\ No newline at end of file
diff --git a/chromeos/assistant/internal b/chromeos/assistant/internal
index bb135af..a37cead 160000
--- a/chromeos/assistant/internal
+++ b/chromeos/assistant/internal
@@ -1 +1 @@
-Subproject commit bb135af4b5a8c4dac961301673e90dc572c597c5
+Subproject commit a37ceadae42f6bff3e3f7cb519c509c4037cd8f2
diff --git a/chromeos/crosapi/mojom/drive_integration_service.mojom b/chromeos/crosapi/mojom/drive_integration_service.mojom
index 910ccbe..d1960845e 100644
--- a/chromeos/crosapi/mojom/drive_integration_service.mojom
+++ b/chromeos/crosapi/mojom/drive_integration_service.mojom
@@ -36,9 +36,10 @@
 // Next version: 3
 [Stable, Uuid="60fd345d-0f72-4941-a035-910b93c141fa"]
 interface DriveIntegrationService {
-  // Returns the path of the mount point for Google Drive. Returns an empty file
-  // path if the Google Drive mount is not available.
-  GetMountPointPath@0() => (mojo_base.mojom.FilePath drive_path);
+  // Deprecated: Use DriveIntegrationServiceObserver::OnMountPointPathChanged()
+  // to listen for changes to the DriveFS mount point. These changes are stashed
+  // in chrome_paths_lacros.cc/h.
+  DeprecatedGetMountPointPath@0() => (mojo_base.mojom.FilePath drive_path);
 
   // Adds an observer for changes in drive availability. The observer is fired
   // immediately with the current mount point path value or empty value in case
diff --git a/chromeos/crosapi/mojom/prefs.mojom b/chromeos/crosapi/mojom/prefs.mojom
index 5ec67aec..5c40391 100644
--- a/chromeos/crosapi/mojom/prefs.mojom
+++ b/chromeos/crosapi/mojom/prefs.mojom
@@ -102,8 +102,8 @@
   [MinVersion=7] kDnsOverHttpsTemplatesWithIdentifiers = 32,
   // M109: prefs::kDnsOverHttpsSalt (local state)
   [MinVersion=7] kDnsOverHttpsSalt = 33,
-  // M110: ash::prefs::kUserGeolocationAllowed
-  [MinVersion=8] kGeolocationAllowed = 34,
+  // M110: ash::prefs::kUserGeolocationAccessLevel
+  [MinVersion=8] kUserGeolocationAccessLevel = 34,
   // M112: prefs::kMultitaskMenuNudgeClamshellShownCount
   [MinVersion=9] kMultitaskMenuNudgeClamshellShownCount = 35,
   // M112: prefs::kMultitaskMenuNudgeClamshellLastShown
diff --git a/chromeos/profiles/arm.afdo.newest.txt b/chromeos/profiles/arm.afdo.newest.txt
index 1e784b4..44a9576 100644
--- a/chromeos/profiles/arm.afdo.newest.txt
+++ b/chromeos/profiles/arm.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-arm-none-121-6085.0-1699275463-benchmark-121.0.6124.0-r2-redacted.afdo.xz
+chromeos-chrome-arm-none-121-6085.0-1699879816-benchmark-121.0.6126.0-r1-redacted.afdo.xz
diff --git a/clank b/clank
index 0f952cb..cde03d6 160000
--- a/clank
+++ b/clank
@@ -1 +1 @@
-Subproject commit 0f952cb0548617cdb61a432963ef1b3b57beac10
+Subproject commit cde03d6fb6898bc89e52452e83bacabb47e3f05d
diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components/autofill/content/renderer/autofill_agent.cc
index eec4d3ad..6648d3b 100644
--- a/components/autofill/content/renderer/autofill_agent.cc
+++ b/components/autofill/content/renderer/autofill_agent.cc
@@ -6,6 +6,7 @@
 
 #include <stddef.h>
 
+#include <optional>
 #include <tuple>
 
 #include "base/check_deref.h"
@@ -488,11 +489,10 @@
                                          bool known_success,
                                          SubmissionSource source) {
   DCHECK(MaybeWasOwnedByFrame(form, unsafe_render_frame()));
-  FormData form_data;
-  if (!form_util::ExtractFormData(form, field_data_manager(), &form_data)) {
-    return;
+  if (std::optional<FormData> form_data =
+          form_util::ExtractFormData(form, field_data_manager())) {
+    FireHostSubmitEvents(*form_data, known_success, source);
   }
-  FireHostSubmitEvents(form_data, known_success, source);
 }
 
 void AutofillAgent::FireHostSubmitEvents(const FormData& form_data,
@@ -642,18 +642,16 @@
   WebFormElement updated_form_element = form_util::FindFormByRendererId(
       unsafe_render_frame()->GetWebFrame()->GetDocument(),
       form.unique_renderer_id);
-  FormData updated_form_data;
-  if (updated_form_element.IsNull()) {
-    CollectFormlessElements(&updated_form_data);
-  } else {
-    form_util::ExtractFormData(updated_form_element, field_data_manager(),
-                               &updated_form_data);
-  }
+  std::optional<FormData> updated_form_data =
+      updated_form_element.IsNull()
+          ? CollectFormlessElements()
+          : form_util::ExtractFormData(updated_form_element,
+                                       field_data_manager());
   // Deep-compare forms, but don't take into account the fields' values.
-  if (!FormData::DeepEqual(form, updated_form_data)) {
-    if (auto* autofill_driver = unsafe_autofill_driver()) {
-      autofill_driver->FormsSeen({updated_form_data}, {});
-    }
+  if (auto* autofill_driver = unsafe_autofill_driver();
+      autofill_driver && updated_form_data &&
+      !FormData::DeepEqual(form, *updated_form_data)) {
+    autofill_driver->FormsSeen({*updated_form_data}, {});
   }
 }
 
@@ -925,11 +923,10 @@
   password_generation_agent_->PreviewGenerationSuggestion(password);
 }
 
-bool AutofillAgent::CollectFormlessElements(
-    FormData* output,
+std::optional<FormData> AutofillAgent::CollectFormlessElements(
     DenseSet<ExtractOption> extract_options) const {
   if (!unsafe_render_frame()) {
-    return false;
+    return std::nullopt;
   }
   WebDocument document = unsafe_render_frame()->GetWebFrame()->GetDocument();
 
@@ -943,10 +940,15 @@
   std::vector<WebElement> iframe_elements =
       form_util::GetUnownedIframeElements(document);
 
-  return form_util::UnownedFormElementsToFormData(
+  FormData formless_elements_form;
+  // TODO(crbug.com/1007974): Make this function return std::optional too.
+  bool extraction_successful = form_util::UnownedFormElementsToFormData(
       control_elements, iframe_elements, nullptr, document,
-      field_data_manager(), extract_options, output,
+      field_data_manager(), extract_options, &formless_elements_form,
       /*field=*/nullptr);
+  return extraction_successful
+             ? std::optional(std::move(formless_elements_form))
+             : std::nullopt;
 }
 
 void AutofillAgent::ShowSuggestions(
@@ -1137,8 +1139,8 @@
       MaybeExtractDatalist({ExtractOption::kBounds, ExtractOption::kOptions,
                             ExtractOption::kOptionText, ExtractOption::kValue});
   if (!form_id) {
-    FormData form;
-    if (CollectFormlessElements(&form, extract_options)) {
+    if (std::optional<FormData> form =
+            CollectFormlessElements(extract_options)) {
       std::move(callback).Run(std::move(form));
       return;
     }
@@ -1222,7 +1224,9 @@
   }
 }
 
-void AutofillAgent::DidAddOrRemoveFormRelatedElementsDynamically() {
+void AutofillAgent::DidChangeFormRelatedElementDynamically(
+    const WebElement& element,
+    blink::WebFormRelatedChangeType form_related_change) {
   // If the control flow is here than the document was at least loaded. The
   // whole page doesn't have to be loaded.
   ExtractForms(
@@ -1490,10 +1494,8 @@
       }
       formless_elements_user_edited_.insert(
           form_util::GetFieldRendererId(element));
-      provisionally_saved_form_ = absl::make_optional<FormData>();
-      if (!CollectFormlessElements(&provisionally_saved_form_.value())) {
-        provisionally_saved_form_.reset();
-      } else {
+      provisionally_saved_form_ = CollectFormlessElements();
+      if (provisionally_saved_form_) {
         last_interacted_form_.Reset();
       }
     }
@@ -1592,33 +1594,53 @@
   form_tracker_.TrackAutofilledElement(element);
 }
 
-absl::optional<FormData> AutofillAgent::GetSubmittedForm() const {
+std::optional<FormData> AutofillAgent::GetSubmittedForm() const {
+  // Checks whether all elements represented by `element_ids` in `document` have
+  // disappeared (removed/hidden).
+  // TODO(crbug.com/1427131): Remove document parameter after launching
+  // AutofillUseDomNodeIdForRendererId.
+  auto all_control_elements_disappeared =
+      [](const blink::WebDocument& document,
+         const std::set<FieldRendererId>& element_ids) {
+        std::vector<FieldRendererId> elements(element_ids.begin(),
+                                              element_ids.end());
+        return base::ranges::none_of(
+            form_util::FindFormControlsByRendererId(document, elements),
+            form_util::IsWebElementFocusableForAutofill);
+      };
+
+  // We check if we have a cached `last_interacted_form_`. In that case we
+  // return either the extracted form or `provisionally_saved_form_` as a
+  // fallback if extraction fails. The remaining logic deals with formless
+  // fields.
   if (!last_interacted_form_.IsNull()) {
-    FormData form;
-    if (form_util::ExtractFormData(last_interacted_form_, field_data_manager(),
-                                   &form)) {
-      return absl::make_optional(form);
-    } else if (provisionally_saved_form_.has_value()) {
-      return absl::make_optional(provisionally_saved_form_.value());
+    if (std::optional<FormData> form = form_util::ExtractFormData(
+            last_interacted_form_, field_data_manager())) {
+      return form;
     }
-  } else if (auto* render_frame = unsafe_render_frame();
-             formless_elements_were_autofilled_ ||
-             (!formless_elements_user_edited_.empty() && render_frame &&
-              !form_util::IsSomeControlElementVisible(
-                  render_frame->GetWebFrame()->GetDocument(),
-                  formless_elements_user_edited_))) {
-    // we check if all the elements the user has interacted with are gone,
-    // to decide if submission has occurred, and use the
-    // provisionally_saved_form_ saved in OnProvisionallySaveForm() if fail to
-    // construct form.
-    FormData form;
-    if (CollectFormlessElements(&form)) {
-      return absl::make_optional(form);
-    } else if (provisionally_saved_form_.has_value()) {
-      return absl::make_optional(provisionally_saved_form_.value());
-    }
+    return provisionally_saved_form_;
   }
-  return absl::nullopt;
+  // Criteria to decide on the submission of the form of formless elements,
+  // assuming submission has been inferred:
+  // - Formless elements were autofilled.
+  // - The user has edited formless elements and all those elements disappeared
+  //   (removed/hidden).
+  // TODO(crbug.com/1427131): Remove render_frame condition after launching
+  // AutofillUseDomNodeIdForRendererId.
+  if (auto* render_frame = unsafe_render_frame();
+      formless_elements_were_autofilled_ ||
+      (render_frame && !formless_elements_user_edited_.empty() &&
+       all_control_elements_disappeared(
+           render_frame->GetWebFrame()->GetDocument(),
+           formless_elements_user_edited_))) {
+    // Return the extracted form or `provisionally_saved_form_` as a fallback if
+    // extraction fails.
+    if (std::optional<FormData> form = CollectFormlessElements()) {
+      return form;
+    }
+    return provisionally_saved_form_;
+  }
+  return std::nullopt;
 }
 
 void AutofillAgent::SendPotentiallySubmittedFormToBrowser() {
@@ -1640,11 +1662,8 @@
   DCHECK(MaybeWasOwnedByFrame(form, unsafe_render_frame()));
 
   last_interacted_form_ = form;
-  provisionally_saved_form_ = absl::make_optional<FormData>();
-  if (!form_util::ExtractFormData(last_interacted_form_, field_data_manager(),
-                                  &provisionally_saved_form_.value())) {
-    provisionally_saved_form_.reset();
-  }
+  provisionally_saved_form_ =
+      form_util::ExtractFormData(last_interacted_form_, field_data_manager());
 }
 
 void AutofillAgent::OnFormNoLongerSubmittable() {
diff --git a/components/autofill/content/renderer/autofill_agent.h b/components/autofill/content/renderer/autofill_agent.h
index 7ce4712..3c29c321 100644
--- a/components/autofill/content/renderer/autofill_agent.h
+++ b/components/autofill/content/renderer/autofill_agent.h
@@ -28,6 +28,7 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h"
 #include "third_party/blink/public/web/web_autofill_client.h"
+#include "third_party/blink/public/web/web_element.h"
 #include "third_party/blink/public/web/web_form_control_element.h"
 #include "third_party/blink/public/web/web_form_element.h"
 #include "third_party/blink/public/web/web_input_element.h"
@@ -185,7 +186,13 @@
 
  protected:
   // blink::WebAutofillClient:
-  void DidAddOrRemoveFormRelatedElementsDynamically() override;
+
+  // Signals from blink that a form related element changed dynamically,
+  // passing the changed element as well as the type of the change.
+  // TODO(crbug.com/1483242): Fire the signal for elements that become hidden.
+  void DidChangeFormRelatedElementDynamically(
+      const blink::WebElement&,
+      blink::WebFormRelatedChangeType) override;
 
  private:
   class DeferringAutofillDriver;
@@ -287,10 +294,9 @@
       const blink::WebElement& node);
 
   // Helper method which collects unowned elements (i.e., those not inside a
-  // form tag) and writes them into |output|. Returns true if the process is
-  // successful, and all conditions for firing events are true.
-  bool CollectFormlessElements(
-      FormData* output,
+  // form tag) and writes them into the returned form. Returns std::nullopt if
+  // the process is unsuccessful.
+  std::optional<FormData> CollectFormlessElements(
       DenseSet<form_util::ExtractOption> extract_options = {
           form_util::ExtractOption::kValue,
           form_util::ExtractOption::kOptions}) const;
diff --git a/components/autofill/content/renderer/autofill_agent_test_api.h b/components/autofill/content/renderer/autofill_agent_test_api.h
index e2cef5a..96d574a 100644
--- a/components/autofill/content/renderer/autofill_agent_test_api.h
+++ b/components/autofill/content/renderer/autofill_agent_test_api.h
@@ -14,10 +14,6 @@
  public:
   explicit AutofillAgentTestApi(AutofillAgent* agent) : agent_(*agent) {}
 
-  void DidAddOrRemoveFormRelatedElementsDynamically() {
-    agent_->DidAddOrRemoveFormRelatedElementsDynamically();
-  }
-
  private:
   const raw_ref<AutofillAgent> agent_;
 };
diff --git a/components/autofill/content/renderer/form_autofill_util.cc b/components/autofill/content/renderer/form_autofill_util.cc
index b2796c5..f8a87bc 100644
--- a/components/autofill/content/renderer/form_autofill_util.cc
+++ b/components/autofill/content/renderer/form_autofill_util.cc
@@ -7,6 +7,7 @@
 #include <limits>
 #include <map>
 #include <memory>
+#include <optional>
 #include <set>
 #include <string>
 #include <string_view>
@@ -1711,38 +1712,19 @@
   }
 }
 
-bool ExtractFormData(const WebFormElement& form_element,
-                     const FieldDataManager& field_data_manager,
-                     FormData* data) {
-  return WebFormElementToFormData(
+std::optional<FormData> ExtractFormData(
+    const WebFormElement& form_element,
+    const FieldDataManager& field_data_manager) {
+  FormData extracted_form;
+  // TODO(crbug.com/1007974): Make this function return std::optional too.
+  bool extraction_successful = WebFormElementToFormData(
       form_element, WebFormControlElement(), field_data_manager,
       {ExtractOption::kValue, ExtractOption::kOptionText,
        ExtractOption::kOptions},
-      data,
+      &extracted_form,
       /*field=*/nullptr);
-}
-
-bool IsSomeControlElementVisible(
-    const blink::WebDocument& document,
-    const std::set<FieldRendererId>& control_elements) {
-  // Returns true iff at least one element from |fields| is visible and there
-  // exists an element in |control_elements| with the same field renderer id.
-  // The average case time complexity is O(N log M), where N is the number of
-  // elements in |fields| and M is the number of elements in
-  // |control_elements|.
-  auto ContainsVisibleField =
-      [&](const WebVector<WebFormControlElement>& fields) {
-        return base::ranges::any_of(
-            fields, [&](const WebFormControlElement& field) {
-              return IsWebElementFocusableForAutofill(field) &&
-                     base::Contains(control_elements,
-                                    GetFieldRendererId(field));
-            });
-      };
-  return !document.IsNull() &&
-         (base::ranges::any_of(document.Forms(), ContainsVisibleField,
-                               &WebFormElement::GetFormControlElements) ||
-          ContainsVisibleField(document.UnassociatedFormControls()));
+  return extraction_successful ? std::optional(std::move(extracted_form))
+                               : std::nullopt;
 }
 
 GURL GetCanonicalActionForForm(const WebFormElement& form) {
diff --git a/components/autofill/content/renderer/form_autofill_util.h b/components/autofill/content/renderer/form_autofill_util.h
index c811c84..85631a8 100644
--- a/components/autofill/content/renderer/form_autofill_util.h
+++ b/components/autofill/content/renderer/form_autofill_util.h
@@ -128,17 +128,11 @@
 void GetDataListSuggestions(const blink::WebInputElement& element,
                             std::vector<SelectOption>* options);
 
-// Extract FormData from the form element and return whether the
-// operation was successful.
-bool ExtractFormData(const blink::WebFormElement& form_element,
-                     const FieldDataManager& field_data_manager,
-                     FormData* data);
-
-// Returns true if at least one element from |control_elements| is visible in
-// |document|.
-bool IsSomeControlElementVisible(
-    const blink::WebDocument& document,
-    const std::set<FieldRendererId>& control_elements);
+// Extract FormData from the form element and return it or std::nullopt
+// depending on whether the operation was successful.
+std::optional<FormData> ExtractFormData(
+    const blink::WebFormElement& form_element,
+    const FieldDataManager& field_data_manager);
 
 // Helper functions to assist in getting the canonical form of the action and
 // origin. The action will properly take into account <BASE>, and both will
diff --git a/components/compose/core/browser/compose_metrics.cc b/components/compose/core/browser/compose_metrics.cc
index c04c48bc..4ad530c 100644
--- a/components/compose/core/browser/compose_metrics.cc
+++ b/components/compose/core/browser/compose_metrics.cc
@@ -10,11 +10,12 @@
 
 namespace compose {
 
+const char kComposeDialogOpenLatency[] = "Compose.Dialog.OpenLatency";
+const char kComposeDialogSelectionLength[] = "Compose.Dialog.SelectionLength";
 const char kComposeResponseDurationOk[] = "Compose.Response.Duration.Ok";
 const char kComposeResponseDurationError[] = "Compose.Response.Duration.Error";
 const char kComposeResponseStatus[] = "Compose.Response.Status";
 const char kComposeShowStatus[] = "Compose.ContextMenu.ShowStatus";
-const char kComposeDialogOpenLatency[] = "Compose.Dialog.OpenLatency";
 
 void LogComposeContextMenuCtr(ComposeContextMenuCtrEvent event) {
   UMA_HISTOGRAM_ENUMERATION("Compose.ContextMenu.CTR", event);
@@ -37,4 +38,12 @@
 void LogComposeDialogOpenLatency(base::TimeDelta duration) {
   base::UmaHistogramMediumTimes(kComposeDialogOpenLatency, duration);
 }
+
+void LogComposeDialogSelectionLength(int length) {
+  // The autofil::kMaxSelectedTextLength is in UTF16 bytes so divide by 2 for
+  // the maximum number of unicode code points.
+  const int max_selection_size = 51200 / 2;
+  base::UmaHistogramCustomCounts(kComposeDialogSelectionLength, length, 1,
+                                 max_selection_size + 1, 100);
+}
 }  // namespace compose
diff --git a/components/compose/core/browser/compose_metrics.h b/components/compose/core/browser/compose_metrics.h
index ee3b5c3..f0d6098 100644
--- a/components/compose/core/browser/compose_metrics.h
+++ b/components/compose/core/browser/compose_metrics.h
@@ -12,11 +12,12 @@
 namespace compose {
 
 // Compose histogram names.
+extern const char kComposeDialogOpenLatency[];
+extern const char kComposeDialogSelectionLength[];
 extern const char kComposeResponseDurationOk[];
 extern const char kComposeResponseDurationError[];
 extern const char kComposeResponseStatus[];
 extern const char kComposeShowStatus[];
-extern const char kComposeDialogOpenLatency[];
 
 // Enum for calculating the CTR of the Compose context menu item.
 // These values are persisted to logs. Entries should not be renumbered and
@@ -50,7 +51,8 @@
   kSignedOut = 4,
   kUnsupportedLanguage = 5,
   kFormFieldInCrossOriginFrame = 6,
-  kMaxValue = kFormFieldInCrossOriginFrame,
+  kPerUrlChecksFailed = 7,
+  kMaxValue = kPerUrlChecksFailed,
 };
 
 void LogComposeContextMenuCtr(ComposeContextMenuCtrEvent event);
@@ -65,6 +67,9 @@
 
 // Log the time taken for the dialog to be fully shown and interactable.
 void LogComposeDialogOpenLatency(base::TimeDelta duration);
+
+// Log the character length of the selection when the dialog is opened.
+void LogComposeDialogSelectionLength(int length);
 }  // namespace compose
 
 #endif  // COMPONENTS_COMPOSE_CORE_BROWSER_COMPOSE_METRICS_H_
diff --git a/components/compose/core/browser/config.h b/components/compose/core/browser/config.h
index 783f97b..08b237c 100644
--- a/components/compose/core/browser/config.h
+++ b/components/compose/core/browser/config.h
@@ -33,4 +33,4 @@
 
 }  // namespace compose
 
-#endif  // COMPONENTS_FEED_CORE_V2_CONFIG_H_
+#endif  // COMPONENTS_COMPOSE_CORE_BROWSER_CONFIG_H_
diff --git a/components/feature_engagement/public/feature_configurations.cc b/components/feature_engagement/public/feature_configurations.cc
index 352150e..fc03bf7 100644
--- a/components/feature_engagement/public/feature_configurations.cc
+++ b/components/feature_engagement/public/feature_configurations.cc
@@ -1414,7 +1414,7 @@
     config->availability = Comparator(LESS_THAN_OR_EQUAL, 14);
     config->session_rate = Comparator(ANY, 0);
     config->trigger =
-        EventConfig("restore_tabs_promo_trigger", Comparator(EQUAL, 0), 7, 7);
+        EventConfig("restore_tabs_promo_trigger", Comparator(EQUAL, 0), 7, 14);
     config->used =
         EventConfig("restore_tabs_promo_used", Comparator(EQUAL, 0), 14, 14);
     config->event_configs.insert(EventConfig(
diff --git a/components/history/core/browser/visit_database.cc b/components/history/core/browser/visit_database.cc
index 8883a300..ec14c20 100644
--- a/components/history/core/browser/visit_database.cc
+++ b/components/history/core/browser/visit_database.cc
@@ -1205,18 +1205,9 @@
 }
 
 bool VisitDatabase::CanMigrateFlocAllowed() {
-  if (!GetDB().DoesTableExist("visits")) {
-    NOTREACHED() << " Visits table should exist before migration";
-    return false;
-  }
-
-  if (!GetDB().DoesColumnExist("visits", "publicly_routable")) {
-    NOTREACHED() << " publicly_routable column should exist in the visits "
-                    "table before migration";
-    return false;
-  }
-
-  return true;
+  // Migration expects a "visits" table with a "publicly_routable" column.
+  return GetDB().DoesTableExist("visits") &&
+         GetDB().DoesColumnExist("visits", "publicly_routable");
 }
 
 bool VisitDatabase::
diff --git a/components/media_router/common/BUILD.gn b/components/media_router/common/BUILD.gn
index 2241640..4a33857f 100644
--- a/components/media_router/common/BUILD.gn
+++ b/components/media_router/common/BUILD.gn
@@ -35,6 +35,7 @@
   deps = [
     "mojom:media_route_provider_id",
     "mojom:route_request_result_code",
+    "//components/media_router/common/providers/cast/channel:capability",
     "//third_party/blink/public:blink_headers",
   ]
 
diff --git a/components/media_router/common/discovery/media_sink_internal.h b/components/media_router/common/discovery/media_sink_internal.h
index 8ae033e4..c4e212f 100644
--- a/components/media_router/common/discovery/media_sink_internal.h
+++ b/components/media_router/common/discovery/media_sink_internal.h
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "components/media_router/common/media_sink.h"
+#include "components/media_router/common/providers/cast/channel/cast_device_capability.h"
 #include "net/base/ip_address.h"
 #include "net/base/ip_endpoint.h"
 #include "url/gurl.h"
@@ -52,9 +53,9 @@
   // Model name of the sink.
   std::string model_name;
 
-  // A bit vector representing the capabilities of the sink. The values are
-  // defined in media_router.mojom.
-  uint8_t capabilities = 0;
+  // An enum set representing the capabilities of the sink. The enum values are
+  // defined in cast_device_capability.h.
+  cast_channel::CastDeviceCapabilitySet capabilities;
 
   // ID of Cast channel opened for the sink. The caller must set this value to a
   // valid cast_channel_id. The cast_channel_id may change over time as the
diff --git a/components/media_router/common/discovery/media_sink_internal_unittest.cc b/components/media_router/common/discovery/media_sink_internal_unittest.cc
index ccc3554a..2037477e 100644
--- a/components/media_router/common/discovery/media_sink_internal_unittest.cc
+++ b/components/media_router/common/discovery/media_sink_internal_unittest.cc
@@ -36,7 +36,8 @@
   EXPECT_TRUE(ip.AssignFromIPLiteral(ip_address));
   cast_extra_data.ip_endpoint = net::IPEndPoint(ip, 1234);
   cast_extra_data.model_name = model_name;
-  cast_extra_data.capabilities = 2;
+  cast_extra_data.capabilities = {
+      cast_channel::CastDeviceCapability::kVideoOut};
   cast_extra_data.cast_channel_id = 3;
   return cast_extra_data;
 }
diff --git a/components/media_router/common/mojom/BUILD.gn b/components/media_router/common/mojom/BUILD.gn
index c4f0b709..f84317fad 100644
--- a/components/media_router/common/mojom/BUILD.gn
+++ b/components/media_router/common/mojom/BUILD.gn
@@ -90,6 +90,7 @@
 
       traits_public_deps = [
         "//components/media_router/common",
+        "//components/media_router/common/providers/cast/channel:capability",
         "//net",
       ]
       traits_deps = [
diff --git a/components/media_router/common/mojom/media_router.mojom b/components/media_router/common/mojom/media_router.mojom
index 94127645..15a192e2 100644
--- a/components/media_router/common/mojom/media_router.mojom
+++ b/components/media_router/common/mojom/media_router.mojom
@@ -62,16 +62,9 @@
   // Model name of the sink, if it represents a physical device.
   string model_name;
 
-  // A bit vector representing capabilities of the sink. Meaning of capacity
-  // value for each bit:
-  // NONE: 0,
-  // VIDEO_OUT: 1 << 0,
-  // VIDEO_IN: 1 << 1,
-  // AUDIO_OUT: 1 << 2,
-  // AUDIO_IN: 1 << 3,
-  // DEV_MODE: 1 << 4,
-  // MULTIZONE_GROUP: 1 << 5
-  uint8 capabilities;
+  // Bit vector representing capabilities of the sink.  Enum values are defined
+  // by CastDeviceCapability in cast_device_capability.h.
+  uint64 capabilities;
 
   // ID of Cast channel opened by Media Router. The ID is defined by the
   // chrome.cast.channel API.
diff --git a/components/media_router/common/mojom/media_router_mojom_traits.cc b/components/media_router/common/mojom/media_router_mojom_traits.cc
index 86a62dd6..1620da6 100644
--- a/components/media_router/common/mojom/media_router_mojom_traits.cc
+++ b/components/media_router/common/mojom/media_router_mojom_traits.cc
@@ -6,6 +6,7 @@
 
 #include "components/media_router/common/media_source.h"
 #include "components/media_router/common/mojom/media_router.mojom.h"
+#include "components/media_router/common/providers/cast/channel/cast_device_capability.h"
 #include "services/network/public/cpp/ip_address_mojom_traits.h"
 #include "services/network/public/cpp/ip_endpoint_mojom_traits.h"
 #include "url/mojom/url_gurl_mojom_traits.h"
@@ -141,7 +142,8 @@
   if (!data.ReadModelName(&out->model_name))
     return false;
 
-  out->capabilities = data.capabilities();
+  out->capabilities = cast_channel::CastDeviceCapabilitySet::FromEnumBitmask(
+      data.capabilities());
   out->cast_channel_id = data.cast_channel_id();
 
   return true;
diff --git a/components/media_router/common/mojom/media_router_mojom_traits.h b/components/media_router/common/mojom/media_router_mojom_traits.h
index 113cf83..026cca0 100644
--- a/components/media_router/common/mojom/media_router_mojom_traits.h
+++ b/components/media_router/common/mojom/media_router_mojom_traits.h
@@ -109,9 +109,9 @@
     return extra_data.ip_endpoint;
   }
 
-  static uint8_t capabilities(
+  static uint64_t capabilities(
       const media_router::CastSinkExtraData& extra_data) {
-    return extra_data.capabilities;
+    return extra_data.capabilities.ToEnumBitmask();
   }
 
   static int32_t cast_channel_id(
diff --git a/components/media_router/common/mojom/media_router_mojom_traits_unittest.cc b/components/media_router/common/mojom/media_router_mojom_traits_unittest.cc
index cfe5796e..94b9660c 100644
--- a/components/media_router/common/mojom/media_router_mojom_traits_unittest.cc
+++ b/components/media_router/common/mojom/media_router_mojom_traits_unittest.cc
@@ -80,7 +80,7 @@
   CastSinkExtraData extra_data;
   extra_data.ip_endpoint = net::IPEndPoint(net::IPAddress(192, 168, 1, 2), 0);
   extra_data.model_name = model_name;
-  extra_data.capabilities = 2;
+  extra_data.capabilities = {cast_channel::CastDeviceCapability::kVideoOut};
   extra_data.cast_channel_id = 3;
 
   MediaSinkInternal cast_sink(sink, extra_data);
diff --git a/components/media_router/common/providers/cast/cast_media_source.cc b/components/media_router/common/providers/cast/cast_media_source.cc
index f7975b3..902f17d 100644
--- a/components/media_router/common/providers/cast/cast_media_source.cc
+++ b/components/media_router/common/providers/cast/cast_media_source.cc
@@ -16,6 +16,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/media_router/common/media_source.h"
+#include "components/media_router/common/providers/cast/channel/cast_device_capability.h"
 #include "components/media_router/common/providers/cast/channel/cast_message_util.h"
 #include "components/media_router/common/providers/cast/channel/enum_table.h"
 #include "net/base/url_util.h"
@@ -60,15 +61,14 @@
 EnumTable<CastDeviceCapability>::GetInstance() {
   static const EnumTable<CastDeviceCapability> kInstance(
       {
-          {CastDeviceCapability::MULTIZONE_GROUP, "multizone_group"},
-          {CastDeviceCapability::DEV_MODE, "dev_mode"},
-          {CastDeviceCapability::AUDIO_IN, "audio_in"},
-          {CastDeviceCapability::AUDIO_OUT, "audio_out"},
-          {CastDeviceCapability::VIDEO_IN, "video_in"},
-          {CastDeviceCapability::VIDEO_OUT, "video_out"},
-          // NONE deliberately omitted
+          {CastDeviceCapability::kVideoOut, "video_out"},
+          {CastDeviceCapability::kVideoIn, "video_in"},
+          {CastDeviceCapability::kAudioOut, "audio_out"},
+          {CastDeviceCapability::kAudioIn, "audio_in"},
+          {CastDeviceCapability::kDevMode, "dev_mode"},
+          {CastDeviceCapability::kMultizoneGroup, "multizone_group"},
       },
-      NonConsecutiveEnumTable);
+      CastDeviceCapability::kMultizoneGroup);
   return kInstance;
 }
 
@@ -156,17 +156,17 @@
   return result;
 }
 
-// Converts a string containing a comma-separated list of capabilities into a
-// bitwise OR of CastDeviceCapability values.
-BitwiseOr<CastDeviceCapability> CastDeviceCapabilitiesFromString(
+// Converts a string containing a comma-separated list of capabilities into an
+// EnumSet of CastDeviceCapability values.
+CastDeviceCapabilitySet CastDeviceCapabilitiesFromString(
     const base::StringPiece& s) {
-  BitwiseOr<CastDeviceCapability> result{};
+  CastDeviceCapabilitySet result;
   for (const auto& capability_str : base::SplitStringPiece(
            s, ",", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY)) {
     const auto capability =
         cast_util::StringToEnum<CastDeviceCapability>(capability_str);
     if (capability) {
-      result.Add(*capability);
+      result.Put(*capability);
     } else {
       DLOG(ERROR) << "Unkown capability name: " << capability_str;
     }
@@ -202,9 +202,9 @@
   // TODO(https://crbug.com/849335): Add back audio-only devices for desktop
   // mirroring when proper support is implemented.
   CastAppInfo info = CastAppInfo::ForCastStreaming();
-  if (info.required_capabilities.Has(CastDeviceCapability::AUDIO_OUT) &&
+  if (info.required_capabilities.Has(CastDeviceCapability::kAudioOut) &&
       !source.IsDesktopSourceWithAudio()) {
-    info.required_capabilities.Remove(CastDeviceCapability::AUDIO_OUT);
+    info.required_capabilities.Remove(CastDeviceCapability::kAudioOut);
   }
   return std::make_unique<CastMediaSource>(source.id(),
                                            std::vector<CastAppInfo>({info}));
@@ -378,9 +378,8 @@
       base::CompareCase::SENSITIVE);
 }
 
-CastAppInfo::CastAppInfo(
-    const std::string& app_id,
-    BitwiseOr<cast_channel::CastDeviceCapability> required_capabilities)
+CastAppInfo::CastAppInfo(const std::string& app_id,
+                         CastDeviceCapabilitySet required_capabilities)
     : app_id(app_id), required_capabilities(required_capabilities) {}
 
 CastAppInfo::~CastAppInfo() = default;
@@ -391,13 +390,13 @@
 CastAppInfo CastAppInfo::ForCastStreaming() {
   return CastAppInfo(
       openscreen::cast::GetCastStreamingAudioVideoAppId(),
-      {CastDeviceCapability::VIDEO_OUT, CastDeviceCapability::AUDIO_OUT});
+      {CastDeviceCapability::kVideoOut, CastDeviceCapability::kAudioOut});
 }
 
 // static
 CastAppInfo CastAppInfo::ForCastStreamingAudio() {
   return CastAppInfo(openscreen::cast::GetCastStreamingAudioOnlyAppId(),
-                     {CastDeviceCapability::AUDIO_OUT});
+                     {CastDeviceCapability::kAudioOut});
 }
 
 // static
@@ -490,7 +489,7 @@
   }
   for (const auto& info : app_infos_) {
     if (openscreen::cast::IsCastStreamingAppId(info.app_id) &&
-        info.required_capabilities.Has(CastDeviceCapability::AUDIO_OUT)) {
+        info.required_capabilities.Has(CastDeviceCapability::kAudioOut)) {
       return true;
     }
   }
diff --git a/components/media_router/common/providers/cast/cast_media_source.h b/components/media_router/common/providers/cast/cast_media_source.h
index 50a6622..b1a86ad8 100644
--- a/components/media_router/common/providers/cast/cast_media_source.h
+++ b/components/media_router/common/providers/cast/cast_media_source.h
@@ -14,10 +14,12 @@
 #include "base/check.h"
 #include "base/time/time.h"
 #include "components/media_router/common/media_source.h"
+#include "components/media_router/common/providers/cast/channel/cast_device_capability.h"
 #include "components/media_router/common/providers/cast/channel/cast_message_util.h"
 #include "components/media_router/common/providers/cast/channel/cast_socket.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
+using cast_channel::CastDeviceCapabilitySet;
 using cast_channel::ReceiverAppType;
 
 namespace media_router {
@@ -35,47 +37,10 @@
 
 static constexpr base::TimeDelta kDefaultLaunchTimeout = base::Seconds(60);
 
-// Class for storing a bitwise OR of enum values.
-//
-// TODO(crbug.com/1291715): Make values of cast_channel::CastDeviceCapability
-// consecutive and store sets of values using a class like v8::base::EnumSet
-// instead of this monstrosity.
-template <typename E, typename T = std::underlying_type_t<E>>
-class BitwiseOr {
- public:
-  constexpr BitwiseOr() : bits_(0) {}
-  constexpr BitwiseOr(std::initializer_list<E> values) : bits_(0) {
-    for (E e : values)
-      Add(e);
-  }
-  static constexpr BitwiseOr FromBits(T bits) { return BitwiseOr(bits); }
-  bool empty() const { return bits_ == 0; }
-  T bits() const { return bits_; }
-  void Add(E value) { bits_ |= Mask(value); }
-  void Remove(E value) { bits_ &= ~Mask(value); }
-  bool Has(E value) const { return (bits_ & Mask(value)) != 0; }
-  bool HasAll(const BitwiseOr& other) const {
-    return (bits_ & other.bits_) == other.bits_;
-  }
-  bool operator==(const BitwiseOr& other) const { return bits_ == other.bits_; }
-  bool operator!=(const BitwiseOr& other) const { return !(*this == other); }
-
- private:
-  explicit constexpr BitwiseOr(T bits) : bits_(bits) {}
-
-  static T Mask(E value) {
-    const T result = static_cast<T>(value);
-    DCHECK(static_cast<E>(result) == value);
-    return result;
-  }
-  T bits_;
-};
-
 // Represents a Cast app and its capabilitity requirements.
 struct CastAppInfo {
-  explicit CastAppInfo(
-      const std::string& app_id,
-      BitwiseOr<cast_channel::CastDeviceCapability> required_capabilities);
+  explicit CastAppInfo(const std::string& app_id,
+                       CastDeviceCapabilitySet required_capabilities);
   ~CastAppInfo();
 
   CastAppInfo(const CastAppInfo& other);
@@ -86,7 +51,7 @@
   std::string app_id;
 
   // A bitset of capabilities required by the app.
-  BitwiseOr<cast_channel::CastDeviceCapability> required_capabilities;
+  CastDeviceCapabilitySet required_capabilities;
 };
 
 // Auto-join policy determines when the SDK will automatically connect a sender
diff --git a/components/media_router/common/providers/cast/cast_media_source_unittest.cc b/components/media_router/common/providers/cast/cast_media_source_unittest.cc
index 12be647a..06f302e 100644
--- a/components/media_router/common/providers/cast/cast_media_source_unittest.cc
+++ b/components/media_router/common/providers/cast/cast_media_source_unittest.cc
@@ -10,6 +10,7 @@
 #include "third_party/openscreen/src/cast/common/public/cast_streaming_app_ids.h"
 
 using cast_channel::CastDeviceCapability;
+using cast_channel::CastDeviceCapabilitySet;
 using cast_channel::ReceiverAppType;
 
 namespace media_router {
@@ -34,7 +35,7 @@
   ASSERT_EQ(1u, source->app_infos().size());
   const CastAppInfo& app_info = source->app_infos()[0];
   EXPECT_EQ("ABCDEFAB", app_info.app_id);
-  EXPECT_TRUE(app_info.required_capabilities.empty());
+  EXPECT_TRUE(app_info.required_capabilities.Empty());
   EXPECT_EQ(absl::nullopt, source->target_playout_delay());
   EXPECT_EQ(true, source->site_requested_audio_capture());
   EXPECT_EQ(cast_channel::VirtualConnectionType::kStrong,
@@ -61,8 +62,8 @@
   ASSERT_EQ(1u, source->app_infos().size());
   const CastAppInfo& app_info = source->app_infos()[0];
   EXPECT_EQ("ABCDEFAB", app_info.app_id);
-  EXPECT_EQ((BitwiseOr<CastDeviceCapability>{CastDeviceCapability::VIDEO_OUT,
-                                             CastDeviceCapability::AUDIO_OUT}),
+  EXPECT_EQ((CastDeviceCapabilitySet{CastDeviceCapability::kVideoOut,
+                                     CastDeviceCapability::kAudioOut}),
             app_info.required_capabilities);
   EXPECT_EQ("12345", source->client_id());
   EXPECT_EQ(base::Milliseconds(30000), source->launch_timeout());
@@ -93,8 +94,8 @@
   ASSERT_EQ(2u, source->app_infos().size());
   const CastAppInfo& app_info = source->app_infos()[0];
   EXPECT_EQ("ABCDEFAB", app_info.app_id);
-  EXPECT_EQ((BitwiseOr<CastDeviceCapability>{CastDeviceCapability::VIDEO_OUT,
-                                             CastDeviceCapability::AUDIO_OUT}),
+  EXPECT_EQ((CastDeviceCapabilitySet{CastDeviceCapability::kVideoOut,
+                                     CastDeviceCapability::kAudioOut}),
             app_info.required_capabilities);
   EXPECT_EQ("otherAppId", source->app_infos()[1].app_id);
   EXPECT_EQ("12345", source->client_id());
diff --git a/components/media_router/common/providers/cast/channel/BUILD.gn b/components/media_router/common/providers/cast/channel/BUILD.gn
index ed5f6c7..b50e4e4 100644
--- a/components/media_router/common/providers/cast/channel/BUILD.gn
+++ b/components/media_router/common/providers/cast/channel/BUILD.gn
@@ -7,6 +7,11 @@
 import("//third_party/openscreen/src/build/config/data_headers_template.gni")
 import("//third_party/protobuf/proto_library.gni")
 
+source_set("capability") {
+  public = [ "cast_device_capability.h" ]
+  deps = [ "//base" ]
+}
+
 static_library("channel") {
   sources = [
     "cast_auth_util.cc",
@@ -39,6 +44,7 @@
     "mojo_data_pump.h",
   ]
   deps = [
+    ":capability",
     "//base",
     "//build:chromeos_buildflags",
     "//components/keyed_service/content",
diff --git a/components/media_router/common/providers/cast/channel/cast_device_capability.h b/components/media_router/common/providers/cast/channel/cast_device_capability.h
new file mode 100644
index 0000000..d852dc8
--- /dev/null
+++ b/components/media_router/common/providers/cast/channel/cast_device_capability.h
@@ -0,0 +1,31 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_MEDIA_ROUTER_COMMON_PROVIDERS_CAST_CHANNEL_CAST_DEVICE_CAPABILITY_H_
+#define COMPONENTS_MEDIA_ROUTER_COMMON_PROVIDERS_CAST_CHANNEL_CAST_DEVICE_CAPABILITY_H_
+
+#include <stdint.h>
+
+#include "base/containers/enum_set.h"
+
+namespace cast_channel {
+
+// Cast device capabilities.
+enum class CastDeviceCapability : uint8_t {
+  kVideoOut,
+  kVideoIn,
+  kAudioOut,
+  kAudioIn,
+  kDevMode,
+  kMultizoneGroup
+};
+
+using CastDeviceCapabilitySet =
+    base::EnumSet<CastDeviceCapability,
+                  CastDeviceCapability::kVideoOut,
+                  CastDeviceCapability::kMultizoneGroup>;
+
+}  // namespace cast_channel
+
+#endif  // COMPONENTS_MEDIA_ROUTER_COMMON_PROVIDERS_CAST_CHANNEL_CAST_DEVICE_CAPABILITY_H_
diff --git a/components/media_router/common/providers/cast/channel/cast_socket.cc b/components/media_router/common/providers/cast/channel/cast_socket.cc
index 4cf757e..55b4aee 100644
--- a/components/media_router/common/providers/cast/channel/cast_socket.cc
+++ b/components/media_router/common/providers/cast/channel/cast_socket.cc
@@ -164,8 +164,8 @@
 
 bool CastSocketImpl::VerifyChannelPolicy(const AuthResult& result) {
   audio_only_ = (result.channel_policies & AuthResult::POLICY_AUDIO_ONLY) != 0;
-  if (audio_only_ && (open_params_.device_capabilities &
-                      CastDeviceCapability::VIDEO_OUT) != 0) {
+  if (audio_only_ &&
+      open_params_.device_capabilities.Has(CastDeviceCapability::kVideoOut)) {
     LOG_WITH_CONNECTION(ERROR)
         << "Audio only channel policy enforced for video out capable device";
     return false;
@@ -692,15 +692,14 @@
 
 CastSocketOpenParams::CastSocketOpenParams(const net::IPEndPoint& ip_endpoint,
                                            base::TimeDelta connect_timeout)
-    : ip_endpoint(ip_endpoint),
-      connect_timeout(connect_timeout),
-      device_capabilities(cast_channel::CastDeviceCapability::NONE) {}
+    : ip_endpoint(ip_endpoint), connect_timeout(connect_timeout) {}
 
-CastSocketOpenParams::CastSocketOpenParams(const net::IPEndPoint& ip_endpoint,
-                                           base::TimeDelta connect_timeout,
-                                           base::TimeDelta liveness_timeout,
-                                           base::TimeDelta ping_interval,
-                                           uint64_t device_capabilities)
+CastSocketOpenParams::CastSocketOpenParams(
+    const net::IPEndPoint& ip_endpoint,
+    base::TimeDelta connect_timeout,
+    base::TimeDelta liveness_timeout,
+    base::TimeDelta ping_interval,
+    CastDeviceCapabilitySet device_capabilities)
     : ip_endpoint(ip_endpoint),
       connect_timeout(connect_timeout),
       liveness_timeout(liveness_timeout),
diff --git a/components/media_router/common/providers/cast/channel/cast_socket.h b/components/media_router/common/providers/cast/channel/cast_socket.h
index a99907e..bc51cac 100644
--- a/components/media_router/common/providers/cast/channel/cast_socket.h
+++ b/components/media_router/common/providers/cast/channel/cast_socket.h
@@ -21,6 +21,7 @@
 #include "base/timer/timer.h"
 #include "components/media_router/common/providers/cast/channel/cast_auth_util.h"
 #include "components/media_router/common/providers/cast/channel/cast_channel_enum.h"
+#include "components/media_router/common/providers/cast/channel/cast_device_capability.h"
 #include "components/media_router/common/providers/cast/channel/cast_transport.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/system/data_pipe.h"
@@ -45,17 +46,6 @@
 class MojoDataPump;
 struct LastError;
 
-// Cast device capabilities.
-enum CastDeviceCapability : int {
-  NONE = 0,
-  VIDEO_OUT = 1 << 0,
-  VIDEO_IN = 1 << 1,
-  AUDIO_OUT = 1 << 2,
-  AUDIO_IN = 1 << 3,
-  DEV_MODE = 1 << 4,
-  MULTIZONE_GROUP = 1 << 5
-};
-
 // Public interface of the CastSocket class.
 class CastSocket {
  public:
@@ -168,10 +158,8 @@
   // for |liveness_timeout|.
   base::TimeDelta ping_interval;
 
-  // A bit vector representing the capabilities of the sink. The values are
-  // defined in
-  // components/media_router/common/providers/cast/channel/cast_socket.h.
-  uint64_t device_capabilities;
+  // An EnumSet representing the capabilities of the sink.
+  CastDeviceCapabilitySet device_capabilities;
 
   CastSocketOpenParams(const net::IPEndPoint& ip_endpoint,
                        base::TimeDelta connect_timeout);
@@ -179,7 +167,7 @@
                        base::TimeDelta connect_timeout,
                        base::TimeDelta liveness_timeout,
                        base::TimeDelta ping_interval,
-                       uint64_t device_capabilities);
+                       CastDeviceCapabilitySet device_capabilities);
 };
 
 // This class implements a channel between Chrome and a Cast device using a TCP
diff --git a/components/performance_manager/BUILD.gn b/components/performance_manager/BUILD.gn
index 9620239..cb66c46 100644
--- a/components/performance_manager/BUILD.gn
+++ b/components/performance_manager/BUILD.gn
@@ -46,8 +46,8 @@
     "execution_context_priority/execution_context_priority_decorator.h",
     "execution_context_priority/frame_audible_voter.cc",
     "execution_context_priority/frame_audible_voter.h",
-    "execution_context_priority/frame_capturing_video_stream_voter.cc",
-    "execution_context_priority/frame_capturing_video_stream_voter.h",
+    "execution_context_priority/frame_capturing_media_stream_voter.cc",
+    "execution_context_priority/frame_capturing_media_stream_voter.h",
     "execution_context_priority/frame_visibility_voter.cc",
     "execution_context_priority/frame_visibility_voter.h",
     "execution_context_priority/inherit_client_priority_voter.cc",
@@ -326,7 +326,7 @@
     "execution_context_priority/boosting_vote_aggregator_unittest.cc",
     "execution_context_priority/execution_context_priority_unittest.cc",
     "execution_context_priority/frame_audible_voter_unittest.cc",
-    "execution_context_priority/frame_capturing_video_stream_voter_unittest.cc",
+    "execution_context_priority/frame_capturing_media_stream_voter_unittest.cc",
     "execution_context_priority/frame_visibility_voter_unittest.cc",
     "execution_context_priority/inherit_client_priority_voter_unittest.cc",
     "execution_context_priority/max_vote_aggregator_unittest.cc",
diff --git a/components/performance_manager/decorators/frame_visibility_decorator_unittest.cc b/components/performance_manager/decorators/frame_visibility_decorator_unittest.cc
index c22758e..809e601e 100644
--- a/components/performance_manager/decorators/frame_visibility_decorator_unittest.cc
+++ b/components/performance_manager/decorators/frame_visibility_decorator_unittest.cc
@@ -44,7 +44,7 @@
 
 TEST_F(FrameVisibilityDecoratorTest, SetPageVisible) {
   auto page_node = CreateNode<PageNodeImpl>();
-  EXPECT_FALSE(page_node->is_visible());
+  EXPECT_FALSE(page_node->IsVisible());
 
   // Create a frame node.
   auto frame_node = CreateFrameNodeAutoId(process_node(), page_node.get());
@@ -64,7 +64,7 @@
 
 TEST_F(FrameVisibilityDecoratorTest, PageIsBeingMirrored) {
   auto page_node = CreateNode<PageNodeImpl>();
-  EXPECT_FALSE(page_node->is_visible());
+  EXPECT_FALSE(page_node->IsVisible());
   auto frame_node = CreateFrameNodeAutoId(process_node(), page_node.get());
   frame_node->SetIsCurrent(true);
 
@@ -80,7 +80,7 @@
 // PageNode::IsVisible.
 TEST_F(FrameVisibilityDecoratorTest, PageUserVisible) {
   auto page_node = CreateNode<PageNodeImpl>();
-  EXPECT_FALSE(page_node->is_visible());
+  EXPECT_FALSE(page_node->IsVisible());
   auto frame_node = CreateFrameNodeAutoId(process_node(), page_node.get());
   frame_node->SetIsCurrent(true);
 
@@ -108,7 +108,7 @@
 
 TEST_F(FrameVisibilityDecoratorTest, SetPageVisibleWithChildNodes) {
   auto page_node = CreateNode<PageNodeImpl>();
-  EXPECT_FALSE(page_node->is_visible());
+  EXPECT_FALSE(page_node->IsVisible());
 
   // Create a main frame node.
   auto main_frame_node = CreateFrameNodeAutoId(process_node(), page_node.get());
diff --git a/components/performance_manager/decorators/process_hosted_content_types_aggregator.cc b/components/performance_manager/decorators/process_hosted_content_types_aggregator.cc
index d62d25a7..866599ee2 100644
--- a/components/performance_manager/decorators/process_hosted_content_types_aggregator.cc
+++ b/components/performance_manager/decorators/process_hosted_content_types_aggregator.cc
@@ -63,7 +63,7 @@
       frame_node_impl->IsMainFrame() ? ProcessNode::ContentType::kMainFrame
                                      : ProcessNode::ContentType::kSubframe);
 
-  if (frame_node_impl->page_node()->type() == PageType::kExtension) {
+  if (frame_node_impl->page_node()->GetType() == PageType::kExtension) {
     process_node_impl->add_hosted_content_type(
         ProcessNode::ContentType::kExtension);
   }
diff --git a/components/performance_manager/decorators/process_hosted_content_types_aggregator_unittest.cc b/components/performance_manager/decorators/process_hosted_content_types_aggregator_unittest.cc
index 9831f53..a3ca761 100644
--- a/components/performance_manager/decorators/process_hosted_content_types_aggregator_unittest.cc
+++ b/components/performance_manager/decorators/process_hosted_content_types_aggregator_unittest.cc
@@ -86,7 +86,7 @@
 
 TEST_F(ProcessHostedContentTypesAggregatorTest, MainFrameAndChildFrame) {
   auto page_node = CreateNode<PageNodeImpl>();
-  EXPECT_FALSE(page_node->is_visible());
+  EXPECT_FALSE(page_node->IsVisible());
 
   // Create a main frame in a first process.
   auto process_node_1 = CreateNode<ProcessNodeImpl>();
diff --git a/components/performance_manager/decorators/process_metrics_decorator_unittest.cc b/components/performance_manager/decorators/process_metrics_decorator_unittest.cc
index 4394740..48caff26 100644
--- a/components/performance_manager/decorators/process_metrics_decorator_unittest.cc
+++ b/components/performance_manager/decorators/process_metrics_decorator_unittest.cc
@@ -147,45 +147,45 @@
 
   void ExpectProcessResults(uint64_t resident_set_kb,
                             uint64_t private_footprint_kb) {
-    EXPECT_EQ(resident_set_kb, mock_graph()->process->resident_set_kb());
+    EXPECT_EQ(resident_set_kb, mock_graph()->process->GetResidentSetKb());
     EXPECT_EQ(private_footprint_kb,
-              mock_graph()->process->private_footprint_kb());
+              mock_graph()->process->GetPrivateFootprintKb());
 
     EXPECT_EQ(resident_set_kb / 3,
-              mock_graph()->frame->resident_set_kb_estimate());
+              mock_graph()->frame->GetResidentSetKbEstimate());
     EXPECT_EQ(private_footprint_kb / 3,
-              mock_graph()->frame->private_footprint_kb_estimate());
+              mock_graph()->frame->GetPrivateFootprintKbEstimate());
     EXPECT_EQ(resident_set_kb / 3,
-              mock_graph()->other_frame->resident_set_kb_estimate());
+              mock_graph()->other_frame->GetResidentSetKbEstimate());
     EXPECT_EQ(private_footprint_kb / 3,
-              mock_graph()->other_frame->private_footprint_kb_estimate());
+              mock_graph()->other_frame->GetPrivateFootprintKbEstimate());
     EXPECT_EQ(resident_set_kb / 3,
-              mock_graph()->worker->resident_set_kb_estimate());
+              mock_graph()->worker->GetResidentSetKbEstimate());
     EXPECT_EQ(private_footprint_kb / 3,
-              mock_graph()->worker->private_footprint_kb_estimate());
+              mock_graph()->worker->GetPrivateFootprintKbEstimate());
   }
 
   void ExpectOtherProcessResults(uint64_t resident_set_kb,
                                  uint64_t private_footprint_kb) {
-    EXPECT_EQ(resident_set_kb, mock_graph()->other_process->resident_set_kb());
+    EXPECT_EQ(resident_set_kb, mock_graph()->other_process->GetResidentSetKb());
     EXPECT_EQ(private_footprint_kb,
-              mock_graph()->other_process->private_footprint_kb());
+              mock_graph()->other_process->GetPrivateFootprintKb());
 
     EXPECT_EQ(resident_set_kb / 2,
-              mock_graph()->child_frame->resident_set_kb_estimate());
+              mock_graph()->child_frame->GetResidentSetKbEstimate());
     EXPECT_EQ(private_footprint_kb / 2,
-              mock_graph()->child_frame->private_footprint_kb_estimate());
+              mock_graph()->child_frame->GetPrivateFootprintKbEstimate());
     EXPECT_EQ(resident_set_kb / 2,
-              mock_graph()->other_worker->resident_set_kb_estimate());
+              mock_graph()->other_worker->GetResidentSetKbEstimate());
     EXPECT_EQ(private_footprint_kb / 2,
-              mock_graph()->other_worker->private_footprint_kb_estimate());
+              mock_graph()->other_worker->GetPrivateFootprintKbEstimate());
   }
 
   void ExpectUtilityProcessResults(uint64_t resident_set_kb,
                                    uint64_t private_footprint_kb) {
-    EXPECT_EQ(resident_set_kb, mock_utility_process_->resident_set_kb());
+    EXPECT_EQ(resident_set_kb, mock_utility_process_->GetResidentSetKb());
     EXPECT_EQ(private_footprint_kb,
-              mock_utility_process_->private_footprint_kb());
+              mock_utility_process_->GetPrivateFootprintKb());
     // No frames or workers to measure.
   }
 
diff --git a/components/performance_manager/decorators/site_data_recorder.cc b/components/performance_manager/decorators/site_data_recorder.cc
index 2b94cd6d..ac5d5f4 100644
--- a/components/performance_manager/decorators/site_data_recorder.cc
+++ b/components/performance_manager/decorators/site_data_recorder.cc
@@ -286,7 +286,7 @@
          heuristics.IsInBackground(page_node_) &&
          heuristics.IsOutsideBackgroundingGracePeriod(
              page_node_, feature_type,
-             page_node_->TimeSinceLastVisibilityChange());
+             page_node_->GetTimeSinceLastVisibilityChange());
 }
 
 void SiteDataNodeData::MaybeNotifyBackgroundFeatureUsage(
diff --git a/components/performance_manager/execution_context_priority/execution_context_priority_decorator.cc b/components/performance_manager/execution_context_priority/execution_context_priority_decorator.cc
index edcc15b..67d01bf3 100644
--- a/components/performance_manager/execution_context_priority/execution_context_priority_decorator.cc
+++ b/components/performance_manager/execution_context_priority/execution_context_priority_decorator.cc
@@ -46,7 +46,7 @@
       max_vote_aggregator_.GetVotingChannel());
   frame_audible_voter_.SetVotingChannel(
       max_vote_aggregator_.GetVotingChannel());
-  frame_capturing_video_stream_voter_.SetVotingChannel(
+  frame_capturing_media_stream_voter_.SetVotingChannel(
       max_vote_aggregator_.GetVotingChannel());
   inherit_client_priority_voter_.SetVotingChannel(
       max_vote_aggregator_.GetVotingChannel());
@@ -62,7 +62,7 @@
   }
   graph->AddInitializingFrameNodeObserver(&frame_visibility_voter_);
   graph->AddInitializingFrameNodeObserver(&frame_audible_voter_);
-  graph->AddInitializingFrameNodeObserver(&frame_capturing_video_stream_voter_);
+  graph->AddInitializingFrameNodeObserver(&frame_capturing_media_stream_voter_);
   graph->AddFrameNodeObserver(&inherit_client_priority_voter_);
   graph->AddWorkerNodeObserver(&inherit_client_priority_voter_);
 }
@@ -72,7 +72,7 @@
   graph->RemoveWorkerNodeObserver(&inherit_client_priority_voter_);
   graph->RemoveFrameNodeObserver(&inherit_client_priority_voter_);
   graph->RemoveInitializingFrameNodeObserver(
-      &frame_capturing_video_stream_voter_);
+      &frame_capturing_media_stream_voter_);
   graph->RemoveInitializingFrameNodeObserver(&frame_audible_voter_);
   graph->RemoveInitializingFrameNodeObserver(&frame_visibility_voter_);
   if (features::kDownvoteAdFrames.Get()) {
diff --git a/components/performance_manager/execution_context_priority/execution_context_priority_decorator.h b/components/performance_manager/execution_context_priority/execution_context_priority_decorator.h
index d5f73fb..dc33e27 100644
--- a/components/performance_manager/execution_context_priority/execution_context_priority_decorator.h
+++ b/components/performance_manager/execution_context_priority/execution_context_priority_decorator.h
@@ -7,7 +7,7 @@
 
 #include "components/performance_manager/execution_context_priority/ad_frame_voter.h"
 #include "components/performance_manager/execution_context_priority/frame_audible_voter.h"
-#include "components/performance_manager/execution_context_priority/frame_capturing_video_stream_voter.h"
+#include "components/performance_manager/execution_context_priority/frame_capturing_media_stream_voter.h"
 #include "components/performance_manager/execution_context_priority/frame_visibility_voter.h"
 #include "components/performance_manager/execution_context_priority/inherit_client_priority_voter.h"
 #include "components/performance_manager/execution_context_priority/max_vote_aggregator.h"
@@ -59,8 +59,8 @@
   // Casts a USER_VISIBLE vote when a frame is audible.
   FrameAudibleVoter frame_audible_voter_;
 
-  // Casts a USER_VISIBLE vote when a frame is capturing video.
-  FrameCapturingVideoStreamVoter frame_capturing_video_stream_voter_;
+  // Casts a USER_VISIBLE vote when a frame is capturing a media stream.
+  FrameCapturingMediaStreamVoter frame_capturing_media_stream_voter_;
 
   // Casts a vote for each child worker with the client's priority.
   InheritClientPriorityVoter inherit_client_priority_voter_;
diff --git a/components/performance_manager/execution_context_priority/frame_capturing_video_stream_voter.cc b/components/performance_manager/execution_context_priority/frame_capturing_media_stream_voter.cc
similarity index 61%
rename from components/performance_manager/execution_context_priority/frame_capturing_video_stream_voter.cc
rename to components/performance_manager/execution_context_priority/frame_capturing_media_stream_voter.cc
index 71d43fa..878c385 100644
--- a/components/performance_manager/execution_context_priority/frame_capturing_video_stream_voter.cc
+++ b/components/performance_manager/execution_context_priority/frame_capturing_media_stream_voter.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/performance_manager/execution_context_priority/frame_capturing_video_stream_voter.h"
+#include "components/performance_manager/execution_context_priority/frame_capturing_media_stream_voter.h"
 
 #include <utility>
 
@@ -18,44 +18,44 @@
 }
 
 // Returns a vote with the appropriate priority depending on if the frame is
-// capturing video.
-Vote GetVote(bool is_capturing_video_stream) {
-  base::TaskPriority priority = is_capturing_video_stream
+// capturing media.
+Vote GetVote(bool is_capturing_media_stream) {
+  base::TaskPriority priority = is_capturing_media_stream
                                     ? base::TaskPriority::USER_VISIBLE
                                     : base::TaskPriority::LOWEST;
   return Vote(priority,
-              FrameCapturingVideoStreamVoter::kFrameCapturingVideoStreamReason);
+              FrameCapturingMediaStreamVoter::kFrameCapturingMediaStreamReason);
 }
 
 }  // namespace
 
 // static
-const char FrameCapturingVideoStreamVoter::kFrameCapturingVideoStreamReason[] =
-    "Frame capturing video stream.";
+const char FrameCapturingMediaStreamVoter::kFrameCapturingMediaStreamReason[] =
+    "Frame capturing media stream.";
 
-FrameCapturingVideoStreamVoter::FrameCapturingVideoStreamVoter() = default;
+FrameCapturingMediaStreamVoter::FrameCapturingMediaStreamVoter() = default;
 
-FrameCapturingVideoStreamVoter::~FrameCapturingVideoStreamVoter() = default;
+FrameCapturingMediaStreamVoter::~FrameCapturingMediaStreamVoter() = default;
 
-void FrameCapturingVideoStreamVoter::SetVotingChannel(
+void FrameCapturingMediaStreamVoter::SetVotingChannel(
     VotingChannel voting_channel) {
   voting_channel_ = std::move(voting_channel);
 }
 
-void FrameCapturingVideoStreamVoter::OnFrameNodeInitializing(
+void FrameCapturingMediaStreamVoter::OnFrameNodeInitializing(
     const FrameNode* frame_node) {
-  const Vote vote = GetVote(frame_node->IsCapturingVideoStream());
+  const Vote vote = GetVote(frame_node->IsCapturingMediaStream());
   voting_channel_.SubmitVote(GetExecutionContext(frame_node), vote);
 }
 
-void FrameCapturingVideoStreamVoter::OnFrameNodeTearingDown(
+void FrameCapturingMediaStreamVoter::OnFrameNodeTearingDown(
     const FrameNode* frame_node) {
   voting_channel_.InvalidateVote(GetExecutionContext(frame_node));
 }
 
-void FrameCapturingVideoStreamVoter::OnIsCapturingVideoStreamChanged(
+void FrameCapturingMediaStreamVoter::OnIsCapturingMediaStreamChanged(
     const FrameNode* frame_node) {
-  const Vote new_vote = GetVote(frame_node->IsCapturingVideoStream());
+  const Vote new_vote = GetVote(frame_node->IsCapturingMediaStream());
   voting_channel_.ChangeVote(GetExecutionContext(frame_node), new_vote);
 }
 
diff --git a/components/performance_manager/execution_context_priority/frame_capturing_video_stream_voter.h b/components/performance_manager/execution_context_priority/frame_capturing_media_stream_voter.h
similarity index 65%
rename from components/performance_manager/execution_context_priority/frame_capturing_video_stream_voter.h
rename to components/performance_manager/execution_context_priority/frame_capturing_media_stream_voter.h
index ad7ca4f..7a2b037 100644
--- a/components/performance_manager/execution_context_priority/frame_capturing_video_stream_voter.h
+++ b/components/performance_manager/execution_context_priority/frame_capturing_media_stream_voter.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_PERFORMANCE_MANAGER_EXECUTION_CONTEXT_PRIORITY_FRAME_CAPTURING_VIDEO_STREAM_VOTER_H_
-#define COMPONENTS_PERFORMANCE_MANAGER_EXECUTION_CONTEXT_PRIORITY_FRAME_CAPTURING_VIDEO_STREAM_VOTER_H_
+#ifndef COMPONENTS_PERFORMANCE_MANAGER_EXECUTION_CONTEXT_PRIORITY_FRAME_CAPTURING_MEDIA_STREAM_VOTER_H_
+#define COMPONENTS_PERFORMANCE_MANAGER_EXECUTION_CONTEXT_PRIORITY_FRAME_CAPTURING_MEDIA_STREAM_VOTER_H_
 
 #include "components/performance_manager/graph/initializing_frame_node_observer.h"
 #include "components/performance_manager/public/execution_context_priority/execution_context_priority.h"
@@ -11,20 +11,21 @@
 namespace performance_manager::execution_context_priority {
 
 // This voter casts a TaskPriority::USER_VISIBLE vote to all frames that are
-// capturing a video stream, and a TaskPriority::LOWEST vote otherwise
+// capturing a media stream (audio or video), and a TaskPriority::LOWEST vote
+// otherwise.
 // Note: Uses `InitializingFrameNodeObserver` because it can affect the initial
 // priority of a frame.
-class FrameCapturingVideoStreamVoter : public InitializingFrameNodeObserver {
+class FrameCapturingMediaStreamVoter : public InitializingFrameNodeObserver {
  public:
-  static const char kFrameCapturingVideoStreamReason[];
+  static const char kFrameCapturingMediaStreamReason[];
 
-  FrameCapturingVideoStreamVoter();
-  ~FrameCapturingVideoStreamVoter() override;
+  FrameCapturingMediaStreamVoter();
+  ~FrameCapturingMediaStreamVoter() override;
 
-  FrameCapturingVideoStreamVoter(const FrameCapturingVideoStreamVoter&) =
+  FrameCapturingMediaStreamVoter(const FrameCapturingMediaStreamVoter&) =
       delete;
-  FrameCapturingVideoStreamVoter& operator=(
-      const FrameCapturingVideoStreamVoter&) = delete;
+  FrameCapturingMediaStreamVoter& operator=(
+      const FrameCapturingMediaStreamVoter&) = delete;
 
   // Sets the voting channel where the votes will be cast.
   void SetVotingChannel(VotingChannel voting_channel);
@@ -32,7 +33,7 @@
   // InitializingFrameNodeObserver:
   void OnFrameNodeInitializing(const FrameNode* frame_node) override;
   void OnFrameNodeTearingDown(const FrameNode* frame_node) override;
-  void OnIsCapturingVideoStreamChanged(const FrameNode* frame_node) override;
+  void OnIsCapturingMediaStreamChanged(const FrameNode* frame_node) override;
 
  private:
   VotingChannel voting_channel_;
@@ -40,4 +41,4 @@
 
 }  // namespace performance_manager::execution_context_priority
 
-#endif  // COMPONENTS_PERFORMANCE_MANAGER_EXECUTION_CONTEXT_PRIORITY_FRAME_CAPTURING_VIDEO_STREAM_VOTER_H_
+#endif  // COMPONENTS_PERFORMANCE_MANAGER_EXECUTION_CONTEXT_PRIORITY_FRAME_CAPTURING_MEDIA_STREAM_VOTER_H_
diff --git a/components/performance_manager/execution_context_priority/frame_capturing_video_stream_voter_unittest.cc b/components/performance_manager/execution_context_priority/frame_capturing_media_stream_voter_unittest.cc
similarity index 74%
rename from components/performance_manager/execution_context_priority/frame_capturing_video_stream_voter_unittest.cc
rename to components/performance_manager/execution_context_priority/frame_capturing_media_stream_voter_unittest.cc
index c08af15..9d6a0bd 100644
--- a/components/performance_manager/execution_context_priority/frame_capturing_video_stream_voter_unittest.cc
+++ b/components/performance_manager/execution_context_priority/frame_capturing_media_stream_voter_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/performance_manager/execution_context_priority/frame_capturing_video_stream_voter.h"
+#include "components/performance_manager/execution_context_priority/frame_capturing_media_stream_voter.h"
 
 #include <memory>
 
@@ -25,7 +25,7 @@
   return execution_context::ExecutionContext::From(frame_node);
 }
 
-// Both the voting channel and the FrameCapturingVideoStreamVoter are expected
+// Both the voting channel and the FrameCapturingMediaStreamVoter are expected
 // to live on the graph, without being actual GraphOwned objects. This class
 // wraps both to allow this.
 class GraphOwnedWrapper : public GraphOwned {
@@ -33,7 +33,7 @@
   GraphOwnedWrapper() {
     VotingChannel voting_channel = observer_.BuildVotingChannel();
     voter_id_ = voting_channel.voter_id();
-    frame_capturing_video_stream_voter_.SetVotingChannel(
+    frame_capturing_media_stream_voter_.SetVotingChannel(
         std::move(voting_channel));
   }
 
@@ -45,11 +45,11 @@
   // GraphOwned:
   void OnPassedToGraph(Graph* graph) override {
     graph->AddInitializingFrameNodeObserver(
-        &frame_capturing_video_stream_voter_);
+        &frame_capturing_media_stream_voter_);
   }
   void OnTakenFromGraph(Graph* graph) override {
     graph->RemoveInitializingFrameNodeObserver(
-        &frame_capturing_video_stream_voter_);
+        &frame_capturing_media_stream_voter_);
   }
 
   // Exposes the DummyVoteObserver to validate expectations.
@@ -59,23 +59,23 @@
 
  private:
   DummyVoteObserver observer_;
-  FrameCapturingVideoStreamVoter frame_capturing_video_stream_voter_;
+  FrameCapturingMediaStreamVoter frame_capturing_media_stream_voter_;
   VoterId voter_id_;
 };
 
 }  // namespace
 
-class FrameCapturingVideoStreamVoterTest : public GraphTestHarness {
+class FrameCapturingMediaStreamVoterTest : public GraphTestHarness {
  public:
   using Super = GraphTestHarness;
 
-  FrameCapturingVideoStreamVoterTest() = default;
-  ~FrameCapturingVideoStreamVoterTest() override = default;
+  FrameCapturingMediaStreamVoterTest() = default;
+  ~FrameCapturingMediaStreamVoterTest() override = default;
 
-  FrameCapturingVideoStreamVoterTest(
-      const FrameCapturingVideoStreamVoterTest&) = delete;
-  FrameCapturingVideoStreamVoterTest& operator=(
-      const FrameCapturingVideoStreamVoterTest&) = delete;
+  FrameCapturingMediaStreamVoterTest(
+      const FrameCapturingMediaStreamVoterTest&) = delete;
+  FrameCapturingMediaStreamVoterTest& operator=(
+      const FrameCapturingMediaStreamVoterTest&) = delete;
 
   void SetUp() override {
     GetGraphFeatures().EnableExecutionContextRegistry();
@@ -92,9 +92,9 @@
   raw_ptr<GraphOwnedWrapper> wrapper_ = nullptr;
 };
 
-// Tests that the FrameCapturingVideoStreamVoter correctly casts a vote for a
-// frame depending on its capturing video stream state.
-TEST_F(FrameCapturingVideoStreamVoterTest, CapturingVideoStreamChanged) {
+// Tests that the FrameCapturingMediaStreamVoter correctly casts a vote for a
+// frame depending on its capturing media stream state.
+TEST_F(FrameCapturingMediaStreamVoterTest, CapturingMediaStreamChanged) {
   // Create a graph with a single frame page. Its initial audible state should
   // be false, resulting in a low priority.
   MockSinglePageInSingleProcessGraph mock_graph(graph());
@@ -104,16 +104,16 @@
   EXPECT_TRUE(observer().HasVote(
       voter_id(), GetExecutionContext(frame_node.get()),
       base::TaskPriority::LOWEST,
-      FrameCapturingVideoStreamVoter::kFrameCapturingVideoStreamReason));
+      FrameCapturingMediaStreamVoter::kFrameCapturingMediaStreamReason));
 
-  // Now set the frame as capturing a video stream. This should increase the
+  // Now set the frame as capturing a media stream. This should increase the
   // priority.
-  mock_graph.frame->SetIsCapturingVideoStream(true);
+  mock_graph.frame->SetIsCapturingMediaStream(true);
   EXPECT_EQ(observer().GetVoteCount(), 1u);
   EXPECT_TRUE(observer().HasVote(
       voter_id(), GetExecutionContext(frame_node.get()),
       base::TaskPriority::USER_VISIBLE,
-      FrameCapturingVideoStreamVoter::kFrameCapturingVideoStreamReason));
+      FrameCapturingMediaStreamVoter::kFrameCapturingMediaStreamReason));
 
   // Deleting the frame should invalidate the vote.
   frame_node.reset();
diff --git a/components/performance_manager/features.cc b/components/performance_manager/features.cc
index fc1fdd7f..558b0ef 100644
--- a/components/performance_manager/features.cc
+++ b/components/performance_manager/features.cc
@@ -149,6 +149,10 @@
     &kProbabilisticProactiveDiscarding,
     "proactive_discarding_sampling_interval", base::Minutes(10)};
 
+const base::FeatureParam<bool> kProactiveDiscardingSimulationMode{
+    &kProbabilisticProactiveDiscarding, "proactive_discarding_simulation_mode",
+    true};
+
 BASE_FEATURE(kBFCachePerformanceManagerPolicy,
              "BFCachePerformanceManagerPolicy",
              base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/components/performance_manager/graph/frame_node_impl.cc b/components/performance_manager/graph/frame_node_impl.cc
index 4bee8894..7aae44f 100644
--- a/components/performance_manager/graph/frame_node_impl.cc
+++ b/components/performance_manager/graph/frame_node_impl.cc
@@ -213,9 +213,9 @@
   return is_audible();
 }
 
-bool FrameNodeImpl::IsCapturingVideoStream() const {
+bool FrameNodeImpl::IsCapturingMediaStream() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return is_capturing_video_stream();
+  return is_capturing_media_stream();
 }
 
 absl::optional<bool> FrameNodeImpl::IntersectsViewport() const {
@@ -235,12 +235,12 @@
 
 uint64_t FrameNodeImpl::GetResidentSetKbEstimate() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return resident_set_kb_estimate();
+  return resident_set_kb_estimate_;
 }
 
 uint64_t FrameNodeImpl::GetPrivateFootprintKbEstimate() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return private_footprint_kb_estimate();
+  return private_footprint_kb_estimate_;
 }
 
 FrameNodeImpl* FrameNodeImpl::parent_frame_node() const {
@@ -327,9 +327,9 @@
   return is_audible_.value();
 }
 
-bool FrameNodeImpl::is_capturing_video_stream() const {
+bool FrameNodeImpl::is_capturing_media_stream() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return is_capturing_video_stream_.value();
+  return is_capturing_media_stream_.value();
 }
 
 absl::optional<bool> FrameNodeImpl::intersects_viewport() const {
@@ -345,16 +345,6 @@
   return visibility_.value();
 }
 
-uint64_t FrameNodeImpl::resident_set_kb_estimate() const {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return resident_set_kb_estimate_;
-}
-
-uint64_t FrameNodeImpl::private_footprint_kb_estimate() const {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return private_footprint_kb_estimate_;
-}
-
 void FrameNodeImpl::SetIsCurrent(bool is_current) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   is_current_.SetAndMaybeNotify(this, is_current);
@@ -392,10 +382,10 @@
   is_audible_.SetAndMaybeNotify(this, is_audible);
 }
 
-void FrameNodeImpl::SetIsCapturingVideoStream(bool is_capturing_video_stream) {
+void FrameNodeImpl::SetIsCapturingMediaStream(bool is_capturing_media_stream) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  DCHECK_NE(is_capturing_video_stream, is_capturing_video_stream_.value());
-  is_capturing_video_stream_.SetAndMaybeNotify(this, is_capturing_video_stream);
+  DCHECK_NE(is_capturing_media_stream, is_capturing_media_stream_.value());
+  is_capturing_media_stream_.SetAndMaybeNotify(this, is_capturing_media_stream);
 }
 
 void FrameNodeImpl::SetIntersectsViewport(bool intersects_viewport) {
@@ -748,7 +738,7 @@
 
   while (!embedded_page_nodes_.empty()) {
     auto* embedded_node = *embedded_page_nodes_.begin();
-    auto embedding_type = embedded_node->embedding_type();
+    auto embedding_type = embedded_node->GetEmbeddingType();
     if (parent_frame_node_) {
       embedded_node->SetEmbedderFrameNodeAndEmbeddingType(parent_frame_node_,
                                                           embedding_type);
diff --git a/components/performance_manager/graph/frame_node_impl.h b/components/performance_manager/graph/frame_node_impl.h
index 9edfbcf..d047dbc 100644
--- a/components/performance_manager/graph/frame_node_impl.h
+++ b/components/performance_manager/graph/frame_node_impl.h
@@ -96,7 +96,7 @@
   bool HadFormInteraction() const override;
   bool HadUserEdits() const override;
   bool IsAudible() const override;
-  bool IsCapturingVideoStream() const override;
+  bool IsCapturingMediaStream() const override;
   absl::optional<bool> IntersectsViewport() const override;
   Visibility GetVisibility() const override;
   const RenderFrameHostProxy& GetRenderFrameHostProxy() const override;
@@ -121,18 +121,16 @@
   bool had_form_interaction() const;
   bool had_user_edits() const;
   bool is_audible() const;
-  bool is_capturing_video_stream() const;
+  bool is_capturing_media_stream() const;
   absl::optional<bool> intersects_viewport() const;
   Visibility visibility() const;
-  uint64_t resident_set_kb_estimate() const;
-  uint64_t private_footprint_kb_estimate() const;
 
   // Setters are not thread safe.
   void SetIsCurrent(bool is_current);
   void SetIsHoldingWebLock(bool is_holding_weblock);
   void SetIsHoldingIndexedDBLock(bool is_holding_indexeddb_lock);
   void SetIsAudible(bool is_audible);
-  void SetIsCapturingVideoStream(bool is_capturing_video_stream);
+  void SetIsCapturingMediaStream(bool is_capturing_media_stream);
   void SetIntersectsViewport(bool intersects_viewport);
   void SetInitialVisibility(Visibility visibility);
   void SetVisibility(Visibility visibility);
@@ -351,11 +349,11 @@
       NotifiesOnlyOnChanges<bool, &FrameNodeObserver::OnIsAudibleChanged>
           is_audible_{false};
 
-  // Indicates if the frame is capturing a video stream.
+  // Indicates if the frame is capturing at least one media stream.
   ObservedProperty::NotifiesOnlyOnChanges<
       bool,
-      &FrameNodeObserver::OnIsCapturingVideoStreamChanged>
-      is_capturing_video_stream_{false};
+      &FrameNodeObserver::OnIsCapturingMediaStreamChanged>
+      is_capturing_media_stream_{false};
 
   // Indicates if the frame intersects with the viewport.
   //
diff --git a/components/performance_manager/graph/frame_node_impl_describer.cc b/components/performance_manager/graph/frame_node_impl_describer.cc
index 4dde02c..435e7b6 100644
--- a/components/performance_manager/graph/frame_node_impl_describer.cc
+++ b/components/performance_manager/graph/frame_node_impl_describer.cc
@@ -84,6 +84,8 @@
   ret.Set("is_current", impl->is_current_.value());
   ret.Set("priority", PriorityAndReasonToValue(impl->GetPriorityAndReason()));
   ret.Set("is_audible", impl->is_audible_.value());
+  ret.Set("is_capturing_media_stream",
+          impl->is_capturing_media_stream_.value());
   ret.Set("viewport_intersection",
           IntersectsViewportToString(impl->intersects_viewport_.value()));
   ret.Set("visibility", FrameNodeVisibilityToString(impl->visibility_.value()));
@@ -91,9 +93,9 @@
 
   base::Value::Dict metrics;
   metrics.Set("resident_set",
-              base::NumberToString(impl->resident_set_kb_estimate()));
+              base::NumberToString(impl->GetResidentSetKbEstimate()));
   metrics.Set("private_footprint",
-              base::NumberToString(impl->private_footprint_kb_estimate()));
+              base::NumberToString(impl->GetPrivateFootprintKbEstimate()));
   ret.Set("metrics_estimates", std::move(metrics));
 
   return ret;
diff --git a/components/performance_manager/graph/frame_node_impl_unittest.cc b/components/performance_manager/graph/frame_node_impl_unittest.cc
index 2557069..3327eef 100644
--- a/components/performance_manager/graph/frame_node_impl_unittest.cc
+++ b/components/performance_manager/graph/frame_node_impl_unittest.cc
@@ -150,7 +150,7 @@
   MOCK_METHOD1(OnHadFormInteractionChanged, void(const FrameNode*));
   MOCK_METHOD1(OnHadUserEditsChanged, void(const FrameNode*));
   MOCK_METHOD1(OnIsAudibleChanged, void(const FrameNode*));
-  MOCK_METHOD1(OnIsCapturingVideoStreamChanged, void(const FrameNode*));
+  MOCK_METHOD1(OnIsCapturingMediaStreamChanged, void(const FrameNode*));
   MOCK_METHOD1(OnIntersectsViewportChanged, void(const FrameNode*));
   MOCK_METHOD2(OnFrameVisibilityChanged,
                void(const FrameNode*, FrameNode::Visibility));
@@ -439,18 +439,18 @@
   graph()->RemoveFrameNodeObserver(&obs);
 }
 
-TEST_F(FrameNodeImplTest, IsCapturingVideoStream) {
+TEST_F(FrameNodeImplTest, IsCapturingMediaStream) {
   auto process = CreateNode<ProcessNodeImpl>();
   auto page = CreateNode<PageNodeImpl>();
   auto frame_node = CreateFrameNodeAutoId(process.get(), page.get());
-  EXPECT_FALSE(frame_node->is_capturing_video_stream());
+  EXPECT_FALSE(frame_node->is_capturing_media_stream());
 
   MockObserver obs;
   graph()->AddFrameNodeObserver(&obs);
 
-  EXPECT_CALL(obs, OnIsCapturingVideoStreamChanged(frame_node.get()));
-  frame_node->SetIsCapturingVideoStream(true);
-  EXPECT_TRUE(frame_node->is_capturing_video_stream());
+  EXPECT_CALL(obs, OnIsCapturingMediaStreamChanged(frame_node.get()));
+  frame_node->SetIsCapturingMediaStream(true);
+  EXPECT_TRUE(frame_node->is_capturing_media_stream());
 
   graph()->RemoveFrameNodeObserver(&obs);
 }
@@ -638,7 +638,6 @@
 
   EXPECT_EQ(nullptr, pageB->embedder_frame_node());
   EXPECT_EQ(nullptr, ppageB->GetEmbedderFrameNode());
-  EXPECT_EQ(EmbeddingType::kInvalid, pageB->embedding_type());
   EXPECT_EQ(EmbeddingType::kInvalid, ppageB->GetEmbeddingType());
   EXPECT_TRUE(frameA1->embedded_page_nodes().empty());
   EXPECT_TRUE(pframeA1->GetEmbeddedPageNodes().empty());
@@ -650,7 +649,6 @@
                                               EmbeddingType::kGuestView);
   EXPECT_EQ(frameA1.get(), pageB->embedder_frame_node());
   EXPECT_EQ(frameA1.get(), ppageB->GetEmbedderFrameNode());
-  EXPECT_EQ(EmbeddingType::kGuestView, pageB->embedding_type());
   EXPECT_EQ(EmbeddingType::kGuestView, ppageB->GetEmbeddingType());
   EXPECT_EQ(1u, frameA1->embedded_page_nodes().size());
   EXPECT_EQ(1u, pframeA1->GetEmbeddedPageNodes().size());
@@ -699,7 +697,7 @@
                                               EmbeddingType::kGuestView));
   pageB->ClearEmbedderFrameNodeAndEmbeddingType();
   EXPECT_EQ(nullptr, pageB->embedder_frame_node());
-  EXPECT_EQ(EmbeddingType::kInvalid, pageB->embedding_type());
+  EXPECT_EQ(EmbeddingType::kInvalid, pageB->GetEmbeddingType());
   EXPECT_EQ(frameA1.get(), pageC->opener_frame_node());
   EXPECT_TRUE(frameA1->embedded_page_nodes().empty());
   testing::Mock::VerifyAndClear(&obs);
@@ -708,7 +706,7 @@
   EXPECT_CALL(obs, OnOpenerFrameNodeChanged(pageC.get(), frameA1.get()));
   frameA1->SeverPageRelationshipsAndMaybeReparentForTesting();
   EXPECT_EQ(nullptr, pageC->embedder_frame_node());
-  EXPECT_EQ(EmbeddingType::kInvalid, pageC->embedding_type());
+  EXPECT_EQ(EmbeddingType::kInvalid, pageC->GetEmbeddingType());
   EXPECT_TRUE(frameA1->opened_page_nodes().empty());
   EXPECT_TRUE(frameA1->embedded_page_nodes().empty());
   testing::Mock::VerifyAndClear(&obs);
diff --git a/components/performance_manager/graph/initializing_frame_node_observer.cc b/components/performance_manager/graph/initializing_frame_node_observer.cc
index 94be45d..bd07faa 100644
--- a/components/performance_manager/graph/initializing_frame_node_observer.cc
+++ b/components/performance_manager/graph/initializing_frame_node_observer.cc
@@ -127,10 +127,10 @@
   }
 }
 
-void InitializingFrameNodeObserverManager::OnIsCapturingVideoStreamChanged(
+void InitializingFrameNodeObserverManager::OnIsCapturingMediaStreamChanged(
     const FrameNode* frame_node) {
   for (InitializingFrameNodeObserver& observer : observer_list_) {
-    observer.OnIsCapturingVideoStreamChanged(frame_node);
+    observer.OnIsCapturingMediaStreamChanged(frame_node);
   }
 }
 
diff --git a/components/performance_manager/graph/initializing_frame_node_observer.h b/components/performance_manager/graph/initializing_frame_node_observer.h
index 9e2dad8..746ac2f 100644
--- a/components/performance_manager/graph/initializing_frame_node_observer.h
+++ b/components/performance_manager/graph/initializing_frame_node_observer.h
@@ -44,7 +44,7 @@
   virtual void OnHadFormInteractionChanged(const FrameNode* frame_node) {}
   virtual void OnHadUserEditsChanged(const FrameNode* frame_node) {}
   virtual void OnIsAudibleChanged(const FrameNode* frame_node) {}
-  virtual void OnIsCapturingVideoStreamChanged(const FrameNode* frame_node) {}
+  virtual void OnIsCapturingMediaStreamChanged(const FrameNode* frame_node) {}
   virtual void OnIntersectsViewportChanged(const FrameNode* frame_node) {}
   virtual void OnFrameVisibilityChanged(const FrameNode* frame_node,
                                         FrameNode::Visibility previous_value) {}
@@ -90,7 +90,7 @@
   void OnHadFormInteractionChanged(const FrameNode* frame_node) override;
   void OnHadUserEditsChanged(const FrameNode* frame_node) override;
   void OnIsAudibleChanged(const FrameNode* frame_node) override;
-  void OnIsCapturingVideoStreamChanged(const FrameNode* frame_node) override;
+  void OnIsCapturingMediaStreamChanged(const FrameNode* frame_node) override;
   void OnIntersectsViewportChanged(const FrameNode* frame_node) override;
   void OnFrameVisibilityChanged(const FrameNode* frame_node,
                                 FrameNode::Visibility previous_value) override;
diff --git a/components/performance_manager/graph/page_node_impl.cc b/components/performance_manager/graph/page_node_impl.cc
index 86f7855..be8c576 100644
--- a/components/performance_manager/graph/page_node_impl.cc
+++ b/components/performance_manager/graph/page_node_impl.cc
@@ -93,7 +93,7 @@
 
 const std::string& PageNodeImpl::GetBrowserContextID() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return browser_context_id();
+  return browser_context_id_;
 }
 
 resource_attribution::PageContext PageNodeImpl::GetResourceContext() const {
@@ -103,43 +103,47 @@
 
 PageNodeImpl::EmbeddingType PageNodeImpl::GetEmbeddingType() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return embedding_type();
+  DCHECK(embedder_frame_node_ || embedding_type_ == EmbeddingType::kInvalid);
+  return embedding_type_;
 }
 
 PageType PageNodeImpl::GetType() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return type();
+  return type_.value();
 }
 
 bool PageNodeImpl::IsFocused() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return is_focused();
+  return is_focused_.value();
 }
 
 bool PageNodeImpl::IsVisible() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return is_visible();
+  return is_visible_.value();
 }
 
 base::TimeDelta PageNodeImpl::GetTimeSinceLastVisibilityChange() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return TimeSinceLastVisibilityChange();
+  return base::TimeTicks::Now() - visibility_change_time_;
 }
 
 bool PageNodeImpl::IsAudible() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return is_audible();
+  return is_audible_.value();
 }
 
 absl::optional<base::TimeDelta> PageNodeImpl::GetTimeSinceLastAudibleChange()
     const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return TimeSinceLastAudibleChange();
+  if (audible_change_time_.has_value()) {
+    return base::TimeTicks::Now() - audible_change_time_.value();
+  }
+  return absl::nullopt;
 }
 
 bool PageNodeImpl::HasPictureInPicture() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return has_picture_in_picture();
+  return has_picture_in_picture_.value();
 }
 
 PageNode::LoadingState PageNodeImpl::GetLoadingState() const {
@@ -179,7 +183,10 @@
 
 base::TimeDelta PageNodeImpl::GetTimeSinceLastNavigation() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return TimeSinceLastNavigation();
+  if (navigation_committed_time_.is_null()) {
+    return base::TimeDelta();
+  }
+  return base::TimeTicks::Now() - navigation_committed_time_;
 }
 
 const GURL& PageNodeImpl::GetMainFrameUrl() const {
@@ -194,7 +201,7 @@
   if (main_frame_node) {
     performance_manager::GraphImplOperations::VisitFrameAndChildrenPreOrder(
         main_frame_node, [&total](FrameNodeImpl* frame_node) {
-          total += frame_node->private_footprint_kb_estimate();
+          total += frame_node->GetPrivateFootprintKbEstimate();
           return true;
         });
   }
@@ -382,27 +389,6 @@
     observer->OnMainFrameDocumentChanged(this);
 }
 
-base::TimeDelta PageNodeImpl::TimeSinceLastNavigation() const {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  if (navigation_committed_time_.is_null())
-    return base::TimeDelta();
-  return base::TimeTicks::Now() - navigation_committed_time_;
-}
-
-base::TimeDelta PageNodeImpl::TimeSinceLastVisibilityChange() const {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return base::TimeTicks::Now() - visibility_change_time_;
-}
-
-absl::optional<base::TimeDelta> PageNodeImpl::TimeSinceLastAudibleChange()
-    const {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  if (audible_change_time_.has_value()) {
-    return base::TimeTicks::Now() - audible_change_time_.value();
-  }
-  return absl::nullopt;
-}
-
 FrameNodeImpl* PageNodeImpl::GetMainFrameNodeImpl() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (main_frame_nodes_.empty())
@@ -431,37 +417,6 @@
   return embedder_frame_node_;
 }
 
-PageNodeImpl::EmbeddingType PageNodeImpl::embedding_type() const {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  DCHECK(embedder_frame_node_ || embedding_type_ == EmbeddingType::kInvalid);
-  return embedding_type_;
-}
-
-PageType PageNodeImpl::type() const {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return type_.value();
-}
-
-bool PageNodeImpl::is_focused() const {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return is_focused_.value();
-}
-
-bool PageNodeImpl::is_visible() const {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return is_visible_.value();
-}
-
-bool PageNodeImpl::is_audible() const {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return is_audible_.value();
-}
-
-bool PageNodeImpl::has_picture_in_picture() const {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return has_picture_in_picture_.value();
-}
-
 PageNode::LoadingState PageNodeImpl::loading_state() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return loading_state_.value();
@@ -492,11 +447,6 @@
   return main_frame_nodes_;
 }
 
-const std::string& PageNodeImpl::browser_context_id() const {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return browser_context_id_;
-}
-
 const GURL& PageNodeImpl::main_frame_url() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return main_frame_url_.value();
diff --git a/components/performance_manager/graph/page_node_impl.h b/components/performance_manager/graph/page_node_impl.h
index 32e02747..205a68fe 100644
--- a/components/performance_manager/graph/page_node_impl.h
+++ b/components/performance_manager/graph/page_node_impl.h
@@ -129,35 +129,14 @@
                                       const GURL& url,
                                       const std::string& contents_mime_type);
 
-  // Returns 0 if no navigation has happened, otherwise returns the time since
-  // the last navigation commit.
-  base::TimeDelta TimeSinceLastNavigation() const;
-
-  // Returns the time since the last visibility change, it should always have a
-  // value since we set the visibility property when we create a
-  // page node.
-  base::TimeDelta TimeSinceLastVisibilityChange() const;
-
-  // Returns the time since the last audible change, or nullopt if the node has
-  // never been audible. If the node was audible on creation, returns the
-  // creation time.
-  absl::optional<base::TimeDelta> TimeSinceLastAudibleChange() const;
-
   // Returns the current main frame node (if there is one), otherwise returns
   // any of the potentially multiple main frames that currently exist. If there
   // are no main frames at the moment, returns nullptr.
   FrameNodeImpl* GetMainFrameNodeImpl() const;
 
   // Accessors.
-  const std::string& browser_context_id() const;
   FrameNodeImpl* opener_frame_node() const;
   FrameNodeImpl* embedder_frame_node() const;
-  EmbeddingType embedding_type() const;
-  PageType type() const;
-  bool is_focused() const;
-  bool is_visible() const;
-  bool is_audible() const;
-  bool has_picture_in_picture() const;
   LoadingState loading_state() const;
   ukm::SourceId ukm_source_id() const;
   LifecycleState lifecycle_state() const;
diff --git a/components/performance_manager/graph/page_node_impl_unittest.cc b/components/performance_manager/graph/page_node_impl_unittest.cc
index bc6f92c..93c3bd5c 100644
--- a/components/performance_manager/graph/page_node_impl_unittest.cc
+++ b/components/performance_manager/graph/page_node_impl_unittest.cc
@@ -92,50 +92,52 @@
   EXPECT_EQ(0u, GraphImplOperations::GetFrameNodes(page_node.get()).size());
 }
 
-TEST_F(PageNodeImplTest, TimeSinceLastVisibilityChange) {
+TEST_F(PageNodeImplTest, GetTimeSinceLastVisibilityChange) {
   MockSinglePageInSingleProcessGraph mock_graph(graph());
 
   mock_graph.page->SetIsVisible(true);
-  EXPECT_TRUE(mock_graph.page->is_visible());
+  EXPECT_TRUE(mock_graph.page->IsVisible());
   AdvanceClock(base::Seconds(42));
   EXPECT_EQ(base::Seconds(42),
-            mock_graph.page->TimeSinceLastVisibilityChange());
+            mock_graph.page->GetTimeSinceLastVisibilityChange());
 
   mock_graph.page->SetIsVisible(false);
   AdvanceClock(base::Seconds(23));
   EXPECT_EQ(base::Seconds(23),
-            mock_graph.page->TimeSinceLastVisibilityChange());
-  EXPECT_FALSE(mock_graph.page->is_visible());
+            mock_graph.page->GetTimeSinceLastVisibilityChange());
+  EXPECT_FALSE(mock_graph.page->IsVisible());
 }
 
-TEST_F(PageNodeImplTest, TimeSinceLastAudibleChange) {
+TEST_F(PageNodeImplTest, GetTimeSinceLastAudibleChange) {
   MockSinglePageInSingleProcessGraph mock_graph(graph());
-  EXPECT_FALSE(mock_graph.page->is_audible());
-  EXPECT_EQ(absl::nullopt, mock_graph.page->TimeSinceLastAudibleChange());
+  EXPECT_FALSE(mock_graph.page->IsAudible());
+  EXPECT_EQ(absl::nullopt, mock_graph.page->GetTimeSinceLastAudibleChange());
 
   mock_graph.page->SetIsAudible(true);
-  EXPECT_TRUE(mock_graph.page->is_audible());
+  EXPECT_TRUE(mock_graph.page->IsAudible());
   AdvanceClock(base::Seconds(42));
-  EXPECT_EQ(base::Seconds(42), mock_graph.page->TimeSinceLastAudibleChange());
+  EXPECT_EQ(base::Seconds(42),
+            mock_graph.page->GetTimeSinceLastAudibleChange());
 
   mock_graph.page->SetIsAudible(false);
   AdvanceClock(base::Seconds(23));
-  EXPECT_EQ(base::Seconds(23), mock_graph.page->TimeSinceLastAudibleChange());
-  EXPECT_FALSE(mock_graph.page->is_audible());
+  EXPECT_EQ(base::Seconds(23),
+            mock_graph.page->GetTimeSinceLastAudibleChange());
+  EXPECT_FALSE(mock_graph.page->IsAudible());
 
   // Test a page that's audible at creation.
   auto audible_page = CreateNode<PageNodeImpl>(
       WebContentsProxy(), /*browser_context_id=*/std::string(), GURL(),
       PagePropertyFlags{PagePropertyFlag::kIsAudible});
   AdvanceClock(base::Seconds(56));
-  EXPECT_EQ(base::Seconds(56), audible_page->TimeSinceLastAudibleChange());
-  EXPECT_TRUE(audible_page->is_audible());
+  EXPECT_EQ(base::Seconds(56), audible_page->GetTimeSinceLastAudibleChange());
+  EXPECT_TRUE(audible_page->IsAudible());
 }
 
-TEST_F(PageNodeImplTest, TimeSinceLastNavigation) {
+TEST_F(PageNodeImplTest, GetTimeSinceLastNavigation) {
   MockSinglePageInSingleProcessGraph mock_graph(graph());
   // Before any commit events, timedelta should be 0.
-  EXPECT_TRUE(mock_graph.page->TimeSinceLastNavigation().is_zero());
+  EXPECT_TRUE(mock_graph.page->GetTimeSinceLastNavigation().is_zero());
 
   // 1st navigation.
   GURL url("http://www.example.org");
@@ -145,7 +147,7 @@
   EXPECT_EQ(10u, mock_graph.page->navigation_id());
   EXPECT_EQ(kHtmlMimeType, mock_graph.page->contents_mime_type());
   AdvanceClock(base::Seconds(11));
-  EXPECT_EQ(base::Seconds(11), mock_graph.page->TimeSinceLastNavigation());
+  EXPECT_EQ(base::Seconds(11), mock_graph.page->GetTimeSinceLastNavigation());
 
   // 2nd navigation.
   url = GURL("http://www.example.org/bobcat");
@@ -155,7 +157,7 @@
   EXPECT_EQ(20u, mock_graph.page->navigation_id());
   EXPECT_EQ(kHtmlMimeType, mock_graph.page->contents_mime_type());
   AdvanceClock(base::Seconds(17));
-  EXPECT_EQ(base::Seconds(17), mock_graph.page->TimeSinceLastNavigation());
+  EXPECT_EQ(base::Seconds(17), mock_graph.page->GetTimeSinceLastNavigation());
 
   // Test a same-document navigation.
   url = GURL("http://www.example.org/bobcat#fun");
@@ -165,7 +167,7 @@
   EXPECT_EQ(30u, mock_graph.page->navigation_id());
   EXPECT_EQ(kHtmlMimeType, mock_graph.page->contents_mime_type());
   AdvanceClock(base::Seconds(17));
-  EXPECT_EQ(base::Seconds(17), mock_graph.page->TimeSinceLastNavigation());
+  EXPECT_EQ(base::Seconds(17), mock_graph.page->GetTimeSinceLastNavigation());
 
   // Test a navigation to a page with a different MIME type.
   url = GURL("http://www.example.org/document.pdf");
@@ -175,7 +177,7 @@
   EXPECT_EQ(40u, mock_graph.page->navigation_id());
   EXPECT_EQ(kPdfMimeType, mock_graph.page->contents_mime_type());
   AdvanceClock(base::Seconds(17));
-  EXPECT_EQ(base::Seconds(17), mock_graph.page->TimeSinceLastNavigation());
+  EXPECT_EQ(base::Seconds(17), mock_graph.page->GetTimeSinceLastNavigation());
 }
 
 TEST_F(PageNodeImplTest, BrowserContextID) {
@@ -183,10 +185,8 @@
       base::UnguessableToken::Create().ToString();
   auto page_node =
       CreateNode<PageNodeImpl>(WebContentsProxy(), kTestBrowserContextId);
-  const PageNode* public_page_node = page_node.get();
 
-  EXPECT_EQ(page_node->browser_context_id(), kTestBrowserContextId);
-  EXPECT_EQ(public_page_node->GetBrowserContextID(), kTestBrowserContextId);
+  EXPECT_EQ(page_node->GetBrowserContextID(), kTestBrowserContextId);
 }
 
 TEST_F(PageNodeImplTest, LoadingState) {
@@ -403,11 +403,6 @@
   // Simply test that the public interface impls yield the same result as their
   // private counterpart.
 
-  EXPECT_EQ(page_node->browser_context_id(),
-            public_page_node->GetBrowserContextID());
-  EXPECT_EQ(page_node->is_focused(), public_page_node->IsFocused());
-  EXPECT_EQ(page_node->is_visible(), public_page_node->IsVisible());
-  EXPECT_EQ(page_node->is_audible(), public_page_node->IsAudible());
   EXPECT_EQ(page_node->loading_state(), public_page_node->GetLoadingState());
   EXPECT_EQ(page_node->ukm_source_id(), public_page_node->GetUkmSourceID());
   EXPECT_EQ(page_node->lifecycle_state(),
diff --git a/components/performance_manager/graph/process_node_impl.cc b/components/performance_manager/graph/process_node_impl.cc
index 226f4c07..3921ffc3 100644
--- a/components/performance_manager/graph/process_node_impl.cc
+++ b/components/performance_manager/graph/process_node_impl.cc
@@ -208,12 +208,12 @@
 
 uint64_t ProcessNodeImpl::GetPrivateFootprintKb() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return private_footprint_kb();
+  return private_footprint_kb_;
 }
 
 uint64_t ProcessNodeImpl::GetResidentSetKb() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return resident_set_kb();
+  return resident_set_kb_;
 }
 
 RenderProcessHostId ProcessNodeImpl::GetRenderProcessHostId() const {
diff --git a/components/performance_manager/graph/process_node_impl.h b/components/performance_manager/graph/process_node_impl.h
index f6b51725..41b391d4 100644
--- a/components/performance_manager/graph/process_node_impl.h
+++ b/components/performance_manager/graph/process_node_impl.h
@@ -120,14 +120,6 @@
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
     private_footprint_kb_ = private_footprint_kb;
   }
-  uint64_t private_footprint_kb() const {
-    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-    return private_footprint_kb_;
-  }
-  uint64_t resident_set_kb() const {
-    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-    return resident_set_kb_;
-  }
   void set_resident_set_kb(uint64_t resident_set_kb) {
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
     resident_set_kb_ = resident_set_kb;
diff --git a/components/performance_manager/graph/process_node_impl_describer.cc b/components/performance_manager/graph/process_node_impl_describer.cc
index 320d1c7..a4899f4 100644
--- a/components/performance_manager/graph/process_node_impl_describer.cc
+++ b/components/performance_manager/graph/process_node_impl_describer.cc
@@ -172,14 +172,14 @@
 
   ret.Set("priority", base::TaskPriorityToString(impl->priority()));
 
-  if (impl->private_footprint_kb()) {
+  if (impl->GetPrivateFootprintKb()) {
     ret.Set("private_footprint_kb",
-            base::saturated_cast<int>(impl->private_footprint_kb()));
+            base::saturated_cast<int>(impl->GetPrivateFootprintKb()));
   }
 
-  if (impl->resident_set_kb()) {
+  if (impl->GetResidentSetKb()) {
     ret.Set("resident_set_kb",
-            base::saturated_cast<int>(impl->resident_set_kb()));
+            base::saturated_cast<int>(impl->GetResidentSetKb()));
   }
 
   // The content function returns "Tab" for renderers - whereas "Renderer" is
diff --git a/components/performance_manager/graph/process_node_impl_unittest.cc b/components/performance_manager/graph/process_node_impl_unittest.cc
index f568169..137bd98 100644
--- a/components/performance_manager/graph/process_node_impl_unittest.cc
+++ b/components/performance_manager/graph/process_node_impl_unittest.cc
@@ -66,8 +66,8 @@
   // Resurrection should clear the exit status.
   EXPECT_FALSE(process_node->GetExitStatus());
 
-  EXPECT_EQ(0U, process_node->private_footprint_kb());
-  EXPECT_EQ(0U, process_node->resident_set_kb());
+  EXPECT_EQ(0U, process_node->GetPrivateFootprintKb());
+  EXPECT_EQ(0U, process_node->GetResidentSetKb());
 
   process_node->set_private_footprint_kb(10u);
   process_node->set_resident_set_kb(20u);
@@ -79,8 +79,8 @@
   EXPECT_EQ(self.Pid(), process_node->GetProcessId());
 
   EXPECT_EQ(launch_time, process_node->GetLaunchTime());
-  EXPECT_EQ(10u, process_node->private_footprint_kb());
-  EXPECT_EQ(20u, process_node->resident_set_kb());
+  EXPECT_EQ(10u, process_node->GetPrivateFootprintKb());
+  EXPECT_EQ(20u, process_node->GetResidentSetKb());
 
   // Resurrect again and verify the launch time and measurements
   // are cleared.
@@ -88,8 +88,8 @@
   process_node->SetProcess(self.Duplicate(), launch2_time);
 
   EXPECT_EQ(launch2_time, process_node->GetLaunchTime());
-  EXPECT_EQ(0U, process_node->private_footprint_kb());
-  EXPECT_EQ(0U, process_node->resident_set_kb());
+  EXPECT_EQ(0U, process_node->GetPrivateFootprintKb());
+  EXPECT_EQ(0U, process_node->GetResidentSetKb());
 }
 
 TEST_F(ProcessNodeImplTest, GetPageNodeIfExclusive) {
@@ -267,14 +267,6 @@
   process_node->SetMainThreadTaskLoadIsLow(true);
   EXPECT_EQ(process_node->main_thread_task_load_is_low(),
             public_process_node->GetMainThreadTaskLoadIsLow());
-
-  process_node->set_private_footprint_kb(628);
-  EXPECT_EQ(process_node->private_footprint_kb(),
-            public_process_node->GetPrivateFootprintKb());
-
-  process_node->set_resident_set_kb(398);
-  EXPECT_EQ(process_node->resident_set_kb(),
-            public_process_node->GetResidentSetKb());
 }
 
 namespace {
diff --git a/components/performance_manager/graph/worker_node_impl.cc b/components/performance_manager/graph/worker_node_impl.cc
index 5599f797..364afd95 100644
--- a/components/performance_manager/graph/worker_node_impl.cc
+++ b/components/performance_manager/graph/worker_node_impl.cc
@@ -74,12 +74,12 @@
 
 uint64_t WorkerNodeImpl::GetResidentSetKbEstimate() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return resident_set_kb_estimate();
+  return resident_set_kb_estimate_;
 }
 
 uint64_t WorkerNodeImpl::GetPrivateFootprintKbEstimate() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return private_footprint_kb_estimate();
+  return private_footprint_kb_estimate_;
 }
 
 void WorkerNodeImpl::AddClientFrame(FrameNodeImpl* frame_node) {
@@ -200,16 +200,6 @@
   return child_workers_;
 }
 
-uint64_t WorkerNodeImpl::resident_set_kb_estimate() const {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return resident_set_kb_estimate_;
-}
-
-uint64_t WorkerNodeImpl::private_footprint_kb_estimate() const {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return private_footprint_kb_estimate_;
-}
-
 base::WeakPtr<WorkerNodeImpl> WorkerNodeImpl::GetWeakPtrOnUIThread() {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   return weak_this_;
diff --git a/components/performance_manager/graph/worker_node_impl.h b/components/performance_manager/graph/worker_node_impl.h
index 9c988b8..0210afd1 100644
--- a/components/performance_manager/graph/worker_node_impl.h
+++ b/components/performance_manager/graph/worker_node_impl.h
@@ -79,8 +79,6 @@
   const base::flat_set<FrameNodeImpl*>& client_frames() const;
   const base::flat_set<WorkerNodeImpl*>& client_workers() const;
   const base::flat_set<WorkerNodeImpl*>& child_workers() const;
-  uint64_t resident_set_kb_estimate() const;
-  uint64_t private_footprint_kb_estimate() const;
 
   base::WeakPtr<WorkerNodeImpl> GetWeakPtrOnUIThread();
   base::WeakPtr<WorkerNodeImpl> GetWeakPtr();
diff --git a/components/performance_manager/graph/worker_node_impl_describer.cc b/components/performance_manager/graph/worker_node_impl_describer.cc
index 84add39..e77de24b 100644
--- a/components/performance_manager/graph/worker_node_impl_describer.cc
+++ b/components/performance_manager/graph/worker_node_impl_describer.cc
@@ -56,9 +56,9 @@
 
   base::Value::Dict metrics;
   metrics.Set("resident_set",
-              base::NumberToString(impl->resident_set_kb_estimate()));
+              base::NumberToString(impl->GetResidentSetKbEstimate()));
   metrics.Set("private_footprint",
-              base::NumberToString(impl->private_footprint_kb_estimate()));
+              base::NumberToString(impl->GetPrivateFootprintKbEstimate()));
   ret.Set("metrics_estimates", std::move(metrics));
 
   return ret;
diff --git a/components/performance_manager/performance_manager_tab_helper_unittest.cc b/components/performance_manager/performance_manager_tab_helper_unittest.cc
index 8c0f217..dd75b01 100644
--- a/components/performance_manager/performance_manager_tab_helper_unittest.cc
+++ b/components/performance_manager/performance_manager_tab_helper_unittest.cc
@@ -209,7 +209,7 @@
   RunInGraph([&](GraphImpl* graph) {
     ASSERT_EQ(1u, graph->GetAllPageNodeImpls().size());
     auto* page = graph->GetAllPageNodeImpls()[0];
-    EXPECT_EQ(is_audible, page->is_audible());
+    EXPECT_EQ(is_audible, page->IsAudible());
   });
 }
 
diff --git a/components/performance_manager/public/features.h b/components/performance_manager/public/features.h
index 1e0684d..b90c945 100644
--- a/components/performance_manager/public/features.h
+++ b/components/performance_manager/public/features.h
@@ -149,6 +149,10 @@
 extern const base::FeatureParam<base::TimeDelta>
     kProactiveDiscardingSamplingInterval;
 
+// If true, runs the proactive discard policy in simulation mode (makes
+// discarding decisions and tracks success metrics but doesn't discard)
+extern const base::FeatureParam<bool> kProactiveDiscardingSimulationMode;
+
 // Policy that evicts the BFCache of pages that become non visible or the
 // BFCache of all pages when the system is under memory pressure.
 BASE_DECLARE_FEATURE(kBFCachePerformanceManagerPolicy);
diff --git a/components/performance_manager/public/graph/frame_node.h b/components/performance_manager/public/graph/frame_node.h
index ee7953b..876f31fd 100644
--- a/components/performance_manager/public/graph/frame_node.h
+++ b/components/performance_manager/public/graph/frame_node.h
@@ -226,8 +226,8 @@
   // Returns true if the frame is audible, false otherwise.
   virtual bool IsAudible() const = 0;
 
-  // Returns true if the frame is capturing a video stream.
-  virtual bool IsCapturingVideoStream() const = 0;
+  // Returns true if the frame is capturing a media stream (audio or video).
+  virtual bool IsCapturingMediaStream() const = 0;
 
   // Returns true if the frame intersects with the viewport. This could be false
   // if the frame is not rendered (display: none) or is scrolled out of view.
@@ -327,8 +327,8 @@
   // Invoked when the IsAudible property changes.
   virtual void OnIsAudibleChanged(const FrameNode* frame_node) = 0;
 
-  // Invoked when the IsCapturingVideoStream property changes.
-  virtual void OnIsCapturingVideoStreamChanged(const FrameNode* frame_node) = 0;
+  // Invoked when the IsCapturingMediaStream property changes.
+  virtual void OnIsCapturingMediaStreamChanged(const FrameNode* frame_node) = 0;
 
   // Invoked when a frame's intersection with the viewport changes
   virtual void OnIntersectsViewportChanged(const FrameNode* frame_node) = 0;
@@ -384,7 +384,7 @@
   void OnHadFormInteractionChanged(const FrameNode* frame_node) override {}
   void OnHadUserEditsChanged(const FrameNode* frame_node) override {}
   void OnIsAudibleChanged(const FrameNode* frame_node) override {}
-  void OnIsCapturingVideoStreamChanged(const FrameNode* frame_node) override {}
+  void OnIsCapturingMediaStreamChanged(const FrameNode* frame_node) override {}
   void OnIntersectsViewportChanged(const FrameNode* frame_node) override {}
   void OnFrameVisibilityChanged(const FrameNode* frame_node,
                                 FrameNode::Visibility previous_value) override {
diff --git a/components/performance_manager/v8_memory/v8_detailed_memory_unittest.cc b/components/performance_manager/v8_memory/v8_detailed_memory_unittest.cc
index d9594f7..dc2d06d74 100644
--- a/components/performance_manager/v8_memory/v8_detailed_memory_unittest.cc
+++ b/components/performance_manager/v8_memory/v8_detailed_memory_unittest.cc
@@ -1975,7 +1975,7 @@
   blink::DedicatedWorkerToken worker_id = blink::DedicatedWorkerToken();
   auto worker = CreateNode<WorkerNodeImpl>(
       WorkerNode::WorkerType::kDedicated, process.get(),
-      page->browser_context_id(), worker_id);
+      page->GetBrowserContextID(), worker_id);
 
   worker->AddClientFrame(frame.get());
   {
diff --git a/components/reporting/util/status.h b/components/reporting/util/status.h
index ff6f473..18fac9f6fdf 100644
--- a/components/reporting/util/status.h
+++ b/components/reporting/util/status.h
@@ -55,10 +55,15 @@
   Status& operator=(Status&&);
   virtual ~Status();
 
-  // Create a status in the canonical error space with the specified
-  // code, and error message.  If "code == 0", error_message is
-  // ignored and a Status object identical to Status::OK is
-  // constructed.
+  // Create a status in the canonical error space with the specified code, and
+  // error message. If "code == 0", error_message is ignored and a Status object
+  // identical to Status::OK is constructed.
+  //
+  // If a string literal is passed in, it will be copied to construct a
+  // `std::string` object. While it is possible to create a constructor tag or
+  // factory function to construct a `Status` object from a string literal
+  // that does not copy, we think that its cost to code maintainability
+  // outweighs the performance benefit it brings.
   Status(error::Code error_code, std::string error_message);
 
   // Pre-defined Status object
diff --git a/components/safe_browsing/content/browser/base_ui_manager.cc b/components/safe_browsing/content/browser/base_ui_manager.cc
index b0cdabb..da7d5e80 100644
--- a/components/safe_browsing/content/browser/base_ui_manager.cc
+++ b/components/safe_browsing/content/browser/base_ui_manager.cc
@@ -338,12 +338,13 @@
     AddUnsafeResource(unsafe_url, resource);
   }
 
-  // `showed_interstitial` is set to false for subresources since this
-  // cancellation doesn't correspond to the navigation that triggers the error
-  // page (the call to LoadPostCommitErrorPage creates another navigation).
+  // `showed_interstitial` is only set to true if the top-document navigation
+  // has not yet committed. For other cases, the cancellation doesn't correspond
+  // to the navigation that triggers the error page (the call to
+  // LoadPostCommitErrorPage creates another navigation).
   resource.DispatchCallback(
       FROM_HERE, false /* proceed */,
-      resource.IsMainPageLoadBlocked() /* showed_interstitial */);
+      !load_post_commit_error_page /* showed_interstitial */);
 
   if (!base::FeatureList::IsEnabled(safe_browsing::kDelayedWarnings)) {
     DCHECK(!resource.is_delayed_warning);
diff --git a/components/sync/engine/cycle/data_type_tracker.cc b/components/sync/engine/cycle/data_type_tracker.cc
index 7cdb6b4..8f7959d 100644
--- a/components/sync/engine/cycle/data_type_tracker.cc
+++ b/components/sync/engine/cycle/data_type_tracker.cc
@@ -186,19 +186,15 @@
 
 DataTypeTracker::DataTypeTracker(ModelType type)
     : type_(type),
-      local_nudge_count_(0),
-      local_refresh_request_count_(0),
-      initial_sync_required_(false),
-      sync_required_to_resolve_conflict_(false),
       local_change_nudge_delay_(GetDefaultLocalChangeNudgeDelay(type)),
+      quota_(
+          CanGetCommitsFromExtensions(type)
+              ? std::make_unique<CommitQuota>(kInitialTokensForExtensionTypes,
+                                              kRefillIntervalForExtensionTypes)
+              : nullptr),
       depleted_quota_nudge_delay_(kDepletedQuotaNudgeDelayForExtensionTypes) {
   // Sanity check the hardcode value for kMinLocalChangeNudgeDelay.
   DCHECK_GE(local_change_nudge_delay_, kMinLocalChangeNudgeDelay);
-
-  if (CanGetCommitsFromExtensions(type)) {
-    quota_ = std::make_unique<CommitQuota>(kInitialTokensForExtensionTypes,
-                                           kRefillIntervalForExtensionTypes);
-  }
 }
 
 DataTypeTracker::~DataTypeTracker() = default;
diff --git a/components/sync/engine/cycle/data_type_tracker.h b/components/sync/engine/cycle/data_type_tracker.h
index fe513d4..fab1c55 100644
--- a/components/sync/engine/cycle/data_type_tracker.h
+++ b/components/sync/engine/cycle/data_type_tracker.h
@@ -174,18 +174,18 @@
 
   // Number of local change nudges received for this type since the last
   // successful sync cycle.
-  int local_nudge_count_;
+  int local_nudge_count_ = 0;
 
   // Number of local refresh requests received for this type since the last
   // successful sync cycle.
-  int local_refresh_request_count_;
+  int local_refresh_request_count_ = 0;
 
   // Set to true if this type is ready for, but has not yet completed initial
   // sync.
-  bool initial_sync_required_;
+  bool initial_sync_required_ = false;
 
   // Set to true if this type need to get update to resolve conflict issue.
-  bool sync_required_to_resolve_conflict_;
+  bool sync_required_to_resolve_conflict_ = false;
 
   // Set to true if this type has invalidations that are needed to be used in
   // GetUpdate() trigger message.
@@ -205,7 +205,7 @@
 
   // Quota for commits (used only for data types that can be committed by
   // extensions).
-  std::unique_ptr<CommitQuota> quota_;
+  const std::unique_ptr<CommitQuota> quota_;
 
   // The amount of time to delay a sync cycle by when a local change for this
   // type occurs and the commit quota is depleted.
diff --git a/components/sync/engine/cycle/sync_cycle_context.cc b/components/sync/engine/cycle/sync_cycle_context.cc
index 2ff92cd..2ddb8aea 100644
--- a/components/sync/engine/cycle/sync_cycle_context.cc
+++ b/components/sync/engine/cycle/sync_cycle_context.cc
@@ -21,16 +21,11 @@
     base::TimeDelta poll_interval)
     : connection_manager_(connection_manager),
       extensions_activity_(extensions_activity),
-      notifications_enabled_(false),
       cache_guid_(cache_guid),
       birthday_(birthday),
       bag_of_chips_(bag_of_chips),
-      max_commit_batch_size_(kDefaultMaxCommitBatchSize),
       debug_info_getter_(debug_info_getter),
       model_type_registry_(model_type_registry),
-      cookie_jar_mismatch_(false),
-      active_devices_invalidation_info_(
-          ActiveDevicesInvalidationInfo::CreateUninitialized()),
       poll_interval_(poll_interval) {
   DCHECK(!poll_interval.is_zero());
   std::vector<SyncEngineEventListener*>::const_iterator it;
diff --git a/components/sync/engine/cycle/sync_cycle_context.h b/components/sync/engine/cycle/sync_cycle_context.h
index 1b4ca9b..f758933 100644
--- a/components/sync/engine/cycle/sync_cycle_context.h
+++ b/components/sync/engine/cycle/sync_cycle_context.h
@@ -127,11 +127,11 @@
 
   // We use this to stuff extensions activity into CommitMessages so the server
   // can correlate commit traffic with extension-related bookmark mutations.
-  scoped_refptr<ExtensionsActivity> extensions_activity_;
+  const scoped_refptr<ExtensionsActivity> extensions_activity_;
 
   // Kept up to date with talk events to determine whether notifications are
   // enabled. True only if the notification channel is authorized and open.
-  bool notifications_enabled_;
+  bool notifications_enabled_ = false;
 
   const std::string cache_guid_;
 
@@ -143,7 +143,7 @@
   std::string account_name_;
 
   // The server limits the number of items a client can commit in one batch.
-  int max_commit_batch_size_;
+  int max_commit_batch_size_ = kDefaultMaxCommitBatchSize;
 
   // We use this to get debug info to send to the server for debugging
   // client behavior on server side.
@@ -157,9 +157,10 @@
   // Whether the account(s) present in the content area's cookie jar match the
   // chrome account. If multiple accounts are present in the cookie jar, a
   // mismatch implies all of them are different from the chrome account.
-  bool cookie_jar_mismatch_;
+  bool cookie_jar_mismatch_ = false;
 
-  ActiveDevicesInvalidationInfo active_devices_invalidation_info_;
+  ActiveDevicesInvalidationInfo active_devices_invalidation_info_ =
+      ActiveDevicesInvalidationInfo::CreateUninitialized();
 
   base::TimeDelta poll_interval_;
 };
diff --git a/components/sync/engine/loopback_server/loopback_server.cc b/components/sync/engine/loopback_server/loopback_server.cc
index 9a35a874..d5875a8 100644
--- a/components/sync/engine/loopback_server/loopback_server.cc
+++ b/components/sync/engine/loopback_server/loopback_server.cc
@@ -234,10 +234,7 @@
 }  // namespace
 
 LoopbackServer::LoopbackServer(const base::FilePath& persistent_file)
-    : strong_consistency_model_enabled_(false),
-      version_(0),
-      store_birthday_(0),
-      persistent_file_(persistent_file),
+    : persistent_file_(persistent_file),
       writer_(
           persistent_file_,
           base::ThreadPool::CreateSequencedTaskRunner(
diff --git a/components/sync/engine/loopback_server/loopback_server.h b/components/sync/engine/loopback_server/loopback_server.h
index eefc5aab..65c49153 100644
--- a/components/sync/engine/loopback_server/loopback_server.h
+++ b/components/sync/engine/loopback_server/loopback_server.h
@@ -232,13 +232,13 @@
     observer_for_tests_ = observer;
   }
 
-  bool strong_consistency_model_enabled_;
+  bool strong_consistency_model_enabled_ = false;
 
   // This is the last version number assigned to an entity. The next entity will
   // have a version number of version_ + 1.
-  int64_t version_;
+  int64_t version_ = 0;
 
-  int64_t store_birthday_;
+  int64_t store_birthday_ = 0;
 
   ModelTypeSet throttled_types_;
 
@@ -252,7 +252,7 @@
   std::vector<std::vector<uint8_t>> keystore_keys_;
 
   // The file used to store the local sync data.
-  base::FilePath persistent_file_;
+  const base::FilePath persistent_file_;
 
   // Used to limit the rate of file rewrites due to updates.
   base::ImportantFileWriter writer_;
diff --git a/components/sync/engine/sync_scheduler_impl.cc b/components/sync/engine/sync_scheduler_impl.cc
index 2001f5a..b8cea61 100644
--- a/components/sync/engine/sync_scheduler_impl.cc
+++ b/components/sync/engine/sync_scheduler_impl.cc
@@ -96,13 +96,10 @@
     bool ignore_auth_credentials,
     bool sync_poll_immediately_on_every_startup)
     : name_(name),
-      started_(false),
       syncer_poll_interval_seconds_(context->poll_interval()),
-      mode_(CONFIGURATION_MODE),
       delay_provider_(std::move(delay_provider)),
       syncer_(std::move(syncer)),
       cycle_context_(context),
-      next_sync_cycle_job_priority_(NORMAL_PRIORITY),
       ignore_auth_credentials_(ignore_auth_credentials),
       sync_poll_immediately_on_every_startup_(
           sync_poll_immediately_on_every_startup) {}
diff --git a/components/sync/engine/sync_scheduler_impl.h b/components/sync/engine/sync_scheduler_impl.h
index 306194b..bd09fddc 100644
--- a/components/sync/engine/sync_scheduler_impl.h
+++ b/components/sync/engine/sync_scheduler_impl.h
@@ -240,7 +240,7 @@
   const std::string name_;
 
   // Set in Start(), unset in Stop().
-  bool started_;
+  bool started_ = false;
 
   // Modifiable versions of kDefaultPollIntervalSeconds which can be
   // updated by the server.
@@ -252,7 +252,7 @@
   base::OneShotTimer poll_timer_;
 
   // The mode of operation.
-  Mode mode_;
+  Mode mode_ = CONFIGURATION_MODE;
 
   // Current wait state.  Null if we're not in backoff and not throttled.
   std::unique_ptr<WaitInterval> wait_interval_;
@@ -289,13 +289,13 @@
   // have chance of resolving previous error (e.g. network connection change
   // after NETWORK_UNAVAILABLE error).
   // It is reset back to NORMAL_PRIORITY on every call to TrySyncCycleJobImpl.
-  JobPriority next_sync_cycle_job_priority_;
+  JobPriority next_sync_cycle_job_priority_ = NORMAL_PRIORITY;
 
   // One-shot timer for scheduling GU retry according to delay set by server.
   base::OneShotTimer retry_timer_;
 
   // Dictates if the scheduler should wait for authentication to happen or not.
-  bool ignore_auth_credentials_;
+  const bool ignore_auth_credentials_;
 
   const bool sync_poll_immediately_on_every_startup_;
 
diff --git a/components/sync/engine/syncer.cc b/components/sync/engine/syncer.cc
index 3b5b90e..e8228e8 100644
--- a/components/sync/engine/syncer.cc
+++ b/components/sync/engine/syncer.cc
@@ -105,7 +105,7 @@
 }  // namespace
 
 Syncer::Syncer(CancelationSignal* cancelation_signal)
-    : cancelation_signal_(cancelation_signal), is_syncing_(false) {}
+    : cancelation_signal_(cancelation_signal) {}
 
 Syncer::~Syncer() = default;
 
diff --git a/components/sync/engine/syncer.h b/components/sync/engine/syncer.h
index e0f1563..7d4912e 100644
--- a/components/sync/engine/syncer.h
+++ b/components/sync/engine/syncer.h
@@ -130,7 +130,7 @@
   const raw_ptr<CancelationSignal> cancelation_signal_;
 
   // Whether the syncer is in the middle of a sync attempt.
-  bool is_syncing_;
+  bool is_syncing_ = false;
 };
 
 }  // namespace syncer
diff --git a/components/sync/model/syncable_service_based_bridge.cc b/components/sync/model/syncable_service_based_bridge.cc
index 0caa0b4f..d033a9a 100644
--- a/components/sync/model/syncable_service_based_bridge.cc
+++ b/components/sync/model/syncable_service_based_bridge.cc
@@ -221,8 +221,7 @@
     SyncableService* syncable_service)
     : ModelTypeSyncBridge(std::move(change_processor)),
       type_(type),
-      syncable_service_(syncable_service),
-      syncable_service_started_(false) {
+      syncable_service_(syncable_service) {
   DCHECK(syncable_service_);
 
   init_start_time_ = base::Time::Now();
diff --git a/components/sync/model/syncable_service_based_bridge.h b/components/sync/model/syncable_service_based_bridge.h
index d80ef2fb..aaf24c4 100644
--- a/components/sync/model/syncable_service_based_bridge.h
+++ b/components/sync/model/syncable_service_based_bridge.h
@@ -105,7 +105,7 @@
   const raw_ptr<SyncableService> syncable_service_;
 
   std::unique_ptr<ModelTypeStore> store_;
-  bool syncable_service_started_;
+  bool syncable_service_started_ = false;
 
   // In-memory copy of |store_|, needed for remote deletions, because we need to
   // provide specifics of the deleted entity to the SyncableService.
diff --git a/components/sync/service/sync_service_impl.cc b/components/sync/service/sync_service_impl.cc
index e5caf13..da6693c 100644
--- a/components/sync/service/sync_service_impl.cc
+++ b/components/sync/service/sync_service_impl.cc
@@ -205,19 +205,10 @@
       crypto_(this, sync_client_->GetTrustedVaultClient()),
       url_loader_factory_(std::move(init_params.url_loader_factory)),
       network_connection_tracker_(init_params.network_connection_tracker),
-      is_first_time_sync_configure_(false),
-      sync_disabled_by_admin_(false),
-      expect_sync_configuration_aborted_(false),
       create_http_post_provider_factory_cb_(
           base::BindRepeating(&CreateHttpBridgeFactory)),
-      should_record_trusted_vault_error_shown_on_startup_(true),
       sync_poll_immediately_on_every_startup_(
-          init_params.sync_poll_immediately_on_every_startup),
-#if BUILDFLAG(IS_ANDROID)
-      sessions_invalidations_enabled_(false) {
-#else
-      sessions_invalidations_enabled_(true) {
-#endif
+          init_params.sync_poll_immediately_on_every_startup) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(sync_client_);
   DCHECK(IsLocalSyncEnabled() || identity_manager_ != nullptr);
diff --git a/components/sync/service/sync_service_impl.h b/components/sync/service/sync_service_impl.h
index 534c3f5..f148b1e 100644
--- a/components/sync/service/sync_service_impl.h
+++ b/components/sync/service/sync_service_impl.h
@@ -452,7 +452,7 @@
   // Indicates if this is the first time sync is being configured.
   // This is set to true if last synced time is not set at the time of
   // OnEngineInitialized().
-  bool is_first_time_sync_configure_;
+  bool is_first_time_sync_configure_ = false;
 
   // Number of UIs currently configuring the Sync service. When this number
   // is decremented back to zero, Sync setup is marked no longer in progress.
@@ -461,7 +461,7 @@
   // Set when sync receives STOP_SYNC_FOR_DISABLED_ACCOUNT error from server.
   // Prevents SyncServiceImpl from starting engine till browser restarted
   // or user signed out.
-  bool sync_disabled_by_admin_;
+  bool sync_disabled_by_admin_ = false;
 
   // Information describing an unrecoverable error.
   absl::optional<UnrecoverableErrorReason> unrecoverable_error_reason_ =
@@ -484,7 +484,7 @@
   // This allows us to gracefully handle an ABORTED return code from the
   // DataTypeManager in the event that the server informed us to cease and
   // desist syncing immediately.
-  bool expect_sync_configuration_aborted_;
+  bool expect_sync_configuration_aborted_ = false;
 
   std::unique_ptr<BackendMigrator> migrator_;
 
@@ -506,14 +506,14 @@
   // Used for UMA to determine whether TrustedVaultErrorShownOnStartup
   // histogram needs to recorded. Set to false iff histogram was already
   // recorded or trusted vault passphrase type wasn't used on startup.
-  bool should_record_trusted_vault_error_shown_on_startup_;
+  bool should_record_trusted_vault_error_shown_on_startup_ = true;
 
   const bool sync_poll_immediately_on_every_startup_;
 
   // Whether we want to receive invalidations for the SESSIONS data type. This
   // is typically false on Android (to save network traffic), but true on all
   // other platforms.
-  bool sessions_invalidations_enabled_;
+  bool sessions_invalidations_enabled_ = !BUILDFLAG(IS_ANDROID);
 
   // Set if/when Initialize() schedules a deferred task to start the engine.
   // Cleared on the first start attempt, regardless of success and who triggered
diff --git a/components/sync/test/fake_server.cc b/components/sync/test/fake_server.cc
index 76e603f..ff61d1639 100644
--- a/components/sync/test/fake_server.cc
+++ b/components/sync/test/fake_server.cc
@@ -17,6 +17,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
+#include "base/test/test_file_util.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/time/time.h"
 #include "base/values.h"
@@ -34,40 +35,19 @@
 
 namespace fake_server {
 
+FakeServer::FakeServer(const base::FilePath& loopback_server_dir) {
+  CHECK(!loopback_server_dir.empty());
+  // Needed by syncer::LoopbackServer.
+  base::ScopedAllowBlockingForTesting allow_blocking;
+  loopback_server_ = std::make_unique<syncer::LoopbackServer>(
+      loopback_server_dir.AppendASCII("profile.pb"));
+  loopback_server_->set_observer_for_tests(this);
+}
+
 FakeServer::FakeServer()
-    : commit_error_type_(sync_pb::SyncEnums::SUCCESS),
-      error_type_(sync_pb::SyncEnums::SUCCESS),
-      alternate_triggered_errors_(false),
-      request_counter_(0),
-      disallow_sending_encryption_keys_(false) {
-  base::ScopedAllowBlockingForTesting allow_blocking;
-  loopback_server_storage_ = std::make_unique<base::ScopedTempDir>();
-  if (!loopback_server_storage_->CreateUniqueTempDir()) {
-    NOTREACHED() << "Creating temp dir failed.";
-  }
-  loopback_server_ = std::make_unique<syncer::LoopbackServer>(
-      loopback_server_storage_->GetPath().AppendASCII("profile.pb"));
-  loopback_server_->set_observer_for_tests(this);
-}
+    : FakeServer(base::CreateUniqueTempDirectoryScopedToTest()) {}
 
-FakeServer::FakeServer(const base::FilePath& user_data_dir)
-    : commit_error_type_(sync_pb::SyncEnums::SUCCESS),
-      error_type_(sync_pb::SyncEnums::SUCCESS),
-      alternate_triggered_errors_(false),
-      request_counter_(0),
-      disallow_sending_encryption_keys_(false) {
-  base::ScopedAllowBlockingForTesting allow_blocking;
-  base::FilePath loopback_server_path =
-      user_data_dir.AppendASCII("FakeSyncServer");
-  loopback_server_ = std::make_unique<syncer::LoopbackServer>(
-      loopback_server_path.AppendASCII("profile.pb"));
-  loopback_server_->set_observer_for_tests(this);
-}
-
-FakeServer::~FakeServer() {
-  base::ScopedAllowBlockingForTesting allow_blocking;
-  loopback_server_storage_.reset();
-}
+FakeServer::~FakeServer() = default;
 
 namespace {
 
diff --git a/components/sync/test/fake_server.h b/components/sync/test/fake_server.h
index 272eca6..aa462cd 100644
--- a/components/sync/test/fake_server.h
+++ b/components/sync/test/fake_server.h
@@ -13,7 +13,6 @@
 #include <string>
 #include <vector>
 
-#include "base/files/scoped_temp_dir.h"
 #include "base/location.h"
 #include "base/observer_list.h"
 #include "base/threading/thread_checker.h"
@@ -81,10 +80,12 @@
     virtual void OnSuccessfulGetUpdates() {}
   };
 
+  // Persists the server state to `loopback_server_dir` (useful for PRE_ tests).
+  explicit FakeServer(const base::FilePath& loopback_server_dir);
+
+  // Convenience version of the above which uses a new temporary directory.
   FakeServer();
-  // A directory will be created under |user_data_dir| to persist sync server
-  // state. It's necessary for supporting PRE_ tests.
-  explicit FakeServer(const base::FilePath& user_data_dir);
+
   ~FakeServer() override;
 
   // Handles a /command POST (with the given |request|) to the server.
@@ -305,10 +306,10 @@
 
   // Used as the error_code field of ClientToServerResponse on all commit
   // requests.
-  sync_pb::SyncEnums_ErrorType commit_error_type_;
+  sync_pb::SyncEnums_ErrorType commit_error_type_ = sync_pb::SyncEnums::SUCCESS;
 
   // Used as the error_code field of ClientToServerResponse on all responses.
-  sync_pb::SyncEnums_ErrorType error_type_;
+  sync_pb::SyncEnums_ErrorType error_type_ = sync_pb::SyncEnums::SUCCESS;
 
   // Used as the error field of ClientToServerResponse when its pointer is not
   // null.
@@ -322,12 +323,12 @@
   // requests. Note that |request_counter_| can be reset and is not necessarily
   // indicative of the total number of requests handled during the object's
   // lifetime.
-  bool alternate_triggered_errors_;
-  int request_counter_;
+  bool alternate_triggered_errors_ = false;
+  int request_counter_ = 0;
 
   // If set to true all |this| will clear |encryption_keys| in all
   // GetUpdateResponse's.
-  bool disallow_sending_encryption_keys_;
+  bool disallow_sending_encryption_keys_ = false;
 
   // Client command to be included in every response.
   sync_pb::ClientCommand client_command_;
@@ -343,7 +344,6 @@
   base::ThreadChecker thread_checker_;
 
   std::unique_ptr<syncer::LoopbackServer> loopback_server_;
-  std::unique_ptr<base::ScopedTempDir> loopback_server_storage_;
 
   // The LoopbackServer does not know how to handle Wallet data properly, so
   // the FakeServer handles those itself.
diff --git a/components/sync/test/fake_server_http_post_provider.cc b/components/sync/test/fake_server_http_post_provider.cc
index 02e2ef4..8d4a44e 100644
--- a/components/sync/test/fake_server_http_post_provider.cc
+++ b/components/sync/test/fake_server_http_post_provider.cc
@@ -37,11 +37,7 @@
     const base::WeakPtr<FakeServer>& fake_server,
     scoped_refptr<base::SequencedTaskRunner> fake_server_task_runner)
     : fake_server_(fake_server),
-      fake_server_task_runner_(fake_server_task_runner),
-      synchronous_post_completion_(
-          base::WaitableEvent::ResetPolicy::AUTOMATIC,
-          base::WaitableEvent::InitialState::NOT_SIGNALED),
-      aborted_(false) {}
+      fake_server_task_runner_(fake_server_task_runner) {}
 
 FakeServerHttpPostProvider::~FakeServerHttpPostProvider() = default;
 
diff --git a/components/sync/test/fake_server_http_post_provider.h b/components/sync/test/fake_server_http_post_provider.h
index a84e5d36..35fa0500 100644
--- a/components/sync/test/fake_server_http_post_provider.h
+++ b/components/sync/test/fake_server_http_post_provider.h
@@ -63,11 +63,13 @@
 
   // |fake_server_| should only be dereferenced on the same thread as
   // |fake_server_task_runner_| runs on.
-  base::WeakPtr<FakeServer> fake_server_;
-  scoped_refptr<base::SequencedTaskRunner> fake_server_task_runner_;
+  const base::WeakPtr<FakeServer> fake_server_;
+  const scoped_refptr<base::SequencedTaskRunner> fake_server_task_runner_;
 
-  base::WaitableEvent synchronous_post_completion_;
-  std::atomic_bool aborted_;
+  base::WaitableEvent synchronous_post_completion_ =
+      base::WaitableEvent(base::WaitableEvent::ResetPolicy::AUTOMATIC,
+                          base::WaitableEvent::InitialState::NOT_SIGNALED);
+  std::atomic_bool aborted_ = false;
 
   std::string response_;
   GURL request_url_;
diff --git a/components/sync/test/mock_invalidation_tracker.cc b/components/sync/test/mock_invalidation_tracker.cc
index 125e98b5..ed94c87 100644
--- a/components/sync/test/mock_invalidation_tracker.cc
+++ b/components/sync/test/mock_invalidation_tracker.cc
@@ -23,7 +23,7 @@
                                                      this, next_id_++);
 }
 
-MockInvalidationTracker::MockInvalidationTracker() : next_id_(0) {}
+MockInvalidationTracker::MockInvalidationTracker() = default;
 
 MockInvalidationTracker::~MockInvalidationTracker() = default;
 
diff --git a/components/sync/test/mock_invalidation_tracker.h b/components/sync/test/mock_invalidation_tracker.h
index 24f7924..6b73d06 100644
--- a/components/sync/test/mock_invalidation_tracker.h
+++ b/components/sync/test/mock_invalidation_tracker.h
@@ -53,7 +53,7 @@
  private:
   // A counter used to assign strictly increasing IDs to each invalidation
   // issued by this class.
-  int next_id_;
+  int next_id_ = 0;
 
   // Acknowledgements and drops are tracked by adding the IDs for the
   // acknowledged or dropped items to the proper set.  An invalidation may be
diff --git a/components/sync/test/mock_nudge_handler.cc b/components/sync/test/mock_nudge_handler.cc
index 7c7b5512..a78ef6c 100644
--- a/components/sync/test/mock_nudge_handler.cc
+++ b/components/sync/test/mock_nudge_handler.cc
@@ -6,8 +6,7 @@
 
 namespace syncer {
 
-MockNudgeHandler::MockNudgeHandler()
-    : num_initial_nudges_(0), num_commit_nudges_(0) {}
+MockNudgeHandler::MockNudgeHandler() = default;
 
 MockNudgeHandler::~MockNudgeHandler() = default;
 
diff --git a/components/sync/test/mock_nudge_handler.h b/components/sync/test/mock_nudge_handler.h
index fc40f27..8f9ea2b5 100644
--- a/components/sync/test/mock_nudge_handler.h
+++ b/components/sync/test/mock_nudge_handler.h
@@ -31,8 +31,8 @@
   void ClearCounters();
 
  private:
-  int num_initial_nudges_;
-  int num_commit_nudges_;
+  int num_initial_nudges_ = 0;
+  int num_commit_nudges_ = 0;
 };
 
 }  // namespace syncer
diff --git a/components/tracing/BUILD.gn b/components/tracing/BUILD.gn
index 3fa481f..55cb6f4 100644
--- a/components/tracing/BUILD.gn
+++ b/components/tracing/BUILD.gn
@@ -2,6 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//build_overrides/build.gni")
 import("//testing/test.gni")
 
 if (is_android) {
@@ -29,6 +30,13 @@
     "tracing_export.h",
   ]
 
+  if (is_win && use_perfetto_client_library) {
+    sources += [
+      "common/etw_export_win.cc",
+      "common/etw_export_win.h",
+    ]
+  }
+
   defines = [ "TRACING_IMPLEMENTATION" ]
 
   deps = [ "//base" ]
diff --git a/components/tracing/common/etw_export_win.cc b/components/tracing/common/etw_export_win.cc
new file mode 100644
index 0000000..ec58e27
--- /dev/null
+++ b/components/tracing/common/etw_export_win.cc
@@ -0,0 +1,122 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/tracing/common/etw_export_win.h"
+
+#include <memory>
+
+#include "base/no_destructor.h"
+#include "base/trace_event/etw_interceptor_win.h"
+#include "base/trace_event/trace_event_etw_export_win.h"
+#include "base/trace_event/trace_logging_minimal_win.h"
+#include "third_party/perfetto/include/perfetto/tracing/core/trace_config.h"
+#include "third_party/perfetto/include/perfetto/tracing/tracing.h"
+#include "third_party/perfetto/protos/perfetto/config/interceptor_config.gen.h"
+#include "third_party/perfetto/protos/perfetto/config/track_event/track_event_config.gen.h"
+
+namespace tracing {
+namespace {
+
+// Used to protect the upper 16 bits reserved by winmeta.xml as they
+// should not be used but older logging code and tools incorrectly used
+// them.
+constexpr uint64_t kCategoryKeywordMask = ~0xFFFF000000000000;
+
+perfetto::TraceConfig CreateTraceConfigForETWKeyword(uint64_t keyword) {
+  perfetto::TraceConfig config;
+  auto* data_source = config.add_data_sources();
+  auto* data_source_config = data_source->mutable_config();
+  data_source_config->set_name("track_event");
+  data_source_config->mutable_interceptor_config()->set_name("etwexport");
+  perfetto::protos::gen::TrackEventConfig track_event_config =
+      base::trace_event::ETWKeywordToTrackEventConfig(keyword);
+  data_source_config->set_track_event_config_raw(
+      track_event_config.SerializeAsString());
+  return config;
+}
+
+class ETWExportController {
+ public:
+  ETWExportController();
+  ~ETWExportController() = delete;
+
+  // Called from the ETW EnableCallback when the state of the provider or
+  // keywords has changed.
+  void OnUpdate(TlmProvider::EventControlCode event);
+
+ private:
+  bool is_registration_complete_ = false;
+
+  std::unique_ptr<perfetto::StartupTracingSession> tracing_session_;
+
+  // The keywords that were enabled last time the callback was made.
+  uint64_t etw_match_any_keyword_ = 0;
+
+  // The provider is set based on channel for MSEdge, in other Chromium
+  // based browsers all channels use the same GUID/provider.
+  std::unique_ptr<TlmProvider> etw_provider_;
+};
+
+ETWExportController::ETWExportController() {
+  // Construct the ETW provider. If construction fails then the event logging
+  // calls will fail. We're passing a callback function as part of registration.
+  // This allows us to detect changes to enable/disable/keyword changes.
+  etw_provider_ = std::make_unique<TlmProvider>(
+      "Google.Chrome", base::trace_event::Chrome_GUID,
+      base::BindRepeating(&ETWExportController::OnUpdate,
+                          base::Unretained(this)));
+  base::trace_event::ETWInterceptor::Register(etw_provider_.get());
+  is_registration_complete_ = true;
+
+  if (etw_provider_->IsEnabled()) {
+    OnUpdate(TlmProvider::EventControlCode::kEnableProvider);
+  }
+}
+
+void ETWExportController::OnUpdate(TlmProvider::EventControlCode event) {
+  if (!is_registration_complete_) {
+    return;
+  }
+  if (event == TlmProvider::EventControlCode::kDisableProvider) {
+    if (tracing_session_) {
+      tracing_session_->Abort();
+      tracing_session_ = nullptr;
+    }
+    etw_match_any_keyword_ = 0;
+    return;
+  }
+  if (event == TlmProvider::EventControlCode::kEnableProvider) {
+    if (etw_match_any_keyword_ ==
+        (etw_provider_->keyword_any() & kCategoryKeywordMask)) {
+      return;
+    }
+    etw_match_any_keyword_ =
+        etw_provider_->keyword_any() & kCategoryKeywordMask;
+    if (tracing_session_) {
+      tracing_session_->Abort();
+      tracing_session_ = nullptr;
+    }
+
+    // ETW exporter creates a (local) startup session for the current
+    // process that's never adopted and doesn't timeout. Since every
+    // process enables export, an independent session is created in each
+    // process.
+    perfetto::Tracing::SetupStartupTracingOpts opts;
+    opts.timeout_ms = 0;
+    opts.backend = perfetto::kCustomBackend;
+
+    perfetto::TraceConfig config =
+        CreateTraceConfigForETWKeyword(etw_match_any_keyword_);
+    tracing_session_ = perfetto::Tracing::SetupStartupTracing(config, opts);
+  }
+}
+
+}  // namespace
+
+// static
+void EnableETWExport() {
+  static base::NoDestructor<ETWExportController> instance{};
+}
+
+}  // namespace tracing
diff --git a/components/tracing/common/etw_export_win.h b/components/tracing/common/etw_export_win.h
new file mode 100644
index 0000000..5ca4ba7
--- /dev/null
+++ b/components/tracing/common/etw_export_win.h
@@ -0,0 +1,17 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_TRACING_COMMON_ETW_EXPORT_WIN_H_
+#define COMPONENTS_TRACING_COMMON_ETW_EXPORT_WIN_H_
+
+#include "components/tracing/tracing_export.h"
+
+namespace tracing {
+
+// Enables exporting of track events to ETW in the current process.
+TRACING_EXPORT void EnableETWExport();
+
+}  // namespace tracing
+
+#endif  // COMPONENTS_TRACING_COMMON_ETW_EXPORT_WIN_H_
diff --git a/components/webapps/browser/android/java/res/layout/pwa_restore_list_item_app.xml b/components/webapps/browser/android/java/res/layout/pwa_restore_list_item_app.xml
index d53e965..3156c2a 100644
--- a/components/webapps/browser/android/java/res/layout/pwa_restore_list_item_app.xml
+++ b/components/webapps/browser/android/java/res/layout/pwa_restore_list_item_app.xml
@@ -7,6 +7,7 @@
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:clickable="true"
     android:layout_width="match_parent"
     android:layout_height="wrap_content">
 
@@ -26,7 +27,8 @@
         android:layout_weight="1"
         android:textAppearance="@style/TextAppearance.Headline.Primary" />
 
-    <CheckBox android:id="@+id/checkbox"
+    <CheckBox
+        android:id="@+id/checkbox"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginEnd="24dp"
diff --git a/components/webapps/browser/android/java/src/org/chromium/components/webapps/pwa_restore_ui/PwaRestoreBottomSheetView.java b/components/webapps/browser/android/java/src/org/chromium/components/webapps/pwa_restore_ui/PwaRestoreBottomSheetView.java
index 871d33b..09066a6dc 100644
--- a/components/webapps/browser/android/java/src/org/chromium/components/webapps/pwa_restore_ui/PwaRestoreBottomSheetView.java
+++ b/components/webapps/browser/android/java/src/org/chromium/components/webapps/pwa_restore_ui/PwaRestoreBottomSheetView.java
@@ -15,6 +15,7 @@
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.view.ViewGroup.MarginLayoutParams;
+import android.widget.CheckBox;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.LinearLayout.LayoutParams;
@@ -137,6 +138,16 @@
 
             ((ImageView) appView.findViewById(R.id.app_icon)).setImageBitmap(placeholder);
             ((TextView) appView.findViewById(R.id.app_name)).setText(app.appName());
+
+            // Any click on an app item, that is not handled by the view itself, should be treated
+            // as an attempt to toggle the checkbox.
+            appView.setOnClickListener(
+                    new OnClickListener() {
+                        @Override
+                        public void onClick(View view) {
+                            ((CheckBox) view.findViewById(R.id.checkbox)).toggle();
+                        }
+                    });
             scrollViewContent.addView(appView);
 
             // Add a 2pt separator view as a separate item in the ScrollView so as to not affect the
diff --git a/components/webxr/android/cardboard_device_provider.cc b/components/webxr/android/cardboard_device_provider.cc
index 31368ff..25503766 100644
--- a/components/webxr/android/cardboard_device_provider.cc
+++ b/components/webxr/android/cardboard_device_provider.cc
@@ -9,9 +9,18 @@
 #include "components/webxr/mailbox_to_surface_bridge_impl.h"
 #include "device/vr/android/cardboard/cardboard_device.h"
 #include "device/vr/android/cardboard/cardboard_sdk_impl.h"
+#include "device/vr/android/cardboard/mock_cardboard_sdk.h"
 
 namespace webxr {
 
+// static
+bool CardboardDeviceProvider::use_cardboard_mock_for_testing_ = false;
+
+// static
+void CardboardDeviceProvider::set_use_cardboard_mock_for_testing(bool value) {
+  use_cardboard_mock_for_testing_ = value;
+}
+
 CardboardDeviceProvider::CardboardDeviceProvider(
     std::unique_ptr<webxr::VrCompositorDelegateProvider>
         compositor_delegate_provider)
@@ -24,8 +33,16 @@
   CHECK(!initialized_);
   DVLOG(2) << __func__ << ": Cardboard is supported, creating device";
 
+  std::unique_ptr<device::CardboardSdk> sdk;
+  if (use_cardboard_mock_for_testing_) {
+    sdk = std::make_unique<device::MockCardboardSdk>();
+  } else {
+    sdk = std::make_unique<device::CardboardSdkImpl>();
+  }
+  CHECK(sdk);
+
   cardboard_device_ = std::make_unique<device::CardboardDevice>(
-      std::make_unique<device::CardboardSdkImpl>(),
+      std::move(sdk),
       std::make_unique<webxr::MailboxToSurfaceBridgeFactoryImpl>(),
       std::make_unique<webxr::XrSessionCoordinator>(),
       std::move(compositor_delegate_provider_),
diff --git a/components/webxr/android/cardboard_device_provider.h b/components/webxr/android/cardboard_device_provider.h
index 3a843f5..e10db380 100644
--- a/components/webxr/android/cardboard_device_provider.h
+++ b/components/webxr/android/cardboard_device_provider.h
@@ -18,6 +18,8 @@
 
 class CardboardDeviceProvider : public device::VRDeviceProvider {
  public:
+  static void set_use_cardboard_mock_for_testing(bool value);
+
   explicit CardboardDeviceProvider(
       std::unique_ptr<webxr::VrCompositorDelegateProvider>
           compositor_delegate_provider);
@@ -30,6 +32,11 @@
   bool Initialized() override;
 
  private:
+  // This flag forces to use the mock implementation of the
+  // `device::CardboardSdk` interface. Meant to be used for testing purposes
+  // only.
+  static bool use_cardboard_mock_for_testing_;
+
   std::unique_ptr<device::CardboardDevice> cardboard_device_;
   std::unique_ptr<webxr::VrCompositorDelegateProvider>
       compositor_delegate_provider_;
diff --git a/components/webxr/android/cardboard_utils.cc b/components/webxr/android/cardboard_utils.cc
index 7feecdc..44e26ab 100644
--- a/components/webxr/android/cardboard_utils.cc
+++ b/components/webxr/android/cardboard_utils.cc
@@ -3,8 +3,10 @@
 // found in the LICENSE file.
 
 #include "base/android/jni_android.h"
+#include "components/webxr/android/cardboard_device_provider.h"
 #include "components/webxr/android/xr_jni_headers/CardboardUtils_jni.h"
 #include "device/vr/android/cardboard/cardboard_device_params.h"
+#include "device/vr/android/cardboard/mock_cardboard_sdk.h"
 
 namespace webxr {
 
@@ -15,4 +17,16 @@
       true);
 }
 
+void JNI_CardboardUtils_NativeUseCardboardMockForTesting(JNIEnv* env) {
+  DVLOG(1) << __func__;
+  CardboardDeviceProvider::set_use_cardboard_mock_for_testing(true);
+}
+
+jboolean JNI_CardboardUtils_NativeCheckQrCodeScannerWasLaunchedForTesting(
+    JNIEnv* env) {
+  DVLOG(1) << __func__;
+  return device::MockCardboardSdk::
+      check_qr_code_scanner_was_launched_for_testing();
+}
+
 }  // namespace webxr
diff --git a/components/webxr/android/java/src/org/chromium/components/webxr/CardboardUtils.java b/components/webxr/android/java/src/org/chromium/components/webxr/CardboardUtils.java
index f1e60dae..09246a1 100644
--- a/components/webxr/android/java/src/org/chromium/components/webxr/CardboardUtils.java
+++ b/components/webxr/android/java/src/org/chromium/components/webxr/CardboardUtils.java
@@ -15,14 +15,30 @@
     /**
      * Forces to always return Cardboard Viewer v1 device parameters to prevent
      * any disk read or write and the QR code scanner activity to be launched.
-     * Meant to be used for testing purposes only.
      */
     public static void useCardboardV1DeviceParamsForTesting() {
         CardboardUtilsJni.get().nativeUseCardboardV1DeviceParamsForTesting();
     }
 
+    /** Forces to use the mock implementation of the `device::CardboardSdk` interface. */
+    public static void useCardboardMockForTesting() {
+        CardboardUtilsJni.get().nativeUseCardboardMockForTesting();
+    }
+
+    /**
+     * Returns true if `MockCardboardSdk::ScanQrCodeAndSaveDeviceParams()` has been executed,
+     * otherwise it returns false.
+     */
+    public static boolean checkQrCodeScannerWasLaunchedForTesting() {
+        return CardboardUtilsJni.get().nativeCheckQrCodeScannerWasLaunchedForTesting();
+    }
+
     @NativeMethods
     /* package */ interface CardboardUtilsNative {
         void nativeUseCardboardV1DeviceParamsForTesting();
+
+        void nativeUseCardboardMockForTesting();
+
+        boolean nativeCheckQrCodeScannerWasLaunchedForTesting();
     }
 }
diff --git a/content/app/content_main_runner_impl.cc b/content/app/content_main_runner_impl.cc
index b3003b5..2f06ed2 100644
--- a/content/app/content_main_runner_impl.cc
+++ b/content/app/content_main_runner_impl.cc
@@ -923,7 +923,9 @@
     tracing::EnableStartupTracingIfNeeded();
 
 #if BUILDFLAG(IS_WIN)
+#if !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
   base::trace_event::TraceEventETWExport::EnableETWExport();
+#endif
 #endif  // BUILDFLAG(IS_WIN)
 
   // Android tracing started at the beginning of the method.
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index 116f448..49f78ae3 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -40,6 +40,7 @@
     ":for_content_tests",  # See top of //content/BUILD.gn for why.
     "//content/app:*",
     "//content/public/browser:browser_sources",
+    "//content/test/fuzzer:ad_auction_headers_util_fuzzer",
     "//content/test/fuzzer:browser_accessibility_fuzzer",
     "//content/test/fuzzer:clipboard_host_mojolpm_fuzzer",
     "//content/test/fuzzer:first_party_set_parser_fuzzer_support",
@@ -1136,6 +1137,8 @@
     "installedapp/installed_app_provider_impl.h",
     "interest_group/ad_auction_document_data.cc",
     "interest_group/ad_auction_document_data.h",
+    "interest_group/ad_auction_headers_util.cc",
+    "interest_group/ad_auction_headers_util.h",
     "interest_group/ad_auction_page_data.cc",
     "interest_group/ad_auction_page_data.h",
     "interest_group/ad_auction_result_metrics.cc",
diff --git a/content/browser/DEPS b/content/browser/DEPS
index 55bc8da3..1e79dbf1 100644
--- a/content/browser/DEPS
+++ b/content/browser/DEPS
@@ -13,7 +13,9 @@
   "+components/file_access",
   "+components/filename_generation",
   "+components/grit",
-  "+components/permissions/features.h",
+  # TODO(crbug.com/1501507): Remove illegal dependency of content/browser/ to
+  # components/permissions/features.h
+  "!components/permissions/features.h",
   "+components/power_monitor",
   "+components/services/font",
   "+components/services/filesystem",
diff --git a/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc b/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc
index 0643391..0c0f1a7 100644
--- a/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc
+++ b/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc
@@ -585,6 +585,137 @@
 }
 
 IN_PROC_BROWSER_TEST_F(AXPlatformNodeTextRangeProviderWinBrowserTest,
+                       GetTextEmptyButtonWithAriaLabelRangeAnchoredInSpans) {
+  LoadInitialAccessibilityTreeFromHtml(R"HTML(
+      <!DOCTYPE html>
+          <span>before</span>
+          <button aria-label="middle"><svg aria-hidden="true"></svg></button>
+          <span>after</span>
+  )HTML");
+
+  BrowserAccessibility* root = GetRootAndAssertNonNull();
+
+  ComPtr<ITextRangeProvider> text_range_provider;
+  GetTextRangeProviderFromTextNode(*root, &text_range_provider);
+  ASSERT_NE(nullptr, text_range_provider.Get());
+  EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"before\nmiddle\nafter");
+  EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
+      text_range_provider, TextPatternRangeEndpoint_Start, TextUnit_Character,
+      /*count*/ 6,
+      /*expected_text*/ L"\nmiddle\nafter",
+      /*expected_count*/ 6);
+  EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
+      text_range_provider, TextPatternRangeEndpoint_Start, TextUnit_Character,
+      /*count*/ 7,
+      /*expected_text*/ L"\nafter",
+      /*expected_count*/ 7);
+}
+
+IN_PROC_BROWSER_TEST_F(AXPlatformNodeTextRangeProviderWinBrowserTest,
+                       GetTextEmptyButtonWithAriaLabel) {
+  LoadInitialAccessibilityTreeFromHtml(R"HTML(
+      <!DOCTYPE html>
+          <button aria-label="middle"><svg aria-hidden="true"></svg></button>
+  )HTML");
+
+  BrowserAccessibility* root = GetRootAndAssertNonNull();
+
+  ComPtr<ITextRangeProvider> text_range_provider;
+  GetTextRangeProviderFromTextNode(*root, &text_range_provider);
+  ASSERT_NE(nullptr, text_range_provider.Get());
+  EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"middle");
+  EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
+      text_range_provider, TextPatternRangeEndpoint_Start, TextUnit_Character,
+      /*count*/ 3,
+      /*expected_text*/ L"dle",
+      /*expected_count*/ 3);
+}
+
+IN_PROC_BROWSER_TEST_F(AXPlatformNodeTextRangeProviderWinBrowserTest,
+                       GetTextEmptyButtonWithAriaLabelStartAnchoredInSpan) {
+  LoadInitialAccessibilityTreeFromHtml(R"HTML(
+      <!DOCTYPE html>
+          <span>before</span>
+          <button aria-label="middle"><svg aria-hidden="true"></svg></button>
+  )HTML");
+
+  BrowserAccessibility* root = GetRootAndAssertNonNull();
+
+  ComPtr<ITextRangeProvider> text_range_provider;
+  GetTextRangeProviderFromTextNode(*root, &text_range_provider);
+  ASSERT_NE(nullptr, text_range_provider.Get());
+  EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"before\nmiddle");
+  EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
+      text_range_provider, TextPatternRangeEndpoint_Start, TextUnit_Character,
+      /*count*/ 8,
+      /*expected_text*/ L"iddle",
+      /*expected_count*/ 8);
+}
+
+IN_PROC_BROWSER_TEST_F(AXPlatformNodeTextRangeProviderWinBrowserTest,
+                       GetTextEmptyButtonWithAriaLabelButtonEndAnchoredInSpan) {
+  LoadInitialAccessibilityTreeFromHtml(R"HTML(
+      <!DOCTYPE html>
+          <button aria-label="middle"><svg aria-hidden="true"></svg></button>
+          <span>after</span>
+  )HTML");
+
+  BrowserAccessibility* root = GetRootAndAssertNonNull();
+
+  ComPtr<ITextRangeProvider> text_range_provider;
+  GetTextRangeProviderFromTextNode(*root, &text_range_provider);
+  ASSERT_NE(nullptr, text_range_provider.Get());
+  EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"middle\nafter");
+  EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
+      text_range_provider, TextPatternRangeEndpoint_Start, TextUnit_Character,
+      /*count*/ 6,
+      /*expected_text*/ L"\nafter",
+      /*expected_count*/ 6);
+}
+
+IN_PROC_BROWSER_TEST_F(AXPlatformNodeTextRangeProviderWinBrowserTest,
+                       GetTextEmptyTextfieldWithAriaLabel) {
+  LoadInitialAccessibilityTreeFromHtml(R"HTML(
+      <!DOCTYPE html>
+          <input type="text" aria-label="before">
+          <span>after</span>
+  )HTML");
+
+  BrowserAccessibility* root = GetRootAndAssertNonNull();
+
+  ComPtr<ITextRangeProvider> text_range_provider;
+  GetTextRangeProviderFromTextNode(*root, &text_range_provider);
+  ASSERT_NE(nullptr, text_range_provider.Get());
+  EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"before\nafter");
+  EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
+      text_range_provider, TextPatternRangeEndpoint_Start, TextUnit_Character,
+      /*count*/ 6,
+      /*expected_text*/ L"\nafter",
+      /*expected_count*/ 6);
+}
+
+IN_PROC_BROWSER_TEST_F(AXPlatformNodeTextRangeProviderWinBrowserTest,
+                       GetTextNonEmptyTextfieldWithAriaLabel) {
+  LoadInitialAccessibilityTreeFromHtml(R"HTML(
+      <!DOCTYPE html>
+          <input type="text" aria-label="before" value="go blue">
+          <span>after</span>
+  )HTML");
+
+  BrowserAccessibility* root = GetRootAndAssertNonNull();
+
+  ComPtr<ITextRangeProvider> text_range_provider;
+  GetTextRangeProviderFromTextNode(*root, &text_range_provider);
+  ASSERT_NE(nullptr, text_range_provider.Get());
+  EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"go blue\nafter");
+  EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT(
+      text_range_provider, TextPatternRangeEndpoint_Start, TextUnit_Character,
+      /*count*/ 6,
+      /*expected_text*/ L"e\nafter",
+      /*expected_count*/ 6);
+}
+
+IN_PROC_BROWSER_TEST_F(AXPlatformNodeTextRangeProviderWinBrowserTest,
                        GetAttributeValue) {
   LoadInitialAccessibilityTreeFromHtml(R"HTML(
       <!DOCTYPE html>
@@ -637,14 +768,16 @@
       <!DOCTYPE html>
       <html>
         <body>
-          <input readonly type="text" aria-label="input_text">
-          <input type="search" aria-label="input_search">
+          <input readonly type="text">
+          <input type="search">
         </body>
       </html>
   )HTML");
 
+  BrowserAccessibility* root = GetRootAndAssertNonNull();
+
   BrowserAccessibility* input_text_node =
-      FindNode(ax::mojom::Role::kTextField, "input_text");
+      root->InternalGetFirstChild()->InternalGetFirstChild();
   ASSERT_NE(nullptr, input_text_node);
   EXPECT_TRUE(input_text_node->IsLeaf());
   EXPECT_EQ(0u, input_text_node->PlatformChildCount());
@@ -664,7 +797,7 @@
   value.Reset();
 
   BrowserAccessibility* input_search_node =
-      FindNode(ax::mojom::Role::kSearchBox, "input_search");
+      input_text_node->InternalGetNextSibling();
   ASSERT_NE(nullptr, input_search_node);
   EXPECT_TRUE(input_search_node->IsLeaf());
   EXPECT_EQ(0u, input_search_node->PlatformChildCount());
diff --git a/content/browser/accessibility/snapshot_ax_tree_browsertest.cc b/content/browser/accessibility/snapshot_ax_tree_browsertest.cc
index aad66e4a..5d7b6ca4 100644
--- a/content/browser/accessibility/snapshot_ax_tree_browsertest.cc
+++ b/content/browser/accessibility/snapshot_ax_tree_browsertest.cc
@@ -5,6 +5,7 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
 #include "base/test/scoped_feature_list.h"
+#include "build/build_config.h"
 #include "content/browser/fenced_frame/fenced_frame.h"
 #include "content/browser/web_contents/web_contents_impl.h"
 #include "content/public/common/content_features.h"
@@ -18,6 +19,7 @@
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "testing/gmock/include/gmock/gmock-matchers.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "ui/accessibility/accessibility_features.h"
 #include "ui/accessibility/ax_node.h"
 #include "ui/accessibility/ax_tree.h"
 
@@ -66,8 +68,16 @@
 
 class SnapshotAXTreeBrowserTest : public ContentBrowserTest {
  public:
-  SnapshotAXTreeBrowserTest() {}
-  ~SnapshotAXTreeBrowserTest() override {}
+  SnapshotAXTreeBrowserTest() {
+#if BUILDFLAG(IS_ANDROID)
+    scoped_feature_list_.InitAndDisableFeature(
+        features::kAccessibilitySnapshotStressTests);
+#endif
+  }
+  ~SnapshotAXTreeBrowserTest() override = default;
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
 };
 
 IN_PROC_BROWSER_TEST_F(SnapshotAXTreeBrowserTest,
diff --git a/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.cc b/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.cc
index 384a1e5..e4756be6 100644
--- a/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.cc
+++ b/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.cc
@@ -218,8 +218,6 @@
       base::BindOnce(&AggregationServiceNetworkFetcherImpl::OnJsonParse,
                      weak_factory_.GetWeakPtr(), url, std::move(callback),
                      std::move(response_time), std::move(expiry_time)));
-
-  // TODO(crbug.com/1232599): Add performance metrics for key fetching.
 }
 
 void AggregationServiceNetworkFetcherImpl::OnJsonParse(
diff --git a/content/browser/android/java/gin_java_bridge_dispatcher_host.cc b/content/browser/android/java/gin_java_bridge_dispatcher_host.cc
index 74f0843..66ed45d5 100644
--- a/content/browser/android/java/gin_java_bridge_dispatcher_host.cc
+++ b/content/browser/android/java/gin_java_bridge_dispatcher_host.cc
@@ -84,6 +84,7 @@
     if (!should_create) {
       return nullptr;
     }
+    CHECK(frame_host->IsRenderFrameLive());
     auto& bound_host = remotes_[routing_id];
     frame_host->GetRemoteAssociatedInterfaces()->GetInterface(
         bound_host.BindNewEndpointAndPassReceiver());
@@ -317,6 +318,9 @@
         ->GetPrimaryMainFrame()
         ->ForEachRenderFrameHostIncludingSpeculative(
             [&name, object_id, this](RenderFrameHostImpl* render_frame_host) {
+              if (!render_frame_host->IsRenderFrameLive()) {
+                return;
+              }
               GetJavaBridge(render_frame_host, /*should_create=*/true)
                   ->AddNamedObject(name, object_id);
             });
@@ -360,6 +364,10 @@
         ->GetPrimaryMainFrame()
         ->ForEachRenderFrameHostIncludingSpeculative(
             [&copied_name, this](RenderFrameHostImpl* render_frame_host) {
+              if (!render_frame_host->IsRenderFrameLive()) {
+                return;
+              }
+
               auto* bridge =
                   GetJavaBridge(render_frame_host, /*should_create=*/false);
               if (!bridge) {
diff --git a/content/browser/attribution_reporting/aggregatable_histogram_contribution.h b/content/browser/attribution_reporting/aggregatable_histogram_contribution.h
index 01041d34..dd1020d 100644
--- a/content/browser/attribution_reporting/aggregatable_histogram_contribution.h
+++ b/content/browser/attribution_reporting/aggregatable_histogram_contribution.h
@@ -29,6 +29,9 @@
 
   uint32_t value() const { return value_; }
 
+  friend bool operator==(const AggregatableHistogramContribution&,
+                         const AggregatableHistogramContribution&) = default;
+
  private:
   absl::uint128 key_;
   uint32_t value_;
diff --git a/content/browser/attribution_reporting/attribution_config.h b/content/browser/attribution_reporting/attribution_config.h
index 274c47c..2ae8bab 100644
--- a/content/browser/attribution_reporting/attribution_config.h
+++ b/content/browser/attribution_reporting/attribution_config.h
@@ -48,8 +48,10 @@
     // Controls the time window for reporting origins per site limit.
     base::TimeDelta origins_per_site_window = base::Days(1);
 
-    // When adding new members, the corresponding `Validate()` definition and
-    // `operator==()` definition in `attribution_interop_parser_unittest.cc`
+    friend bool operator==(const RateLimitConfig&,
+                           const RateLimitConfig&) = default;
+
+    // When adding new members, the corresponding `Validate()` definition
     // should also be updated.
   };
 
@@ -88,8 +90,10 @@
     double max_navigation_info_gain = kDefaultMaxNavigationInfoGain;
     double max_event_info_gain = kDefaultMaxEventInfoGain;
 
-    // When adding new members, the corresponding `Validate()` definition and
-    // `operator==()` definition in `attribution_interop_parser_unittest.cc`
+    friend bool operator==(const EventLevelLimit&,
+                           const EventLevelLimit&) = default;
+
+    // When adding new members, the corresponding `Validate()` definition
     // should also be updated.
   };
 
@@ -117,8 +121,10 @@
 
     int max_aggregatable_reports_per_source = 20;
 
-    // When adding new members, the corresponding `Validate()` definition and
-    // `operator==()` definition in `attribution_interop_parser_unittest.cc`
+    friend bool operator==(const AggregateLimit&,
+                           const AggregateLimit&) = default;
+
+    // When adding new members, the corresponding `Validate()` definition
     // should also be updated.
   };
 
@@ -130,8 +136,10 @@
     int max_per_reporting_site = 50;
     base::TimeDelta rate_limit_window = base::Minutes(1);
 
-    // When adding new members, the corresponding `Validate()` definition and
-    // `operator==()` definition in `attribution_interop_parser_unittest.cc`
+    friend bool operator==(const DestinationRateLimit&,
+                           const DestinationRateLimit&) = default;
+
+    // When adding new members, the corresponding `Validate()` definition
     // should also be updated.
   };
 
@@ -160,8 +168,10 @@
   AggregateLimit aggregate_limit;
   DestinationRateLimit destination_rate_limit;
 
-  // When adding new members, the corresponding `Validate()` definition and
-  // `operator==()` definition in `attribution_interop_parser_unittest.cc`
+  friend bool operator==(const AttributionConfig&,
+                         const AttributionConfig&) = default;
+
+  // When adding new members, the corresponding `Validate()` definition
   // should also be updated.
 };
 
diff --git a/content/browser/attribution_reporting/attribution_info.h b/content/browser/attribution_reporting/attribution_info.h
index 69f6164..7d45910 100644
--- a/content/browser/attribution_reporting/attribution_info.h
+++ b/content/browser/attribution_reporting/attribution_info.h
@@ -37,8 +37,8 @@
   // origin.
   attribution_reporting::SuitableOrigin context_origin;
 
-  // When adding new members, the corresponding `operator==()` definition in
-  // `attribution_test_utils.h` should also be updated.
+  friend bool operator==(const AttributionInfo&,
+                         const AttributionInfo&) = default;
 };
 
 }  // namespace content
diff --git a/content/browser/attribution_reporting/attribution_interop_parser.cc b/content/browser/attribution_reporting/attribution_interop_parser.cc
index d3643f4..05027b01 100644
--- a/content/browser/attribution_reporting/attribution_interop_parser.cc
+++ b/content/browser/attribution_reporting/attribution_interop_parser.cc
@@ -788,20 +788,6 @@
   return *this;
 }
 
-// TODO(apaseltiner): The payload comparison here is too brittle. Reports can
-// be logically equivalent without having exactly the same JSON structure.
-bool operator==(const AttributionInteropOutput::Report& a,
-                const AttributionInteropOutput::Report& b) {
-  return a.time == b.time &&  //
-         a.url == b.url &&    //
-         a.payload == b.payload;
-}
-
-bool operator==(const AttributionInteropOutput::UnparsableRegistration& a,
-                const AttributionInteropOutput::UnparsableRegistration& b) {
-  return a.time == b.time && a.type == b.type;
-}
-
 std::ostream& operator<<(std::ostream& out,
                          const AttributionInteropOutput::Report& report) {
   return out << report.ToJson();
diff --git a/content/browser/attribution_reporting/attribution_interop_parser.h b/content/browser/attribution_reporting/attribution_interop_parser.h
index 7889977..3053ebdd 100644
--- a/content/browser/attribution_reporting/attribution_interop_parser.h
+++ b/content/browser/attribution_reporting/attribution_interop_parser.h
@@ -43,10 +43,6 @@
 
   AttributionSimulationEvent(AttributionSimulationEvent&&);
   AttributionSimulationEvent& operator=(AttributionSimulationEvent&&);
-
-  bool operator<(const AttributionSimulationEvent& other) const {
-    return time < other.time;
-  }
 };
 
 using AttributionSimulationEvents = std::vector<AttributionSimulationEvent>;
@@ -78,6 +74,11 @@
     Report& operator=(const Report&);
 
     base::Value::Dict ToJson() const;
+
+    // TODO(apaseltiner): The payload comparison here is too brittle. Reports
+    // can be logically equivalent without having exactly the same JSON
+    // structure.
+    friend bool operator==(const Report&, const Report&) = default;
   };
 
   struct UnparsableRegistration {
@@ -85,6 +86,9 @@
     attribution_reporting::mojom::RegistrationType type;
 
     base::Value::Dict ToJson() const;
+
+    friend bool operator==(const UnparsableRegistration&,
+                           const UnparsableRegistration&) = default;
   };
 
   std::vector<Report> reports;
@@ -105,12 +109,6 @@
       base::Value::Dict);
 };
 
-bool operator==(const AttributionInteropOutput::Report&,
-                const AttributionInteropOutput::Report&);
-
-bool operator==(const AttributionInteropOutput::UnparsableRegistration&,
-                const AttributionInteropOutput::UnparsableRegistration&);
-
 std::ostream& operator<<(std::ostream&,
                          const AttributionInteropOutput::Report&);
 
diff --git a/content/browser/attribution_reporting/attribution_interop_parser_unittest.cc b/content/browser/attribution_reporting/attribution_interop_parser_unittest.cc
index 765787c..d762724 100644
--- a/content/browser/attribution_reporting/attribution_interop_parser_unittest.cc
+++ b/content/browser/attribution_reporting/attribution_interop_parser_unittest.cc
@@ -7,7 +7,6 @@
 #include <cmath>
 #include <functional>
 #include <string>
-#include <tuple>
 #include <utility>
 #include <vector>
 
@@ -27,57 +26,6 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace content {
-
-bool operator==(const AttributionConfig::RateLimitConfig& a,
-                const AttributionConfig::RateLimitConfig& b) {
-  const auto tie = [](const AttributionConfig::RateLimitConfig& config) {
-    return std::make_tuple(
-        config.time_window, config.max_source_registration_reporting_origins,
-        config.max_attribution_reporting_origins, config.max_attributions,
-        config.max_reporting_origins_per_source_reporting_site,
-        config.origins_per_site_window);
-  };
-  return tie(a) == tie(b);
-}
-
-bool operator==(const AttributionConfig::EventLevelLimit& a,
-                const AttributionConfig::EventLevelLimit& b) {
-  const auto tie = [](const AttributionConfig::EventLevelLimit& config) {
-    return std::make_tuple(
-        config.randomized_response_epsilon, config.max_reports_per_destination,
-        config.max_navigation_info_gain, config.max_event_info_gain);
-  };
-  return tie(a) == tie(b);
-}
-
-bool operator==(const AttributionConfig::AggregateLimit& a,
-                const AttributionConfig::AggregateLimit& b) {
-  const auto tie = [](const AttributionConfig::AggregateLimit& config) {
-    return std::make_tuple(
-        config.max_reports_per_destination, config.min_delay, config.delay_span,
-        config.null_reports_rate_include_source_registration_time,
-        config.null_reports_rate_exclude_source_registration_time,
-        config.max_aggregatable_reports_per_source);
-  };
-  return tie(a) == tie(b);
-}
-
-bool operator==(const AttributionConfig::DestinationRateLimit& a,
-                const AttributionConfig::DestinationRateLimit& b) {
-  return a.max_total == b.max_total &&
-         a.max_per_reporting_site == b.max_per_reporting_site &&
-         a.rate_limit_window == b.rate_limit_window;
-}
-
-bool operator==(const AttributionConfig& a, const AttributionConfig& b) {
-  const auto tie = [](const AttributionConfig& config) {
-    return std::make_tuple(config.max_sources_per_origin, config.rate_limit,
-                           config.event_level_limit, config.aggregate_limit,
-                           config.destination_rate_limit);
-  };
-  return tie(a) == tie(b);
-}
-
 namespace {
 
 using ::base::test::ErrorIs;
diff --git a/content/browser/attribution_reporting/attribution_interop_runner.cc b/content/browser/attribution_reporting/attribution_interop_runner.cc
index 41ee96d..f7a37191 100644
--- a/content/browser/attribution_reporting/attribution_interop_runner.cc
+++ b/content/browser/attribution_reporting/attribution_interop_runner.cc
@@ -410,7 +410,8 @@
     return AttributionInteropOutput();
   }
 
-  DCHECK(base::ranges::is_sorted(events));
+  DCHECK(base::ranges::is_sorted(events, /*comp=*/{},
+                                 &AttributionSimulationEvent::time));
   DCHECK(base::ranges::adjacent_find(
              events, /*pred=*/{},
              [](const auto& event) { return event.time; }) == events.end());
diff --git a/content/browser/attribution_reporting/attribution_manager_impl_unittest.cc b/content/browser/attribution_reporting/attribution_manager_impl_unittest.cc
index 0c496e4..3790d23 100644
--- a/content/browser/attribution_reporting/attribution_manager_impl_unittest.cc
+++ b/content/browser/attribution_reporting/attribution_manager_impl_unittest.cc
@@ -31,6 +31,9 @@
 #include "base/test/scoped_feature_list.h"
 #include "base/time/time.h"
 #include "base/values.h"
+#include "components/attribution_reporting/aggregatable_dedup_key.h"
+#include "components/attribution_reporting/aggregatable_trigger_data.h"
+#include "components/attribution_reporting/event_trigger_data.h"
 #include "components/attribution_reporting/filters.h"
 #include "components/attribution_reporting/suitable_origin.h"
 #include "content/browser/aggregation_service/aggregatable_report.h"
diff --git a/content/browser/attribution_reporting/attribution_storage_sql.cc b/content/browser/attribution_reporting/attribution_storage_sql.cc
index 1001aac0..9c8be9d 100644
--- a/content/browser/attribution_reporting/attribution_storage_sql.cc
+++ b/content/browser/attribution_reporting/attribution_storage_sql.cc
@@ -643,10 +643,12 @@
 
   if (attribution_logic == StoredSource::AttributionLogic::kFalsely) {
     for (const auto& fake_report : *randomized_response_data.response()) {
-      DCHECK(stored_source->trigger_specs().find(fake_report.trigger_data,
-                                                 TriggerDataMatching::kExact));
+      auto trigger_spec_it = stored_source->trigger_specs().find(
+          fake_report.trigger_data, TriggerDataMatching::kExact);
+      DCHECK(trigger_spec_it);
 
-      const EventReportWindows& windows = reg.event_report_windows;
+      const EventReportWindows& windows =
+          (*trigger_spec_it).second.event_report_windows();
       DCHECK_LT(fake_report.window_index,
                 static_cast<int>(windows.end_times().size()));
 
diff --git a/content/browser/attribution_reporting/attribution_test_utils.cc b/content/browser/attribution_reporting/attribution_test_utils.cc
index e72227a..53cc94e 100644
--- a/content/browser/attribution_reporting/attribution_test_utils.cc
+++ b/content/browser/attribution_reporting/attribution_test_utils.cc
@@ -491,52 +491,6 @@
           source_.common_info().reporting_origin(), source_.source_time()));
 }
 
-bool operator==(const AttributionTrigger& a, const AttributionTrigger& b) {
-  const auto tie = [](const AttributionTrigger& t) {
-    return std::make_tuple(t.registration(), t.destination_origin(),
-                           t.is_within_fenced_frame());
-  };
-  return tie(a) == tie(b);
-}
-
-bool operator==(const CommonSourceInfo& a, const CommonSourceInfo& b) {
-  const auto tie = [](const CommonSourceInfo& source) {
-    return std::make_tuple(source.source_origin(), source.reporting_origin(),
-                           source.source_type());
-  };
-  return tie(a) == tie(b);
-}
-
-bool operator==(const AttributionInfo& a, const AttributionInfo& b) {
-  const auto tie = [](const AttributionInfo& attribution_info) {
-    return std::make_tuple(attribution_info.debug_key,
-                           attribution_info.context_origin);
-  };
-  return tie(a) == tie(b);
-}
-
-bool operator==(const FakeEventLevelReport& a, const FakeEventLevelReport& b) {
-  const auto tie = [](const FakeEventLevelReport& r) {
-    return std::make_tuple(r.trigger_data, r.window_index);
-  };
-  return tie(a) == tie(b);
-}
-
-bool operator<(const FakeEventLevelReport& a, const FakeEventLevelReport& b) {
-  const auto tie = [](const FakeEventLevelReport& r) {
-    return std::make_tuple(r.trigger_data, r.window_index);
-  };
-  return tie(a) < tie(b);
-}
-
-bool operator==(const StorableSource& a, const StorableSource& b) {
-  const auto tie = [](const StorableSource& source) {
-    return std::make_tuple(source.registration(), source.common_info(),
-                           source.is_within_fenced_frame());
-  };
-  return tie(a) == tie(b);
-}
-
 // Does not compare source IDs, as they are set by the underlying sqlite DB and
 // should not be tested.
 bool operator==(const StoredSource& a, const StoredSource& b) {
@@ -555,14 +509,6 @@
   return tie(a) == tie(b);
 }
 
-bool operator==(const AggregatableHistogramContribution& a,
-                const AggregatableHistogramContribution& b) {
-  const auto tie = [](const AggregatableHistogramContribution& contribution) {
-    return std::make_tuple(contribution.key(), contribution.value());
-  };
-  return tie(a) == tie(b);
-}
-
 bool operator==(const AttributionReport::EventLevelData& a,
                 const AttributionReport::EventLevelData& b) {
   const auto tie = [](const AttributionReport::EventLevelData& data) {
@@ -614,14 +560,6 @@
   return tie(a) == tie(b);
 }
 
-bool operator==(const SendResult& a, const SendResult& b) {
-  const auto tie = [](const SendResult& info) {
-    return std::make_tuple(info.status, info.network_error,
-                           info.http_response_code);
-  };
-  return tie(a) == tie(b);
-}
-
 std::ostream& operator<<(std::ostream& out, RateLimitResult result) {
   switch (result) {
     case RateLimitResult::kAllowed:
diff --git a/content/browser/attribution_reporting/attribution_test_utils.h b/content/browser/attribution_reporting/attribution_test_utils.h
index c191cb6..c5b4523 100644
--- a/content/browser/attribution_reporting/attribution_test_utils.h
+++ b/content/browser/attribution_reporting/attribution_test_utils.h
@@ -305,38 +305,21 @@
           attribution_reporting::mojom::SourceRegistrationTimeConfig::kInclude;
 };
 
-bool operator==(const AttributionTrigger& a, const AttributionTrigger& b);
+bool operator==(const StoredSource&, const StoredSource&);
 
-bool operator==(const CommonSourceInfo& a, const CommonSourceInfo& b);
+bool operator==(const AttributionReport::EventLevelData&,
+                const AttributionReport::EventLevelData&);
 
-bool operator==(const AttributionInfo& a, const AttributionInfo& b);
+bool operator==(const AttributionReport::CommonAggregatableData&,
+                const AttributionReport::CommonAggregatableData&);
 
-bool operator==(const FakeEventLevelReport& a, const FakeEventLevelReport& b);
+bool operator==(const AttributionReport::AggregatableAttributionData&,
+                const AttributionReport::AggregatableAttributionData&);
 
-bool operator<(const FakeEventLevelReport& a, const FakeEventLevelReport& b);
+bool operator==(const AttributionReport::NullAggregatableData&,
+                const AttributionReport::NullAggregatableData&);
 
-bool operator==(const StorableSource& a, const StorableSource& b);
-
-bool operator==(const StoredSource& a, const StoredSource& b);
-
-bool operator==(const AggregatableHistogramContribution& a,
-                const AggregatableHistogramContribution& b);
-
-bool operator==(const AttributionReport::EventLevelData& a,
-                const AttributionReport::EventLevelData& b);
-
-bool operator==(const AttributionReport::CommonAggregatableData& a,
-                const AttributionReport::CommonAggregatableData& b);
-
-bool operator==(const AttributionReport::AggregatableAttributionData& a,
-                const AttributionReport::AggregatableAttributionData& b);
-
-bool operator==(const AttributionReport::NullAggregatableData& a,
-                const AttributionReport::NullAggregatableData& b);
-
-bool operator==(const AttributionReport& a, const AttributionReport& b);
-
-bool operator==(const SendResult& a, const SendResult& b);
+bool operator==(const AttributionReport&, const AttributionReport&);
 
 std::ostream& operator<<(std::ostream& out, RateLimitResult result);
 
diff --git a/content/browser/attribution_reporting/attribution_trigger.h b/content/browser/attribution_reporting/attribution_trigger.h
index 6e62c34e..88e6871 100644
--- a/content/browser/attribution_reporting/attribution_trigger.h
+++ b/content/browser/attribution_reporting/attribution_trigger.h
@@ -57,6 +57,9 @@
     return verifications_;
   }
 
+  friend bool operator==(const AttributionTrigger&,
+                         const AttributionTrigger&) = default;
+
  private:
   attribution_reporting::SuitableOrigin reporting_origin_;
 
diff --git a/content/browser/attribution_reporting/common_source_info.h b/content/browser/attribution_reporting/common_source_info.h
index 73632cc1..4bd12fa 100644
--- a/content/browser/attribution_reporting/common_source_info.h
+++ b/content/browser/attribution_reporting/common_source_info.h
@@ -41,14 +41,14 @@
 
   const net::SchemefulSite& source_site() const { return source_site_; }
 
+  friend bool operator==(const CommonSourceInfo&,
+                         const CommonSourceInfo&) = default;
+
  private:
   net::SchemefulSite source_site_;
   attribution_reporting::SuitableOrigin source_origin_;
   attribution_reporting::SuitableOrigin reporting_origin_;
   attribution_reporting::mojom::SourceType source_type_;
-
-  // When adding new members, the corresponding `operator==()` definition in
-  // `attribution_test_utils.h` should also be updated.
 };
 
 }  // namespace content
diff --git a/content/browser/attribution_reporting/privacy_math.h b/content/browser/attribution_reporting/privacy_math.h
index 76e5ec7..b84df95 100644
--- a/content/browser/attribution_reporting/privacy_math.h
+++ b/content/browser/attribution_reporting/privacy_math.h
@@ -7,6 +7,7 @@
 
 #include <stdint.h>
 
+#include <compare>
 #include <map>
 #include <tuple>
 #include <vector>
@@ -26,6 +27,10 @@
 struct FakeEventLevelReport {
   uint64_t trigger_data;
   int window_index;
+
+  friend std::strong_ordering operator<=>(const FakeEventLevelReport&,
+                                          const FakeEventLevelReport&) =
+      default;
 };
 
 // Corresponds to `StoredSource::AttributionLogic` as follows:
diff --git a/content/browser/attribution_reporting/rate_limit_table_unittest.cc b/content/browser/attribution_reporting/rate_limit_table_unittest.cc
index 28f0bf7..2737f44 100644
--- a/content/browser/attribution_reporting/rate_limit_table_unittest.cc
+++ b/content/browser/attribution_reporting/rate_limit_table_unittest.cc
@@ -144,16 +144,9 @@
   std::string context_origin;
   base::Time time;
   base::Time source_expiry_or_attribution_time;
-};
 
-bool operator==(const RateLimitRow& a, const RateLimitRow& b) {
-  const auto tie = [](const RateLimitRow& row) {
-    return std::make_tuple(row.scope, row.source_site, row.destination_site,
-                           row.reporting_origin, row.context_origin, row.time,
-                           row.source_expiry_or_attribution_time);
-  };
-  return tie(a) == tie(b);
-}
+  friend bool operator==(const RateLimitRow&, const RateLimitRow&) = default;
+};
 
 std::ostream& operator<<(std::ostream& out, const RateLimitScope scope) {
   switch (scope) {
diff --git a/content/browser/attribution_reporting/send_result.h b/content/browser/attribution_reporting/send_result.h
index f73b255..44dd077e 100644
--- a/content/browser/attribution_reporting/send_result.h
+++ b/content/browser/attribution_reporting/send_result.h
@@ -51,8 +51,7 @@
   int network_error;
   int http_response_code;
 
-  // When adding new members, the corresponding `operator==()` definition in
-  // `attribution_test_utils.h` should also be updated.
+  friend bool operator==(const SendResult&, const SendResult&) = default;
 };
 
 }  // namespace content
diff --git a/content/browser/attribution_reporting/storable_source.h b/content/browser/attribution_reporting/storable_source.h
index 5c5b68a..a89f3202 100644
--- a/content/browser/attribution_reporting/storable_source.h
+++ b/content/browser/attribution_reporting/storable_source.h
@@ -48,6 +48,9 @@
 
   bool is_within_fenced_frame() const { return is_within_fenced_frame_; }
 
+  friend bool operator==(const StorableSource&,
+                         const StorableSource&) = default;
+
  private:
   attribution_reporting::SourceRegistration registration_;
 
@@ -55,9 +58,6 @@
 
   // Whether the source is registered within a fenced frame tree.
   bool is_within_fenced_frame_;
-
-  // When adding new members, the corresponding `operator==()` definition in
-  // `attribution_test_utils.h` should also be updated.
 };
 
 }  // namespace content
diff --git a/content/browser/interest_group/ad_auction_headers_util.cc b/content/browser/interest_group/ad_auction_headers_util.cc
new file mode 100644
index 0000000..5aca590f
--- /dev/null
+++ b/content/browser/interest_group/ad_auction_headers_util.cc
@@ -0,0 +1,238 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/interest_group/ad_auction_headers_util.h"
+
+#include <cstddef>
+#include <functional>
+#include <map>
+#include <string>
+#include <vector>
+
+#include "base/base64url.h"
+#include "base/feature_list.h"
+#include "base/strings/string_split.h"
+#include "content/browser/interest_group/ad_auction_page_data.h"
+#include "content/browser/renderer_host/frame_tree.h"
+#include "content/browser/renderer_host/frame_tree_node.h"
+#include "content/browser/renderer_host/render_frame_host_impl.h"
+#include "content/public/browser/page.h"
+#include "content/public/browser/page_user_data.h"
+#include "content/public/browser/render_frame_host.h"
+#include "net/http/http_response_headers.h"
+#include "services/network/public/cpp/is_potentially_trustworthy.h"
+#include "services/network/public/cpp/resource_request.h"
+#include "third_party/blink/public/common/features.h"
+#include "third_party/blink/public/common/permissions_policy/permissions_policy.h"
+#include "third_party/blink/public/mojom/permissions_policy/permissions_policy_feature.mojom-shared.h"
+#include "url/origin.h"
+
+namespace content {
+
+const char kAdAuctionRequestHeaderKey[] = "Sec-Ad-Auction-Fetch";
+const char kAdAuctionResultResponseHeaderKey[] = "Ad-Auction-Result";
+const char kAdAuctionSignalsResponseHeaderKey[] = "Ad-Auction-Signals";
+const char kAdAuctionAdditionalBidResponseHeaderKey[] =
+    "Ad-Auction-Additional-Bid";
+
+namespace {
+// Common conditions checked for eligibility in both
+//`IsAdAuctionHeadersEligible` and `IsAdAuctionHeadersEligibleForNavigation`.
+bool IsAdAuctionHeadersEligibleInternal(Page& page,
+                                        RenderFrameHost* render_frame_host,
+                                        const url::Origin& top_frame_origin,
+                                        const url::Origin& request_origin) {
+  if (!page.IsPrimary()) {
+    return false;
+  }
+
+  if (request_origin.opaque()) {
+    return false;
+  }
+
+  if (!network::IsOriginPotentiallyTrustworthy(request_origin)) {
+    return false;
+  }
+
+  return GetContentClient()->browser()->IsInterestGroupAPIAllowed(
+      render_frame_host, ContentBrowserClient::InterestGroupApiOperation::kSell,
+      top_frame_origin, request_origin);
+}
+}  // namespace
+
+bool IsAdAuctionHeadersEligible(
+    RenderFrameHostImpl& initiator_rfh,
+    const network::ResourceRequest& resource_request) {
+  // Fenced frames disallow most permissions policies which would let this
+  // function return false regardless, but adding this check to be more
+  // explicit.
+  if (initiator_rfh.IsNestedWithinFencedFrame()) {
+    return false;
+  }
+  // TODO(crbug.com/1244137): IsPrimary() doesn't actually detect portals yet.
+  // Remove this when it does.
+  if (!initiator_rfh.GetMainFrame()->IsOutermostMainFrame()) {
+    return false;
+  }
+
+  const blink::PermissionsPolicy* permissions_policy =
+      initiator_rfh.permissions_policy();
+  if (!permissions_policy->IsFeatureEnabledForSubresourceRequest(
+          blink::mojom::PermissionsPolicyFeature::kRunAdAuction,
+          url::Origin::Create(resource_request.url), resource_request)) {
+    return false;
+  }
+
+  return IsAdAuctionHeadersEligibleInternal(
+      /*page=*/initiator_rfh.GetPage(),
+      /*render_frame_host=*/&initiator_rfh,
+      /*top_frame_origin=*/
+      initiator_rfh.GetMainFrame()->GetLastCommittedOrigin(),
+      /*request_origin=*/url::Origin::Create(resource_request.url));
+}
+
+bool IsAdAuctionHeadersEligibleForNavigation(
+    const FrameTreeNode& frame,
+    const url::Origin& navigation_request_origin) {
+  // Fenced frames disallow most permissions policies which would let this
+  // function return false regardless, but adding this check to be more
+  // explicit.
+  if (frame.IsInFencedFrameTree()) {
+    return false;
+  }
+
+  // The provided frame represents the iframe, so it must have a parent frame.
+  if (!frame.GetParentOrOuterDocument()) {
+    return false;
+  }
+
+  const blink::PermissionsPolicy* parent_policy =
+      frame.GetParentOrOuterDocument()->permissions_policy();
+  DCHECK(parent_policy);
+  if (!parent_policy->IsFeatureEnabledForOrigin(
+          blink::mojom::PermissionsPolicyFeature::kRunAdAuction,
+          navigation_request_origin)) {
+    return false;
+  }
+
+  return IsAdAuctionHeadersEligibleInternal(
+      /*page=*/frame.current_frame_host()->GetPage(),
+      /*render_frame_host=*/frame.GetParentOrOuterDocument(),
+      /*top_frame_origin=*/frame.frame_tree().root()->current_origin(),
+      /*request_origin=*/navigation_request_origin);
+}
+
+// Please note: before modifying this function, please acknowledge this is
+// processing untrusted content from a non sandboxed process. So please keep
+// this function simple and avoid adding custom logic.
+//
+// Fuzzer: ad_auction_headers_util_fuzzer
+std::vector<std::string> ParseAdAuctionResultResponseHeader(
+    const std::string& ad_auction_results) {
+  std::vector<std::string> parsed_results;
+  for (const auto& result :
+       base::SplitString(ad_auction_results, ",", base::TRIM_WHITESPACE,
+                         base::SPLIT_WANT_NONEMPTY)) {
+    std::string result_bytes;
+    if (!base::Base64UrlDecode(result,
+                               base::Base64UrlDecodePolicy::IGNORE_PADDING,
+                               &result_bytes)) {
+      continue;
+    }
+    if (result_bytes.size() != 32) {
+      continue;
+    }
+    parsed_results.emplace_back(std::move(result_bytes));
+  }
+  return parsed_results;
+}
+
+// Please note: before modifying this function, please acknowledge this is
+// processing untrusted content from a non sandboxed process. So please keep
+// this function simple and avoid adding custom logic.
+//
+// Fuzzer: ad_auction_headers_util_fuzzer
+void ParseAdAuctionAdditionalBidResponseHeader(
+    const std::string& header_line,
+    std::map<std::string, std::vector<std::string>>&
+        nonce_additional_bids_map) {
+  // Skip if `header_line` doesn't match the format
+  // <36 characters auction nonce>:<base64-encoded signed additional bid>
+  std::vector<std::string> nonce_and_additional_bid = base::SplitString(
+      header_line, ":", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
+  if (nonce_and_additional_bid.size() != 2) {
+    return;
+  }
+
+  const std::string& nonce = nonce_and_additional_bid[0];
+  if (nonce.size() != 36) {
+    return;
+  }
+  const std::string& additional_bid = nonce_and_additional_bid[1];
+
+  nonce_additional_bids_map[nonce].push_back(additional_bid);
+}
+
+// NOTE: This function processes untrusted content, in an unsafe language, from
+// an unsandboxed process. As such, minimize the amount of parsing done in this
+// function, and instead separate it into distinct functions that are covered
+// by fuzz tests.
+void ProcessAdAuctionResponseHeaders(const url::Origin& request_origin,
+                                     Page& page,
+                                     net::HttpResponseHeaders& headers) {
+  AdAuctionPageData* ad_auction_page_data =
+      PageUserData<AdAuctionPageData>::GetOrCreateForPage(page);
+
+  if (base::FeatureList::IsEnabled(
+          blink::features::kFledgeBiddingAndAuctionServer)) {
+    std::string ad_auction_results;
+    if (headers.GetNormalizedHeader(kAdAuctionResultResponseHeaderKey,
+                                    &ad_auction_results)) {
+      for (const std::string& parsed_result :
+           ParseAdAuctionResultResponseHeader(ad_auction_results)) {
+        ad_auction_page_data->AddAuctionResultWitnessForOrigin(request_origin,
+                                                               parsed_result);
+      }
+    }
+  }
+  // We intentionally leave the `Ad-Auction-Result` response header in place.
+
+  if (base::FeatureList::IsEnabled(blink::features::kAdAuctionSignals)) {
+    std::string ad_auction_signals;
+    if (headers.GetNormalizedHeader(kAdAuctionSignalsResponseHeaderKey,
+                                    &ad_auction_signals)) {
+      if (ad_auction_signals.size() <=
+          static_cast<size_t>(
+              blink::features::kAdAuctionSignalsMaxSizeBytes.Get())) {
+        ad_auction_page_data->AddAuctionSignalsWitnessForOrigin(
+            request_origin, ad_auction_signals);
+      }
+    }
+  }
+  headers.RemoveHeader(kAdAuctionSignalsResponseHeaderKey);
+
+  if (base::FeatureList::IsEnabled(blink::features::kFledgeNegativeTargeting)) {
+    std::map<std::string, std::vector<std::string>> nonce_additional_bids_map;
+    size_t iter = 0;
+    std::string header_line;
+    while (headers.EnumerateHeader(
+        &iter, kAdAuctionAdditionalBidResponseHeaderKey, &header_line)) {
+      ParseAdAuctionAdditionalBidResponseHeader(header_line,
+                                                nonce_additional_bids_map);
+    }
+    if (!nonce_additional_bids_map.empty()) {
+      ad_auction_page_data->AddAuctionAdditionalBidsWitnessForOrigin(
+          request_origin, nonce_additional_bids_map);
+    }
+  }
+  headers.RemoveHeader(kAdAuctionAdditionalBidResponseHeaderKey);
+}
+
+void RemoveAdAuctionResponseHeaders(net::HttpResponseHeaders& headers) {
+  // We intentionally leave the `Ad-Auction-Result` response header in place.
+  headers.RemoveHeader(kAdAuctionSignalsResponseHeaderKey);
+  headers.RemoveHeader(kAdAuctionAdditionalBidResponseHeaderKey);
+}
+
+}  // namespace content
diff --git a/content/browser/interest_group/ad_auction_headers_util.h b/content/browser/interest_group/ad_auction_headers_util.h
new file mode 100644
index 0000000..8a1b07b
--- /dev/null
+++ b/content/browser/interest_group/ad_auction_headers_util.h
@@ -0,0 +1,85 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_INTEREST_GROUP_AD_AUCTION_HEADERS_UTIL_H_
+#define CONTENT_BROWSER_INTEREST_GROUP_AD_AUCTION_HEADERS_UTIL_H_
+
+#include <functional>
+
+#include "content/browser/renderer_host/render_frame_host_impl.h"
+#include "content/common/content_export.h"
+#include "content/public/browser/weak_document_ptr.h"
+#include "net/http/http_response_headers.h"
+#include "services/network/public/cpp/resource_request.h"
+#include "url/origin.h"
+
+namespace content {
+
+// The request header key that triggers interception of the auction result,
+// signals, and additional bids from their associated response headers.
+extern const char kAdAuctionRequestHeaderKey[];
+
+// Response header keys associated with auction result, signals, and
+// additional bids, respectively.
+extern const char CONTENT_EXPORT kAdAuctionResultResponseHeaderKey[];
+extern const char CONTENT_EXPORT kAdAuctionSignalsResponseHeaderKey[];
+extern const char CONTENT_EXPORT kAdAuctionAdditionalBidResponseHeaderKey[];
+
+// Returns whether or not this request is eligible for ad auction headers
+// requested for fetch requests. The `initiator_rfh` should be the
+// frame from which the fetch request is being issued.`initiator_rfh`
+// is not modified by this function, and needs to be passed in non-const only
+// because downstream functions use it for console logging.
+CONTENT_EXPORT bool IsAdAuctionHeadersEligible(
+    RenderFrameHostImpl& initiator_rfh,
+    const network::ResourceRequest& resource_request);
+
+// Returns whether or not this request is eligible for ad auction headers
+// requested for iframe navigations. The `frame` argument provided should be
+// that of the iframe. This uses the parent frame's permissions policy to
+// provide greater consistency with fetch requests by treating the iframe
+// navigation as a subresource request.
+CONTENT_EXPORT bool IsAdAuctionHeadersEligibleForNavigation(
+    const FrameTreeNode& frame,
+    const url::Origin& navigation_request_origin);
+
+// NOTE: Exposed only for fuzz testing. This is used by
+// `ProcessAdAuctionResponseHeaders`, declared below.
+//
+// Splits and base64 decodes the `Ad-Auction-Result` response header,
+// and returns the results. This function processes untrusted content, in an
+// unsafe language, from an unsandboxed process, hence the fuzz test coverage.
+CONTENT_EXPORT std::vector<std::string> ParseAdAuctionResultResponseHeader(
+    const std::string& ad_auction_results);
+
+// NOTE: Exposed only for fuzz testing. This is used by
+// `ProcessAdAuctionResponseHeaders`, declared below.
+//
+// Splits and validates the `Ad-Auction-Additional-Bid` response header,
+// and inserts the resulting additional bids into the provided map. This
+// function processes untrusted content, in an unsafe language, from an
+// unsandboxed process, hence the fuzz test coverage.
+CONTENT_EXPORT void ParseAdAuctionAdditionalBidResponseHeader(
+    const std::string& header_line,
+    std::map<std::string, std::vector<std::string>>& nonce_additional_bids_map);
+
+// Parses and sets the values of the `Ad-Auction-Result`, `Ad-Auction-Signals`,
+// and `Ad-Auction-Additional-Bid` headers on the `AdAuctionPageData`
+// associated with the `render_frame_host` for later use in the auction.
+// Clears the `Ad-Auction-Signals` and `Ad-Auction-Additional-Bid` headers from
+// `headers`.
+CONTENT_EXPORT void ProcessAdAuctionResponseHeaders(
+    const url::Origin& request_origin,
+    Page& page,
+    net::HttpResponseHeaders& headers);
+
+// Removes the `Ad-Auction-Signals` and `Ad-Auction-Additional-Bid` response
+// headers from `headers`. Called when the request encountered a redirect or
+// error page.
+CONTENT_EXPORT void RemoveAdAuctionResponseHeaders(
+    net::HttpResponseHeaders& headers);
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_INTEREST_GROUP_AD_AUCTION_HEADERS_UTIL_H_
diff --git a/content/browser/interest_group/ad_auction_headers_util_unittest.cc b/content/browser/interest_group/ad_auction_headers_util_unittest.cc
new file mode 100644
index 0000000..147f61a3
--- /dev/null
+++ b/content/browser/interest_group/ad_auction_headers_util_unittest.cc
@@ -0,0 +1,611 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/interest_group/ad_auction_headers_util.h"
+
+#include <functional>
+#include <string>
+
+#include "base/base64url.h"
+#include "base/strings/string_piece.h"
+#include "base/test/bind.h"
+#include "base/test/scoped_feature_list.h"
+#include "content/browser/interest_group/ad_auction_page_data.h"
+#include "content/browser/interest_group/header_direct_from_seller_signals.h"
+#include "content/browser/loader/subresource_proxying_url_loader_service.h"
+#include "content/public/browser/content_browser_client.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/test/navigation_simulator.h"
+#include "content/public/test/test_renderer_host.h"
+#include "content/test/test_render_frame_host.h"
+#include "net/http/http_response_headers.h"
+#include "net/http/http_version.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
+#include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
+#include "services/network/public/cpp/resource_request.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "url/gurl.h"
+#include "url/origin.h"
+
+namespace content {
+
+namespace {
+
+constexpr char kLegitimateAdAuctionResponse[] =
+    "ungWv48Bz-pBQUDeXa4iI7ADYaOWF3qctBD_YfIAFa0=";
+constexpr char kLegitimateAdAuctionSignals[] =
+    R"([{"adSlot":"slot1", "sellerSignals":{"signal1":"value1"}}])";
+
+std::string Base64UrlDecode(base::StringPiece input) {
+  std::string bytes;
+  CHECK(base::Base64UrlDecode(
+      input, base::Base64UrlDecodePolicy::IGNORE_PADDING, &bytes));
+  return bytes;
+}
+
+class InterceptingContentBrowserClient : public ContentBrowserClient {
+ public:
+  bool IsInterestGroupAPIAllowed(RenderFrameHost* render_frame_host,
+                                 InterestGroupApiOperation operation,
+                                 const url::Origin& top_frame_origin,
+                                 const url::Origin& api_origin) override {
+    return interest_group_allowed_by_settings_;
+  }
+
+  void set_interest_group_allowed_by_settings(bool allowed) {
+    interest_group_allowed_by_settings_ = allowed;
+  }
+
+ private:
+  bool interest_group_allowed_by_settings_ = false;
+};
+
+blink::ParsedPermissionsPolicy CreatePermissivePolicy() {
+  blink::ParsedPermissionsPolicy policy;
+  policy.emplace_back(
+      blink::mojom::PermissionsPolicyFeature::kRunAdAuction,
+      /*allowed_origins=*/
+      std::vector{*blink::OriginWithPossibleWildcards::FromOrigin(
+                      url::Origin::Create(GURL("https://google.com"))),
+                  *blink::OriginWithPossibleWildcards::FromOrigin(
+                      url::Origin::Create(GURL("https://foo1.com")))},
+      /*self_if_matches=*/absl::nullopt,
+      /*matches_all_origins=*/false,
+      /*matches_opaque_src=*/false);
+  return policy;
+}
+
+blink::ParsedPermissionsPolicy CreateRestrictivePolicy() {
+  blink::ParsedPermissionsPolicy policy;
+  policy.emplace_back(
+      blink::mojom::PermissionsPolicyFeature::kRunAdAuction,
+      /*allowed_origins=*/std::vector<blink::OriginWithPossibleWildcards>(),
+      /*self_if_matches=*/absl::nullopt,
+      /*matches_all_origins=*/false,
+      /*matches_opaque_src=*/false);
+  return policy;
+}
+
+}  // namespace
+
+class IsAdAuctionHeadersEligibleTest
+    : public RenderViewHostTestHarness,
+      public testing::WithParamInterface<bool> {
+ public:
+  IsAdAuctionHeadersEligibleTest() {
+    scoped_feature_list_.InitWithFeatures(
+        /*enabled_features=*/{blink::features::kInterestGroupStorage},
+        /*disabled_features=*/{});
+  }
+
+  void SetUp() override {
+    RenderViewHostTestHarness::SetUp();
+
+    original_client_ = SetBrowserClientForTesting(&browser_client_);
+    browser_client_.set_interest_group_allowed_by_settings(true);
+  }
+
+  void TearDown() override {
+    SetBrowserClientForTesting(original_client_);
+
+    RenderViewHostTestHarness::TearDown();
+  }
+
+  RenderFrameHostImpl& NavigatePage(const GURL& url) {
+    auto main_frame_navigation =
+        NavigationSimulator::CreateBrowserInitiated(url, web_contents());
+    main_frame_navigation->SetPermissionsPolicyHeader(CreatePermissivePolicy());
+    main_frame_navigation->Commit();
+
+    if (GetParam()) {
+      return static_cast<RenderFrameHostImpl&>(
+          *main_frame_navigation->GetFinalRenderFrameHost());
+    }
+
+    TestRenderFrameHost* subframe = static_cast<TestRenderFrameHost*>(
+        RenderFrameHostTester::For(web_contents()->GetPrimaryMainFrame())
+            ->AppendChild("child0"));
+
+    auto subframe_navigation =
+        NavigationSimulator::CreateRendererInitiated(url, subframe);
+    subframe_navigation->SetPermissionsPolicyHeader(CreatePermissivePolicy());
+    subframe_navigation->Commit();
+
+    return static_cast<RenderFrameHostImpl&>(
+        *subframe_navigation->GetFinalRenderFrameHost());
+  }
+
+  network::ResourceRequest CreateResourceRequest(const GURL& url) {
+    network::ResourceRequest resource_request;
+    resource_request.url = url;
+    resource_request.ad_auction_headers = true;
+    return resource_request;
+  }
+
+ protected:
+  base::test::ScopedFeatureList scoped_feature_list_;
+
+  InterceptingContentBrowserClient browser_client_;
+  raw_ptr<ContentBrowserClient> original_client_ = nullptr;
+};
+
+TEST_P(IsAdAuctionHeadersEligibleTest, RequestIsEligible) {
+  GURL test_url("https://google.com");
+  RenderFrameHostImpl& render_frame_host = NavigatePage(test_url);
+  EXPECT_TRUE(IsAdAuctionHeadersEligible(render_frame_host,
+                                         CreateResourceRequest(test_url)));
+}
+
+TEST_P(IsAdAuctionHeadersEligibleTest, NotEligibleDueToUntrustworthyOrigin) {
+  GURL test_url("http://google.com");
+  RenderFrameHostImpl& render_frame_host = NavigatePage(test_url);
+  EXPECT_FALSE(IsAdAuctionHeadersEligible(render_frame_host,
+                                          CreateResourceRequest(test_url)));
+}
+
+TEST_P(IsAdAuctionHeadersEligibleTest, NotEligibleDueToOpaqueOrigin) {
+  GURL test_url("https://google.com");
+  RenderFrameHostImpl& render_frame_host = NavigatePage(test_url);
+  network::ResourceRequest resource_request =
+      CreateResourceRequest(GURL("data:image/jpeg;base64,UklGRjwCAAA="));
+  EXPECT_FALSE(IsAdAuctionHeadersEligible(render_frame_host, resource_request));
+}
+
+TEST_P(IsAdAuctionHeadersEligibleTest, NotEligibleDueToInactiveFrame) {
+  GURL test_url("https://google.com");
+  RenderFrameHostImpl& render_frame_host = NavigatePage(test_url);
+  render_frame_host.GetMainFrame()->SetLifecycleState(
+      RenderFrameHostImpl::LifecycleStateImpl::kReadyToBeDeleted);
+  EXPECT_FALSE(IsAdAuctionHeadersEligible(render_frame_host,
+                                          CreateResourceRequest(test_url)));
+}
+
+TEST_P(IsAdAuctionHeadersEligibleTest, NotEligibleDueToPermissionsPolicy) {
+  GURL test_url("https://google.com");
+  RenderFrameHostImpl& render_frame_host = NavigatePage(test_url);
+
+  // The permissions policy disallows `foo2.com`. The request won't be eligible
+  // for ad auction headers.
+  GURL unpermitted_url("https://foo2.com");
+  EXPECT_FALSE(IsAdAuctionHeadersEligible(
+      render_frame_host, CreateResourceRequest(unpermitted_url)));
+}
+
+TEST_P(IsAdAuctionHeadersEligibleTest,
+       NotEligibleDueToInterestGroupAPINotAllowed) {
+  browser_client_.set_interest_group_allowed_by_settings(false);
+
+  GURL test_url("https://google.com");
+  RenderFrameHostImpl& render_frame_host = NavigatePage(test_url);
+  EXPECT_FALSE(IsAdAuctionHeadersEligible(render_frame_host,
+                                          CreateResourceRequest(test_url)));
+}
+
+INSTANTIATE_TEST_SUITE_P(HasOptionalResourceRequest,
+                         IsAdAuctionHeadersEligibleTest,
+                         testing::Bool(),
+                         [](const testing::TestParamInfo<bool>& info) {
+                           return info.param ? "RequestFromMainFrame"
+                                             : "RequestFromIFrame";
+                         });
+
+class IsAdAuctionHeadersEligibleForNavigationTest
+    : public RenderViewHostTestHarness {
+ public:
+  IsAdAuctionHeadersEligibleForNavigationTest() {
+    scoped_feature_list_.InitWithFeatures(
+        /*enabled_features=*/{blink::features::kInterestGroupStorage},
+        /*disabled_features=*/{});
+  }
+
+  void SetUp() override {
+    RenderViewHostTestHarness::SetUp();
+
+    original_client_ = SetBrowserClientForTesting(&browser_client_);
+    browser_client_.set_interest_group_allowed_by_settings(true);
+  }
+
+  void TearDown() override {
+    SetBrowserClientForTesting(original_client_);
+
+    RenderViewHostTestHarness::TearDown();
+  }
+
+  const FrameTreeNode& NavigatePage(const GURL& url) {
+    auto main_frame_navigation =
+        NavigationSimulator::CreateBrowserInitiated(url, web_contents());
+    main_frame_navigation->SetPermissionsPolicyHeader(CreatePermissivePolicy());
+    main_frame_navigation->Commit();
+
+    TestRenderFrameHost* subframe = static_cast<TestRenderFrameHost*>(
+        RenderFrameHostTester::For(web_contents()->GetPrimaryMainFrame())
+            ->AppendChild("child0"));
+
+    auto subframe_navigation =
+        NavigationSimulator::CreateRendererInitiated(url, subframe);
+
+    // IFrame navigations should use its parent frame's permission policy, and
+    // so this iframe's permission policy should be restrictive.
+    subframe_navigation->SetPermissionsPolicyHeader(CreateRestrictivePolicy());
+    subframe_navigation->Commit();
+
+    return *static_cast<RenderFrameHostImpl*>(
+                subframe_navigation->GetFinalRenderFrameHost())
+                ->frame_tree_node();
+  }
+
+ protected:
+  base::test::ScopedFeatureList scoped_feature_list_;
+
+  InterceptingContentBrowserClient browser_client_;
+  raw_ptr<ContentBrowserClient> original_client_ = nullptr;
+};
+
+TEST_F(IsAdAuctionHeadersEligibleForNavigationTest, RequestIsEligible) {
+  GURL test_url("https://google.com");
+  const FrameTreeNode& frame = NavigatePage(test_url);
+  EXPECT_TRUE(IsAdAuctionHeadersEligibleForNavigation(
+      frame, url::Origin::Create(test_url)));
+}
+
+TEST_F(IsAdAuctionHeadersEligibleForNavigationTest,
+       NotEligibleDueToUntrustworthyOrigin) {
+  GURL test_url("http://google.com");
+  const FrameTreeNode& frame = NavigatePage(test_url);
+  EXPECT_FALSE(IsAdAuctionHeadersEligibleForNavigation(
+      frame, url::Origin::Create(test_url)));
+}
+
+TEST_F(IsAdAuctionHeadersEligibleForNavigationTest,
+       NotEligibleDueToNonChildFrameProvided) {
+  GURL test_url("https://google.com");
+  auto main_frame_navigation =
+      NavigationSimulator::CreateBrowserInitiated(test_url, web_contents());
+  main_frame_navigation->SetPermissionsPolicyHeader(CreatePermissivePolicy());
+  main_frame_navigation->Commit();
+  const FrameTreeNode& frame =
+      *static_cast<RenderFrameHostImpl*>(
+           main_frame_navigation->GetFinalRenderFrameHost())
+           ->frame_tree_node();
+  EXPECT_FALSE(IsAdAuctionHeadersEligibleForNavigation(
+      frame, url::Origin::Create(test_url)));
+}
+
+TEST_F(IsAdAuctionHeadersEligibleForNavigationTest,
+       NotEligibleDueToOpaqueOrigin) {
+  GURL test_url("https://google.com");
+  const FrameTreeNode& frame = NavigatePage(test_url);
+  EXPECT_FALSE(IsAdAuctionHeadersEligibleForNavigation(frame, url::Origin()));
+}
+
+TEST_F(IsAdAuctionHeadersEligibleForNavigationTest,
+       NotEligibleDueToInactiveFrame) {
+  GURL test_url("https://google.com");
+  const FrameTreeNode& frame = NavigatePage(test_url);
+  frame.GetParentOrOuterDocument()->SetLifecycleState(
+      RenderFrameHostImpl::LifecycleStateImpl::kReadyToBeDeleted);
+  EXPECT_FALSE(IsAdAuctionHeadersEligibleForNavigation(
+      frame, url::Origin::Create(test_url)));
+}
+
+TEST_F(IsAdAuctionHeadersEligibleForNavigationTest,
+       NotEligibleDueToPermissionsPolicy) {
+  GURL test_url("https://google.com");
+  const FrameTreeNode& frame = NavigatePage(test_url);
+
+  // The permissions policy disallows `foo2.com`. The request won't be eligible
+  // for ad auction headers.
+  GURL unpermitted_url("https://foo2.com");
+  EXPECT_FALSE(IsAdAuctionHeadersEligibleForNavigation(
+      frame, url::Origin::Create(unpermitted_url)));
+}
+
+TEST_F(IsAdAuctionHeadersEligibleForNavigationTest,
+       NotEligibleDueToInterestGroupAPINotAllowed) {
+  browser_client_.set_interest_group_allowed_by_settings(false);
+
+  GURL test_url("https://google.com");
+  const FrameTreeNode& frame = NavigatePage(test_url);
+  EXPECT_FALSE(IsAdAuctionHeadersEligibleForNavigation(
+      frame, url::Origin::Create(test_url)));
+}
+
+class ProcessAdAuctionResponseHeadersTest : public RenderViewHostTestHarness {
+ public:
+  ProcessAdAuctionResponseHeadersTest() {
+    scoped_feature_list_.InitWithFeatures(
+        /*enabled_features=*/{blink::features::kFledgeBiddingAndAuctionServer,
+                              blink::features::kAdAuctionSignals,
+                              blink::features::kFledgeNegativeTargeting},
+        /*disabled_features=*/{});
+  }
+
+  bool WitnessedAuctionResultForOrigin(const url::Origin& origin,
+                                       const std::string& response) {
+    Page& page = web_contents()->GetPrimaryPage();
+
+    AdAuctionPageData* ad_auction_page_data =
+        PageUserData<AdAuctionPageData>::GetOrCreateForPage(page);
+
+    return ad_auction_page_data->WitnessedAuctionResultForOrigin(origin,
+                                                                 response);
+  }
+
+  const scoped_refptr<HeaderDirectFromSellerSignals::Result>
+  ParseAndFindAdAuctionSignals(const url::Origin& origin,
+                               const std::string& ad_slot) {
+    Page& page = web_contents()->GetPrimaryPage();
+
+    AdAuctionPageData* ad_auction_page_data =
+        PageUserData<AdAuctionPageData>::GetOrCreateForPage(page);
+
+    scoped_refptr<HeaderDirectFromSellerSignals::Result> my_result;
+    base::RunLoop run_loop;
+    ad_auction_page_data->ParseAndFindAdAuctionSignals(
+        origin, ad_slot,
+        base::BindLambdaForTesting(
+            [&my_result, &run_loop](
+                scoped_refptr<HeaderDirectFromSellerSignals::Result> result) {
+              my_result = std::move(result);
+              run_loop.Quit();
+            }));
+    run_loop.Run();
+
+    return my_result;
+  }
+
+  std::vector<std::string> TakeAuctionAdditionalBidsForOriginAndNonce(
+      const url::Origin& origin,
+      const std::string& nonce) {
+    Page& page = web_contents()->GetPrimaryPage();
+
+    AdAuctionPageData* ad_auction_page_data =
+        PageUserData<AdAuctionPageData>::GetOrCreateForPage(page);
+
+    return ad_auction_page_data->TakeAuctionAdditionalBidsForOriginAndNonce(
+        origin, nonce);
+  }
+
+ protected:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+TEST_F(ProcessAdAuctionResponseHeadersTest,
+       MultipleAdAuctionResults_AllWitnessed) {
+  const char kLegitimateAdAuctionResponse2[] =
+      "8oX0szl-BNWitSuE3ZK5Npt05t83A1wrl94oBtlZHFs=";
+  const char kLegitimateAdAuctionResponse3[] =
+      "lIcI37kQp_ArBk_1JfdEjyQ0suSLUpYDIKO906THBdk=";
+
+  net::HttpResponseHeaders::Builder headers_builder({1, 1}, "200 OK");
+  headers_builder.AddHeader(kAdAuctionResultResponseHeaderKey,
+                            kLegitimateAdAuctionResponse);
+  std::string concatenated_header =
+      base::StrCat({kLegitimateAdAuctionResponse2, ",", "invalid", ",",
+                    kLegitimateAdAuctionResponse3});
+  headers_builder.AddHeader(kAdAuctionResultResponseHeaderKey,
+                            concatenated_header);
+  headers_builder.AddHeader(kAdAuctionResultResponseHeaderKey, "alsoInvalid");
+  scoped_refptr<net::HttpResponseHeaders> headers = headers_builder.Build();
+
+  // Unlike the signals and additional bid headers, the result header is not
+  // removed when it's stored in the browser.
+  EXPECT_TRUE(headers->HasHeader(kAdAuctionResultResponseHeaderKey));
+
+  ProcessAdAuctionResponseHeaders(url::Origin::Create(GURL("https://foo1.com")),
+                                  web_contents()->GetPrimaryPage(), *headers);
+
+  EXPECT_TRUE(WitnessedAuctionResultForOrigin(
+      url::Origin::Create(GURL("https://foo1.com")),
+      Base64UrlDecode(kLegitimateAdAuctionResponse)));
+
+  EXPECT_TRUE(WitnessedAuctionResultForOrigin(
+      url::Origin::Create(GURL("https://foo1.com")),
+      Base64UrlDecode(kLegitimateAdAuctionResponse2)));
+
+  EXPECT_TRUE(WitnessedAuctionResultForOrigin(
+      url::Origin::Create(GURL("https://foo1.com")),
+      Base64UrlDecode(kLegitimateAdAuctionResponse3)));
+}
+
+TEST_F(ProcessAdAuctionResponseHeadersTest,
+       InvalidAdAuctionResultResponseHeader) {
+  net::HttpResponseHeaders::Builder headers_builder({1, 1}, "200 OK");
+  headers_builder.AddHeader(kAdAuctionResultResponseHeaderKey,
+                            "invalid-response-header");
+  scoped_refptr<net::HttpResponseHeaders> headers = headers_builder.Build();
+
+  // Unlike the signals and additional bid headers, the result header is not
+  // removed when it's stored in the browser.
+  EXPECT_TRUE(headers->HasHeader(kAdAuctionResultResponseHeaderKey));
+
+  ProcessAdAuctionResponseHeaders(url::Origin::Create(GURL("https://foo1.com")),
+                                  web_contents()->GetPrimaryPage(), *headers);
+
+  EXPECT_FALSE(WitnessedAuctionResultForOrigin(
+      url::Origin::Create(GURL("https://foo1.com")),
+      "invalid-response-header"));
+}
+
+TEST_F(ProcessAdAuctionResponseHeadersTest, AdAuctionSignalsResponseHeader) {
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
+
+  net::HttpResponseHeaders::Builder headers_builder({1, 1}, "200 OK");
+  headers_builder.AddHeader(kAdAuctionSignalsResponseHeaderKey,
+                            kLegitimateAdAuctionSignals);
+  scoped_refptr<net::HttpResponseHeaders> headers = headers_builder.Build();
+
+  ProcessAdAuctionResponseHeaders(url::Origin::Create(GURL("https://foo1.com")),
+                                  web_contents()->GetPrimaryPage(), *headers);
+
+  // The `Ad-Auction-Signals` header was removed from the headers and
+  // stored in the browser.
+  EXPECT_FALSE(headers->HasHeader(kAdAuctionSignalsResponseHeaderKey));
+
+  const scoped_refptr<HeaderDirectFromSellerSignals::Result> signals =
+      ParseAndFindAdAuctionSignals(
+          url::Origin::Create(GURL("https://foo1.com")), "slot1");
+  EXPECT_EQ(*signals->seller_signals(), R"({"signal1":"value1"})");
+}
+
+TEST_F(ProcessAdAuctionResponseHeadersTest,
+       AdAuctionSignalsResponseHeaderTooLong) {
+  net::HttpResponseHeaders::Builder headers_builder({1, 1}, "200 OK");
+
+  // This test value for the `Ad-Auction-Signals` header doesn't have to be
+  // valid JSON, since it doesn't get as far as JSON parsing.
+  // `ProcessAdAuctionResponseHeaders` discards this excessively long header
+  // before involving `AdAuctionPageData`.
+  std::string very_long_header_value(10001, '0');
+  headers_builder.AddHeader(kAdAuctionSignalsResponseHeaderKey,
+                            very_long_header_value);
+  scoped_refptr<net::HttpResponseHeaders> headers = headers_builder.Build();
+
+  ProcessAdAuctionResponseHeaders(url::Origin::Create(GURL("https://foo1.com")),
+                                  web_contents()->GetPrimaryPage(), *headers);
+
+  // The `Ad-Auction-Signals` header was removed from the headers, even though
+  // it wasn't stored in the browser.
+  EXPECT_FALSE(headers->HasHeader(kAdAuctionSignalsResponseHeaderKey));
+
+  const scoped_refptr<HeaderDirectFromSellerSignals::Result> signals =
+      ParseAndFindAdAuctionSignals(
+          url::Origin::Create(GURL("https://foo1.com")), "slot1");
+  EXPECT_EQ(signals, nullptr);
+}
+
+TEST_F(ProcessAdAuctionResponseHeadersTest, AdditionalBid) {
+  net::HttpResponseHeaders::Builder headers_builder({1, 1}, "200 OK");
+  headers_builder.AddHeader(kAdAuctionAdditionalBidResponseHeaderKey,
+                            "00000000-0000-0000-0000-000000000000:e30=");
+  scoped_refptr<net::HttpResponseHeaders> headers = headers_builder.Build();
+
+  ProcessAdAuctionResponseHeaders(url::Origin::Create(GURL("https://foo1.com")),
+                                  web_contents()->GetPrimaryPage(), *headers);
+
+  // The `Ad-Auction-Additional-Bid` header was removed from the headers and
+  // stored in the browser.
+  EXPECT_FALSE(headers->HasHeader(kAdAuctionAdditionalBidResponseHeaderKey));
+
+  url::Origin request_origin = url::Origin::Create(GURL("https://foo1.com"));
+  EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
+                  request_origin, "00000000-0000-0000-0000-000000000000"),
+              ::testing::ElementsAre("e30="));
+
+  // Future calls to `TakeAuctionAdditionalBidsForOriginAndNonce` on the same
+  // origin and nonce should return nothing. Ideally this should be tested
+  // separately as a unitest for `AdAuctionPageData`.
+  EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
+                  request_origin, "00000000-0000-0000-0000-000000000000"),
+              ::testing::IsEmpty());
+}
+
+TEST_F(ProcessAdAuctionResponseHeadersTest,
+       AdditionalBid_MultipleNoncesAndMultipleBidsPerNonce) {
+  net::HttpResponseHeaders::Builder headers_builder({1, 1}, "200 OK");
+  headers_builder.AddHeader(kAdAuctionAdditionalBidResponseHeaderKey,
+                            "00000000-0000-0000-0000-000000000000:e30=,"
+                            "00000000-0000-0000-0000-000000000001:e30=");
+  headers_builder.AddHeader(kAdAuctionAdditionalBidResponseHeaderKey,
+                            "00000000-0000-0000-0000-000000000001:e2E6IDF9");
+  scoped_refptr<net::HttpResponseHeaders> headers = headers_builder.Build();
+
+  ProcessAdAuctionResponseHeaders(url::Origin::Create(GURL("https://foo1.com")),
+                                  web_contents()->GetPrimaryPage(), *headers);
+
+  // The `Ad-Auction-Additional-Bid` header was removed from the headers and
+  // stored in the browser.
+  EXPECT_FALSE(headers->HasHeader(kAdAuctionAdditionalBidResponseHeaderKey));
+
+  url::Origin request_origin = url::Origin::Create(GURL("https://foo1.com"));
+  EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
+                  request_origin, "00000000-0000-0000-0000-000000000000"),
+              ::testing::ElementsAre("e30="));
+  EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
+                  request_origin, "00000000-0000-0000-0000-000000000001"),
+              ::testing::ElementsAre("e30=", "e2E6IDF9"));
+
+  // Future calls to `TakeAuctionAdditionalBidsForOriginAndNonce` on the same
+  // origin and nonce should return nothing. Ideally this should be tested
+  // separately as a unitest for `AdAuctionPageData`.
+  EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
+                  request_origin, "00000000-0000-0000-0000-000000000000"),
+              ::testing::IsEmpty());
+  EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
+                  request_origin, "00000000-0000-0000-0000-000000000001"),
+              ::testing::IsEmpty());
+}
+
+TEST_F(ProcessAdAuctionResponseHeadersTest,
+       AdditionalBid_InvalidHeaderSkipped) {
+  net::HttpResponseHeaders::Builder headers_builder({1, 1}, "200 OK");
+
+  // Entries with invalid nonce (i.e. doesn't have 36 characters) will be
+  // skipped.
+  headers_builder.AddHeader(kAdAuctionAdditionalBidResponseHeaderKey,
+                            "00000000-0000-0000-0000-00000000000:e30=");
+  headers_builder.AddHeader(kAdAuctionAdditionalBidResponseHeaderKey,
+                            "00000000-0000-0000-0000-0000000000001:e30=,"
+                            "00000000-0000-0000-0000-000000000001:e2E6IDF9");
+  scoped_refptr<net::HttpResponseHeaders> headers = headers_builder.Build();
+
+  ProcessAdAuctionResponseHeaders(url::Origin::Create(GURL("https://foo1.com")),
+                                  web_contents()->GetPrimaryPage(), *headers);
+
+  // The `Ad-Auction-Additional-Bid` header was removed from the headers and
+  // stored in the browser.
+  EXPECT_FALSE(headers->HasHeader(kAdAuctionAdditionalBidResponseHeaderKey));
+
+  url::Origin request_origin = url::Origin::Create(GURL("https://foo1.com"));
+  EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
+                  request_origin, "00000000-0000-0000-0000-00000000000"),
+              ::testing::IsEmpty());
+  EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
+                  request_origin, "00000000-0000-0000-0000-0000000000001"),
+              ::testing::IsEmpty());
+  EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
+                  request_origin, "00000000-0000-0000-0000-000000000001"),
+              ::testing::ElementsAre("e2E6IDF9"));
+}
+
+TEST(RemoveAdAuctionResponseHeadersTest,
+     SignalsAndAdditionalBidHeadersAreRemoved) {
+  net::HttpResponseHeaders::Builder headers_builder({1, 1}, "200 OK");
+  headers_builder.AddHeader(kAdAuctionResultResponseHeaderKey,
+                            kLegitimateAdAuctionResponse);
+  headers_builder.AddHeader(kAdAuctionSignalsResponseHeaderKey,
+                            R"([{"adSlot":"slot1"}])");
+  headers_builder.AddHeader(kAdAuctionAdditionalBidResponseHeaderKey,
+                            "00000000-0000-0000-0000-000000000000:e30=");
+  scoped_refptr<net::HttpResponseHeaders> headers = headers_builder.Build();
+
+  RemoveAdAuctionResponseHeaders(*headers);
+
+  // Only the signals and additional bid headers are removed.
+  EXPECT_TRUE(headers->HasHeader(kAdAuctionResultResponseHeaderKey));
+  EXPECT_FALSE(headers->HasHeader(kAdAuctionSignalsResponseHeaderKey));
+  EXPECT_FALSE(headers->HasHeader(kAdAuctionAdditionalBidResponseHeaderKey));
+}
+
+}  // namespace content
diff --git a/content/browser/interest_group/ad_auction_url_loader_interceptor.cc b/content/browser/interest_group/ad_auction_url_loader_interceptor.cc
index a4513a3..fa5cd78 100644
--- a/content/browser/interest_group/ad_auction_url_loader_interceptor.cc
+++ b/content/browser/interest_group/ad_auction_url_loader_interceptor.cc
@@ -4,33 +4,24 @@
 
 #include "content/browser/interest_group/ad_auction_url_loader_interceptor.h"
 
-#include <stddef.h>
+#include <string>
+#include <vector>
 
-#include "base/base64url.h"
-#include "base/strings/string_split.h"
+#include "content/browser/interest_group/ad_auction_headers_util.h"
 #include "content/browser/interest_group/ad_auction_page_data.h"
-#include "content/browser/renderer_host/render_frame_host_impl.h"
-#include "content/public/browser/content_browser_client.h"
-#include "content/public/browser/page.h"
 #include "content/public/browser/page_user_data.h"
-#include "content/public/common/content_client.h"
+#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/weak_document_ptr.h"
+#include "net/http/http_request_headers.h"
+#include "net/url_request/redirect_info.h"
 #include "services/data_decoder/public/cpp/data_decoder.h"
-#include "services/network/public/cpp/is_potentially_trustworthy.h"
-#include "third_party/blink/public/common/features.h"
+#include "services/network/public/cpp/resource_request.h"
+#include "services/network/public/mojom/url_response_head.mojom-forward.h"
+#include "url/gurl.h"
+#include "url/origin.h"
 
 namespace content {
 
-namespace {
-
-constexpr char kAdAuctionRequestHeaderKey[] = "Sec-Ad-Auction-Fetch";
-
-constexpr char kAdAuctionSignalsResponseHeaderKey[] = "Ad-Auction-Signals";
-
-constexpr char kAdAuctionAdditionalBidResponseHeaderKey[] =
-    "Ad-Auction-Additional-Bid";
-
-}  // namespace
-
 AdAuctionURLLoaderInterceptor::AdAuctionURLLoaderInterceptor(
     WeakDocumentPtr document,
     const network::ResourceRequest& resource_request)
@@ -50,175 +41,51 @@
   // destroyed. We consider those cases to be ineligible for ad auction headers.
   //
   // TODO(yaoxia): measure how often this happens.
-  RenderFrameHost* request_initiator_frame =
-      document_.AsRenderFrameHostIfValid();
+  RenderFrameHostImpl* request_initiator_frame =
+      static_cast<RenderFrameHostImpl*>(document_.AsRenderFrameHostIfValid());
   if (!request_initiator_frame) {
     return;
   }
 
-  // Fenced frames disallow most permissions policies which would let this
-  // function return false regardless, but adding this check to be more
-  // explicit.
-  if (request_initiator_frame->IsNestedWithinFencedFrame()) {
+  if (!IsAdAuctionHeadersEligible(*request_initiator_frame,
+                                  *resource_request_)) {
     return;
   }
 
-  if (!request_initiator_frame->GetPage().IsPrimary()) {
-    return;
-  }
+  ad_auction_headers_eligible_ = true;
+  headers.SetHeader(kAdAuctionRequestHeaderKey, "?1");
 
-  // TODO(crbug.com/1244137): IsPrimary() doesn't actually detect portals yet.
-  // Remove this when it does.
-  if (!static_cast<RenderFrameHostImpl*>(
-           request_initiator_frame->GetMainFrame())
-           ->IsOutermostMainFrame()) {
-    return;
-  }
+  // Pre-warm the data-decoder.
+  AdAuctionPageData* ad_auction_page_data =
+      PageUserData<AdAuctionPageData>::GetOrCreateForPage(
+          request_initiator_frame->GetPage());
+  ad_auction_page_data->GetDecoderFor(request_origin_)->GetService();
+}
 
-  if (request_origin_.opaque()) {
-    return;
-  }
-
-  // TODO(yaoxia): should this be `ReportBadMessage`? On the renderer side, the
-  // fetch initiator context must be secure. Does it imply that
-  // `request_origin_` is always potentially trustworthy?
-  if (!network::IsOriginPotentiallyTrustworthy(request_origin_)) {
-    return;
-  }
-
-  const blink::PermissionsPolicy* permissions_policy =
-      static_cast<RenderFrameHostImpl*>(request_initiator_frame)
-          ->permissions_policy();
-
-  if (!permissions_policy->IsFeatureEnabledForSubresourceRequest(
-          blink::mojom::PermissionsPolicyFeature::kRunAdAuction,
-          request_origin_, *resource_request_)) {
-    return;
-  }
-
-  ad_auction_headers_eligible_ =
-      GetContentClient()->browser()->IsInterestGroupAPIAllowed(
-          request_initiator_frame,
-          ContentBrowserClient::InterestGroupApiOperation::kSell,
-          request_initiator_frame->GetMainFrame()->GetLastCommittedOrigin(),
-          request_origin_);
-
-  if (ad_auction_headers_eligible_) {
-    headers.SetHeader(kAdAuctionRequestHeaderKey, "?1");
-    // Pre-warm the data-decoder.
-    RenderFrameHost* rfh = document_.AsRenderFrameHostIfValid();
-    if (!rfh) {
-      return;
-    }
-    Page& page = rfh->GetPage();
-    AdAuctionPageData* ad_auction_page_data =
-        PageUserData<AdAuctionPageData>::GetOrCreateForPage(page);
-    ad_auction_page_data->GetDecoderFor(request_origin_)->GetService();
-  }
+void AdAuctionURLLoaderInterceptor::OnReceiveRedirect(
+    const net::RedirectInfo& redirect_info,
+    network::mojom::URLResponseHeadPtr& head) {
+  ad_auction_headers_eligible_ = false;
+  RemoveAdAuctionResponseHeaders(*head->headers);
 }
 
 void AdAuctionURLLoaderInterceptor::WillFollowRedirect(
     const absl::optional<GURL>& new_url,
     std::vector<std::string>& removed_headers,
     net::HttpRequestHeaders& modified_headers) {
-  CHECK(has_redirect_);
+  CHECK(!ad_auction_headers_eligible_);
   removed_headers.push_back(kAdAuctionRequestHeaderKey);
 }
 
-void AdAuctionURLLoaderInterceptor::OnReceiveRedirect(
-    const net::RedirectInfo& redirect_info,
-    network::mojom::URLResponseHeadPtr& head) {
-  has_redirect_ = true;
-
-  head->headers.get()->RemoveHeader(kAdAuctionSignalsResponseHeaderKey);
-  head->headers.get()->RemoveHeader(kAdAuctionAdditionalBidResponseHeaderKey);
-}
-
 void AdAuctionURLLoaderInterceptor::OnReceiveResponse(
     network::mojom::URLResponseHeadPtr& head) {
-  net::HttpResponseHeaders* headers = head->headers.get();
-
-  std::string ad_auction_signals;
-  bool found_ad_auction_signals_header = false;
-
-  if (base::FeatureList::IsEnabled(blink::features::kAdAuctionSignals)) {
-    found_ad_auction_signals_header = headers->GetNormalizedHeader(
-        kAdAuctionSignalsResponseHeaderKey, &ad_auction_signals);
-  }
-
-  if (found_ad_auction_signals_header) {
-    headers->RemoveHeader(kAdAuctionSignalsResponseHeaderKey);
-  }
-
-  std::map<std::string, std::vector<std::string>> nonce_additional_bids_map;
-  size_t iter = 0;
-  std::string header_line;
-  while (headers->EnumerateHeader(
-      &iter, kAdAuctionAdditionalBidResponseHeaderKey, &header_line)) {
-    // Skip if `header_line` doesn't match the format
-    // <36 characters auction nonce>:<base64-encoded signed additional bid>
-    std::vector<std::string> nonce_and_additional_bid = base::SplitString(
-        header_line, ":", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
-    if (nonce_and_additional_bid.size() != 2) {
-      continue;
-    }
-
-    const std::string& nonce = nonce_and_additional_bid[0];
-    const std::string& additional_bid = nonce_and_additional_bid[1];
-
-    if (nonce.size() != 36) {
-      continue;
-    }
-
-    nonce_additional_bids_map[nonce].push_back(additional_bid);
-  }
-
-  headers->RemoveHeader(kAdAuctionAdditionalBidResponseHeaderKey);
-
-  if (has_redirect_ || !ad_auction_headers_eligible_) {
-    return;
-  }
-
-  RenderFrameHost* rfh = document_.AsRenderFrameHostIfValid();
-  if (!rfh) {
-    return;
-  }
-
-  Page& page = rfh->GetPage();
-  AdAuctionPageData* ad_auction_page_data =
-      PageUserData<AdAuctionPageData>::GetOrCreateForPage(page);
-
-  if (base::FeatureList::IsEnabled(
-          blink::features::kFledgeBiddingAndAuctionServer)) {
-    std::string ad_auction_results;
-    if (headers->GetNormalizedHeader("Ad-Auction-Result",
-                                     &ad_auction_results)) {
-      for (const auto& result :
-           base::SplitString(ad_auction_results, ",", base::TRIM_WHITESPACE,
-                             base::SPLIT_WANT_NONEMPTY)) {
-        std::string result_bytes;
-        if (base::Base64UrlDecode(result,
-                                  base::Base64UrlDecodePolicy::IGNORE_PADDING,
-                                  &result_bytes) &&
-            result_bytes.size() == 32) {
-          ad_auction_page_data->AddAuctionResultWitnessForOrigin(
-              request_origin_, result_bytes);
-        }
-      }
-    }
-  }
-
-  if (found_ad_auction_signals_header &&
-      ad_auction_signals.size() <=
-          static_cast<size_t>(
-              blink::features::kAdAuctionSignalsMaxSizeBytes.Get())) {
-    ad_auction_page_data->AddAuctionSignalsWitnessForOrigin(request_origin_,
-                                                            ad_auction_signals);
-  }
-
-  if (!nonce_additional_bids_map.empty()) {
-    ad_auction_page_data->AddAuctionAdditionalBidsWitnessForOrigin(
-        request_origin_, nonce_additional_bids_map);
+  RenderFrameHost* request_initiator_frame =
+      document_.AsRenderFrameHostIfValid();
+  if (ad_auction_headers_eligible_ && request_initiator_frame) {
+    ProcessAdAuctionResponseHeaders(
+        request_origin_, request_initiator_frame->GetPage(), *head->headers);
+  } else {
+    RemoveAdAuctionResponseHeaders(*head->headers);
   }
 }
 
diff --git a/content/browser/interest_group/ad_auction_url_loader_interceptor.h b/content/browser/interest_group/ad_auction_url_loader_interceptor.h
index 8454c87..335a365 100644
--- a/content/browser/interest_group/ad_auction_url_loader_interceptor.h
+++ b/content/browser/interest_group/ad_auction_url_loader_interceptor.h
@@ -5,7 +5,18 @@
 #ifndef CONTENT_BROWSER_INTEREST_GROUP_AD_AUCTION_URL_LOADER_INTERCEPTOR_H_
 #define CONTENT_BROWSER_INTEREST_GROUP_AD_AUCTION_URL_LOADER_INTERCEPTOR_H_
 
+#include <string>
+#include <vector>
+
+#include "base/memory/raw_ref.h"
 #include "content/browser/loader/subresource_proxying_url_loader.h"
+#include "content/public/browser/weak_document_ptr.h"
+#include "net/http/http_request_headers.h"
+#include "net/url_request/redirect_info.h"
+#include "services/network/public/cpp/resource_request.h"
+#include "services/network/public/mojom/url_response_head.mojom-forward.h"
+#include "url/gurl.h"
+#include "url/origin.h"
 
 namespace content {
 
@@ -60,8 +71,6 @@
   // Set to the desired state when a request/redirect is made. Reset to false
   // when the corresponding response is received.
   bool ad_auction_headers_eligible_ = false;
-
-  bool has_redirect_ = false;
 };
 
 }  // namespace content
diff --git a/content/browser/interest_group/ad_auction_url_loader_interceptor_unittest.cc b/content/browser/interest_group/ad_auction_url_loader_interceptor_unittest.cc
index d526c264..11259e4b 100644
--- a/content/browser/interest_group/ad_auction_url_loader_interceptor_unittest.cc
+++ b/content/browser/interest_group/ad_auction_url_loader_interceptor_unittest.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "content/browser/interest_group/ad_auction_url_loader_interceptor.h"
+
 #include "base/base64url.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/test/bind.h"
@@ -32,6 +34,8 @@
 
 constexpr char kLegitimateAdAuctionResponse[] =
     "ungWv48Bz-pBQUDeXa4iI7ADYaOWF3qctBD_YfIAFa0=";
+constexpr char kLegitimateAdAuctionSignals[] =
+    R"([{"adSlot":"slot1", "sellerSignals":{"signal1":"value1"}}])";
 
 using FollowRedirectParams =
     network::TestURLLoaderFactory::TestURLLoader::FollowRedirectParams;
@@ -149,6 +153,8 @@
     scoped_feature_list_.InitWithFeatures(
         /*enabled_features=*/{blink::features::kInterestGroupStorage,
                               blink::features::kFledgeBiddingAndAuctionServer,
+                              blink::features::kAdAuctionSignals,
+                              blink::features::kFledgeNegativeTargeting,
                               blink::features::kBrowsingTopics},
         /*disabled_features=*/{});
   }
@@ -392,57 +398,6 @@
       base64Decode(kLegitimateAdAuctionResponse)));
 }
 
-TEST_F(AdAuctionURLLoaderInterceptorTest,
-       RequestArrivedAfterDocumentDestroyed) {
-  NavigatePage(GURL("https://google.com"));
-
-  mojo::Remote<network::mojom::URLLoaderFactory> remote_url_loader_factory;
-  network::TestURLLoaderFactory proxied_url_loader_factory;
-  mojo::Remote<network::mojom::URLLoader> remote_loader;
-  mojo::PendingReceiver<network::mojom::URLLoaderClient> client;
-
-  base::WeakPtr<SubresourceProxyingURLLoaderService::BindContext> bind_context =
-      CreateFactory(proxied_url_loader_factory, remote_url_loader_factory);
-  bind_context->OnDidCommitNavigation(
-      web_contents()->GetPrimaryMainFrame()->GetWeakDocumentPtr());
-
-  // This second navigation will cause the initial document referenced by the
-  // factory to be destroyed. Thus the request won't be eligible for ad auction
-  // headers.
-  auto simulator = NavigationSimulator::CreateBrowserInitiated(
-      GURL("https://foo1.com"), web_contents());
-  simulator->Commit();
-
-  remote_url_loader_factory->CreateLoaderAndStart(
-      remote_loader.BindNewPipeAndPassReceiver(),
-      /*request_id=*/0, /*options=*/0,
-      CreateResourceRequest(GURL("https://foo1.com")),
-      client.InitWithNewPipeAndPassRemote(),
-      net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS));
-  remote_url_loader_factory.FlushForTesting();
-
-  EXPECT_EQ(1, proxied_url_loader_factory.NumPending());
-  network::TestURLLoaderFactory::PendingRequest* pending_request =
-      &proxied_url_loader_factory.pending_requests()->back();
-
-  std::string ad_auction_request_header_value;
-  bool has_ad_auction_request_header =
-      pending_request->request.headers.GetHeader(
-          "Sec-Ad-Auction-Fetch", &ad_auction_request_header_value);
-  EXPECT_FALSE(has_ad_auction_request_header);
-
-  pending_request->client->OnReceiveResponse(
-      CreateResponseHead(
-          /*ad_auction_result_header_value=*/kLegitimateAdAuctionResponse,
-          /*ad_auction_signals_header_value=*/absl::nullopt),
-      /*body=*/{}, absl::nullopt);
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_FALSE(WitnessedAuctionResultForOrigin(
-      url::Origin::Create(GURL("https://foo1.com")),
-      base64Decode(kLegitimateAdAuctionResponse)));
-}
-
 TEST_F(AdAuctionURLLoaderInterceptorTest, RequestFromMainFrame) {
   NavigatePage(GURL("https://google.com"));
 
@@ -546,70 +501,6 @@
       base64Decode(kLegitimateAdAuctionResponse)));
 }
 
-TEST_F(AdAuctionURLLoaderInterceptorTest, MultipleResults) {
-  const char kLegitimateAdAuctionResponse2[] =
-      "8oX0szl-BNWitSuE3ZK5Npt05t83A1wrl94oBtlZHFs=";
-  const char kLegitimateAdAuctionResponse3[] =
-      "lIcI37kQp_ArBk_1JfdEjyQ0suSLUpYDIKO906THBdk=";
-  NavigatePage(GURL("https://google.com"));
-
-  mojo::Remote<network::mojom::URLLoaderFactory> remote_url_loader_factory;
-  network::TestURLLoaderFactory proxied_url_loader_factory;
-  mojo::Remote<network::mojom::URLLoader> remote_loader;
-  mojo::PendingReceiver<network::mojom::URLLoaderClient> client;
-
-  base::WeakPtr<SubresourceProxyingURLLoaderService::BindContext> bind_context =
-      CreateFactory(proxied_url_loader_factory, remote_url_loader_factory);
-  bind_context->OnDidCommitNavigation(
-      web_contents()->GetPrimaryMainFrame()->GetWeakDocumentPtr());
-
-  // The request to "foo1.com" will add the ad auction header value "?1".
-  remote_url_loader_factory->CreateLoaderAndStart(
-      remote_loader.BindNewPipeAndPassReceiver(),
-      /*request_id=*/0, /*options=*/0,
-      CreateResourceRequest(GURL("https://foo1.com")),
-      client.InitWithNewPipeAndPassRemote(),
-      net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS));
-  remote_url_loader_factory.FlushForTesting();
-
-  EXPECT_EQ(1, proxied_url_loader_factory.NumPending());
-  network::TestURLLoaderFactory::PendingRequest* pending_request =
-      &proxied_url_loader_factory.pending_requests()->back();
-
-  std::string ad_auction_request_header_value;
-  bool has_ad_auction_request_header =
-      pending_request->request.headers.GetHeader(
-          "Sec-Ad-Auction-Fetch", &ad_auction_request_header_value);
-  EXPECT_TRUE(has_ad_auction_request_header);
-  EXPECT_EQ(ad_auction_request_header_value, "?1");
-
-  auto head = CreateResponseHead(
-      /*ad_auction_result_header_value=*/kLegitimateAdAuctionResponse,
-      /*ad_auction_signals_header_value=*/absl::nullopt);
-
-  head->headers->AddHeader(
-      "Ad-Auction-Result",
-      base::StrCat({kLegitimateAdAuctionResponse2, ",", "invalid", ",",
-                    kLegitimateAdAuctionResponse3}));
-  head->headers->AddHeader("Ad-Auction-Result", "alsonotValid");
-  // The ad auction result from the response header will be stored in the page.
-  pending_request->client->OnReceiveResponse(std::move(head), /*body=*/{},
-                                             absl::nullopt);
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_TRUE(WitnessedAuctionResultForOrigin(
-      url::Origin::Create(GURL("https://foo1.com")),
-      base64Decode(kLegitimateAdAuctionResponse)));
-
-  EXPECT_TRUE(WitnessedAuctionResultForOrigin(
-      url::Origin::Create(GURL("https://foo1.com")),
-      base64Decode(kLegitimateAdAuctionResponse2)));
-
-  EXPECT_TRUE(WitnessedAuctionResultForOrigin(
-      url::Origin::Create(GURL("https://foo1.com")),
-      base64Decode(kLegitimateAdAuctionResponse3)));
-}
-
 TEST_F(AdAuctionURLLoaderInterceptorTest,
        RequestNotEligibleForAdAuctionHeadersDueToMissingFetchParam) {
   NavigatePage(GURL("https://google.com"));
@@ -650,7 +541,7 @@
   pending_request->client->OnReceiveResponse(
       CreateResponseHead(
           /*ad_auction_result_header_value=*/kLegitimateAdAuctionResponse,
-          /*ad_auction_signals_header_value=*/"{}"),
+          /*ad_auction_signals_header_value=*/kLegitimateAdAuctionSignals),
       /*body=*/{}, absl::nullopt);
   base::RunLoop().RunUntilIdle();
 
@@ -665,201 +556,6 @@
 }
 
 TEST_F(AdAuctionURLLoaderInterceptorTest,
-       RequestNotEligibleForAdAuctionHeadersDueToSettings) {
-  browser_client_.set_interest_group_allowed_by_settings(false);
-
-  NavigatePage(GURL("https://google.com"));
-
-  mojo::Remote<network::mojom::URLLoaderFactory> remote_url_loader_factory;
-  network::TestURLLoaderFactory proxied_url_loader_factory;
-  mojo::Remote<network::mojom::URLLoader> remote_loader;
-  mojo::PendingReceiver<network::mojom::URLLoaderClient> client;
-
-  base::WeakPtr<SubresourceProxyingURLLoaderService::BindContext> bind_context =
-      CreateFactory(proxied_url_loader_factory, remote_url_loader_factory);
-  bind_context->OnDidCommitNavigation(
-      web_contents()->GetPrimaryMainFrame()->GetWeakDocumentPtr());
-
-  // The request to `foo1.com` won't be eligible for ad auction.
-  remote_url_loader_factory->CreateLoaderAndStart(
-      remote_loader.BindNewPipeAndPassReceiver(),
-      /*request_id=*/0, /*options=*/0,
-      CreateResourceRequest(GURL("https://foo1.com")),
-      client.InitWithNewPipeAndPassRemote(),
-      net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS));
-  remote_url_loader_factory.FlushForTesting();
-
-  EXPECT_EQ(1, proxied_url_loader_factory.NumPending());
-  network::TestURLLoaderFactory::PendingRequest* pending_request =
-      &proxied_url_loader_factory.pending_requests()->back();
-
-  std::string ad_auction_request_header_value;
-  bool has_ad_auction_request_header =
-      pending_request->request.headers.GetHeader(
-          "Sec-Ad-Auction-Fetch", &ad_auction_request_header_value);
-  EXPECT_FALSE(has_ad_auction_request_header);
-
-  pending_request->client->OnReceiveResponse(
-      CreateResponseHead(
-          /*ad_auction_result_header_value=*/kLegitimateAdAuctionResponse,
-          /*ad_auction_signals_header_value=*/"{}"),
-      /*body=*/{}, absl::nullopt);
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_FALSE(WitnessedAuctionResultForOrigin(
-      url::Origin::Create(GURL("https://foo1.com")),
-      base64Decode(kLegitimateAdAuctionResponse)));
-
-  const scoped_refptr<HeaderDirectFromSellerSignals::Result> signals =
-      ParseAndFindAdAuctionSignals(
-          url::Origin::Create(GURL("https://foo1.com")), "slot1");
-  EXPECT_EQ(signals, nullptr);
-}
-
-TEST_F(AdAuctionURLLoaderInterceptorTest,
-       InvalidAdAuctionResultResponseHeader) {
-  NavigatePage(GURL("https://google.com"));
-
-  mojo::Remote<network::mojom::URLLoaderFactory> remote_url_loader_factory;
-  network::TestURLLoaderFactory proxied_url_loader_factory;
-  mojo::Remote<network::mojom::URLLoader> remote_loader;
-  mojo::PendingReceiver<network::mojom::URLLoaderClient> client;
-
-  base::WeakPtr<SubresourceProxyingURLLoaderService::BindContext> bind_context =
-      CreateFactory(proxied_url_loader_factory, remote_url_loader_factory);
-  bind_context->OnDidCommitNavigation(
-      web_contents()->GetPrimaryMainFrame()->GetWeakDocumentPtr());
-
-  remote_url_loader_factory->CreateLoaderAndStart(
-      remote_loader.BindNewPipeAndPassReceiver(),
-      /*request_id=*/0, /*options=*/0,
-      CreateResourceRequest(GURL("https://foo1.com")),
-      client.InitWithNewPipeAndPassRemote(),
-      net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS));
-  remote_url_loader_factory.FlushForTesting();
-
-  EXPECT_EQ(1, proxied_url_loader_factory.NumPending());
-  network::TestURLLoaderFactory::PendingRequest* pending_request =
-      &proxied_url_loader_factory.pending_requests()->back();
-
-  std::string ad_auction_request_header_value;
-  bool has_ad_auction_request_header =
-      pending_request->request.headers.GetHeader(
-          "Sec-Ad-Auction-Fetch", &ad_auction_request_header_value);
-  EXPECT_TRUE(has_ad_auction_request_header);
-  EXPECT_EQ(ad_auction_request_header_value, "?1");
-
-  // Expect no further handling for topics as the response header value is
-  // false.
-  pending_request->client->OnReceiveResponse(
-      CreateResponseHead(
-          /*ad_auction_result_header_value=*/"invalid-response-header",
-          /*ad_auction_signals_header_value=*/absl::nullopt),
-      /*body=*/{}, absl::nullopt);
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_FALSE(WitnessedAuctionResultForOrigin(
-      url::Origin::Create(GURL("https://foo1.com")),
-      "invalid-response-header"));
-}
-
-TEST_F(AdAuctionURLLoaderInterceptorTest, RequestFromInactiveFrame) {
-  NavigatePage(GURL("https://google.com"));
-
-  mojo::Remote<network::mojom::URLLoaderFactory> remote_url_loader_factory;
-  network::TestURLLoaderFactory proxied_url_loader_factory;
-  mojo::Remote<network::mojom::URLLoader> remote_loader;
-  mojo::PendingReceiver<network::mojom::URLLoaderClient> client;
-
-  base::WeakPtr<SubresourceProxyingURLLoaderService::BindContext> bind_context =
-      CreateFactory(proxied_url_loader_factory, remote_url_loader_factory);
-  bind_context->OnDidCommitNavigation(
-      web_contents()->GetPrimaryMainFrame()->GetWeakDocumentPtr());
-
-  // Switch the frame to an inactive state. The request won't be eligible for
-  // ad auction.
-  RenderFrameHostImpl& rfh =
-      static_cast<RenderFrameHostImpl&>(*web_contents()->GetPrimaryMainFrame());
-  rfh.SetLifecycleState(
-      RenderFrameHostImpl::LifecycleStateImpl::kReadyToBeDeleted);
-
-  remote_url_loader_factory->CreateLoaderAndStart(
-      remote_loader.BindNewPipeAndPassReceiver(),
-      /*request_id=*/0, /*options=*/0,
-      CreateResourceRequest(GURL("https://foo1.com")),
-      client.InitWithNewPipeAndPassRemote(),
-      net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS));
-  remote_url_loader_factory.FlushForTesting();
-
-  EXPECT_EQ(1, proxied_url_loader_factory.NumPending());
-  network::TestURLLoaderFactory::PendingRequest* pending_request =
-      &proxied_url_loader_factory.pending_requests()->back();
-
-  std::string ad_auction_request_header_value;
-  bool has_ad_auction_request_header =
-      pending_request->request.headers.GetHeader(
-          "Sec-Ad-Auction-Fetch", &ad_auction_request_header_value);
-  EXPECT_FALSE(has_ad_auction_request_header);
-
-  pending_request->client->OnReceiveResponse(
-      CreateResponseHead(
-          /*ad_auction_result_header_value=*/kLegitimateAdAuctionResponse,
-          /*ad_auction_signals_header_value=*/absl::nullopt),
-      /*body=*/{}, absl::nullopt);
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_FALSE(WitnessedAuctionResultForOrigin(
-      url::Origin::Create(GURL("https://foo1.com")),
-      base64Decode(kLegitimateAdAuctionResponse)));
-}
-
-TEST_F(AdAuctionURLLoaderInterceptorTest,
-       AdAuctionHeadersNotEligibleDueToPermissionsPolicy) {
-  NavigatePage(GURL("https://google.com"));
-
-  mojo::Remote<network::mojom::URLLoaderFactory> remote_url_loader_factory;
-  network::TestURLLoaderFactory proxied_url_loader_factory;
-  mojo::Remote<network::mojom::URLLoader> remote_loader;
-  mojo::PendingReceiver<network::mojom::URLLoaderClient> client;
-
-  base::WeakPtr<SubresourceProxyingURLLoaderService::BindContext> bind_context =
-      CreateFactory(proxied_url_loader_factory, remote_url_loader_factory);
-  bind_context->OnDidCommitNavigation(
-      web_contents()->GetPrimaryMainFrame()->GetWeakDocumentPtr());
-
-  // The permissions policy disallows `foo2.com`. The request won't be eligible
-  // for ad auction headers.
-  remote_url_loader_factory->CreateLoaderAndStart(
-      remote_loader.BindNewPipeAndPassReceiver(),
-      /*request_id=*/0, /*options=*/0,
-      CreateResourceRequest(GURL("https://foo2.com")),
-      client.InitWithNewPipeAndPassRemote(),
-      net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS));
-  remote_url_loader_factory.FlushForTesting();
-
-  EXPECT_EQ(1, proxied_url_loader_factory.NumPending());
-  network::TestURLLoaderFactory::PendingRequest* pending_request =
-      &proxied_url_loader_factory.pending_requests()->back();
-
-  std::string ad_auction_request_header_value;
-  bool has_ad_auction_request_header =
-      pending_request->request.headers.GetHeader(
-          "Sec-Ad-Auction-Fetch", &ad_auction_request_header_value);
-  EXPECT_FALSE(has_ad_auction_request_header);
-
-  pending_request->client->OnReceiveResponse(
-      CreateResponseHead(
-          /*ad_auction_result_header_value=*/kLegitimateAdAuctionResponse,
-          /*ad_auction_signals_header_value=*/absl::nullopt),
-      /*body=*/{}, absl::nullopt);
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_FALSE(WitnessedAuctionResultForOrigin(
-      url::Origin::Create(GURL("https://foo2.com")),
-      base64Decode(kLegitimateAdAuctionResponse)));
-}
-
-TEST_F(AdAuctionURLLoaderInterceptorTest,
        HasRedirect_AdAuctionResultResponseIgnored) {
   NavigatePage(GURL("https://google.com"));
 
@@ -979,7 +675,7 @@
   pending_request->client->OnReceiveResponse(
       CreateResponseHead(
           /*ad_auction_result_header_value=*/kLegitimateAdAuctionResponse,
-          /*ad_auction_signals_header_value=*/R"([{"adSlot":"slot1"}])"),
+          /*ad_auction_signals_header_value=*/kLegitimateAdAuctionSignals),
       /*body=*/{}, absl::nullopt);
   base::RunLoop().RunUntilIdle();
 
@@ -993,112 +689,7 @@
   const scoped_refptr<HeaderDirectFromSellerSignals::Result> signals =
       ParseAndFindAdAuctionSignals(
           url::Origin::Create(GURL("https://foo1.com")), "slot1");
-  EXPECT_NE(signals, nullptr);
-}
-
-// Tests that the Ad-Auction-Signals header will be removed from the final
-// response regardless of whether it's an auction eligible request.
-TEST_F(AdAuctionURLLoaderInterceptorTest,
-       AdAuctionSignalsResponseHeaderRemoved) {
-  browser_client_.set_interest_group_allowed_by_settings(false);
-
-  NavigatePage(GURL("https://google.com"));
-
-  mojo::Remote<network::mojom::URLLoaderFactory> remote_url_loader_factory;
-  network::TestURLLoaderFactory proxied_url_loader_factory;
-  mojo::Remote<network::mojom::URLLoader> remote_loader;
-  TestURLLoaderClient test_client;
-
-  base::WeakPtr<SubresourceProxyingURLLoaderService::BindContext> bind_context =
-      CreateFactory(proxied_url_loader_factory, remote_url_loader_factory);
-  bind_context->OnDidCommitNavigation(
-      web_contents()->GetPrimaryMainFrame()->GetWeakDocumentPtr());
-
-  // The request to `foo1.com` won't be eligible for ad auction.
-  remote_url_loader_factory->CreateLoaderAndStart(
-      remote_loader.BindNewPipeAndPassReceiver(),
-      /*request_id=*/0, /*options=*/0,
-      CreateResourceRequest(GURL("https://foo1.com")),
-      test_client.BindURLLoaderClientAndGetRemote(),
-      net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS));
-  remote_url_loader_factory.FlushForTesting();
-
-  EXPECT_EQ(1, proxied_url_loader_factory.NumPending());
-  network::TestURLLoaderFactory::PendingRequest* pending_request =
-      &proxied_url_loader_factory.pending_requests()->back();
-
-  std::string ad_auction_request_header_value;
-  bool has_ad_auction_request_header =
-      pending_request->request.headers.GetHeader(
-          "Sec-Ad-Auction-Fetch", &ad_auction_request_header_value);
-  EXPECT_FALSE(has_ad_auction_request_header);
-
-  // The ad auction signals from the response header won't be stored in the
-  // page.
-  pending_request->client->OnReceiveResponse(
-      CreateResponseHead(
-          /*ad_auction_result_header_value=*/kLegitimateAdAuctionResponse,
-          /*ad_auction_signals_header_value=*/"{}"),
-      /*body=*/{}, absl::nullopt);
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_TRUE(test_client.received_response());
-  EXPECT_TRUE(test_client.received_ad_auction_result_header());
-  EXPECT_FALSE(test_client.received_ad_auction_signals_header());
-
-  const scoped_refptr<HeaderDirectFromSellerSignals::Result> signals =
-      ParseAndFindAdAuctionSignals(
-          url::Origin::Create(GURL("https://foo1.com")), "slot1");
-  EXPECT_EQ(signals, nullptr);
-}
-
-TEST_F(AdAuctionURLLoaderInterceptorTest,
-       AdAuctionSignalsResponseHeaderTooLong) {
-  NavigatePage(GURL("https://google.com"));
-
-  mojo::Remote<network::mojom::URLLoaderFactory> remote_url_loader_factory;
-  network::TestURLLoaderFactory proxied_url_loader_factory;
-  mojo::Remote<network::mojom::URLLoader> remote_loader;
-  TestURLLoaderClient test_client;
-
-  base::WeakPtr<SubresourceProxyingURLLoaderService::BindContext> bind_context =
-      CreateFactory(proxied_url_loader_factory, remote_url_loader_factory);
-  bind_context->OnDidCommitNavigation(
-      web_contents()->GetPrimaryMainFrame()->GetWeakDocumentPtr());
-
-  // The request to "foo1.com" will add the ad auction header value "?1".
-  remote_url_loader_factory->CreateLoaderAndStart(
-      remote_loader.BindNewPipeAndPassReceiver(),
-      /*request_id=*/0, /*options=*/0,
-      CreateResourceRequest(GURL("https://foo1.com")),
-      test_client.BindURLLoaderClientAndGetRemote(),
-      net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS));
-  remote_url_loader_factory.FlushForTesting();
-
-  EXPECT_EQ(1, proxied_url_loader_factory.NumPending());
-  network::TestURLLoaderFactory::PendingRequest* pending_request =
-      &proxied_url_loader_factory.pending_requests()->back();
-
-  std::string ad_auction_request_header_value;
-  bool has_ad_auction_request_header =
-      pending_request->request.headers.GetHeader(
-          "Sec-Ad-Auction-Fetch", &ad_auction_request_header_value);
-  EXPECT_TRUE(has_ad_auction_request_header);
-  EXPECT_EQ(ad_auction_request_header_value, "?1");
-
-  // The ad auction signals from the response header won't be stored in the
-  // page.
-  pending_request->client->OnReceiveResponse(
-      CreateResponseHead(
-          /*ad_auction_result_header_value=*/kLegitimateAdAuctionResponse,
-          /*ad_auction_signals_header_value=*/std::string(10001, '0')),
-      /*body=*/{}, absl::nullopt);
-  base::RunLoop().RunUntilIdle();
-
-  const scoped_refptr<HeaderDirectFromSellerSignals::Result> signals =
-      ParseAndFindAdAuctionSignals(
-          url::Origin::Create(GURL("https://foo1.com")), "slot1");
-  EXPECT_EQ(signals, nullptr);
+  EXPECT_EQ(signals->seller_signals(), R"({"signal1":"value1"})");
 }
 
 TEST_F(AdAuctionURLLoaderInterceptorTest,
@@ -1146,7 +737,7 @@
       redirect_info,
       CreateResponseHead(
           /*ad_auction_result_header_value=*/kLegitimateAdAuctionResponse,
-          /*ad_auction_signals_header_value=*/"{}"));
+          /*ad_auction_signals_header_value=*/kLegitimateAdAuctionSignals));
   base::RunLoop().RunUntilIdle();
 
   EXPECT_FALSE(WitnessedAuctionResultForOrigin(
@@ -1175,7 +766,7 @@
   pending_request->client->OnReceiveResponse(
       CreateResponseHead(
           /*ad_auction_result_header_value=*/kLegitimateAdAuctionResponse,
-          /*ad_auction_signals_header_value=*/"{}"),
+          /*ad_auction_signals_header_value=*/kLegitimateAdAuctionSignals),
       /*body=*/{}, absl::nullopt);
   base::RunLoop().RunUntilIdle();
 
@@ -1191,58 +782,7 @@
   EXPECT_EQ(signals, nullptr);
 }
 
-TEST_F(AdAuctionURLLoaderInterceptorTest, AdditionalBid) {
-  NavigatePage(GURL("https://google.com"));
-
-  mojo::Remote<network::mojom::URLLoaderFactory> remote_url_loader_factory;
-  network::TestURLLoaderFactory proxied_url_loader_factory;
-  mojo::Remote<network::mojom::URLLoader> remote_loader;
-  TestURLLoaderClient test_client;
-
-  base::WeakPtr<SubresourceProxyingURLLoaderService::BindContext> bind_context =
-      CreateFactory(proxied_url_loader_factory, remote_url_loader_factory);
-  bind_context->OnDidCommitNavigation(
-      web_contents()->GetPrimaryMainFrame()->GetWeakDocumentPtr());
-
-  // The request to "foo1.com" will add the ad auction header value "?1".
-  remote_url_loader_factory->CreateLoaderAndStart(
-      remote_loader.BindNewPipeAndPassReceiver(),
-      /*request_id=*/0, /*options=*/0,
-      CreateResourceRequest(GURL("https://foo1.com")),
-      test_client.BindURLLoaderClientAndGetRemote(),
-      net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS));
-  remote_url_loader_factory.FlushForTesting();
-
-  EXPECT_EQ(1, proxied_url_loader_factory.NumPending());
-  network::TestURLLoaderFactory::PendingRequest* pending_request =
-      &proxied_url_loader_factory.pending_requests()->back();
-
-  std::string ad_auction_request_header_value;
-  bool has_ad_auction_request_header =
-      pending_request->request.headers.GetHeader(
-          "Sec-Ad-Auction-Fetch", &ad_auction_request_header_value);
-  EXPECT_TRUE(has_ad_auction_request_header);
-  EXPECT_EQ(ad_auction_request_header_value, "?1");
-
-  pending_request->client->OnReceiveResponse(
-      CreateResponseHeadWithAdditionalBids(
-          {"00000000-0000-0000-0000-000000000000:e30="}),
-      /*body=*/{}, absl::nullopt);
-  base::RunLoop().RunUntilIdle();
-
-  // The `Ad-Auction-Additional-Bid` header was intercepted and stored in the
-  // browser. It was not exposed to the original loader client.
-  EXPECT_TRUE(test_client.received_response());
-  EXPECT_FALSE(test_client.received_ad_auction_additional_bid_header());
-
-  url::Origin request_origin = url::Origin::Create(GURL("https://foo1.com"));
-  EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
-                  request_origin, "00000000-0000-0000-0000-000000000000"),
-              ::testing::ElementsAre("e30="));
-}
-
-TEST_F(AdAuctionURLLoaderInterceptorTest,
-       AdditionalBid_MultipleNoncesAndMultipleBidsPerNonce) {
+TEST_F(AdAuctionURLLoaderInterceptorTest, AdditionalBids) {
   NavigatePage(GURL("https://google.com"));
 
   mojo::Remote<network::mojom::URLLoaderFactory> remote_url_loader_factory;
@@ -1363,66 +903,6 @@
               ::testing::IsEmpty());
 }
 
-TEST_F(AdAuctionURLLoaderInterceptorTest, AdditionalBid_InvalidHeaderSkipped) {
-  NavigatePage(GURL("https://google.com"));
-
-  mojo::Remote<network::mojom::URLLoaderFactory> remote_url_loader_factory;
-  network::TestURLLoaderFactory proxied_url_loader_factory;
-  mojo::Remote<network::mojom::URLLoader> remote_loader;
-  TestURLLoaderClient test_client;
-
-  base::WeakPtr<SubresourceProxyingURLLoaderService::BindContext> bind_context =
-      CreateFactory(proxied_url_loader_factory, remote_url_loader_factory);
-  bind_context->OnDidCommitNavigation(
-      web_contents()->GetPrimaryMainFrame()->GetWeakDocumentPtr());
-
-  // The request to "foo1.com" will add the ad auction header value "?1".
-  remote_url_loader_factory->CreateLoaderAndStart(
-      remote_loader.BindNewPipeAndPassReceiver(),
-      /*request_id=*/0, /*options=*/0,
-      CreateResourceRequest(GURL("https://foo1.com")),
-      test_client.BindURLLoaderClientAndGetRemote(),
-      net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS));
-  remote_url_loader_factory.FlushForTesting();
-
-  EXPECT_EQ(1, proxied_url_loader_factory.NumPending());
-  network::TestURLLoaderFactory::PendingRequest* pending_request =
-      &proxied_url_loader_factory.pending_requests()->back();
-
-  std::string ad_auction_request_header_value;
-  bool has_ad_auction_request_header =
-      pending_request->request.headers.GetHeader(
-          "Sec-Ad-Auction-Fetch", &ad_auction_request_header_value);
-  EXPECT_TRUE(has_ad_auction_request_header);
-  EXPECT_EQ(ad_auction_request_header_value, "?1");
-
-  // Entries with invalid nonce (i.e. doesn't have 36 characters) will be
-  // skipped.
-  pending_request->client->OnReceiveResponse(
-      CreateResponseHeadWithAdditionalBids(
-          {"00000000-0000-0000-0000-00000000000:e30=",
-           "00000000-0000-0000-0000-0000000000001:e30=",
-           "00000000-0000-0000-0000-000000000001:e2E6IDF9"}),
-      /*body=*/{}, absl::nullopt);
-  base::RunLoop().RunUntilIdle();
-
-  // The `Ad-Auction-Additional-Bid` header was intercepted and stored in the
-  // browser. It was not exposed to the original loader client.
-  EXPECT_TRUE(test_client.received_response());
-  EXPECT_FALSE(test_client.received_ad_auction_additional_bid_header());
-
-  url::Origin request_origin = url::Origin::Create(GURL("https://foo1.com"));
-  EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
-                  request_origin, "00000000-0000-0000-0000-00000000000"),
-              ::testing::IsEmpty());
-  EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
-                  request_origin, "00000000-0000-0000-0000-0000000000001"),
-              ::testing::IsEmpty());
-  EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
-                  request_origin, "00000000-0000-0000-0000-000000000001"),
-              ::testing::ElementsAre("e2E6IDF9"));
-}
-
 TEST_F(AdAuctionURLLoaderInterceptorTest,
        HasRedirect_AdditionalBidResponseHeaderIgnoredAndRemoved) {
   NavigatePage(GURL("https://google.com"));
diff --git a/content/browser/interest_group/interest_group_browsertest.cc b/content/browser/interest_group/interest_group_browsertest.cc
index 1690d78..9dc9093b 100644
--- a/content/browser/interest_group/interest_group_browsertest.cc
+++ b/content/browser/interest_group/interest_group_browsertest.cc
@@ -118,6 +118,8 @@
 
 constexpr char kLegitimateAdAuctionResponse[] =
     "ungWv48Bz-pBQUDeXa4iI7ADYaOWF3qctBD_YfIAFa0=";
+constexpr char kLegitimateAdAuctionSignals[] =
+    R"([{"adSlot":"slot1", "sellerSignals":{"signal1":"value1"}}])";
 
 // Returned by test Javascript code when join or leave promises complete without
 // throwing an exception.
@@ -6186,7 +6188,7 @@
   const char kHeaderSignalsPath[] = "/header_direct_from_seller_signals.json";
   // The actual body of the request is just an empty JSON dict for the test,
   // but it could be any arbitrary payload that the server wants to deliver
-  // with the header signals.
+  // alongside the header signals.
   const char kHeaderSignalsBodyResponse[] = "{}";
   // The adSlot key is not present, so kHeaderSignalsResponse is invalid. The
   // signals given to worklet functions should be null, and errors should be
@@ -6784,7 +6786,7 @@
   const char kHeaderSignalsPath[] = "/header_direct_from_seller_signals.json";
   // The actual body of the request is just an empty JSON dict for the test,
   // but it could be any arbitrary payload that the server wants to deliver
-  // with the header signals.
+  // alongside the header signals.
   const char kHeaderSignalsBodyResponse[] = "{}";
   const char kHeaderSignalsResponse[] = R"([{
       "adSlot": "adSlot1",
@@ -6859,7 +6861,7 @@
   const char kHeaderSignalsPath[] = "/header_direct_from_seller_signals.json";
   // The actual body of the request is just an empty JSON dict for the test,
   // but it could be any arbitrary payload that the server wants to deliver
-  // with the header signals.
+  // alongside the header signals.
   const char kHeaderSignalsBodyResponse[] = "{}";
   const char kHeaderSignalsResponse[] = R"([{
       "adSlot": "adSlot1",
@@ -11523,7 +11525,7 @@
     const char kHeaderSignalsPath[] = "/header_direct_from_seller_signals.json";
     // The actual body of the request is just an empty JSON dict for the test,
     // but it could be any arbitrary payload that the server wants to deliver
-    // with the header signals.
+    // alongside the header signals.
     const char kHeaderSignalsBodyResponse[] = "{}";
     const std::string kHeaderSignalsResponse =
         base::StringPrintf(R"([{
@@ -11919,7 +11921,7 @@
         "/component_header_direct_from_seller_signals.json";
     // The actual body of both requests is just an empty JSON dict for the test,
     // but it could be any arbitrary payload that the server wants to deliver
-    // with the header signals.
+    // alongside the header signals.
     const char kHeaderSignalsBodyResponse[] = "{}";
     // Intentionally use the same adSlot name for both responses -- responses
     // from different sellers shouldn't conflict.
@@ -15109,472 +15111,737 @@
   }
 }
 
-IN_PROC_BROWSER_TEST_F(
-    InterestGroupBrowserTest,
-    FetchCrossOrigin_AdAuctionHeadersEligible_HasAdAuctionResultResponseHeader) {
-  GURL main_frame_url =
-      https_server_->GetURL("a.test", "/interest_group/empty.html");
-  ASSERT_TRUE(NavigateToURL(shell(), main_frame_url));
+enum FetchMethod {
+  kFetch,
+  kIFrame,
+  kDynamicIFrame,
+};
 
-  base::StringPairs replacement;
-  replacement.emplace_back(std::make_pair("{{STATUS}}", "200 OK"));
-  replacement.emplace_back(std::make_pair(
-      "{{AD_AUCTION_HEADERS}}",
-      base::StrCat({"Ad-Auction-Result: ", kLegitimateAdAuctionResponse})));
-  replacement.emplace_back(std::make_pair("{{REDIRECT_HEADER}}", ""));
+class InterestGroupBrowserAdAuctionHeadersTest
+    : public InterestGroupBrowserTest {
+ protected:
+  struct FetchURLParams {
+    std::string origin;
+    absl::optional<std::string> path;
+    std::string ad_auction_headers;
+    absl::optional<GURL> redirect_url;
+  };
+  GURL GetFetchURL(FetchURLParams params) {
+    CHECK(!params.origin.empty());
+    base::StringPairs replacements;
+    replacements.emplace_back(std::make_pair(
+        "{{STATUS}}",
+        params.redirect_url.has_value() ? "301 Moved Permanently" : "200 OK"));
+    replacements.emplace_back(
+        std::make_pair("{{AD_AUCTION_HEADERS}}", params.ad_auction_headers));
+    replacements.emplace_back(std::make_pair(
+        "{{REDIRECT_HEADER}}", params.redirect_url.has_value()
+                                   ? "Location: " + params.redirect_url->spec()
+                                   : ""));
 
-  GURL fetch_url = https_server_->GetURL(
-      "b.test", net::test_server::GetFilePathWithReplacements(
-                    "/interest_group/"
-                    "page_with_custom_ad_auction_result_header.html",
-                    replacement));
-
-  EXPECT_TRUE(ExecJs(
-      web_contents()->GetPrimaryMainFrame(),
-      content::JsReplace("fetch($1, {adAuctionHeaders: true})", fetch_url)));
-
-  absl::optional<std::string> ad_auction_header_value =
-      GetAdAuctionHeaderForRequestPath(
-          "/interest_group/page_with_custom_ad_auction_result_header.html");
-
-  EXPECT_TRUE(ad_auction_header_value);
-  EXPECT_EQ(*ad_auction_header_value, "?1");
-
-  EXPECT_TRUE(WitnessedAuctionResultForOrigin(
-      url::Origin::Create(fetch_url),
-      base64Decode(kLegitimateAdAuctionResponse)));
-
-  const scoped_refptr<HeaderDirectFromSellerSignals::Result> signals =
-      ParseAndFindAdAuctionSignals(url::Origin::Create(fetch_url), "slot1");
-  EXPECT_EQ(signals, nullptr);
-}
-
-IN_PROC_BROWSER_TEST_F(
-    InterestGroupBrowserTest,
-    FetchSameOrigin_AdAuctionHeadersEligible_HasBothAdAuctionResultAndSignalsResponseHeader) {
-  GURL main_frame_url =
-      https_server_->GetURL("a.test", "/interest_group/empty.html");
-  ASSERT_TRUE(NavigateToURL(shell(), main_frame_url));
-
-  base::StringPairs replacement;
-  replacement.emplace_back(std::make_pair("{{STATUS}}", "200 OK"));
-  replacement.emplace_back(std::make_pair(
-      "{{AD_AUCTION_HEADERS}}",
-      base::StrCat({"Ad-Auction-Result: ", kLegitimateAdAuctionResponse,
-                    "\nAd-Auction-Signals: ", R"([{"adSlot":"slot1"}])"})));
-  replacement.emplace_back(std::make_pair("{{REDIRECT_HEADER}}", ""));
-
-  GURL fetch_url = https_server_->GetURL(
-      "a.test", net::test_server::GetFilePathWithReplacements(
-                    "/interest_group/"
-                    "page_with_custom_ad_auction_result_header.html",
-                    replacement));
-
-  // Verify that the JavaScript doesn't see the response header
-  //  `Ad-Auction-Signals`. In contrast, it should see `Ad-Auction-Result`.
-  EXPECT_TRUE(ExecJs(web_contents()->GetPrimaryMainFrame(),
-                     content::JsReplace(R"(
-        fetch($1, {adAuctionHeaders: true}).then((response) => {
-          if (!response.headers.get('Ad-Auction-Result')) {
-            throw 'Did not receive `Ad-Auction-Result` header';
-          }
-
-          if (response.headers.get('Ad-Auction-Signals')) {
-            throw 'Unexpectedly received `Ad-Auction-Signals` header';
-          }
-
-        });
-    )",
-                                        fetch_url)));
-
-  absl::optional<std::string> ad_auction_header_value =
-      GetAdAuctionHeaderForRequestPath(
-          "/interest_group/page_with_custom_ad_auction_result_header.html");
-
-  EXPECT_TRUE(ad_auction_header_value);
-  EXPECT_EQ(*ad_auction_header_value, "?1");
-
-  EXPECT_TRUE(WitnessedAuctionResultForOrigin(
-      url::Origin::Create(fetch_url),
-      base64Decode(kLegitimateAdAuctionResponse)));
-
-  const scoped_refptr<HeaderDirectFromSellerSignals::Result> signals =
-      ParseAndFindAdAuctionSignals(url::Origin::Create(fetch_url), "slot1");
-  EXPECT_NE(signals, nullptr);
-}
-
-IN_PROC_BROWSER_TEST_F(
-    InterestGroupBrowserTest,
-    FetchCrossOrigin_AdAuctionHeadersEligible_HasBothAdAuctionResultAndSignalsResponseHeader) {
-  GURL main_frame_url =
-      https_server_->GetURL("a.test", "/interest_group/empty.html");
-  ASSERT_TRUE(NavigateToURL(shell(), main_frame_url));
-
-  base::StringPairs replacement;
-  replacement.emplace_back(std::make_pair("{{STATUS}}", "200 OK"));
-  replacement.emplace_back(std::make_pair(
-      "{{AD_AUCTION_HEADERS}}",
-      base::StrCat({"Ad-Auction-Result: ", kLegitimateAdAuctionResponse,
-                    "\nAd-Auction-Signals: ", R"([{"adSlot":"slot1"}])"})));
-  replacement.emplace_back(std::make_pair("{{REDIRECT_HEADER}}", ""));
-
-  GURL fetch_url = https_server_->GetURL(
-      "b.test", net::test_server::GetFilePathWithReplacements(
-                    "/interest_group/"
-                    "page_with_custom_ad_auction_result_header.html",
-                    replacement));
-
-  // Verify that the JavaScript doesn't see the `Ad-Auction-Signals` or
-  // `Ad-Auction-Result` response header, as they are not CORS-safelisted.
-  EXPECT_TRUE(ExecJs(web_contents()->GetPrimaryMainFrame(),
-                     content::JsReplace(R"(
-        fetch($1, {adAuctionHeaders: true}).then((response) => {
-          if (response.headers.get('Ad-Auction-Result')) {
-            throw 'Unexpectedly received `Ad-Auction-Result` header';
-          }
-
-          if (response.headers.get('Ad-Auction-Signals')) {
-            throw 'Unexpectedly received `Ad-Auction-Signals` header';
-          }
-
-        });
-    )",
-                                        fetch_url)));
-
-  absl::optional<std::string> ad_auction_header_value =
-      GetAdAuctionHeaderForRequestPath(
-          "/interest_group/page_with_custom_ad_auction_result_header.html");
-
-  EXPECT_TRUE(ad_auction_header_value);
-  EXPECT_EQ(*ad_auction_header_value, "?1");
-
-  EXPECT_TRUE(WitnessedAuctionResultForOrigin(
-      url::Origin::Create(fetch_url),
-      base64Decode(kLegitimateAdAuctionResponse)));
-
-  const scoped_refptr<HeaderDirectFromSellerSignals::Result> signals =
-      ParseAndFindAdAuctionSignals(url::Origin::Create(fetch_url), "slot1");
-  EXPECT_NE(signals, nullptr);
-}
-
-IN_PROC_BROWSER_TEST_F(
-    InterestGroupBrowserTest,
-    FetchCrossOrigin_AdAuctionHeadersNotEligible_HasAdAuctionResultResponseHeader) {
-  GURL main_frame_url =
-      https_server_->GetURL("a.test", "/interest_group/empty.html");
-  ASSERT_TRUE(NavigateToURL(shell(), main_frame_url));
-
-  base::StringPairs replacement;
-  replacement.emplace_back(std::make_pair("{{STATUS}}", "200 OK"));
-  replacement.emplace_back(std::make_pair(
-      "{{AD_AUCTION_HEADERS}}",
-      base::StrCat({"Ad-Auction-Result: ", kLegitimateAdAuctionResponse})));
-  replacement.emplace_back(std::make_pair("{{REDIRECT_HEADER}}", ""));
-
-  // "d.test" is not allowlisted for the API. Thus the request isn't eligible
-  // for ad auction headers.
-  GURL fetch_url = https_server_->GetURL(
-      "d.test", net::test_server::GetFilePathWithReplacements(
-                    "/interest_group/"
-                    "page_with_custom_ad_auction_result_header.html",
-                    replacement));
-
-  EXPECT_TRUE(ExecJs(
-      web_contents()->GetPrimaryMainFrame(),
-      content::JsReplace("fetch($1, {adAuctionHeaders: true})", fetch_url)));
-
-  absl::optional<std::string> ad_auction_header_value =
-      GetAdAuctionHeaderForRequestPath(
-          "/interest_group/page_with_custom_ad_auction_result_header.html");
-
-  EXPECT_FALSE(ad_auction_header_value);
-
-  EXPECT_FALSE(WitnessedAuctionResultForOrigin(
-      url::Origin::Create(fetch_url),
-      base64Decode(kLegitimateAdAuctionResponse)));
-}
-
-IN_PROC_BROWSER_TEST_F(
-    InterestGroupBrowserTest,
-    FetchCrossOrigin_AdAuctionHeadersEligible_HasNoAdAuctionResultResponseHeader) {
-  GURL main_frame_url =
-      https_server_->GetURL("a.test", "/interest_group/empty.html");
-  ASSERT_TRUE(NavigateToURL(shell(), main_frame_url));
-
-  base::StringPairs replacement;
-  replacement.emplace_back(std::make_pair("{{STATUS}}", "200 OK"));
-  replacement.emplace_back(std::make_pair("{{AD_AUCTION_HEADERS}}", ""));
-  replacement.emplace_back(std::make_pair("{{REDIRECT_HEADER}}", ""));
-
-  // "d.test" is not allowlisted for the API. Thus the request isn't eligible
-  // for ad auction headers.
-  GURL fetch_url = https_server_->GetURL(
-      "b.test", net::test_server::GetFilePathWithReplacements(
-                    "/interest_group/"
-                    "page_with_custom_ad_auction_result_header.html",
-                    replacement));
-
-  EXPECT_TRUE(ExecJs(
-      web_contents()->GetPrimaryMainFrame(),
-      content::JsReplace("fetch($1, {adAuctionHeaders: true})", fetch_url)));
-
-  absl::optional<std::string> ad_auction_header_value =
-      GetAdAuctionHeaderForRequestPath(
-          "/interest_group/page_with_custom_ad_auction_result_header.html");
-
-  EXPECT_TRUE(ad_auction_header_value);
-  EXPECT_EQ(*ad_auction_header_value, "?1");
-
-  EXPECT_FALSE(WitnessedAuctionResultForOrigin(
-      url::Origin::Create(fetch_url),
-      base64Decode(kLegitimateAdAuctionResponse)));
-}
-
-// On site a.test, test fetch request to b.test that gets redirected to c.test.
-// Only the initial ad auction request header "?1" is expected -- its response
-// will be ignored and the redirect request is also ineligible for ad auction
-// headers handling.
-IN_PROC_BROWSER_TEST_F(
-    InterestGroupBrowserTest,
-    FetchCrossOrigin_HasRedirect_AdAuctionHeadersNotEligible) {
-  GURL main_frame_url =
-      https_server_->GetURL("a.test", "/interest_group/empty.html");
-  ASSERT_TRUE(NavigateToURL(shell(), main_frame_url));
-
-  base::StringPairs redirect_replacement;
-  redirect_replacement.emplace_back(std::make_pair("{{STATUS}}", "200 OK"));
-  redirect_replacement.emplace_back(std::make_pair(
-      "{{AD_AUCTION_HEADERS}}",
-      base::StrCat({"Ad-Auction-Result: ", kLegitimateAdAuctionResponse,
-                    "\nAd-Auction-Signals: ", "{}",
-                    "\nAd-Auction-Additional-Bid: ",
-                    "00000000-0000-0000-0000-000000000000:e30="})));
-  redirect_replacement.emplace_back(std::make_pair("{{REDIRECT_HEADER}}", ""));
-
-  GURL redirect_url = https_server_->GetURL(
-      "c.test", net::test_server::GetFilePathWithReplacements(
-                    "/interest_group/"
-                    "page_with_custom_ad_auction_result_header2.html",
-                    redirect_replacement));
-
-  base::StringPairs replacement;
-  replacement.emplace_back(
-      std::make_pair("{{STATUS}}", "301 Moved Permanently"));
-  replacement.emplace_back(std::make_pair(
-      "{{AD_AUCTION_HEADERS}}",
-      base::StrCat({"Ad-Auction-Result: ", kLegitimateAdAuctionResponse,
-                    "\nAd-Auction-Signals: ", "{}",
-                    "\nAd-Auction-Additional-Bid: ",
-                    "00000000-0000-0000-0000-000000000000:e30="})));
-  replacement.emplace_back(std::make_pair("{{REDIRECT_HEADER}}",
-                                          "Location: " + redirect_url.spec()));
-
-  GURL fetch_url = https_server_->GetURL(
-      "b.test", net::test_server::GetFilePathWithReplacements(
-                    "/interest_group/"
-                    "page_with_custom_ad_auction_result_header.html",
-                    replacement));
-
-  EXPECT_TRUE(ExecJs(
-      web_contents()->GetPrimaryMainFrame(),
-      content::JsReplace("fetch($1, {adAuctionHeaders: true})", fetch_url)));
-
-  {
-    absl::optional<std::string> ad_auction_header_value =
-        GetAdAuctionHeaderForRequestPath(
-            "/interest_group/page_with_custom_ad_auction_result_header.html");
-
-    EXPECT_TRUE(ad_auction_header_value);
-    EXPECT_EQ(*ad_auction_header_value, "?1");
+    return https_server_->GetURL(
+        params.origin,
+        net::test_server::GetFilePathWithReplacements(
+            "/interest_group/" +
+                params.path.value_or(
+                    "page_with_custom_ad_auction_result_header.html"),
+            replacements));
   }
-  {
-    absl::optional<std::string> ad_auction_header_value =
-        GetAdAuctionHeaderForRequestPath(
-            "/interest_group/page_with_custom_ad_auction_result_header2.html");
 
-    EXPECT_FALSE(ad_auction_header_value);
+  void CreateIframe(const GURL& url, bool has_ad_auction_headers_attribute) {
+    content::TestNavigationObserver nav_observer(web_contents());
+
+    ExecuteScriptAsync(
+        web_contents(),
+        content::JsReplace(R"(
+      {
+        const iframe = document.createElement("iframe");
+        iframe.adAuctionHeaders = $1;
+        iframe.src = $2;
+        document.body.appendChild(iframe);
+      }
+                )",
+                           has_ad_auction_headers_attribute, url));
+
+    nav_observer.WaitForNavigationFinished();
+    EXPECT_TRUE(nav_observer.last_navigation_succeeded());
   }
 
+  GURL GetPageWithIFrameURL(GURL fetch_url,
+                            bool has_ad_auction_headers_attribute) {
+    base::StringPairs replacement;
+    replacement.emplace_back(std::make_pair(
+        "{{MAYBE_AD_AUCTION_HEADERS_ATTRIBUTE}}",
+        has_ad_auction_headers_attribute ? "adAuctionHeaders" : ""));
+    replacement.emplace_back(std::make_pair("{{SRC_URL}}", fetch_url.spec()));
+
+    return https_server_->GetURL(
+        "a.test",
+        net::test_server::GetFilePathWithReplacements(
+            "/interest_group/page_with_iframe_with_ad_auction_headers.html",
+            replacement));
+  }
+
+  absl::optional<std::string> GetAdAuctionHeader(
+      absl::optional<std::string> path = absl::nullopt) {
+    return GetAdAuctionHeaderForRequestPath(
+        "/interest_group/" +
+        path.value_or("page_with_custom_ad_auction_result_header.html"));
+  }
+};
+
+class InterestGroupBrowserAdAuctionHeadersAllMethodsAndOriginsTest
+    : public InterestGroupBrowserAdAuctionHeadersTest,
+      public ::testing::WithParamInterface<std::tuple<FetchMethod, bool>> {
+ protected:
+  FetchMethod ad_auction_headers_test_type() { return std::get<0>(GetParam()); }
+
+  bool is_cross_origin() { return std::get<1>(GetParam()); }
+};
+
+IN_PROC_BROWSER_TEST_P(
+    InterestGroupBrowserAdAuctionHeadersAllMethodsAndOriginsTest,
+    AdAuctionHeadersEligible_HasNoResponseHeaders) {
+  GURL fetch_url = GetFetchURL(
+      (FetchURLParams){.origin = is_cross_origin() ? "b.test" : "a.test",
+                       .ad_auction_headers = ""});
+
+  switch (ad_auction_headers_test_type()) {
+    case FetchMethod::kFetch:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
+      EXPECT_TRUE(
+          ExecJs(web_contents()->GetPrimaryMainFrame(),
+                 content::JsReplace("fetch($1, {adAuctionHeaders: true})",
+                                    fetch_url)));
+      break;
+
+    case FetchMethod::kIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(), GetPageWithIFrameURL(
+                       fetch_url, /*has_ad_auction_headers_attribute=*/true)));
+      break;
+
+    case FetchMethod::kDynamicIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
+      CreateIframe(fetch_url, /*has_ad_auction_headers_attribute=*/true);
+      break;
+  }
+
+  absl::optional<std::string> ad_auction_header = GetAdAuctionHeader();
+  EXPECT_TRUE(ad_auction_header);
+  EXPECT_EQ(*ad_auction_header, "?1");
+
   url::Origin request_origin = url::Origin::Create(fetch_url);
-
   EXPECT_FALSE(WitnessedAuctionResultForOrigin(
       request_origin, base64Decode(kLegitimateAdAuctionResponse)));
+  EXPECT_EQ(ParseAndFindAdAuctionSignals(request_origin, "slot1"), nullptr);
+  EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
+                  request_origin, "00000000-0000-0000-0000-000000000000"),
+              ::testing::IsEmpty());
+}
 
+IN_PROC_BROWSER_TEST_P(
+    InterestGroupBrowserAdAuctionHeadersAllMethodsAndOriginsTest,
+    AdAuctionHeadersEligible_HasAdAuctionResultResponseHeader) {
+  GURL fetch_url = GetFetchURL((FetchURLParams){
+      .origin = is_cross_origin() ? "b.test" : "a.test",
+      .ad_auction_headers =
+          base::StrCat({"Ad-Auction-Result: ", kLegitimateAdAuctionResponse})});
+
+  switch (ad_auction_headers_test_type()) {
+    case FetchMethod::kFetch:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
+      EXPECT_TRUE(ExecJs(web_contents()->GetPrimaryMainFrame(),
+                         content::JsReplace(R"(
+            fetch($1, {adAuctionHeaders: true}).then((response) => {
+              if (!response.headers.get('Ad-Auction-Result')) {
+                throw 'Did not receive `Ad-Auction-Result` header';
+              }
+            });
+          )",
+                                            fetch_url)));
+      break;
+
+    case FetchMethod::kIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(), GetPageWithIFrameURL(
+                       fetch_url, /*has_ad_auction_headers_attribute=*/true)));
+      break;
+
+    case FetchMethod::kDynamicIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
+      CreateIframe(fetch_url, /*has_ad_auction_headers_attribute=*/true);
+      break;
+  }
+
+  absl::optional<std::string> ad_auction_header = GetAdAuctionHeader();
+  ASSERT_TRUE(ad_auction_header);
+  EXPECT_EQ(*ad_auction_header, "?1");
+
+  url::Origin request_origin = url::Origin::Create(fetch_url);
+  EXPECT_TRUE(WitnessedAuctionResultForOrigin(
+      request_origin, base64Decode(kLegitimateAdAuctionResponse)));
+  EXPECT_EQ(ParseAndFindAdAuctionSignals(request_origin, "slot1"), nullptr);
+  EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
+                  request_origin, "00000000-0000-0000-0000-000000000000"),
+              ::testing::IsEmpty());
+}
+
+IN_PROC_BROWSER_TEST_P(
+    InterestGroupBrowserAdAuctionHeadersAllMethodsAndOriginsTest,
+    AdAuctionHeadersEligible_HasAdAuctionSignalsResponseHeader) {
+  GURL fetch_url = GetFetchURL((FetchURLParams){
+      .origin = is_cross_origin() ? "b.test" : "a.test",
+      .ad_auction_headers =
+          base::StrCat({"Ad-Auction-Signals: ", kLegitimateAdAuctionSignals})});
+
+  switch (ad_auction_headers_test_type()) {
+    case FetchMethod::kFetch:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
+
+      // Verify that the JavaScript doesn't see the `Ad-Auction-Signals`
+      // response header.
+      EXPECT_TRUE(ExecJs(web_contents()->GetPrimaryMainFrame(),
+                         content::JsReplace(R"(
+            fetch($1, {adAuctionHeaders: true}).then((response) => {
+              if (response.headers.get('Ad-Auction-Signals')) {
+                throw 'Unexpectedly received `Ad-Auction-Signals` header';
+              }
+            });
+          )",
+                                            fetch_url)));
+      break;
+
+    case FetchMethod::kIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(), GetPageWithIFrameURL(
+                       fetch_url, /*has_ad_auction_headers_attribute=*/true)));
+      break;
+
+    case FetchMethod::kDynamicIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
+      CreateIframe(fetch_url, /*has_ad_auction_headers_attribute=*/true);
+      break;
+  }
+
+  absl::optional<std::string> ad_auction_header = GetAdAuctionHeader();
+  EXPECT_TRUE(ad_auction_header);
+  EXPECT_EQ(*ad_auction_header, "?1");
+
+  url::Origin request_origin = url::Origin::Create(fetch_url);
+  EXPECT_FALSE(WitnessedAuctionResultForOrigin(
+      request_origin, base64Decode(kLegitimateAdAuctionResponse)));
   const scoped_refptr<HeaderDirectFromSellerSignals::Result> signals =
-      ParseAndFindAdAuctionSignals(request_origin, "slot1");
-  EXPECT_EQ(signals, nullptr);
-
+      ParseAndFindAdAuctionSignals(url::Origin::Create(fetch_url), "slot1");
+  EXPECT_EQ(*signals->seller_signals(), R"({"signal1":"value1"})");
   EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
                   request_origin, "00000000-0000-0000-0000-000000000000"),
               ::testing::IsEmpty());
 }
 
-IN_PROC_BROWSER_TEST_F(
-    InterestGroupBrowserTest,
-    FetchSameOrigin_AdAuctionHeadersEligible_HasAdAuctionAdditionalBidResponseHeader) {
-  GURL main_frame_url =
-      https_server_->GetURL("a.test", "/interest_group/empty.html");
-  ASSERT_TRUE(NavigateToURL(shell(), main_frame_url));
+IN_PROC_BROWSER_TEST_P(
+    InterestGroupBrowserAdAuctionHeadersAllMethodsAndOriginsTest,
+    AdAuctionHeadersEligible_HasAdAuctionAdditionalBidResponseHeader) {
+  GURL fetch_url = GetFetchURL((FetchURLParams){
+      .origin = is_cross_origin() ? "b.test" : "a.test",
+      .ad_auction_headers =
+          base::StrCat({"Ad-Auction-Additional-Bid: ",
+                        "00000000-0000-0000-0000-000000000000:e30="})});
 
-  base::StringPairs replacement;
-  replacement.emplace_back(std::make_pair("{{STATUS}}", "200 OK"));
-  replacement.emplace_back(std::make_pair(
-      "{{AD_AUCTION_HEADERS}}",
-      base::StrCat({"Ad-Auction-Additional-Bid: ",
-                    "00000000-0000-0000-0000-000000000000:e30="})));
-  replacement.emplace_back(std::make_pair("{{REDIRECT_HEADER}}", ""));
+  switch (ad_auction_headers_test_type()) {
+    case FetchMethod::kFetch:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
 
-  GURL fetch_url = https_server_->GetURL(
-      "a.test", net::test_server::GetFilePathWithReplacements(
-                    "/interest_group/"
-                    "page_with_custom_ad_auction_result_header.html",
-                    replacement));
+      // Verify that the JavaScript doesn't see the `Ad-Auction-Additional-Bid`
+      // response header.
+      EXPECT_TRUE(ExecJs(web_contents()->GetPrimaryMainFrame(),
+                         content::JsReplace(R"(
+            fetch($1, {adAuctionHeaders: true}).then((response) => {
+              if (response.headers.get('Ad-Auction-Additional-Bid')) {
+                throw 'Unexpectedly received `Ad-Auction-Additional-Bid` header';
+              }
+            });
+          )",
+                                            fetch_url)));
+      break;
 
-  // Verify that the JavaScript doesn't see the response header
-  // `Ad-Auction-Additional-Bid`.
-  EXPECT_TRUE(ExecJs(web_contents()->GetPrimaryMainFrame(),
-                     content::JsReplace(R"(
-        fetch($1, {adAuctionHeaders: true}).then((response) => {
-          if (response.headers.get('Ad-Auction-Additional-Bid')) {
-            throw 'Unexpectedly received `Ad-Auction-Additional-Bid` header';
-          }
-        });
-    )",
-                                        fetch_url)));
+    case FetchMethod::kIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(), GetPageWithIFrameURL(
+                       fetch_url, /*has_ad_auction_headers_attribute=*/true)));
+      break;
 
-  absl::optional<std::string> ad_auction_header_value =
-      GetAdAuctionHeaderForRequestPath(
-          "/interest_group/page_with_custom_ad_auction_result_header.html");
+    case FetchMethod::kDynamicIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
+      CreateIframe(fetch_url, /*has_ad_auction_headers_attribute=*/true);
+      break;
+  }
 
-  EXPECT_TRUE(ad_auction_header_value);
-  EXPECT_EQ(*ad_auction_header_value, "?1");
+  absl::optional<std::string> ad_auction_header = GetAdAuctionHeader();
+  EXPECT_TRUE(ad_auction_header);
+  EXPECT_EQ(*ad_auction_header, "?1");
 
   url::Origin request_origin = url::Origin::Create(fetch_url);
+  EXPECT_FALSE(WitnessedAuctionResultForOrigin(
+      request_origin, base64Decode(kLegitimateAdAuctionResponse)));
+  EXPECT_EQ(ParseAndFindAdAuctionSignals(request_origin, "slot1"), nullptr);
   EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
                   request_origin, "00000000-0000-0000-0000-000000000000"),
               ::testing::ElementsAre("e30="));
 }
 
-IN_PROC_BROWSER_TEST_F(
-    InterestGroupBrowserTest,
-    FetchCrossOrigin_AdAuctionHeadersEligible_HasAdAuctionAdditionalBidResponseHeader) {
-  GURL main_frame_url =
-      https_server_->GetURL("a.test", "/interest_group/empty.html");
-  ASSERT_TRUE(NavigateToURL(shell(), main_frame_url));
+IN_PROC_BROWSER_TEST_P(
+    InterestGroupBrowserAdAuctionHeadersAllMethodsAndOriginsTest,
+    AdAuctionHeadersEligible_HasAllResponseHeaders) {
+  GURL fetch_url = GetFetchURL((FetchURLParams){
+      .origin = is_cross_origin() ? "b.test" : "a.test",
+      .ad_auction_headers = base::StrCat(
+          {"Ad-Auction-Result: ", kLegitimateAdAuctionResponse,
+           "\nAd-Auction-Signals: ", "{}", "\nAd-Auction-Additional-Bid: ",
+           "00000000-0000-0000-0000-000000000000:e30="})});
 
-  base::StringPairs replacement;
-  replacement.emplace_back(std::make_pair("{{STATUS}}", "200 OK"));
-  replacement.emplace_back(std::make_pair(
-      "{{AD_AUCTION_HEADERS}}",
-      base::StrCat({"Ad-Auction-Additional-Bid: ",
-                    "00000000-0000-0000-0000-000000000000:e30="})));
-  replacement.emplace_back(std::make_pair("{{REDIRECT_HEADER}}", ""));
+  switch (ad_auction_headers_test_type()) {
+    case FetchMethod::kFetch:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
 
-  GURL fetch_url = https_server_->GetURL(
-      "b.test", net::test_server::GetFilePathWithReplacements(
-                    "/interest_group/"
-                    "page_with_custom_ad_auction_result_header.html",
-                    replacement));
+      // Verify that the JavaScript doesn't see the
+      //  `Ad-Auction-Signals` or `Ad-Auction-Additional-Bid` response headers.
+      // In contrast, it should see `Ad-Auction-Result`.
+      EXPECT_TRUE(ExecJs(web_contents()->GetPrimaryMainFrame(),
+                         content::JsReplace(R"(
+            fetch($1, {adAuctionHeaders: true}).then((response) => {
+              if (!response.headers.get('Ad-Auction-Result')) {
+                throw 'Did not receive `Ad-Auction-Result` header';
+              }
 
-  // Verify that the JavaScript doesn't see the response header
-  // `Ad-Auction-Additional-Bid`.
-  EXPECT_TRUE(ExecJs(web_contents()->GetPrimaryMainFrame(),
-                     content::JsReplace(R"(
-        fetch($1, {adAuctionHeaders: true}).then((response) => {
-          if (response.headers.get('Ad-Auction-Additional-Bid')) {
-            throw 'Unexpectedly received `Ad-Auction-Additional-Bid` header';
-          }
-        });
-    )",
-                                        fetch_url)));
+              if (response.headers.get('Ad-Auction-Signals')) {
+                throw 'Unexpectedly received `Ad-Auction-Signals` header';
+              }
 
-  absl::optional<std::string> ad_auction_header_value =
-      GetAdAuctionHeaderForRequestPath(
-          "/interest_group/page_with_custom_ad_auction_result_header.html");
+              if (response.headers.get('Ad-Auction-Additional-Bid')) {
+                throw 'Unexpectedly received `Ad-Auction-Additional-Bid` header';
+              }
+            });
+          )",
+                                            fetch_url)));
+      break;
 
-  EXPECT_TRUE(ad_auction_header_value);
-  EXPECT_EQ(*ad_auction_header_value, "?1");
+    case FetchMethod::kIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(), GetPageWithIFrameURL(
+                       fetch_url, /*has_ad_auction_headers_attribute=*/true)));
+      break;
+
+    case FetchMethod::kDynamicIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
+      CreateIframe(fetch_url, /*has_ad_auction_headers_attribute=*/true);
+      break;
+  }
+
+  absl::optional<std::string> ad_auction_header = GetAdAuctionHeader();
+  EXPECT_TRUE(ad_auction_header);
+  EXPECT_EQ(*ad_auction_header, "?1");
 
   url::Origin request_origin = url::Origin::Create(fetch_url);
+  EXPECT_TRUE(WitnessedAuctionResultForOrigin(
+      request_origin, base64Decode(kLegitimateAdAuctionResponse)));
+  EXPECT_EQ(ParseAndFindAdAuctionSignals(request_origin, "slot1"), nullptr);
   EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
                   request_origin, "00000000-0000-0000-0000-000000000000"),
               ::testing::ElementsAre("e30="));
 }
 
-IN_PROC_BROWSER_TEST_F(
-    InterestGroupBrowserTest,
-    FetchCrossOrigin_AdAuctionHeadersEligible_HasNoAdAuctionAdditionalBidResponseHeader) {
-  GURL main_frame_url =
-      https_server_->GetURL("a.test", "/interest_group/empty.html");
-  ASSERT_TRUE(NavigateToURL(shell(), main_frame_url));
+// On site a.test, test fetch request that gets redirected. Only the initial
+// request is expected to have the ad auction request header "?1"; its response
+// headers are ignored. The redirect request doesn't retain the ad auction
+// request header, and so its response headers are also ignored.
+IN_PROC_BROWSER_TEST_P(
+    InterestGroupBrowserAdAuctionHeadersAllMethodsAndOriginsTest,
+    RedirectOnSameSite_AdAuctionHeadersNotEligible) {
+  GURL redirect_url = GetFetchURL((FetchURLParams){
+      .origin = is_cross_origin() ? "b.test" : "a.test",
+      .path = "page_with_custom_ad_auction_result_header2.html",
+      .ad_auction_headers = base::StrCat(
+          {"Ad-Auction-Result: ", kLegitimateAdAuctionResponse,
+           "\nAd-Auction-Signals: ", "{}", "\nAd-Auction-Additional-Bid: ",
+           "00000000-0000-0000-0000-000000000000:e30="})});
 
-  base::StringPairs replacement;
-  replacement.emplace_back(std::make_pair("{{STATUS}}", "200 OK"));
-  replacement.emplace_back(std::make_pair("{{AD_AUCTION_HEADERS}}", ""));
-  replacement.emplace_back(std::make_pair("{{REDIRECT_HEADER}}", ""));
+  GURL fetch_url = GetFetchURL((FetchURLParams){
+      .origin = is_cross_origin() ? "b.test" : "a.test",
+      .ad_auction_headers = base::StrCat(
+          {"Ad-Auction-Result: ", kLegitimateAdAuctionResponse,
+           "\nAd-Auction-Signals: ", "{}", "\nAd-Auction-Additional-Bid: ",
+           "00000000-0000-0000-0000-000000000000:e30="}),
+      .redirect_url = redirect_url});
 
-  GURL fetch_url = https_server_->GetURL(
-      "b.test", net::test_server::GetFilePathWithReplacements(
-                    "/interest_group/"
-                    "page_with_custom_ad_auction_result_header.html",
-                    replacement));
+  switch (ad_auction_headers_test_type()) {
+    case FetchMethod::kFetch:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
 
-  EXPECT_TRUE(ExecJs(
-      web_contents()->GetPrimaryMainFrame(),
-      content::JsReplace("fetch($1, {adAuctionHeaders: true})", fetch_url)));
+      // When this request is first issued, it appears to be eligible for
+      // adAuctionHeaders. However, when it responds as a redirect, neither
+      // the initial response nor the redirected response are eligible, and
+      // so none of the `Ad-Auction-Signals`, `Ad-Auction-Additional-Bid`, and
+      // `Ad-Auction-Result` response headers are processed for later use in
+      // the auction. At the same time, the browser _does_ clear the
+      // `Ad-Auction-Signals` and `Ad-Auction-Additional-Bid` response headers.
+      EXPECT_TRUE(ExecJs(web_contents()->GetPrimaryMainFrame(),
+                         content::JsReplace(R"(
+            fetch($1, {adAuctionHeaders: true}).then((response) => {
+              if (!response.headers.get('Ad-Auction-Result')) {
+                throw 'Did not receive `Ad-Auction-Result` header';
+              }
 
-  absl::optional<std::string> ad_auction_header_value =
-      GetAdAuctionHeaderForRequestPath(
-          "/interest_group/page_with_custom_ad_auction_result_header.html");
+              if (response.headers.get('Ad-Auction-Signals')) {
+                throw 'Unexpectedly received `Ad-Auction-Signals` header';
+              }
 
-  EXPECT_TRUE(ad_auction_header_value);
-  EXPECT_EQ(*ad_auction_header_value, "?1");
+              if (response.headers.get('Ad-Auction-Additional-Bid')) {
+                throw 'Unexpectedly received `Ad-Auction-Additional-Bid` header';
+              }
+            });
+          )",
+                                            fetch_url)));
+      break;
+
+    case FetchMethod::kIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(), GetPageWithIFrameURL(
+                       fetch_url, /*has_ad_auction_headers_attribute=*/true)));
+      break;
+
+    case FetchMethod::kDynamicIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
+      CreateIframe(fetch_url, /*has_ad_auction_headers_attribute=*/true);
+      break;
+  }
+
+  {
+    // For the initial fetch
+    absl::optional<std::string> ad_auction_header = GetAdAuctionHeader();
+    EXPECT_TRUE(ad_auction_header);
+    EXPECT_EQ(*ad_auction_header, "?1");
+  }
+  {
+    // For the redirected fetch
+    absl::optional<std::string> ad_auction_header =
+        GetAdAuctionHeader("page_with_custom_ad_auction_result_header2.html");
+    EXPECT_FALSE(ad_auction_header);
+  }
+
+  for (url::Origin request_origin :
+       {url::Origin::Create(fetch_url), url::Origin::Create(redirect_url)}) {
+    EXPECT_FALSE(WitnessedAuctionResultForOrigin(
+        request_origin, base64Decode(kLegitimateAdAuctionResponse)));
+    EXPECT_EQ(ParseAndFindAdAuctionSignals(request_origin, "slot1"), nullptr);
+    EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
+                    request_origin, "00000000-0000-0000-0000-000000000000"),
+                ::testing::IsEmpty());
+  }
+}
+
+// On site a.test, test fetch request that gets redirected. Only the initial
+// request is expected to have the ad auction request header "?1"; its response
+// headers are ignored. The redirect request doesn't retain the ad auction
+// request header, and so its response headers are also ignored. In the
+// cross-origin test, the main site a.test makes a request to b.test, which
+// redirects to c.test.
+IN_PROC_BROWSER_TEST_P(
+    InterestGroupBrowserAdAuctionHeadersAllMethodsAndOriginsTest,
+    RedirectOnCrossSite_AdAuctionHeadersNotEligible) {
+  GURL redirect_url = GetFetchURL((FetchURLParams){
+      .origin = is_cross_origin() ? "c.test" : "a.test",
+      .path = "page_with_custom_ad_auction_result_header2.html",
+      .ad_auction_headers = base::StrCat(
+          {"Ad-Auction-Result: ", kLegitimateAdAuctionResponse,
+           "\nAd-Auction-Signals: ", "{}", "\nAd-Auction-Additional-Bid: ",
+           "00000000-0000-0000-0000-000000000000:e30="})});
+
+  GURL fetch_url = GetFetchURL((FetchURLParams){
+      .origin = is_cross_origin() ? "b.test" : "a.test",
+      .ad_auction_headers = base::StrCat(
+          {"Ad-Auction-Result: ", kLegitimateAdAuctionResponse,
+           "\nAd-Auction-Signals: ", "{}", "\nAd-Auction-Additional-Bid: ",
+           "00000000-0000-0000-0000-000000000000:e30="}),
+      .redirect_url = redirect_url});
+
+  switch (ad_auction_headers_test_type()) {
+    case FetchMethod::kFetch:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
+
+      // When this request is first issued, it appears to be eligible for
+      // adAuctionHeaders. However, when it responds as a redirect, neither
+      // the initial response nor the redirected response are eligible, and
+      // so none of the `Ad-Auction-Signals`, `Ad-Auction-Additional-Bid`, and
+      // `Ad-Auction-Result` response headers are processed for later use in
+      // the auction. At the same time, the browser _does_ clear the
+      // `Ad-Auction-Signals` and `Ad-Auction-Additional-Bid` response headers.
+      EXPECT_TRUE(ExecJs(web_contents()->GetPrimaryMainFrame(),
+                         content::JsReplace(R"(
+            fetch($1, {adAuctionHeaders: true}).then((response) => {
+              if (!response.headers.get('Ad-Auction-Result')) {
+                throw 'Did not receive `Ad-Auction-Result` header';
+              }
+
+              if (response.headers.get('Ad-Auction-Signals')) {
+                throw 'Unexpectedly received `Ad-Auction-Signals` header';
+              }
+
+              if (response.headers.get('Ad-Auction-Additional-Bid')) {
+                throw 'Unexpectedly received `Ad-Auction-Additional-Bid` header';
+              }
+            });
+          )",
+                                            fetch_url)));
+      break;
+
+    case FetchMethod::kIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(), GetPageWithIFrameURL(
+                       fetch_url, /*has_ad_auction_headers_attribute=*/true)));
+      break;
+
+    case FetchMethod::kDynamicIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
+      CreateIframe(fetch_url, /*has_ad_auction_headers_attribute=*/true);
+      break;
+  }
+
+  {
+    // // For the initial fetch
+    absl::optional<std::string> ad_auction_header = GetAdAuctionHeader();
+    EXPECT_TRUE(ad_auction_header);
+    EXPECT_EQ(*ad_auction_header, "?1");
+  }
+  {
+    // For the redirected fetch
+    absl::optional<std::string> ad_auction_header =
+        GetAdAuctionHeader("page_with_custom_ad_auction_result_header2.html");
+    EXPECT_FALSE(ad_auction_header);
+  }
+
+  for (url::Origin request_origin :
+       {url::Origin::Create(fetch_url), url::Origin::Create(redirect_url)}) {
+    EXPECT_FALSE(WitnessedAuctionResultForOrigin(
+        request_origin, base64Decode(kLegitimateAdAuctionResponse)));
+    EXPECT_EQ(ParseAndFindAdAuctionSignals(request_origin, "slot1"), nullptr);
+    EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
+                    request_origin, "00000000-0000-0000-0000-000000000000"),
+                ::testing::IsEmpty());
+  }
+}
+
+IN_PROC_BROWSER_TEST_P(
+    InterestGroupBrowserAdAuctionHeadersAllMethodsAndOriginsTest,
+    NoAdAuctionRequestHeader_AdAuctionHeadersNotEligible) {
+  GURL fetch_url = GetFetchURL((FetchURLParams){
+      .origin = is_cross_origin() ? "b.test" : "a.test",
+      .ad_auction_headers = base::StrCat(
+          {"Ad-Auction-Result: ", kLegitimateAdAuctionResponse,
+           "\nAd-Auction-Signals: ", "{}", "\nAd-Auction-Additional-Bid: ",
+           "00000000-0000-0000-0000-000000000000:e30="})});
+
+  switch (ad_auction_headers_test_type()) {
+    case FetchMethod::kFetch:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
+
+      // For requests that don't specify adAuctionHeaders, none of the
+      // `Ad-Auction-Signals`, `Ad-Auction-Additional-Bid`, and
+      // `Ad-Auction-Result` response headers are affected by the browser,
+      // and all appear as expected. These response headers are still here
+      // even in the cross-site execution of this test because all three
+      // are included in the Access-Control-Expose-Headers header of the
+      // fetch response.
+      EXPECT_TRUE(ExecJs(web_contents()->GetPrimaryMainFrame(),
+                         content::JsReplace(R"(
+            fetch($1).then((response) => {
+              if (!response.headers.get('Ad-Auction-Result')) {
+                throw 'Did not receive `Ad-Auction-Result` header';
+              }
+
+              if (!response.headers.get('Ad-Auction-Signals')) {
+                throw 'Did not receive `Ad-Auction-Signals` header';
+              }
+
+              if (!response.headers.get('Ad-Auction-Additional-Bid')) {
+                throw 'Did not receive `Ad-Auction-Additional-Bid` header';
+              }
+            });
+          )",
+                                            fetch_url)));
+      break;
+
+    case FetchMethod::kIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(), GetPageWithIFrameURL(
+                       fetch_url, /*has_ad_auction_headers_attribute=*/false)));
+      break;
+
+    case FetchMethod::kDynamicIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
+      CreateIframe(fetch_url, /*has_ad_auction_headers_attribute=*/false);
+      break;
+  }
+
+  absl::optional<std::string> ad_auction_header = GetAdAuctionHeader();
+  EXPECT_FALSE(ad_auction_header);
 
   url::Origin request_origin = url::Origin::Create(fetch_url);
+  EXPECT_FALSE(WitnessedAuctionResultForOrigin(
+      request_origin, base64Decode(kLegitimateAdAuctionResponse)));
+  EXPECT_EQ(ParseAndFindAdAuctionSignals(request_origin, "slot1"), nullptr);
   EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
                   request_origin, "00000000-0000-0000-0000-000000000000"),
               ::testing::IsEmpty());
 }
 
-IN_PROC_BROWSER_TEST_F(
-    InterestGroupBrowserTest,
-    FetchCrossOrigin_AdAuctionHeadersNotEligible_HasAdAuctionAdditionalBidResponseHeader) {
-  GURL main_frame_url =
-      https_server_->GetURL("a.test", "/interest_group/empty.html");
-  ASSERT_TRUE(NavigateToURL(shell(), main_frame_url));
+INSTANTIATE_TEST_SUITE_P(
+    FetchMethodAndOrigin,
+    InterestGroupBrowserAdAuctionHeadersAllMethodsAndOriginsTest,
+    ::testing::Combine(::testing::Values(FetchMethod::kFetch,
+                                         FetchMethod::kIFrame,
+                                         FetchMethod::kDynamicIFrame),
+                       ::testing::Bool()),
+    [](const testing::TestParamInfo<
+        InterestGroupBrowserAdAuctionHeadersAllMethodsAndOriginsTest::
+            ParamType>& info) {
+      std::string same_or_cross_origin =
+          std::get<1>(info.param) ? "CrossOrigin" : "SameOrigin";
+      switch (std::get<0>(info.param)) {
+        case kFetch:
+          return base::StrCat({"Fetch_", same_or_cross_origin});
+        case kIFrame:
+          return base::StrCat({"IFrame_", same_or_cross_origin});
+        case kDynamicIFrame:
+          return base::StrCat({"DynamicIFrame_", same_or_cross_origin});
+      }
+    });
 
-  base::StringPairs replacement;
-  replacement.emplace_back(std::make_pair("{{STATUS}}", "200 OK"));
-  replacement.emplace_back(std::make_pair(
-      "{{AD_AUCTION_HEADERS}}",
-      base::StrCat({"Ad-Auction-Additional-Bid: ",
-                    "00000000-0000-0000-0000-000000000000:e30="})));
-  replacement.emplace_back(std::make_pair("{{REDIRECT_HEADER}}", ""));
+class InterestGroupBrowserAdAuctionHeadersAllMethodsTest
+    : public InterestGroupBrowserAdAuctionHeadersTest,
+      public ::testing::WithParamInterface<FetchMethod> {
+ protected:
+  FetchMethod ad_auction_headers_test_type() { return GetParam(); }
+};
 
+IN_PROC_BROWSER_TEST_P(
+    InterestGroupBrowserAdAuctionHeadersAllMethodsTest,
+    FetchNonAllowlistedCrossOrigin_HasAllResponseHeaders_AdAuctionHeadersNotEligible) {
   // "d.test" is not allowlisted for the API. Thus the request isn't eligible
   // for ad auction headers.
-  GURL fetch_url = https_server_->GetURL(
-      "d.test", net::test_server::GetFilePathWithReplacements(
-                    "/interest_group/"
-                    "page_with_custom_ad_auction_result_header.html",
-                    replacement));
+  GURL fetch_url = GetFetchURL((FetchURLParams){
+      .origin = "d.test",
+      .ad_auction_headers = base::StrCat(
+          {"Ad-Auction-Result: ", kLegitimateAdAuctionResponse,
+           "\nAd-Auction-Signals: ", "{}", "\nAd-Auction-Additional-Bid: ",
+           "00000000-0000-0000-0000-000000000000:e30="})});
 
-  EXPECT_TRUE(ExecJs(
-      web_contents()->GetPrimaryMainFrame(),
-      content::JsReplace("fetch($1, {adAuctionHeaders: true})", fetch_url)));
+  switch (ad_auction_headers_test_type()) {
+    case FetchMethod::kFetch:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
 
-  absl::optional<std::string> ad_auction_header_value =
-      GetAdAuctionHeaderForRequestPath(
-          "/interest_group/page_with_custom_ad_auction_result_header.html");
+      // Because this initial request is ineligible for adAuctionHeaders, none
+      // of the `Ad-Auction-Signals`, `Ad-Auction-Additional-Bid`, and
+      // `Ad-Auction-Result` response headers are processed for later use in
+      // the auction, and furthermore, neither the `Ad-Auction-Signals` nor the
+      // `Ad-Auction-Additional-Bid` response headers are cleared.
+      EXPECT_TRUE(ExecJs(web_contents()->GetPrimaryMainFrame(),
+                         content::JsReplace(R"(
+            fetch($1).then((response) => {
+              if (!response.headers.get('Ad-Auction-Result')) {
+                throw 'Did not receive `Ad-Auction-Result` header';
+              }
 
-  EXPECT_FALSE(ad_auction_header_value);
+              if (!response.headers.get('Ad-Auction-Signals')) {
+                throw 'Did not receive `Ad-Auction-Signals` header';
+              }
+
+              if (!response.headers.get('Ad-Auction-Additional-Bid')) {
+                throw 'Did not receive `Ad-Auction-Additional-Bid` header';
+              }
+            });
+          )",
+                                            fetch_url)));
+      break;
+
+    case FetchMethod::kIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(), GetPageWithIFrameURL(
+                       fetch_url, /*has_ad_auction_headers_attribute=*/true)));
+      break;
+
+    case FetchMethod::kDynamicIFrame:
+      ASSERT_TRUE(NavigateToURL(
+          shell(),
+          https_server_->GetURL("a.test", "/interest_group/empty.html")));
+      CreateIframe(fetch_url, /*has_ad_auction_headers_attribute=*/true);
+      break;
+  }
+
+  absl::optional<std::string> ad_auction_header = GetAdAuctionHeader();
+  EXPECT_FALSE(ad_auction_header);
 
   url::Origin request_origin = url::Origin::Create(fetch_url);
+  EXPECT_FALSE(WitnessedAuctionResultForOrigin(
+      request_origin, base64Decode(kLegitimateAdAuctionResponse)));
+  EXPECT_EQ(ParseAndFindAdAuctionSignals(request_origin, "slot1"), nullptr);
   EXPECT_THAT(TakeAuctionAdditionalBidsForOriginAndNonce(
                   request_origin, "00000000-0000-0000-0000-000000000000"),
               ::testing::IsEmpty());
 }
 
+INSTANTIATE_TEST_SUITE_P(
+    FetchMethod,
+    InterestGroupBrowserAdAuctionHeadersAllMethodsTest,
+    ::testing::Values(FetchMethod::kFetch,
+                      FetchMethod::kIFrame,
+                      FetchMethod::kDynamicIFrame),
+    [](const testing::TestParamInfo<
+        InterestGroupBrowserAdAuctionHeadersAllMethodsTest::ParamType>& info) {
+      switch (info.param) {
+        case kFetch:
+          return "Fetch";
+        case kIFrame:
+          return "IFrame";
+        case kDynamicIFrame:
+          return "DynamicIFrame";
+      }
+    });
+
 // Runs an ad auction similar to the one in
 // InterestGroupFencedFrameBrowserTest.RunAdAuctionWithWinner but also registers
 // an ad beacon that is sent by the render URL.
diff --git a/content/browser/interest_group/interest_group_caching_storage.cc b/content/browser/interest_group/interest_group_caching_storage.cc
index 6ee9740..f0b6131 100644
--- a/content/browser/interest_group/interest_group_caching_storage.cc
+++ b/content/browser/interest_group/interest_group_caching_storage.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "content/browser/interest_group/interest_group_caching_storage.h"
+#include <algorithm>
 
 #include "base/containers/flat_map.h"
 #include "base/functional/callback_forward.h"
@@ -52,7 +53,12 @@
 
 StorageInterestGroups::StorageInterestGroups(
     std::vector<StorageInterestGroup>&& interest_groups)
-    : storage_interest_groups_(std::move(interest_groups)) {}
+    : storage_interest_groups_(std::move(interest_groups)) {
+  expiry_ = base::Time::Max();
+  for (const StorageInterestGroup& group : storage_interest_groups_) {
+    expiry_ = std::min(expiry_, group.interest_group.expiry);
+  }
+}
 
 StorageInterestGroups::~StorageInterestGroups() = default;
 
@@ -90,7 +96,8 @@
   // If there is a cache hit, use the in-memory object.
   auto cached_groups_it = cached_interest_groups_.find(owner);
   if (cached_groups_it != cached_interest_groups_.end() &&
-      cached_groups_it->second.MaybeValid()) {
+      cached_groups_it->second.MaybeValid() &&
+      !cached_groups_it->second->IsExpired()) {
     base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
         FROM_HERE, base::BindOnce(std::move(callback),
                                   scoped_refptr<StorageInterestGroups>(
diff --git a/content/browser/interest_group/interest_group_caching_storage.h b/content/browser/interest_group/interest_group_caching_storage.h
index 93ddd7bc..29fbd32 100644
--- a/content/browser/interest_group/interest_group_caching_storage.h
+++ b/content/browser/interest_group/interest_group_caching_storage.h
@@ -5,6 +5,7 @@
 #ifndef CONTENT_BROWSER_INTEREST_GROUP_INTEREST_GROUP_CACHING_STORAGE_H_
 #define CONTENT_BROWSER_INTEREST_GROUP_INTEREST_GROUP_CACHING_STORAGE_H_
 
+#include <algorithm>
 #include <cstddef>
 #include <vector>
 
@@ -12,6 +13,7 @@
 #include "base/containers/queue.h"
 #include "base/memory/weak_ptr.h"
 #include "base/threading/sequence_bound.h"
+#include "base/time/time.h"
 #include "content/browser/interest_group/interest_group_storage.h"
 #include "content/browser/interest_group/storage_interest_group.h"
 #include "content/services/auction_worklet/public/mojom/bidder_worklet.mojom.h"
@@ -68,11 +70,14 @@
     return storage_interest_groups;
   }
 
+  bool IsExpired() { return expiry_ < base::Time::Now(); }
+
  private:
   friend class RefCounted<StorageInterestGroups>;
   ~StorageInterestGroups();
 
   const std::vector<StorageInterestGroup> storage_interest_groups_;
+  base::Time expiry_;
   base::WeakPtrFactory<StorageInterestGroups> weak_ptr_factory_{this};
 };
 
diff --git a/content/browser/interest_group/interest_group_caching_storage_unittest.cc b/content/browser/interest_group/interest_group_caching_storage_unittest.cc
index 8e56b39..5b2aa7c 100644
--- a/content/browser/interest_group/interest_group_caching_storage_unittest.cc
+++ b/content/browser/interest_group/interest_group_caching_storage_unittest.cc
@@ -591,4 +591,23 @@
       "Ads.InterestGroup.Auction.LoadGroupsCacheHit", true, 3);
 }
 
+TEST_F(InterestGroupCachingStorageTest, DontLoadCachedInterestGroupsIfExpired) {
+  std::unique_ptr<content::InterestGroupCachingStorage> caching_storage =
+      CreateCachingStorage();
+
+  url::Origin owner = url::Origin::Create(GURL("https://www.example.com/"));
+  // Make a group with expiration 1 day from now.
+  auto ig = MakeInterestGroup(owner, "name");
+
+  JoinInterestGroup(caching_storage.get(), ig, GURL("https://www.test.com"));
+
+  absl::optional<scoped_refptr<StorageInterestGroups>> loaded_igs =
+      GetInterestGroupsForOwner(caching_storage.get(), owner);
+
+  task_environment().FastForwardBy(base::Days(2));
+  absl::optional<scoped_refptr<StorageInterestGroups>> loaded_igs_again =
+      GetInterestGroupsForOwner(caching_storage.get(), owner);
+  ASSERT_NE(loaded_igs->get(), loaded_igs_again->get());
+}
+
 }  // namespace content
diff --git a/content/browser/navigation_browsertest.cc b/content/browser/navigation_browsertest.cc
index c21cf283..711ad93 100644
--- a/content/browser/navigation_browsertest.cc
+++ b/content/browser/navigation_browsertest.cc
@@ -3970,15 +3970,7 @@
   EXPECT_EQ(PAGE_TYPE_ERROR, entry->GetPageType());
 }
 
-class DocumentPolicyBrowserTest : public NavigationBaseBrowserTest {
- public:
-  DocumentPolicyBrowserTest() {
-    feature_list_.InitAndEnableFeature(features::kDocumentPolicy);
-  }
-
- private:
-  base::test::ScopedFeatureList feature_list_;
-};
+using DocumentPolicyBrowserTest = NavigationBaseBrowserTest;
 
 // Test that scroll restoration can be disabled with
 // Document-Policy: force-load-at-top
diff --git a/content/browser/renderer_host/frame_tree_node.h b/content/browser/renderer_host/frame_tree_node.h
index 9f8d03c..f07df13 100644
--- a/content/browser/renderer_host/frame_tree_node.h
+++ b/content/browser/renderer_host/frame_tree_node.h
@@ -283,6 +283,11 @@
   // `Sec-Browsing-Topics` header.
   bool browsing_topics() const { return attributes_->browsing_topics; }
 
+  // Tracks iframe's 'adauctionheaders' attribute, indicating whether the
+  // navigation request on this frame should calculate and send the
+  // 'Sec-Ad-Auction-Fetch` header.
+  bool ad_auction_headers() const { return attributes_->ad_auction_headers; }
+
   // Tracks iframe's 'sharedstoragewritable' attribute, indicating what value
   // the the corresponding
   // `network::ResourceRequest::shared_storage_writable_eligible` should take
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc
index b95724c..3143b6b 100644
--- a/content/browser/renderer_host/navigation_request.cc
+++ b/content/browser/renderer_host/navigation_request.cc
@@ -50,6 +50,7 @@
 #include "content/browser/devtools/network_service_devtools_observer.h"
 #include "content/browser/download/download_manager_impl.h"
 #include "content/browser/fenced_frame/fenced_frame_url_mapping.h"
+#include "content/browser/interest_group/ad_auction_headers_util.h"
 #include "content/browser/loader/browser_initiated_resource_request.h"
 #include "content/browser/loader/cached_navigation_url_loader.h"
 #include "content/browser/loader/navigation_early_hints_manager.h"
@@ -1603,7 +1604,8 @@
           is_embedder_initiated_fenced_frame_navigation
               ? absl::make_optional(FencedFrameProperties())
               : absl::nullopt),
-      embedder_shared_storage_context_(embedder_shared_storage_context) {
+      embedder_shared_storage_context_(embedder_shared_storage_context),
+      has_ad_auction_headers_attribute_(frame_tree_node->ad_auction_headers()) {
   CHECK(!common_params_->initiator_base_url ||
         !common_params_->initiator_base_url->is_empty());
   DCHECK(!blink::IsRendererDebugURL(common_params_->url));
@@ -1883,6 +1885,13 @@
     if (topics_eligible_) {
       headers.SetHeader(kBrowsingTopicsRequestHeaderKey, *topics_header_value);
     }
+
+    if (has_ad_auction_headers_attribute_ &&
+        IsAdAuctionHeadersEligibleForNavigation(
+            *frame_tree_node_, url::Origin::Create(common_params_->url))) {
+      ad_auction_headers_eligible_ = true;
+      headers.SetHeader(kAdAuctionRequestHeaderKey, "?1");
+    }
   }
 
   begin_params_->headers = headers.ToString();
@@ -5199,6 +5208,12 @@
                                *topics_header_value);
   }
 
+  if (ad_auction_headers_eligible_) {
+    // Redirects are ineligible for ad auction headers.
+    ad_auction_headers_eligible_ = false;
+    removed_headers.push_back(kAdAuctionRequestHeaderKey);
+  }
+
   if (shared_storage_writable_opted_in_) {
     // On a redirect, the PermissionsPolicy may change the status of this
     // request's Shared Storage eligibility, so we need to re-compute it.
@@ -5562,9 +5577,9 @@
     }
   }
 
-  if (topics_eligible_) {
-    topics_eligible_ = false;
-  }
+  topics_eligible_ = false;
+
+  ad_auction_headers_eligible_ = false;
 
   base::WeakPtr<NavigationRequest> weak_self(weak_factory_.GetWeakPtr());
   ReadyToCommitNavigation(true /* is_error */);
@@ -5672,6 +5687,13 @@
     }
   }
 
+  if (ad_auction_headers_eligible_) {
+    ProcessAdAuctionResponseHeaders(origin, GetRenderFrameHost()->GetPage(),
+                                    *response_head_->headers);
+  } else if (has_ad_auction_headers_attribute_) {
+    RemoveAdAuctionResponseHeaders(*response_head_->headers);
+  }
+
   if (!NavigationTypeUtils::IsSameDocument(common_params_->navigation_type)) {
     // We want to record this for the frame that we are navigating away from.
     frame_tree_node_->render_manager()
diff --git a/content/browser/renderer_host/navigation_request.h b/content/browser/renderer_host/navigation_request.h
index 595133d4..a94b63c 100644
--- a/content/browser/renderer_host/navigation_request.h
+++ b/content/browser/renderer_host/navigation_request.h
@@ -2622,6 +2622,22 @@
   // contain "Observe-Browsing-Topics: ?1", a topic observation will be stored.
   bool topics_eligible_ = false;
 
+  // Whether this navigation request is an iframe navigation for which the
+  // adAuctionHeaders attribute is set. Only requests with this attribute may be
+  // eligible for ad auction headerse, but not all requests with this attribute
+  // are eligible. `ad_auction_headers_eligible_`, below, indicates whether or
+  // not this request is eligible.
+  const bool has_ad_auction_headers_attribute_ = false;
+
+  // Whether the ongoing navigation resource request should have its Ad Auction
+  // response headers examined for interception. This is set before the initial
+  // request for iframe navigations that provide the `adAuctionHeaders`
+  // attribute. On redirect or error, this is always set to false. If this is
+  // set to true, the request headers will contain the "Sec-Ad-Auction-Fetch:
+  // ?1" header, and several response headers will be intercepted. See
+  // content/browser/interest_group/ad_auction_headers_util.h for more details.
+  bool ad_auction_headers_eligible_ = false;
+
   // Whether or not the original request (without considering redirects or
   // permissions policy) opted-in to write to shared storage from response
   // headers. See https://github.com/WICG/shared-storage#from-response-headers
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
index d7a1ce4..a88c279a 100644
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -7877,6 +7877,13 @@
     return;
   }
 
+  if (attributes->ad_auction_headers &&
+      !base::FeatureList::IsEnabled(
+          blink::features::kFledgeNegativeTargeting)) {
+    mojo::ReportBadMessage("Unexpected iframe.adAuctionHeaders value");
+    return;
+  }
+
   if (attributes->shared_storage_writable_opted_in &&
       (!base::FeatureList::IsEnabled(blink::features::kSharedStorageAPIM118))) {
     bad_message::ReceivedBadMessage(
diff --git a/content/browser/text_fragment_browsertest.cc b/content/browser/text_fragment_browsertest.cc
index d6eb4d7..13df4b91 100644
--- a/content/browser/text_fragment_browsertest.cc
+++ b/content/browser/text_fragment_browsertest.cc
@@ -44,11 +44,6 @@
 namespace content {
 
 class TextFragmentAnchorBrowserTest : public ContentBrowserTest {
- public:
-  TextFragmentAnchorBrowserTest() {
-    feature_list_.InitAndEnableFeature(features::kDocumentPolicy);
-  }
-
  protected:
   void SetUpOnMainThread() override {
     host_resolver()->AddRule("*", "127.0.0.1");
@@ -98,8 +93,6 @@
                                           ->GetRenderViewHost()
                                           ->GetWidget());
   }
-
-  base::test::ScopedFeatureList feature_list_;
 };
 
 IN_PROC_BROWSER_TEST_F(TextFragmentAnchorBrowserTest, EnabledOnUserNavigation) {
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 4c76ec9..f3366e5 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -1253,12 +1253,6 @@
     }
   }
 
-#if BUILDFLAG(IS_ANDROID)
-  // For simplicity, destroy the Java WebContents before we notify of the
-  // destruction of the WebContents.
-  ClearWebContentsAndroid();
-#endif
-
   // |save_package_| is refcounted so make sure we clear the page before
   // we toss out our reference.
   if (save_package_) {
@@ -1266,6 +1260,13 @@
   }
 
   observers_.NotifyObservers(&WebContentsObserver::WebContentsDestroyed);
+
+#if BUILDFLAG(IS_ANDROID)
+  // Destroy the WebContentsAndroid here, so that its observers still can access
+  // `this`.
+  ClearWebContentsAndroid();
+#endif
+
   observers_.NotifyObservers(&WebContentsObserver::ResetWebContents);
   SetDelegate(nullptr);
 }
diff --git a/content/browser/webui/webui_config_map_unittest.cc b/content/browser/webui/webui_config_map_unittest.cc
index 2f892b1..cb66780 100644
--- a/content/browser/webui/webui_config_map_unittest.cc
+++ b/content/browser/webui/webui_config_map_unittest.cc
@@ -39,13 +39,13 @@
 
 TEST(WebUIConfigTest, AddAndRemoveChromeUrl) {
   auto& map = WebUIConfigMap::GetInstance();
-  size_t initial_size = map.GetSizeForTesting();
+  size_t initial_size = map.GetWebUIConfigList(nullptr).size();
 
   auto chrome_config = std::make_unique<TestConfig>("chrome", "foo");
   auto* chrome_config_ptr = chrome_config.get();
   map.AddWebUIConfig(std::move(chrome_config));
 
-  EXPECT_EQ(initial_size + 1, map.GetSizeForTesting());
+  EXPECT_EQ(initial_size + 1, map.GetWebUIConfigList(nullptr).size());
 
   EXPECT_EQ(chrome_config_ptr,
             map.GetConfig(kBrowserContext, GURL(kChromeFoo)));
@@ -59,19 +59,19 @@
 
   auto removed_config = map.RemoveConfig(GURL(kChromeFoo));
   EXPECT_EQ(removed_config.get(), chrome_config_ptr);
-  EXPECT_EQ(initial_size, map.GetSizeForTesting());
+  EXPECT_EQ(initial_size, map.GetWebUIConfigList(nullptr).size());
 }
 
 TEST(WebUIConfigTest, AddAndRemoteChromeUntrustedUrl) {
   auto& map = WebUIConfigMap::GetInstance();
-  size_t initial_size = map.GetSizeForTesting();
+  size_t initial_size = map.GetWebUIConfigList(nullptr).size();
 
   auto untrusted_config =
       std::make_unique<TestConfig>("chrome-untrusted", "foo");
   auto* untrusted_config_ptr = untrusted_config.get();
   map.AddUntrustedWebUIConfig(std::move(untrusted_config));
 
-  EXPECT_EQ(initial_size + 1, map.GetSizeForTesting());
+  EXPECT_EQ(initial_size + 1, map.GetWebUIConfigList(nullptr).size());
 
   EXPECT_EQ(untrusted_config_ptr,
             map.GetConfig(kBrowserContext, GURL(kChromeUntrustedFoo)));
@@ -85,7 +85,7 @@
 
   auto removed_config = map.RemoveConfig(GURL(kChromeUntrustedFoo));
   EXPECT_EQ(removed_config.get(), untrusted_config_ptr);
-  EXPECT_EQ(initial_size, map.GetSizeForTesting());
+  EXPECT_EQ(initial_size, map.GetWebUIConfigList(nullptr).size());
 }
 
 // Regression test for https://crbug.com/1464456.
diff --git a/content/browser/worker_host/dedicated_worker_host.cc b/content/browser/worker_host/dedicated_worker_host.cc
index 86a6b4f..acc69ed4 100644
--- a/content/browser/worker_host/dedicated_worker_host.cc
+++ b/content/browser/worker_host/dedicated_worker_host.cc
@@ -506,12 +506,14 @@
     const network::URLLoaderCompletionStatus& status) {
   auto* ancestor_render_frame_host =
       RenderFrameHostImpl::FromID(ancestor_render_frame_host_id_);
-  // Notify that the loading failed to DevTools. It fires
-  // `Network.onLoadingFailed` event.
-  devtools_instrumentation::OnWorkerMainScriptLoadingFailed(
-      url, WorkerDevToolsAgentHost::GetFor(this)->devtools_worker_token(),
-      FrameTreeNode::From(ancestor_render_frame_host),
-      ancestor_render_frame_host, status);
+  if (ancestor_render_frame_host) {
+    // Notify that the loading failed to DevTools. It fires
+    // `Network.onLoadingFailed` event.
+    devtools_instrumentation::OnWorkerMainScriptLoadingFailed(
+        url, WorkerDevToolsAgentHost::GetFor(this)->devtools_worker_token(),
+        FrameTreeNode::From(ancestor_render_frame_host),
+        ancestor_render_frame_host, status);
+  }
 
   client_->OnScriptLoadStartFailed();
 }
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index f5264579..de31ade5 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -219,7 +219,6 @@
     {wf::EnableDevicePosture, raw_ref(features::kDevicePosture)},
     {wf::EnableDigitalGoods, raw_ref(features::kDigitalGoodsApi),
      kSetOnlyIfOverridden},
-    {wf::EnableDocumentPolicy, raw_ref(features::kDocumentPolicy)},
     {wf::EnableDocumentPolicyNegotiation,
      raw_ref(features::kDocumentPolicyNegotiation)},
     {wf::EnableFedCm, raw_ref(features::kFedCm), kSetOnlyIfOverridden},
diff --git a/content/common/features.cc b/content/common/features.cc
index 585e790..54ae5b0 100644
--- a/content/common/features.cc
+++ b/content/common/features.cc
@@ -207,7 +207,7 @@
 // Enables caching when loading interest groups for a bidder in an auction.
 BASE_FEATURE(kFledgeUseInterestGroupCache,
              "FledgeUseInterestGroupCache",
-             base::FEATURE_DISABLED_BY_DEFAULT);
+             base::FEATURE_ENABLED_BY_DEFAULT);
 
 // Enables fixes for matching src: local() for web fonts correctly against full
 // font name or postscript name. Rolling out behind a flag, as enabling this
diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc
index bfb0a24..8d9c853f 100644
--- a/content/gpu/gpu_main.cc
+++ b/content/gpu/gpu_main.cc
@@ -241,7 +241,9 @@
 
 #if BUILDFLAG(IS_WIN)
   base::win::EnableHighDPISupport();
+#if !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
   base::trace_event::TraceEventETWExport::EnableETWExport();
+#endif
 
   // Prevent Windows from displaying a modal dialog on failures like not being
   // able to load a DLL.
diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn
index 5953695..d851d7f 100644
--- a/content/public/android/BUILD.gn
+++ b/content/public/android/BUILD.gn
@@ -191,6 +191,8 @@
     "//third_party/blink/public/mojom:mojom_core_java",
     "//third_party/blink/public/mojom:mojom_platform_java",
     "//third_party/jni_zero:jni_zero_java",
+    "//ui/accessibility:accessibility_features_java",
+    "//ui/accessibility:accessibility_features_native_map_java",
     "//ui/accessibility:ax_base_java",
     "//ui/android:ui_no_recycler_view_java",
     "//ui/android:ui_utils_java",
@@ -576,6 +578,7 @@
     "//third_party/hamcrest:hamcrest_java",
     "//third_party/junit",
     "//third_party/mockito:mockito_java",
+    "//ui/accessibility:accessibility_features_java",
     "//ui/accessibility:ax_base_java",
     "//ui/android:ui_java",
     "//ui/android:ui_java_test_support",
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java
index 20d006b..db0dada 100644
--- a/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java
+++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java
@@ -63,6 +63,7 @@
 import android.graphics.Rect;
 import android.graphics.RectF;
 import android.os.Bundle;
+import android.os.SystemClock;
 import android.util.SparseArray;
 import android.view.MotionEvent;
 import android.view.View;
@@ -89,6 +90,7 @@
 import org.chromium.base.StrictModeContext;
 import org.chromium.base.TraceEvent;
 import org.chromium.base.UserData;
+import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.build.BuildConfig;
 import org.chromium.content.browser.WindowEventObserver;
 import org.chromium.content.browser.WindowEventObserverManager;
@@ -104,6 +106,8 @@
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.content_public.browser.WebContentsAccessibility;
 import org.chromium.content_public.browser.WebContentsObserver;
+import org.chromium.ui.accessibility.AccessibilityFeatures;
+import org.chromium.ui.accessibility.AccessibilityFeaturesMap;
 import org.chromium.ui.accessibility.AccessibilityState;
 import org.chromium.ui.base.ViewAndroidDelegate;
 import org.chromium.ui.base.WindowAndroid;
@@ -1041,13 +1045,23 @@
         }
 
         mHasFinishedLatestAccessibilitySnapshot = false;
+        long beforeSnapshotTimeMs = SystemClock.elapsedRealtime();
         mDelegate.requestAccessibilitySnapshot(
                 viewRoot,
-                new Runnable() {
-                    @Override
-                    public void run() {
-                        viewRoot.asyncCommit();
-                        mHasFinishedLatestAccessibilitySnapshot = true;
+                () -> {
+                    viewRoot.asyncCommit();
+                    mHasFinishedLatestAccessibilitySnapshot = true;
+
+                    if (AccessibilityFeaturesMap.isEnabled(
+                            AccessibilityFeatures.ACCESSIBILITY_SNAPSHOT_STRESS_TESTS)) {
+                        long snapshotRuntimeMs =
+                                SystemClock.elapsedRealtime() - beforeSnapshotTimeMs;
+                        RecordHistogram.recordLinearCountHistogram(
+                                "Accessibility.AXTreeSnapshotter.Snapshot.EndToEndRuntime",
+                                (int) snapshotRuntimeMs,
+                                1,
+                                5 * 1000,
+                                100);
                     }
                 });
     }
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/accessibility/AssistViewStructureTest.java b/content/public/android/javatests/src/org/chromium/content/browser/accessibility/AssistViewStructureTest.java
index f4a6e3a..7c036e4 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/accessibility/AssistViewStructureTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/accessibility/AssistViewStructureTest.java
@@ -17,15 +17,21 @@
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.TestRule;
 import org.junit.runner.RunWith;
 
 import org.chromium.base.test.BaseJUnit4ClassRunner;
 import org.chromium.base.test.util.CriteriaHelper;
 import org.chromium.base.test.util.DisableIf;
+import org.chromium.base.test.util.Features;
+import org.chromium.base.test.util.Features.DisableFeatures;
+import org.chromium.base.test.util.Features.EnableFeatures;
+import org.chromium.base.test.util.HistogramWatcher;
 import org.chromium.base.test.util.UrlUtils;
 import org.chromium.content_public.browser.test.util.JavaScriptUtils;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
 import org.chromium.content_shell_apk.ContentShellActivityTestRule;
+import org.chromium.ui.accessibility.AccessibilityFeatures;
 
 import java.util.ArrayList;
 import java.util.concurrent.TimeoutException;
@@ -34,6 +40,8 @@
 @RunWith(BaseJUnit4ClassRunner.class)
 // TODO(mschillaci): Migrate all these tests to the WebContentsAccessibilityTreeTest suite.
 public class AssistViewStructureTest {
+    @Rule public TestRule mProcessor = new Features.InstrumentationProcessor();
+
     @Rule
     public ContentShellActivityTestRule mActivityTestRule = new ContentShellActivityTestRule();
 
@@ -87,6 +95,19 @@
                 + "selection.addRange(range);";
     }
 
+    private String addManyNodesScript() {
+        return "var body = document.getElementById('container');\n"
+                + "for (i = 0; i < 600; i++) {\n"
+                + "  var nextContainer = document.createElement('div');\n"
+                + "  for (j = 0; j < 10; j++) {\n"
+                + "    var paragraph = document.createElement('p');\n"
+                + "    paragraph.innerHTML = \"Example Text\";\n"
+                + "    nextContainer.appendChild(paragraph);\n"
+                + "  }\n"
+                + "  body.appendChild(nextContainer);\n"
+                + "}\n";
+    }
+
     /** Test simple paragraph. */
     @Test
     @MediumTest
@@ -540,29 +561,49 @@
     /** Test that pages with larger than the max node count result in a partial tree. */
     @Test
     @MediumTest
+    @DisableFeatures(AccessibilityFeatures.ACCESSIBILITY_SNAPSHOT_STRESS_TESTS)
     public void testMaxNodesLimit() throws Throwable {
+        var histogramWatcher =
+                HistogramWatcher.newBuilder()
+                        .expectAnyRecordTimes(
+                                "Accessibility.AXTreeSnapshotter.Snapshot.EndToEndRuntime", 0)
+                        .build();
+
         // There is a max of 5000 nodes, add many nodes with some children. If the tree is flat
         // then all nodes will end up serialized because the serializer will finish the current
         // node and its children. The number of nodes returned may be more or less than 5000.
-        String addNodesScript =
-                "var body = document.getElementById('container');\n"
-                        + "for (i = 0; i < 600; i++) {\n"
-                        + "  var nextContainer = document.createElement('div');\n"
-                        + "  for (j = 0; j < 10; j++) {\n"
-                        + "    var paragraph = document.createElement('p');\n"
-                        + "    paragraph.innerHTML = \"Example Text\";\n"
-                        + "    nextContainer.appendChild(paragraph);\n"
-                        + "  }\n"
-                        + "  body.appendChild(nextContainer);\n"
-                        + "}\n";
-
         TestViewStructure root =
-                getViewStructureFromHtml("<div id='container'></div>", addNodesScript).getChild(0);
+                getViewStructureFromHtml("<div id='container'></div>", addManyNodesScript())
+                        .getChild(0);
 
         // Recursively count child nodes. Allow for approximately 5000 nodes.
         Assert.assertTrue(
                 String.format(
                         "Too many nodes serialized, found %s", root.getTotalDescendantCount()),
                 5100 > root.getTotalDescendantCount());
+
+        histogramWatcher.assertExpected();
+    }
+
+    /** Test that pages with more than the max node count return a full tree during stress tests. */
+    @Test
+    @MediumTest
+    @EnableFeatures(AccessibilityFeatures.ACCESSIBILITY_SNAPSHOT_STRESS_TESTS)
+    public void testMaxNodesLimit_ignoredDuringStressTests() throws Throwable {
+        var histogramWatcher =
+                HistogramWatcher.newBuilder()
+                        .expectAnyRecordTimes(
+                                "Accessibility.AXTreeSnapshotter.Snapshot.EndToEndRuntime", 1)
+                        .build();
+
+        TestViewStructure root =
+                getViewStructureFromHtml("<div id='container'></div>", addManyNodesScript())
+                        .getChild(0);
+
+        Assert.assertTrue(
+                String.format("Too few nodes serialized, found %s", root.getTotalDescendantCount()),
+                12000 < root.getTotalDescendantCount());
+
+        histogramWatcher.assertExpected();
     }
 }
diff --git a/content/public/browser/webui_config_map.cc b/content/public/browser/webui_config_map.cc
index e8d39732..03f25ae 100644
--- a/content/public/browser/webui_config_map.cc
+++ b/content/public/browser/webui_config_map.cc
@@ -133,4 +133,19 @@
   return webui_config;
 }
 
+std::vector<WebUIConfigInfo> WebUIConfigMap::GetWebUIConfigList(
+    BrowserContext* browser_context) {
+  std::vector<WebUIConfigInfo> origins;
+  for (auto& it : configs_map_) {
+    auto& webui_config = it.second;
+    origins.push_back({
+        .origin = it.first,
+        .enabled = browser_context == nullptr
+                       ? false
+                       : webui_config->IsWebUIEnabled(browser_context),
+    });
+  }
+  return origins;
+}
+
 }  // namespace content
diff --git a/content/public/browser/webui_config_map.h b/content/public/browser/webui_config_map.h
index a800345..e7b6a9b 100644
--- a/content/public/browser/webui_config_map.h
+++ b/content/public/browser/webui_config_map.h
@@ -7,21 +7,25 @@
 
 #include <map>
 #include <memory>
+#include <vector>
 
 #include "content/common/content_export.h"
+#include "url/origin.h"
 
 class GURL;
 
-namespace url {
-class Origin;
-}
-
 namespace content {
 
 class BrowserContext;
 class WebUIControllerFactory;
 class WebUIConfig;
 
+// Returned by GetWebUIConfigList()
+struct CONTENT_EXPORT WebUIConfigInfo {
+  url::Origin origin;
+  bool enabled;
+};
+
 // Class that holds all WebUIConfigs for the browser.
 //
 // Embedders wishing to register WebUIConfigs should use
@@ -58,8 +62,11 @@
   // there is no WebUIConfig with |url|.
   std::unique_ptr<WebUIConfig> RemoveConfig(const GURL& url);
 
-  // Returns the size of the map, i.e. how many WebUIConfigs are registered.
-  size_t GetSizeForTesting() { return configs_map_.size(); }
+  // Gets a list of the origin (host + scheme) and enabled/disabled status of
+  // all currently registered WebUIConfigs. If |browser_context| is null,
+  // returns false for the enabled status for all UIs.
+  std::vector<WebUIConfigInfo> GetWebUIConfigList(
+      BrowserContext* browser_context);
 
  private:
   void AddWebUIConfigImpl(std::unique_ptr<WebUIConfig> config);
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index 487f58f..7636998 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -308,11 +308,6 @@
              "DisconnectExtensionMessagePortWhenPageEntersBFCache",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
-// Enable document policy for configuring and restricting feature behavior.
-BASE_FEATURE(kDocumentPolicy,
-             "DocumentPolicy",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 // Enable drawing under System Bars within DisplayCutout.
 BASE_FEATURE(kDrawCutoutEdgeToEdge,
              "DrawCutoutEdgeToEdge",
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
index a74ab369..7430e31 100644
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -81,7 +81,6 @@
     kDIPSClientBounceDetectionTimeout;
 CONTENT_EXPORT BASE_DECLARE_FEATURE(
     kDisconnectExtensionMessagePortWhenPageEntersBFCache);
-CONTENT_EXPORT BASE_DECLARE_FEATURE(kDocumentPolicy);
 CONTENT_EXPORT BASE_DECLARE_FEATURE(kDrawCutoutEdgeToEdge);
 CONTENT_EXPORT BASE_DECLARE_FEATURE(
     kEarlyDocumentSwapForBackForwardTransitions);
diff --git a/content/public/test/scoped_web_ui_controller_factory_registration.cc b/content/public/test/scoped_web_ui_controller_factory_registration.cc
index d5024748..104b6c22 100644
--- a/content/public/test/scoped_web_ui_controller_factory_registration.cc
+++ b/content/public/test/scoped_web_ui_controller_factory_registration.cc
@@ -92,7 +92,7 @@
   // Call GetInstance() to ensure WebUIConfig registers its
   // WebUIControllerFactory before we get the number of registered factories.
   initial_size_of_webui_config_map_ =
-      WebUIConfigMap::GetInstance().GetSizeForTesting();
+      WebUIConfigMap::GetInstance().GetWebUIConfigList(nullptr).size();
   initial_num_factories_registered_ =
       content::WebUIControllerFactory::GetNumRegisteredFactoriesForTesting();
 }
@@ -100,7 +100,7 @@
 void CheckForLeakedWebUIRegistrations::OnTestEnd(
     const testing::TestInfo& test_info) {
   EXPECT_EQ(initial_size_of_webui_config_map_,
-            WebUIConfigMap::GetInstance().GetSizeForTesting())
+            WebUIConfigMap::GetInstance().GetWebUIConfigList(nullptr).size())
       << "A WebUIConfig was registered by a test but never unregistered. This "
          "can cause flakiness in later tests. Please use "
          "ScopedWebUIConfigRegistration to ensure that registered configs are "
diff --git a/content/renderer/accessibility/ax_tree_snapshotter_impl.cc b/content/renderer/accessibility/ax_tree_snapshotter_impl.cc
index ab07c93..3b6586f 100644
--- a/content/renderer/accessibility/ax_tree_snapshotter_impl.cc
+++ b/content/renderer/accessibility/ax_tree_snapshotter_impl.cc
@@ -5,11 +5,15 @@
 #include "content/renderer/accessibility/ax_tree_snapshotter_impl.h"
 
 #include "base/metrics/histogram_functions.h"
+#include "base/task/thread_pool.h"
+#include "base/time/time.h"
+#include "base/timer/elapsed_timer.h"
 #include "content/renderer/render_frame_impl.h"
 #include "third_party/blink/public/web/web_ax_context.h"
 #include "third_party/blink/public/web/web_ax_object.h"
 #include "third_party/blink/public/web/web_document.h"
 #include "third_party/blink/public/web/web_frame.h"
+#include "ui/accessibility/accessibility_features.h"
 #include "ui/accessibility/ax_error_types.h"
 #include "ui/accessibility/ax_tree_serializer.h"
 #include "ui/accessibility/ax_tree_update.h"
@@ -20,6 +24,13 @@
 
 namespace content {
 
+namespace {
+
+constexpr int kMaxNodesHistogramLimit = 20000;
+constexpr int kTimeoutInMillisecondsHistogramLimit = 3000;
+
+}  // namespace
+
 constexpr char kAXTreeSnapshotterErrorHistogramName[] =
     "Accessibility.AXTreeSnapshotter.Snapshot.Error";
 
@@ -76,30 +87,22 @@
     NOTREACHED_NORETURN();
   }
 
-  std::set<ui::AXSerializationErrorFlag> out_error;
-  if (context_->SerializeEntireTree(max_node_count, timeout, response,
-                                    &out_error)) {
-    std::set<ui::AXSerializationErrorFlag>::iterator max_nodes_iter =
-        out_error.find(ui::AXSerializationErrorFlag::kMaxNodesReached);
-    std::set<ui::AXSerializationErrorFlag>::iterator timeout_iter =
-        out_error.find(ui::AXSerializationErrorFlag::kTimeoutReached);
-
-    if (max_nodes_iter != out_error.end() && timeout_iter != out_error.end()) {
-      base::UmaHistogramEnumeration(
-          kAXTreeSnapshotterErrorHistogramName,
-          AXTreeSnapshotErrorReason::kSerializeMaxNodesAndTimeoutReached);
-    } else if (max_nodes_iter != out_error.end()) {
-      base::UmaHistogramEnumeration(
-          kAXTreeSnapshotterErrorHistogramName,
-          AXTreeSnapshotErrorReason::kSerializeMaxNodesReached);
-    } else if (timeout_iter != out_error.end()) {
-      base::UmaHistogramEnumeration(
-          kAXTreeSnapshotterErrorHistogramName,
-          AXTreeSnapshotErrorReason::kSerializeTimeoutReached);
-    }
-
+#if !BUILDFLAG(IS_ANDROID)
+  if (SerializeTreeWithLimits(max_node_count, timeout, response)) {
     return;
   }
+#else
+  // On Android, experiment with serialization without any limits.
+  if (features::IsAccessibilitySnapshotStressTestsEnabled()) {
+    if (SerializeTree(response)) {
+      return;
+    }
+  } else {
+    if (SerializeTreeWithLimits(max_node_count, timeout, response)) {
+      return;
+    }
+  }
+#endif
 
   base::UmaHistogramEnumeration(
       kAXTreeSnapshotterErrorHistogramName,
@@ -117,4 +120,57 @@
   DCHECK_EQ(ax::mojom::Action::kNone, response->event_from_action);
 }
 
+bool AXTreeSnapshotterImpl::SerializeTreeWithLimits(
+    size_t max_node_count,
+    base::TimeDelta timeout,
+    ui::AXTreeUpdate* response) {
+  std::set<ui::AXSerializationErrorFlag> out_error;
+  if (!context_->SerializeEntireTree(max_node_count, timeout, response,
+                                     &out_error)) {
+    return false;
+  }
+
+  std::set<ui::AXSerializationErrorFlag>::iterator max_nodes_iter =
+      out_error.find(ui::AXSerializationErrorFlag::kMaxNodesReached);
+  std::set<ui::AXSerializationErrorFlag>::iterator timeout_iter =
+      out_error.find(ui::AXSerializationErrorFlag::kTimeoutReached);
+
+  if (max_nodes_iter != out_error.end() && timeout_iter != out_error.end()) {
+    base::UmaHistogramEnumeration(
+        kAXTreeSnapshotterErrorHistogramName,
+        AXTreeSnapshotErrorReason::kSerializeMaxNodesAndTimeoutReached);
+  } else if (max_nodes_iter != out_error.end()) {
+    base::UmaHistogramEnumeration(
+        kAXTreeSnapshotterErrorHistogramName,
+        AXTreeSnapshotErrorReason::kSerializeMaxNodesReached);
+  } else if (timeout_iter != out_error.end()) {
+    base::UmaHistogramEnumeration(
+        kAXTreeSnapshotterErrorHistogramName,
+        AXTreeSnapshotErrorReason::kSerializeTimeoutReached);
+  }
+
+  return true;
+}
+
+bool AXTreeSnapshotterImpl::SerializeTree(ui::AXTreeUpdate* response) {
+  base::ElapsedTimer timer = base::ElapsedTimer();
+  timer.start_time();
+  if (!context_->SerializeEntireTree(0, {}, response)) {
+    return false;
+  }
+
+  base::TimeDelta snapshotDuration = timer.Elapsed();
+  base::LinearHistogram::FactoryGet(
+      "Accessibility.AXTreeSnapshotter.Snapshot.NoRestrictions.Nodes", 0,
+      kMaxNodesHistogramLimit, 100, base::HistogramBase::kNoFlags)
+      ->Add(response->nodes.size());
+
+  base::LinearHistogram::FactoryGet(
+      "Accessibility.AXTreeSnapshotter.Snapshot.NoRestrictions.Time", 0,
+      kTimeoutInMillisecondsHistogramLimit, 100, base::HistogramBase::kNoFlags)
+      ->Add(snapshotDuration.InMilliseconds());
+
+  return true;
+}
+
 }  // namespace content
diff --git a/content/renderer/accessibility/ax_tree_snapshotter_impl.h b/content/renderer/accessibility/ax_tree_snapshotter_impl.h
index 194cce53..c6ac2bb 100644
--- a/content/renderer/accessibility/ax_tree_snapshotter_impl.h
+++ b/content/renderer/accessibility/ax_tree_snapshotter_impl.h
@@ -29,6 +29,11 @@
                 ui::AXTreeUpdate* accessibility_tree) override;
 
  private:
+  bool SerializeTreeWithLimits(size_t max_node_count,
+                               base::TimeDelta timeout,
+                               ui::AXTreeUpdate* response);
+  bool SerializeTree(ui::AXTreeUpdate* response);
+
   raw_ptr<RenderFrameImpl, ExperimentalRenderer> render_frame_;
   std::unique_ptr<blink::WebAXContext> context_;
 
diff --git a/content/renderer/java/gin_java_bridge_dispatcher.cc b/content/renderer/java/gin_java_bridge_dispatcher.cc
index 16288c1..4e6d73b 100644
--- a/content/renderer/java/gin_java_bridge_dispatcher.cc
+++ b/content/renderer/java/gin_java_bridge_dispatcher.cc
@@ -21,10 +21,6 @@
 GinJavaBridgeDispatcher::GinJavaBridgeDispatcher(RenderFrame* render_frame)
     : RenderFrameObserver(render_frame),
       enable_mojo_(base::FeatureList::IsEnabled(features::kGinJavaBridgeMojo)) {
-  if (enable_mojo_) {
-    render_frame->GetBrowserInterfaceBroker()->GetInterface(
-        remote_.BindNewPipeAndPassReceiver());
-  }
 }
 
 GinJavaBridgeDispatcher::~GinJavaBridgeDispatcher() = default;
@@ -64,7 +60,7 @@
     if (object) {
       objects_.AddWithID(object, iter->second);
     } else if (enable_mojo_) {
-      remote_->ObjectWrapperDeleted(iter->second);
+      GetRemoteObjectHost()->ObjectWrapperDeleted(iter->second);
     } else {
       // Inform the host about wrapper creation failure.
       render_frame()->Send(new GinJavaBridgeHostMsg_ObjectWrapperDeleted(
@@ -137,7 +133,7 @@
   objects_.Remove(object_id);
 
   if (enable_mojo_) {
-    remote_->ObjectWrapperDeleted(object_id);
+    GetRemoteObjectHost()->ObjectWrapperDeleted(object_id);
   } else {
     render_frame()->Send(
         new GinJavaBridgeHostMsg_ObjectWrapperDeleted(routing_id(), object_id));
@@ -153,6 +149,12 @@
 }
 
 mojom::GinJavaBridgeHost* GinJavaBridgeDispatcher::GetRemoteObjectHost() {
+  if (!remote_) {
+    render_frame()->GetBrowserInterfaceBroker()->GetInterface(
+        remote_.BindNewPipeAndPassReceiver());
+    remote_.reset_on_disconnect();
+  }
+
   return remote_.get();
 }
 
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 044b4fe3..e73b1bc2 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -2447,6 +2447,7 @@
     "../browser/indexed_db/mock_mojo_indexed_db_database_callbacks.h",
     "../browser/indexed_db/mock_mojo_indexed_db_factory_client.cc",
     "../browser/indexed_db/mock_mojo_indexed_db_factory_client.h",
+    "../browser/interest_group/ad_auction_headers_util_unittest.cc",
     "../browser/interest_group/ad_auction_service_impl_unittest.cc",
     "../browser/interest_group/ad_auction_url_loader_interceptor_unittest.cc",
     "../browser/interest_group/additional_bids_util_unittest.cc",
diff --git a/content/test/content_test_bundle_data.filelist b/content/test/content_test_bundle_data.filelist
index 30b1eea9..95a025a 100644
--- a/content/test/content_test_bundle_data.filelist
+++ b/content/test/content_test_bundle_data.filelist
@@ -6613,6 +6613,7 @@
 data/interest_group/page_with_custom_ad_auction_result_header.html.mock-http-headers
 data/interest_group/page_with_custom_ad_auction_result_header2.html
 data/interest_group/page_with_custom_ad_auction_result_header2.html.mock-http-headers
+data/interest_group/page_with_iframe_with_ad_auction_headers.html
 data/interest_group/schemaV16.sql
 data/interest_group/schemaV6.sql
 data/interest_group/trusted_bidding_signals.json
diff --git a/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_ad_auction_result_bad_base64.txt b/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_ad_auction_result_bad_base64.txt
new file mode 100644
index 0000000..7c6d2f5
--- /dev/null
+++ b/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_ad_auction_result_bad_base64.txt
@@ -0,0 +1 @@
+ung$v48Bz-pBQUDeXa4!I7ADYaOWF3qctBD_Yf/AFa0=
diff --git a/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_ad_auction_result_too_long.txt b/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_ad_auction_result_too_long.txt
new file mode 100644
index 0000000..edb832f
--- /dev/null
+++ b/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_ad_auction_result_too_long.txt
@@ -0,0 +1 @@
+VmVyeSB2ZXJ5IHZlcnkgdmVyeSB2ZXJ5IGxvbmcgc3RyaW5nLCBtdWNoIGxvbmdlciB0aGFuIDMyIGJ5dGVz
diff --git a/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_ad_auction_result_too_short.txt b/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_ad_auction_result_too_short.txt
new file mode 100644
index 0000000..ded95b68
--- /dev/null
+++ b/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_ad_auction_result_too_short.txt
@@ -0,0 +1 @@
+c2hvcnQ=
diff --git a/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_additional_bid_long_nonce.txt b/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_additional_bid_long_nonce.txt
new file mode 100644
index 0000000..20c7a2d
--- /dev/null
+++ b/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_additional_bid_long_nonce.txt
@@ -0,0 +1 @@
+000000000000-0000-0000-0000-000000000000:e30=
diff --git a/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_additional_bid_short_nonce.txt b/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_additional_bid_short_nonce.txt
new file mode 100644
index 0000000..e3589ae
--- /dev/null
+++ b/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_additional_bid_short_nonce.txt
@@ -0,0 +1 @@
+0000-0000-0000-0000-000000000000:e30=
diff --git a/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_additional_bid_too_few_parts.txt b/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_additional_bid_too_few_parts.txt
new file mode 100644
index 0000000..44964b1
--- /dev/null
+++ b/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_additional_bid_too_few_parts.txt
@@ -0,0 +1 @@
+00000000-0000-0000-0000-000000000000
diff --git a/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_additional_bid_too_many_parts.txt b/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_additional_bid_too_many_parts.txt
new file mode 100644
index 0000000..577cd48
--- /dev/null
+++ b/content/test/data/fuzzer_corpus/ad_auction_headers_data/invalid_additional_bid_too_many_parts.txt
@@ -0,0 +1 @@
+00000000-0000-0000-0000-000000000000:e30=:e30=
diff --git a/content/test/data/fuzzer_corpus/ad_auction_headers_data/valid_ad_auction_result.txt b/content/test/data/fuzzer_corpus/ad_auction_headers_data/valid_ad_auction_result.txt
new file mode 100644
index 0000000..31a90ec
--- /dev/null
+++ b/content/test/data/fuzzer_corpus/ad_auction_headers_data/valid_ad_auction_result.txt
@@ -0,0 +1 @@
+ungWv48Bz-pBQUDeXa4iI7ADYaOWF3qctBD_YfIAFa0=
diff --git a/content/test/data/fuzzer_corpus/ad_auction_headers_data/valid_additional_bid.txt b/content/test/data/fuzzer_corpus/ad_auction_headers_data/valid_additional_bid.txt
new file mode 100644
index 0000000..683da1f
--- /dev/null
+++ b/content/test/data/fuzzer_corpus/ad_auction_headers_data/valid_additional_bid.txt
@@ -0,0 +1 @@
+00000000-0000-0000-0000-000000000000:e30=
diff --git a/content/test/data/fuzzer_corpus/ad_auction_headers_data/valid_multiple_ad_auction_result.txt b/content/test/data/fuzzer_corpus/ad_auction_headers_data/valid_multiple_ad_auction_result.txt
new file mode 100644
index 0000000..3c3060d3
--- /dev/null
+++ b/content/test/data/fuzzer_corpus/ad_auction_headers_data/valid_multiple_ad_auction_result.txt
@@ -0,0 +1 @@
+ungWv48Bz-pBQUDeXa4iI7ADYaOWF3qctBD_YfIAFa0=,9UTB-u-WshX66Xqz5DNCpEK9z-x5oCS5SXvgyeoRB1k=
diff --git a/content/test/data/fuzzer_corpus/ad_auction_headers_data/valid_multiple_ad_auction_result_with_whitespace.txt b/content/test/data/fuzzer_corpus/ad_auction_headers_data/valid_multiple_ad_auction_result_with_whitespace.txt
new file mode 100644
index 0000000..71adf26
--- /dev/null
+++ b/content/test/data/fuzzer_corpus/ad_auction_headers_data/valid_multiple_ad_auction_result_with_whitespace.txt
@@ -0,0 +1 @@
+ungWv48Bz-pBQUDeXa4iI7ADYaOWF3qctBD_YfIAFa0= , 9UTB-u-WshX66Xqz5DNCpEK9z-x5oCS5SXvgyeoRB1k=
diff --git a/content/test/data/interest_group/page_with_custom_ad_auction_result_header.html.mock-http-headers b/content/test/data/interest_group/page_with_custom_ad_auction_result_header.html.mock-http-headers
index fbc8d36..0a6bc14 100644
--- a/content/test/data/interest_group/page_with_custom_ad_auction_result_header.html.mock-http-headers
+++ b/content/test/data/interest_group/page_with_custom_ad_auction_result_header.html.mock-http-headers
@@ -1,4 +1,5 @@
 HTTP/1.1 {{STATUS}}
 Access-Control-Allow-Origin: *
+Access-Control-Expose-Headers: Ad-Auction-Result,Ad-Auction-Signals,Ad-Auction-Additional-Bid
 {{AD_AUCTION_HEADERS}}
 {{REDIRECT_HEADER}}
diff --git a/content/test/data/interest_group/page_with_custom_ad_auction_result_header2.html.mock-http-headers b/content/test/data/interest_group/page_with_custom_ad_auction_result_header2.html.mock-http-headers
index fbc8d36..0a6bc14 100644
--- a/content/test/data/interest_group/page_with_custom_ad_auction_result_header2.html.mock-http-headers
+++ b/content/test/data/interest_group/page_with_custom_ad_auction_result_header2.html.mock-http-headers
@@ -1,4 +1,5 @@
 HTTP/1.1 {{STATUS}}
 Access-Control-Allow-Origin: *
+Access-Control-Expose-Headers: Ad-Auction-Result,Ad-Auction-Signals,Ad-Auction-Additional-Bid
 {{AD_AUCTION_HEADERS}}
 {{REDIRECT_HEADER}}
diff --git a/content/test/data/interest_group/page_with_iframe_with_ad_auction_headers.html b/content/test/data/interest_group/page_with_iframe_with_ad_auction_headers.html
new file mode 100644
index 0000000..9be6958
--- /dev/null
+++ b/content/test/data/interest_group/page_with_iframe_with_ad_auction_headers.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<html>
+<body>
+  <iframe {{MAYBE_AD_AUCTION_HEADERS_ATTRIBUTE}} src="{{SRC_URL}}"></iframe>
+</body>
+</html>
diff --git a/content/test/fuzzer/BUILD.gn b/content/test/fuzzer/BUILD.gn
index 69b095c..cd0afb6 100644
--- a/content/test/fuzzer/BUILD.gn
+++ b/content/test/fuzzer/BUILD.gn
@@ -32,6 +32,17 @@
   testonly = true
 }
 
+fuzzer_test("ad_auction_headers_util_fuzzer") {
+  sources = [ "ad_auction_headers_util_fuzzer.cc" ]
+  deps = [
+    ":fuzzer_support",
+    "//content/browser:browser",
+    "//content/browser:for_content_tests",
+    "//content/public/browser:browser_sources",
+  ]
+  seed_corpus = "//content/test/data/fuzzer_corpus/ad_auction_headers_data/"
+}
+
 fuzzer_test("color_parser_fuzzer") {
   sources = [ "color_parser_fuzzer.cc" ]
   deps = [ ":fuzzer_support" ]
diff --git a/content/test/fuzzer/ad_auction_headers_util_fuzzer.cc b/content/test/fuzzer/ad_auction_headers_util_fuzzer.cc
new file mode 100644
index 0000000..be4cf99c5
--- /dev/null
+++ b/content/test/fuzzer/ad_auction_headers_util_fuzzer.cc
@@ -0,0 +1,27 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "content/browser/interest_group/ad_auction_headers_util.h"
+
+namespace content {
+
+// This invokes both ParseAdAuctionResultResponseHeader and
+// ParseAdAuctionAdditionalBidResponseHeader with the same value.
+// Though these have different valid headers, we don't assess the output of
+// these functions (as this is a fuzz test), so this simply fuzz tests against
+// more inputs.
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+  std::string header_value(reinterpret_cast<const char*>(data), size);
+
+  ParseAdAuctionResultResponseHeader(header_value);
+
+  std::map<std::string, std::vector<std::string>> output;
+  ParseAdAuctionAdditionalBidResponseHeader(header_value, output);
+  return 0;
+}
+
+}  // namespace content
diff --git a/device/vr/android/cardboard/BUILD.gn b/device/vr/android/cardboard/BUILD.gn
index 86ab091..9b2a6f3e 100644
--- a/device/vr/android/cardboard/BUILD.gn
+++ b/device/vr/android/cardboard/BUILD.gn
@@ -21,6 +21,8 @@
     "cardboard_sdk.h",
     "cardboard_sdk_impl.cc",
     "cardboard_sdk_impl.h",
+    "mock_cardboard_sdk.cc",
+    "mock_cardboard_sdk.h",
     "scoped_cardboard_objects.h",
   ]
 
diff --git a/device/vr/android/cardboard/cardboard_device.cc b/device/vr/android/cardboard/cardboard_device.cc
index b523bc2..3d85ee7f 100644
--- a/device/vr/android/cardboard/cardboard_device.cc
+++ b/device/vr/android/cardboard/cardboard_device.cc
@@ -102,16 +102,12 @@
     return;
   }
 
-  // Launch QR code scanner if there are no saved device parameters; but first
-  // set up the RequestSession flow to be resumed.
-  on_activity_resumed_callback_ = std::move(continue_callback);
-  activity_state_handler_ = activity_state_handler_factory_->Create(
-      render_process_id, render_frame_id);
-  activity_state_handler_->SetResumedHandler(base::BindRepeating(
-      &CardboardDevice::OnActivityResumed, weak_ptr_factory_.GetWeakPtr()));
-
   // This will suspend us and will trigger the XrActivityStateHandler on Resume.
-  cardboard_sdk_->ScanQrCodeAndSaveDeviceParams();
+  std::unique_ptr<XrActivityStateHandler> activity_state_handler =
+      activity_state_handler_factory_->Create(render_process_id,
+                                              render_frame_id);
+  cardboard_sdk_->ScanQrCodeAndSaveDeviceParams(
+      std::move(activity_state_handler), std::move(continue_callback));
 }
 
 void CardboardDevice::OnCardboardParametersAcquired(
@@ -151,15 +147,6 @@
       std::move(destroyed_callback), std::move(xr_session_button_callback));
 }
 
-void CardboardDevice::OnActivityResumed() {
-  // Currently we only care about being called back once, so reset the activity
-  // handler here and then continue with our queued work.
-  activity_state_handler_.reset();
-  if (on_activity_resumed_callback_) {
-    std::move(on_activity_resumed_callback_).Run();
-  }
-}
-
 void CardboardDevice::OnXrSessionButtonTouched() {
   // The ScanQrCodeAndSaveDeviceParams() method calls the
   // CardboardQrCode_scanQrCodeAndSaveDeviceParams() Cardboard API entry which
diff --git a/device/vr/android/cardboard/cardboard_device.h b/device/vr/android/cardboard/cardboard_device.h
index 81dfb73..cb4f0017 100644
--- a/device/vr/android/cardboard/cardboard_device.h
+++ b/device/vr/android/cardboard/cardboard_device.h
@@ -50,11 +50,6 @@
                                      int render_process_id,
                                      int render_frame_id);
 
-  // We actually only care about being called back once, but the
-  // XrActivityStateHandler requires a RepeatingClosure. Since we're binding a
-  // few mojo objects, we can only create a OnceClosure, so this method serves
-  // as an abstraction to allow us to create a RepeatingClosure.
-  void OnActivityResumed();
   // OnDrawingSurface* methods are used as callbacks from XrJavaCoordinator and
   // notify us of the state of things on the Java side of things.
   void OnDrawingSurfaceReady(gfx::AcceleratedWidget window,
@@ -85,8 +80,6 @@
 
   std::unique_ptr<XrActivityStateHandlerFactory>
       activity_state_handler_factory_;
-  std::unique_ptr<XrActivityStateHandler> activity_state_handler_;
-  base::OnceClosure on_activity_resumed_callback_;
 
   // Outstanding Session Request Data
   mojom::XRRuntime::RequestSessionCallback pending_session_request_callback_;
diff --git a/device/vr/android/cardboard/cardboard_sdk.h b/device/vr/android/cardboard/cardboard_sdk.h
index 890d067..113f9ec8 100644
--- a/device/vr/android/cardboard/cardboard_sdk.h
+++ b/device/vr/android/cardboard/cardboard_sdk.h
@@ -8,6 +8,7 @@
 #include <jni.h>
 
 #include "base/component_export.h"
+#include "device/vr/android/xr_activity_state_handler.h"
 
 namespace device {
 
@@ -21,8 +22,18 @@
   CardboardSdk() = default;
   virtual ~CardboardSdk() = default;
 
+  // Initializes the Cardboard SDK (by setting the JavaVM and Android context).
   virtual void Initialize(jobject context);
+  // Launches the QR code scanner activity and saves the obtained encoded device
+  // parameters. Meant to be used when it is not required to set a callback
+  // function.
   virtual void ScanQrCodeAndSaveDeviceParams();
+  // Launches the QR code scanner activity and saves the obtained encoded device
+  // parameters. Meant to be used when it is required to set a callback function
+  // for when the device parameters have been saved.
+  virtual void ScanQrCodeAndSaveDeviceParams(
+      std::unique_ptr<XrActivityStateHandler> activity_state_handler,
+      base::OnceClosure on_params_saved);
 
   CardboardSdk(const CardboardSdk&) = delete;
   CardboardSdk& operator=(const CardboardSdk&) = delete;
diff --git a/device/vr/android/cardboard/cardboard_sdk_impl.cc b/device/vr/android/cardboard/cardboard_sdk_impl.cc
index 5c57b66..c4b6f652 100644
--- a/device/vr/android/cardboard/cardboard_sdk_impl.cc
+++ b/device/vr/android/cardboard/cardboard_sdk_impl.cc
@@ -5,6 +5,8 @@
 #include "device/vr/android/cardboard/cardboard_sdk_impl.h"
 
 #include "base/android/jni_android.h"
+#include "base/functional/callback_helpers.h"
+#include "device/vr/android/xr_activity_state_handler.h"
 #include "third_party/cardboard/src/sdk/include/cardboard.h"
 
 using base::android::AttachCurrentThread;
@@ -33,4 +35,32 @@
   CardboardQrCode_scanQrCodeAndSaveDeviceParams();
 }
 
+void CardboardSdkImpl::ScanQrCodeAndSaveDeviceParams(
+    std::unique_ptr<XrActivityStateHandler> activity_state_handler,
+    base::OnceClosure on_params_saved) {
+  CHECK(initialized_);
+
+  // Given that we will launch the QR code activity, we need to set the activity
+  // on resume callback so as to ensure the app flows as expected.
+  activity_state_handler_ = std::move(activity_state_handler);
+  on_params_saved_ = std::move(on_params_saved);
+  activity_state_handler_->SetResumedHandler(base::BindRepeating(
+      &CardboardSdkImpl::OnActivityResumed, weak_ptr_factory_.GetWeakPtr()));
+
+  // Launches a new QR code scanner activity in order to scan a QR code with
+  // the parameters of a new Cardboard viewer. Whether the QR code with
+  // Cardboard viewer paramerter is scanned or the scanning is skipped, the
+  // scanner activity is finished.
+  CardboardQrCode_scanQrCodeAndSaveDeviceParams();
+}
+
+void CardboardSdkImpl::OnActivityResumed() {
+  // Currently we only care about being called back once, so reset the activity
+  // handler here and then continue with our queued work.
+  activity_state_handler_.reset();
+  if (on_params_saved_) {
+    std::move(on_params_saved_).Run();
+  }
+}
+
 }  // namespace device
diff --git a/device/vr/android/cardboard/cardboard_sdk_impl.h b/device/vr/android/cardboard/cardboard_sdk_impl.h
index 817d0a28..4689aa2d 100644
--- a/device/vr/android/cardboard/cardboard_sdk_impl.h
+++ b/device/vr/android/cardboard/cardboard_sdk_impl.h
@@ -8,6 +8,9 @@
 #include "device/vr/android/cardboard/cardboard_sdk.h"
 
 #include "base/component_export.h"
+#include "base/functional/callback_helpers.h"
+#include "base/memory/weak_ptr.h"
+#include "device/vr/android/xr_activity_state_handler.h"
 
 namespace device {
 
@@ -18,12 +21,26 @@
 
   void Initialize(jobject context) override;
   void ScanQrCodeAndSaveDeviceParams() override;
+  void ScanQrCodeAndSaveDeviceParams(
+      std::unique_ptr<XrActivityStateHandler> activity_state_handler,
+      base::OnceClosure on_params_saved) override;
 
   CardboardSdkImpl(const CardboardSdkImpl&) = delete;
   CardboardSdkImpl& operator=(const CardboardSdkImpl&) = delete;
 
  private:
+  // We actually only care about being called back once, but the
+  // XrActivityStateHandler requires a RepeatingClosure. Since a OnceClosure is
+  // passed, this method serves as an abstraction to allow us to create a
+  // RepeatingClosure.
+  void OnActivityResumed();
+
   bool initialized_ = false;
+
+  std::unique_ptr<XrActivityStateHandler> activity_state_handler_;
+  base::OnceClosure on_params_saved_;
+
+  base::WeakPtrFactory<CardboardSdkImpl> weak_ptr_factory_{this};
 };
 
 }  // namespace device
diff --git a/device/vr/android/cardboard/mock_cardboard_sdk.cc b/device/vr/android/cardboard/mock_cardboard_sdk.cc
new file mode 100644
index 0000000..737446b
--- /dev/null
+++ b/device/vr/android/cardboard/mock_cardboard_sdk.cc
@@ -0,0 +1,41 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "device/vr/android/cardboard/mock_cardboard_sdk.h"
+
+#include "base/android/jni_android.h"
+#include "base/functional/callback_helpers.h"
+#include "device/vr/android/xr_activity_state_handler.h"
+
+using base::android::AttachCurrentThread;
+
+namespace device {
+
+// static
+bool MockCardboardSdk::check_qr_code_scanner_was_launched_for_testing_ = false;
+
+// static
+bool MockCardboardSdk::check_qr_code_scanner_was_launched_for_testing() {
+  return check_qr_code_scanner_was_launched_for_testing_;
+}
+
+MockCardboardSdk::MockCardboardSdk() = default;
+MockCardboardSdk::~MockCardboardSdk() = default;
+
+void MockCardboardSdk::Initialize(jobject context) {}
+
+void MockCardboardSdk::ScanQrCodeAndSaveDeviceParams() {}
+
+void MockCardboardSdk::ScanQrCodeAndSaveDeviceParams(
+    std::unique_ptr<XrActivityStateHandler> activity_state_handler,
+    base::OnceClosure on_params_saved) {
+  check_qr_code_scanner_was_launched_for_testing_ = true;
+
+  // Given that we are not launching the QR code activity on the mocked class,
+  // we need to manually call the callback function so as to ensure the app
+  // flows as expected.
+  std::move(on_params_saved).Run();
+}
+
+}  // namespace device
diff --git a/device/vr/android/cardboard/mock_cardboard_sdk.h b/device/vr/android/cardboard/mock_cardboard_sdk.h
new file mode 100644
index 0000000..03c8720
--- /dev/null
+++ b/device/vr/android/cardboard/mock_cardboard_sdk.h
@@ -0,0 +1,40 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef DEVICE_VR_ANDROID_CARDBOARD_MOCK_CARDBOARD_SDK_H_
+#define DEVICE_VR_ANDROID_CARDBOARD_MOCK_CARDBOARD_SDK_H_
+
+#include "device/vr/android/cardboard/cardboard_sdk.h"
+
+#include "base/component_export.h"
+#include "device/vr/android/xr_activity_state_handler.h"
+
+namespace device {
+
+class COMPONENT_EXPORT(VR_CARDBOARD) MockCardboardSdk : public CardboardSdk {
+ public:
+  static bool check_qr_code_scanner_was_launched_for_testing();
+
+  MockCardboardSdk();
+  ~MockCardboardSdk() override;
+
+  void Initialize(jobject context) override;
+  void ScanQrCodeAndSaveDeviceParams() override;
+  void ScanQrCodeAndSaveDeviceParams(
+      std::unique_ptr<XrActivityStateHandler> activity_state_handler,
+      base::OnceClosure on_params_saved) override;
+
+  MockCardboardSdk(const MockCardboardSdk&) = delete;
+  MockCardboardSdk& operator=(const MockCardboardSdk&) = delete;
+
+ private:
+  // This flag is true if
+  // `MockCardboardSdk::ScanQrCodeAndSaveDeviceParams()` has been executed,
+  // otherwise it is false. Meant to be used for testing purposes only.
+  static bool check_qr_code_scanner_was_launched_for_testing_;
+};
+
+}  // namespace device
+
+#endif  // DEVICE_VR_ANDROID_CARDBOARD_MOCK_CARDBOARD_SDK_H_
diff --git a/docs/website b/docs/website
index 74217e7..391560e 160000
--- a/docs/website
+++ b/docs/website
@@ -1 +1 @@
-Subproject commit 74217e7dc033f862d09ed172eb52299e5062640d
+Subproject commit 391560ed8ad527f3e8a778a1422f5c221cd9266e
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h
index 747998c..a1dfe9ea 100644
--- a/extensions/browser/extension_function_histogram_value.h
+++ b/extensions/browser/extension_function_histogram_value.h
@@ -1902,6 +1902,7 @@
   AUTOFILLPRIVATE_BULKDELETEALLCVCS = 1840,
   PDFVIEWERPRIVATE_GETSTREAMINFO = 1841,
   PDFVIEWERPRIVATE_SETPDFPLUGINATTRIBUTES = 1842,
+  ACCESSIBILITY_PRIVATE_SETCURSORPOSITION = 1843,
   // Last entry: Add new entries above, then run:
   // tools/metrics/histograms/update_extension_histograms.py
   ENUM_BOUNDARY
diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_attach_helper.cc b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_attach_helper.cc
index 2484de78..35ee56a 100644
--- a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_attach_helper.cc
+++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_attach_helper.cc
@@ -15,7 +15,6 @@
 #include "base/memory/ptr_util.h"
 #include "base/no_destructor.h"
 #include "base/strings/stringprintf.h"
-#include "base/unguessable_token.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/navigation_handle.h"
@@ -107,8 +106,8 @@
     const GURL& resource_url,
     const std::string& mime_type,
     const std::string& stream_id,
+    const std::string& internal_id,
     base::OnceClosure resume_load) {
-  std::string internal_id = base::UnguessableToken::Create().ToString();
   content::GetUIThreadTaskRunner({})->PostTaskAndReply(
       FROM_HERE,
       base::BindOnce(CreateFullPageMimeHandlerView,
diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_attach_helper.h b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_attach_helper.h
index 31ff684..5e9204a8 100644
--- a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_attach_helper.h
+++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_attach_helper.h
@@ -62,6 +62,7 @@
       const GURL& resource_url,
       const std::string& mime_type,
       const std::string& stream_id,
+      const std::string& internal_id,
       base::OnceClosure resume_load = base::DoNothing());
 
   MimeHandlerViewAttachHelper(const MimeHandlerViewAttachHelper&) = delete;
diff --git a/extensions/renderer/resources/automation/automation_custom_bindings.js b/extensions/renderer/resources/automation/automation_custom_bindings.js
index 7006104..8b5c3ba9 100644
--- a/extensions/renderer/resources/automation/automation_custom_bindings.js
+++ b/extensions/renderer/resources/automation/automation_custom_bindings.js
@@ -100,7 +100,7 @@
     }
     const tree = AutomationRootNode.getOrCreate(focusedNodeInfo.treeId);
     if (tree) {
-      callback(privates(tree).impl.get(focusedNodeInfo.nodeId));
+      callback(tree.get(focusedNodeInfo.nodeId));
       return;
     }
   });
@@ -113,7 +113,7 @@
     }
     const tree = AutomationRootNode.getOrCreate(focusedNodeInfo.treeId);
     if (tree) {
-      callback(privates(tree).impl.get(focusedNodeInfo.nodeId));
+      callback(tree.get(focusedNodeInfo.nodeId));
     }
   });
 
@@ -142,23 +142,23 @@
   });
 
   apiFunctions.setHandleRequest('setDocumentSelection', function(params) {
-    const anchorNodeImpl = privates(params.anchorObject).impl;
-    const focusNodeImpl = privates(params.focusObject).impl;
-    if (anchorNodeImpl.treeID !== focusNodeImpl.treeID) {
+    const anchorNode = params.anchorObject;
+    const focusNode = params.focusObject;
+    if (anchorNode.treeID !== focusNode.treeID) {
       throw new Error('Selection anchor and focus must be in the same tree.');
     }
-    if (anchorNodeImpl.treeID === desktopId) {
+    if (anchorNode.treeID === desktopId) {
       throw new Error('Use AutomationNode.setSelection to set the selection ' +
           'in the desktop tree.');
     }
     automationInternal.performAction(
         {
-          treeID: anchorNodeImpl.treeID,
-          automationNodeID: anchorNodeImpl.id,
+          treeID: anchorNode.treeID,
+          automationNodeID: anchorNode.id,
           actionType: 'setSelection',
         },
         {
-          focusNodeID: focusNodeImpl.id,
+          focusNodeID: focusNode.id,
           anchorOffset: params.anchorOffset,
           focusOffset: params.focusOffset,
         });
@@ -180,10 +180,9 @@
   // browser process and set up a callback when it loads to attach that
   // tree as a child of this node and fire appropriate events.
   automationUtil.storeTreeCallback(childTreeId, function(root) {
-    const rootImpl = privates(root).impl;
-    rootImpl.dispatchEvent('loadComplete', 'page');
-    if (rootImpl.parent) {
-      privates(rootImpl.parent).impl.dispatchEvent('childrenChanged');
+    root.dispatchEvent('loadComplete', 'page');
+    if (root.parent) {
+      root.parent.dispatchEvent('childrenChanged');
     }
   }, true);
 
@@ -197,7 +196,7 @@
     return;
   }
 
-  const node = privates(tree).impl.get(nodeID);
+  const node = tree.get(nodeID);
   if (!node) {
     return;
   }
@@ -222,7 +221,7 @@
   }
 
   for (let i = 0; i < nodeIDs.length; i++) {
-    privates(tree).impl.remove(nodeIDs[i]);
+    tree.remove(nodeIDs[i]);
   }
 });
 
@@ -249,10 +248,10 @@
   if (eventParams.eventType == 'mediaStartedPlaying' ||
       eventParams.eventType == 'mediaStoppedPlaying') {
     // These events are global to the tree.
-    eventParams.targetID = privates(targetTree).impl.id;
+    eventParams.targetID = targetTree.id;
   }
 
-  privates(targetTree).impl.onAccessibilityEvent(eventParams);
+  targetTree.onAccessibilityEvent(eventParams);
 
   // If we're not waiting on a callback, we can early out here.
   if (!(id in idToCallback)) {
@@ -280,7 +279,7 @@
   // Destroy the AutomationRootNode.
   const targetTree = AutomationRootNode.get(id);
   if (targetTree) {
-    privates(targetTree).impl.destroy();
+    targetTree.destroy();
     AutomationRootNode.destroy(id);
   } else {
     logging.WARNING('no targetTree to destroy');
@@ -302,7 +301,7 @@
     return;
   }
 
-  privates(targetTree).impl.onActionResult(requestID, result);
+  targetTree.onActionResult(requestID, result);
 });
 
 automationInternal.onGetTextLocationResult.addListener(function(
@@ -311,5 +310,5 @@
   if (!targetTree) {
     return;
   }
-  privates(targetTree).impl.onGetTextLocationResult(textLocationParams);
+  targetTree.onGetTextLocationResult(textLocationParams);
 });
diff --git a/extensions/renderer/resources/automation/automation_node.js b/extensions/renderer/resources/automation/automation_node.js
index 3b7bf65..10dde134 100644
--- a/extensions/renderer/resources/automation/automation_node.js
+++ b/extensions/renderer/resources/automation/automation_node.js
@@ -624,82 +624,79 @@
 const GetValue = natives.GetValue;
 
 const logging = requireNative('logging');
-const utils = require('utils');
 
 /**
  * A single node in the Automation tree.
- * @param {AutomationRootNodeImpl} root The root of the tree.
+ * @param {AutomationRootNode} root The root of the tree.
  * @constructor
  */
-function AutomationNodeImpl(root) {
-  this.rootImpl_ = root;
-  this.listeners_ = {__proto__: null};
-}
+class AutomationNode {
+  constructor(root) {
+    this.rootImpl_ = root;
 
-AutomationNodeImpl.prototype = {
-  __proto__: null,
+    this.listeners_ = {__proto__: null};
 
-  /** @private {string} */
-  treeID_: '',
+    /** @private {string} */
+    this.treeID_ = '';
 
-  /** @private {number} */
-  id_: -1,
+    /** @private {number} */
+    this.id_ = -1;
 
-  /** @private {boolean} */
-  isRootNode_: false,
+    /** @private {boolean} */
+    this.isRootNode_ = false;
+  }
 
   get treeID() {
     return this.treeID_;
-  },
+  }
 
   get id() {
     return this.id_;
-  },
+  }
 
-  detach: function() {
+  detach() {
     this.rootImpl_ = null;
     this.listeners_ = {__proto__: null};
-  },
+  }
 
   get isRootNode() {
     return this.isRootNode_;
-  },
+  }
 
   get root() {
     const info = GetPublicRoot(this.treeID);
     if (!info) {
       return null;
     }
-    return AutomationRootNodeImpl.getNodeFromTree(info.treeId, info.nodeId) ||
-        null;
-  },
+    return AutomationRootNode.getNodeFromTree(info.treeId, info.nodeId) || null;
+  }
 
   get parent() {
     const info = GetParentID(this.treeID, this.id);
     if (info) {
-      return AutomationRootNodeImpl.getNodeFromTree(info.treeId, info.nodeId);
+      return AutomationRootNode.getNodeFromTree(info.treeId, info.nodeId);
     }
-  },
+  }
 
   get htmlAttributes() {
     return GetHtmlAttributes(this.treeID, this.id) || {};
-  },
+  }
 
   get state() {
     return GetState(this.treeID, this.id) || {};
-  },
+  }
 
   get role() {
     return GetRole(this.treeID, this.id);
-  },
+  }
 
   get restriction() {
     return GetRestriction(this.treeID, this.id);
-  },
+  }
 
   get checked() {
     return GetChecked(this.treeID, this.id);
-  },
+  }
 
   get caretBounds() {
     const data = GetIntListAttribute(this.treeID, this.id, 'caretBounds');
@@ -712,23 +709,23 @@
     }
 
     return {left: data[0], top: data[1], width: data[2], height: data[3]};
-  },
+  }
 
   get location() {
     return GetLocation(this.treeID, this.id);
-  },
+  }
 
-  boundsForRange: function(startIndex, endIndex, callback) {
+  boundsForRange(startIndex, endIndex, callback) {
     this.boundsForRangeInternal_(
         startIndex, endIndex, true /* clipped */, callback);
-  },
+  }
 
-  unclippedBoundsForRange: function(startIndex, endIndex, callback) {
+  unclippedBoundsForRange(startIndex, endIndex, callback) {
     this.boundsForRangeInternal_(
         startIndex, endIndex, false /* clipped */, callback);
-  },
+  }
 
-  boundsForRangeInternal_: function(startIndex, endIndex, clipped, callback) {
+  boundsForRangeInternal_(startIndex, endIndex, clipped, callback) {
     const errorMessage = clipped ?
         'Error with bounds for range callback' :
         'Error with unclipped bounds for range callback';
@@ -738,7 +735,7 @@
     }
 
     // Not yet initialized.
-    if (this.rootImpl_.treeID_ === undefined || this.id === undefined) {
+    if (this.rootImpl_.treeID === undefined || this.id === undefined) {
       return;
     }
 
@@ -761,15 +758,15 @@
         'getTextLocation', {startIndex: startIndex, endIndex: endIndex},
         callback);
     return;
-  },
+  }
 
   get sortDirection() {
     return GetSortDirection(this.treeID, this.id);
-  },
+  }
 
   get value() {
     return GetValue(this.treeID, this.id);
-  },
+  }
 
   get unclippedLocation() {
     let result = GetUnclippedLocation(this.treeID, this.id);
@@ -777,22 +774,22 @@
       result = GetLocation(this.treeID, this.id);
     }
     return result;
-  },
+  }
 
   get indexInParent() {
     return GetIndexInParent(this.treeID, this.id);
-  },
+  }
 
   get lineStartOffsets() {
     return GetLineStartOffsets(this.treeID, this.id);
-  },
+  }
 
   get childTree() {
     const childTreeID = GetStringAttribute(this.treeID, this.id, 'childTreeId');
     if (childTreeID) {
-      return AutomationRootNodeImpl.get(childTreeID);
+      return AutomationRootNode.get(childTreeID);
     }
-  },
+  }
 
   get firstChild() {
     if (GetChildCount(this.treeID, this.id) == 0) {
@@ -801,7 +798,7 @@
     const info = GetChildIDAtIndex(this.treeID, this.id, 0);
     if (info) {
       const child =
-          AutomationRootNodeImpl.getNodeFromTree(info.treeId, info.nodeId);
+          AutomationRootNode.getNodeFromTree(info.treeId, info.nodeId);
 
       // A child with an app id should always be in a different tree.
       if (child.appId && this.treeID === info.treeId) {
@@ -810,7 +807,7 @@
 
       return child;
     }
-  },
+  }
 
   get lastChild() {
     const count = GetChildCount(this.treeID, this.id);
@@ -821,7 +818,7 @@
     const info = GetChildIDAtIndex(this.treeID, this.id, count - 1);
     if (info) {
       const child =
-          AutomationRootNodeImpl.getNodeFromTree(info.treeId, info.nodeId);
+          AutomationRootNode.getNodeFromTree(info.treeId, info.nodeId);
 
       // A child with an app id should always be in a different tree.
       if (child.appId && this.treeID === info.treeId) {
@@ -830,7 +827,7 @@
 
       return child;
     }
-  },
+  }
 
   get children() {
     const info = GetChildIds(this.treeID, this.id);
@@ -841,8 +838,7 @@
     const children = [];
     for (let i = 0; i < info.nodeIds.length; ++i) {
       const childID = info.nodeIds[i];
-      const child =
-          AutomationRootNodeImpl.getNodeFromTree(info.treeId, childID);
+      const child = AutomationRootNode.getNodeFromTree(info.treeId, childID);
 
       // A child with an app id should always be in a different tree.
       if (child.appId && this.treeID === info.treeId) {
@@ -854,109 +850,107 @@
       }
     }
     return children;
-  },
+  }
 
   get previousSibling() {
-    let parent = this.parent;
+    const parent = this.parent;
     if (!parent) {
       return undefined;
     }
-    parent = privates(parent).impl;
     const indexInParent = GetIndexInParent(this.treeID, this.id);
     const info = GetChildIDAtIndex(parent.treeID, parent.id, indexInParent - 1);
     if (info) {
-      return AutomationRootNodeImpl.getNodeFromTree(info.treeId, info.nodeId);
+      return AutomationRootNode.getNodeFromTree(info.treeId, info.nodeId);
     }
-  },
+  }
 
   get nextSibling() {
-    let parent = this.parent;
+    const parent = this.parent;
     if (!parent) {
       return undefined;
     }
-    parent = privates(parent).impl;
     const indexInParent = GetIndexInParent(this.treeID, this.id);
     const info = GetChildIDAtIndex(parent.treeID, parent.id, indexInParent + 1);
     if (info) {
-      return AutomationRootNodeImpl.getNodeFromTree(info.treeId, info.nodeId);
+      return AutomationRootNode.getNodeFromTree(info.treeId, info.nodeId);
     }
-  },
+  }
 
   get nameFrom() {
     return GetNameFrom(this.treeID, this.id);
-  },
+  }
 
   get name() {
     return GetName(this.treeID, this.id);
-  },
+  }
 
   get descriptionFrom() {
     return GetDescriptionFrom(this.treeID, this.id);
-  },
+  }
 
   get imageAnnotation() {
     return GetImageAnnotation(this.treeID, this.id);
-  },
+  }
 
   get bold() {
     return GetBold(this.treeID, this.id);
-  },
+  }
 
   get italic() {
     return GetItalic(this.treeID, this.id);
-  },
+  }
 
   get underline() {
     return GetUnderline(this.treeID, this.id);
-  },
+  }
 
   get lineThrough() {
     return GetLineThrough(this.treeID, this.id);
-  },
+  }
 
   get isButton() {
     return GetIsButton(this.treeID, this.id);
-  },
+  }
 
   get isCheckBox() {
     return GetIsCheckBox(this.treeID, this.id);
-  },
+  }
 
   get isComboBox() {
     return GetIsComboBox(this.treeID, this.id);
-  },
+  }
 
   get isImage() {
     return GetIsImage(this.treeID, this.id);
-  },
+  }
 
   get detectedLanguage() {
     return GetDetectedLanguage(this.treeID, this.id);
-  },
+  }
 
   get customActions() {
     return GetCustomActions(this.treeID, this.id);
-  },
+  }
 
   get standardActions() {
     return GetStandardActions(this.treeID, this.id);
-  },
+  }
 
   get defaultActionVerb() {
     return GetDefaultActionVerb(this.treeID, this.id);
-  },
+  }
 
   get hasPopup() {
     return GetHasPopup(this.treeID, this.id);
-  },
+  }
 
   get ariaCurrentState() {
     return GetAriaCurrentState(this.treeID, this.id);
-  },
+  }
 
   get invalidState() {
     return GetInvalidState(this.treeID, this.id);
-  },
+  }
 
   get tableCellColumnHeaders() {
     const ids = GetTableCellColumnHeaders(this.treeID, this.id);
@@ -967,7 +961,7 @@
       }
       return result;
     }
-  },
+  }
 
   get tableCellRowHeaders() {
     const ids = GetTableCellRowHeaders(this.treeID, this.id);
@@ -978,54 +972,54 @@
       }
       return result;
     }
-  },
+  }
 
   get tableCellColumnIndex() {
     return GetTableCellColumnIndex(this.treeID, this.id);
-  },
+  }
 
   get tableCellRowIndex() {
     return GetTableCellRowIndex(this.treeID, this.id);
-  },
+  }
 
 
   get tableCellAriaColumnIndex() {
     return GetTableCellAriaColumnIndex(this.treeID, this.id);
-  },
+  }
 
   get tableCellAriaRowIndex() {
     return GetTableCellAriaRowIndex(this.treeID, this.id);
-  },
+  }
 
   get tableColumnCount() {
     return GetTableColumnCount(this.treeID, this.id);
-  },
+  }
 
   get tableRowCount() {
     return GetTableRowCount(this.treeID, this.id);
-  },
+  }
 
   get nonInlineTextWordStarts() {
     return GetWordStartOffsets(this.treeID, this.id);
-  },
+  }
 
   get nonInlineTextWordEnds() {
     return GetWordEndOffsets(this.treeID, this.id);
-  },
+  }
 
   get sentenceStarts() {
     return GetSentenceStartOffsets(this.treeID, this.id);
-  },
+  }
 
   get sentenceEnds() {
     return GetSentenceEndOffsets(this.treeID, this.id);
-  },
+  }
 
   get markers() {
     return GetMarkers(this.treeID, this.id);
-  },
+  }
 
-  createPosition: function(type, offset, opt_isUpstream) {
+  createPosition(type, offset, opt_isUpstream) {
     const nativePosition = CreateAutomationPosition(
         this.treeID, this.id, type, offset, Boolean(opt_isUpstream));
 
@@ -1038,38 +1032,38 @@
           return null;
         }
 
-        return privates(tree).impl.get(nativePosition.anchorID);
+        return tree.get(nativePosition.anchorID);
       },
     });
 
     return nativePosition;
-  },
+  }
 
-  doDefault: function() {
+  doDefault() {
     this.performAction_('doDefault');
-  },
+  }
 
-  focus: function() {
+  focus() {
     this.performAction_('focus');
-  },
+  }
 
-  getImageData: function(maxWidth, maxHeight) {
+  getImageData(maxWidth, maxHeight) {
     this.performAction_('getImageData',
                         { maxWidth: maxWidth,
                           maxHeight: maxHeight });
-  },
+  }
 
-  hitTest: function(x, y, eventToFire) {
+  hitTest(x, y, eventToFire) {
     // Set an empty callback to trigger onActionResult.
     const callback = () => {};
     this.hitTestInternal(x, y, eventToFire, callback);
-  },
+  }
 
-  hitTestWithReply: function(x, y, opt_callback) {
+  hitTestWithReply(x, y, opt_callback) {
     this.hitTestInternal(x, y, 'hitTestResult', opt_callback);
-  },
+  }
 
-  hitTestInternal: function(x, y, eventToFire, opt_callback) {
+  hitTestInternal(x, y, eventToFire, opt_callback) {
     // Convert from global to tree-relative coordinates.
     const location = GetLocation(this.treeID, GetRootID(this.treeID));
     this.performAction_('hitTest',
@@ -1077,76 +1071,76 @@
                           y: Math.floor(y - location.top),
                           eventToFire: eventToFire },
                         opt_callback);
-  },
+  }
 
-  makeVisible: function() {
+  makeVisible() {
     this.performAction_('scrollToMakeVisible');
-  },
+  }
 
-  performCustomAction: function(customActionId) {
+  performCustomAction(customActionId) {
     this.performAction_('customAction', { customActionID: customActionId });
-  },
+  }
 
-  performStandardAction: function(action) {
+  performStandardAction(action) {
     const standardActions = GetStandardActions(this.treeID, this.id);
     if (!standardActions ||
         !standardActions.find(item => action == item)) {
       throw Error('Inapplicable action for node: ' + action);
     }
     this.performAction_(action);
-  },
+  }
 
-  replaceSelectedText: function(value) {
+  replaceSelectedText(value) {
     if (this.state.editable) {
       this.performAction_('replaceSelectedText', { value: value});
     }
-  },
+  }
 
-  resumeMedia: function() {
+  resumeMedia() {
     this.performAction_('resumeMedia');
-  },
+  }
 
-  scrollBackward: function(opt_callback) {
+  scrollBackward(opt_callback) {
     this.performAction_('scrollBackward', {}, opt_callback);
-  },
+  }
 
-  scrollForward: function(opt_callback) {
+  scrollForward(opt_callback) {
     this.performAction_('scrollForward', {}, opt_callback);
-  },
+  }
 
-  scrollUp: function(opt_callback) {
+  scrollUp(opt_callback) {
     this.performAction_('scrollUp', {}, opt_callback);
-  },
+  }
 
-  scrollDown: function(opt_callback) {
+  scrollDown(opt_callback) {
     this.performAction_('scrollDown', {}, opt_callback);
-  },
+  }
 
-  scrollLeft: function(opt_callback) {
+  scrollLeft(opt_callback) {
     this.performAction_('scrollLeft', {}, opt_callback);
-  },
+  }
 
-  scrollRight: function(opt_callback) {
+  scrollRight(opt_callback) {
     this.performAction_('scrollRight', {}, opt_callback);
-  },
+  }
 
-  scrollToPoint: function(x, y) {
+  scrollToPoint(x, y) {
     this.performAction_('scrollToPoint', {x, y});
-  },
+  }
 
-  scrollToPositionAtRowColumn: function(row, column) {
+  scrollToPositionAtRowColumn(row, column) {
     this.performAction_('scrollToPositionAtRowColumn', {row, column});
-  },
+  }
 
-  setScrollOffset: function(x, y) {
+  setScrollOffset(x, y) {
     this.performAction_('setScrollOffset', {x, y});
-  },
+  }
 
-  setAccessibilityFocus: function() {
+  setAccessibilityFocus() {
     SetAccessibilityFocus(this.treeID, this.id);
-  },
+  }
 
-  setSelection: function(startIndex, endIndex) {
+  setSelection(startIndex, endIndex) {
     if (this.state.editable) {
       this.performAction_('setSelection', {
         focusNodeID: this.id,
@@ -1154,63 +1148,64 @@
         focusOffset: endIndex,
       });
     }
-  },
+  }
 
-  setSequentialFocusNavigationStartingPoint: function() {
+  setSequentialFocusNavigationStartingPoint() {
     this.performAction_('setSequentialFocusNavigationStartingPoint');
-  },
+  }
 
-  setValue: function(value) {
+  setValue(value) {
     if (this.state.editable) {
       this.performAction_('setValue', { value: value});
     }
-  },
+  }
 
-  showContextMenu: function() {
+  showContextMenu() {
     this.performAction_('showContextMenu');
-  },
+  }
 
-  startDuckingMedia: function() {
+  startDuckingMedia() {
     this.performAction_('startDuckingMedia');
-  },
+  }
 
-  stopDuckingMedia: function() {
+  stopDuckingMedia() {
     this.performAction_('stopDuckingMedia');
-  },
+  }
 
-  suspendMedia: function() {
+  suspendMedia() {
     this.performAction_('suspendMedia');
-  },
-  longClick: function() {
+  }
+
+  longClick() {
     this.performAction_('longClick');
-  },
+  }
 
-  find: function(params) {
+  find(params) {
     return this.findInternal_(params);
-  },
+  }
 
-  findAll: function(params) {
+  findAll(params) {
     return this.findInternal_(params, []);
-  },
+  }
 
-  matches: function(params) {
+  matches(params) {
     return this.matchInternal_(params);
-  },
+  }
 
-  getNextTextMatch: function(searchStr, backward) {
+  getNextTextMatch(searchStr, backward) {
     const info = GetNextTextMatch(this.treeID, this.id, searchStr, backward);
 
     if (!info) {
       return;
     }
 
-    const impl = privates(AutomationRootNodeImpl.get(info.treeId)).impl;
+    const impl = AutomationRootNode.get(info.treeId);
     if (impl) {
       return impl.get(info.nodeId);
     }
-  },
+  }
 
-  addEventListener: function(eventType, callback, capture) {
+  addEventListener(eventType, callback, capture) {
     this.removeEventListener(eventType, callback);
     if (!this.listeners_[eventType]) {
       this.listeners_[eventType] = [];
@@ -1226,10 +1221,10 @@
       callback: callback,
       capture: !!capture,
     });
-  },
+  }
 
   // TODO(dtseng/aboxhall): Check this impl against spec.
-  removeEventListener: function(eventType, callback) {
+  removeEventListener(eventType, callback) {
     if (this.listeners_[eventType]) {
       const listeners = this.listeners_[eventType];
       for (let i = 0; i < listeners.length; i++) {
@@ -1242,18 +1237,18 @@
         EventListenerRemoved(this.treeID, this.id, eventType);
       }
     }
-  },
+  }
 
-  toJSON: function() {
+  toJSON() {
     return {
       treeID: this.treeID,
       id: this.id,
       role: this.role,
       attributes: this.attributes,
     };
-  },
+  }
 
-  dispatchEvent: function(
+  dispatchEvent(
       eventType, eventFrom, eventFromAction, mouseX, mouseY, intents) {
     const path = [];
     let parent = this.parent;
@@ -1263,8 +1258,7 @@
     }
 
     const event = new AutomationEvent(
-        eventType, this.wrapper, eventFrom, eventFromAction, mouseX, mouseY,
-        intents);
+        eventType, this, eventFrom, eventFromAction, mouseX, mouseY, intents);
 
     // Dispatch the event through the propagation path in three phases:
     // - capturing: starting from the root and going down to the target's parent
@@ -1277,9 +1271,9 @@
         this.dispatchEventAtBubbling_(event, path);
       }
     }
-  },
+  }
 
-  toString: function() {
+  toString() {
     let parentID = GetParentID(this.treeID, this.id);
     parentID = parentID ? parentID.nodeId : null;
     const childTreeID = GetStringAttribute(this.treeID, this.id, 'childTreeId');
@@ -1304,9 +1298,9 @@
       result += ' className=' + this.className;
     }
     return result;
-  },
+  }
 
-  dispatchEventAtCapturing_: function(event, path) {
+  dispatchEventAtCapturing_(event, path) {
     event.eventPhase = Event.CAPTURING_PHASE;
     for (let i = path.length - 1; i >= 0; i--) {
       this.fireEventListeners_(path[i], event);
@@ -1315,15 +1309,15 @@
       }
     }
     return true;
-  },
+  }
 
-  dispatchEventAtTargeting_: function(event) {
+  dispatchEventAtTargeting_(event) {
     event.eventPhase = Event.AT_TARGET;
-    this.fireEventListeners_(this.wrapper, event);
+    this.fireEventListeners_(this, event);
     return !event.propagationStopped;
-  },
+  }
 
-  dispatchEventAtBubbling_: function(event, path) {
+  dispatchEventAtBubbling_(event, path) {
     event.eventPhase = Event.BUBBLING_PHASE;
     for (let i = 0; i < path.length; i++) {
       this.fireEventListeners_(path[i], event);
@@ -1332,15 +1326,14 @@
       }
     }
     return true;
-  },
+  }
 
-  fireEventListeners_: function(node, event) {
-    const nodeImpl = privates(node).impl;
-    if (!nodeImpl.rootImpl_) {
+  fireEventListeners_(node, event) {
+    if (!node.rootImpl_) {
       return;
     }
 
-    const originalListeners = nodeImpl.listeners_[event.type];
+    const originalListeners = node.listeners_[event.type];
     if (!originalListeners) {
       return;
     }
@@ -1368,9 +1361,9 @@
             ' during phase ' + eventPhase, e);
       }
     }
-  },
+  }
 
-  performAction_: function(actionType, opt_args, opt_callback) {
+  performAction_(actionType, opt_args, opt_callback) {
     if (!this.rootImpl_) {
       return;
     }
@@ -1400,12 +1393,12 @@
           requestID: requestID,
         },
         opt_args || {});
-  },
+  }
 
-  findInternal_: function(params, opt_results) {
+  findInternal_(params, opt_results) {
     let result = null;
     this.forAllDescendants_(function(node) {
-      if (privates(node).impl.matchInternal_(params)) {
+      if (node.matchInternal_(params)) {
         if (opt_results) {
           Array.prototype.push.call(opt_results, node);
         } else {
@@ -1418,7 +1411,7 @@
       return opt_results;
     }
     return result;
-  },
+  }
 
   /**
    * Executes a closure for all of this node's descendants, in pre-order.
@@ -1426,8 +1419,8 @@
    * @param {Function(AutomationNode):boolean} closure Closure to be executed
    *     for each node. Return true to early-out the traversal.
    */
-  forAllDescendants_: function(closure) {
-    const stack = this.wrapper.children.reverse();
+  forAllDescendants_(closure) {
+    const stack = this.children.reverse();
     while (stack.length > 0) {
       const node = stack.pop();
       if (closure(node)) {
@@ -1439,9 +1432,9 @@
         stack.push(children[i]);
       }
     }
-  },
+  }
 
-  matchInternal_: function(params) {
+  matchInternal_(params) {
     if (Object.keys(params).length === 0) {
       return false;
     }
@@ -1478,8 +1471,8 @@
       }
     }
     return true;
-  },
-};
+  }
+}
 
 const stringAttributes = [
   'accessKey',
@@ -1578,7 +1571,7 @@
 
 Array.prototype.forEach.call(stringAttributes, function(attributeName) {
   Array.prototype.push.call(publicAttributes, attributeName);
-  Object.defineProperty(AutomationNodeImpl.prototype, attributeName, {
+  Object.defineProperty(AutomationNode.prototype, attributeName, {
     __proto__: null,
     get: function() {
       return GetStringAttribute(this.treeID, this.id, attributeName);
@@ -1588,7 +1581,7 @@
 
 Array.prototype.forEach.call(boolAttributes, function(attributeName) {
   Array.prototype.push.call(publicAttributes, attributeName);
-  Object.defineProperty(AutomationNodeImpl.prototype, attributeName, {
+  Object.defineProperty(AutomationNode.prototype, attributeName, {
     __proto__: null,
     get: function() {
       return GetBoolAttribute(this.treeID, this.id, attributeName);
@@ -1598,7 +1591,7 @@
 
 Array.prototype.forEach.call(intAttributes, function(attributeName) {
   Array.prototype.push.call(publicAttributes, attributeName);
-  Object.defineProperty(AutomationNodeImpl.prototype, attributeName, {
+  Object.defineProperty(AutomationNode.prototype, attributeName, {
     __proto__: null,
     get: function() {
       return GetIntAttribute(this.treeID, this.id, attributeName);
@@ -1611,7 +1604,7 @@
   const dstAttributeName = params[1];
   const dstReverseAttributeName = params[2];
   Array.prototype.push.call(publicAttributes, dstAttributeName);
-  Object.defineProperty(AutomationNodeImpl.prototype, dstAttributeName, {
+  Object.defineProperty(AutomationNode.prototype, dstAttributeName, {
     __proto__: null,
     get: function() {
       const id = GetIntAttribute(this.treeID, this.id, srcAttributeName);
@@ -1624,31 +1617,30 @@
   });
   if (dstReverseAttributeName) {
     Array.prototype.push.call(publicAttributes, dstReverseAttributeName);
-    Object.defineProperty(
-        AutomationNodeImpl.prototype, dstReverseAttributeName, {
-          __proto__: null,
-          get: function() {
-            const ids = GetIntAttributeReverseRelations(
-                this.treeID, this.id, srcAttributeName);
-            if (!ids || !this.rootImpl_) {
-              return undefined;
-            }
-            const result = [];
-            for (let i = 0; i < ids.length; ++i) {
-              const node = this.rootImpl_.get(ids[i]);
-              if (node) {
-                Array.prototype.push.call(result, node);
-              }
-            }
-            return result;
-          },
-        });
+    Object.defineProperty(AutomationNode.prototype, dstReverseAttributeName, {
+      __proto__: null,
+      get: function() {
+        const ids = GetIntAttributeReverseRelations(
+            this.treeID, this.id, srcAttributeName);
+        if (!ids || !this.rootImpl_) {
+          return undefined;
+        }
+        const result = [];
+        for (let i = 0; i < ids.length; ++i) {
+          const node = this.rootImpl_.get(ids[i]);
+          if (node) {
+            Array.prototype.push.call(result, node);
+          }
+        }
+        return result;
+      },
+    });
   }
 });
 
 Array.prototype.forEach.call(intListAttributes, function(attributeName) {
   Array.prototype.push.call(publicAttributes, attributeName);
-  Object.defineProperty(AutomationNodeImpl.prototype, attributeName, {
+  Object.defineProperty(AutomationNode.prototype, attributeName, {
     __proto__: null,
     get: function() {
       return GetIntListAttribute(this.treeID, this.id, attributeName);
@@ -1661,7 +1653,7 @@
   const dstAttributeName = params[1];
   const dstReverseAttributeName = params[2];
   Array.prototype.push.call(publicAttributes, dstAttributeName);
-  Object.defineProperty(AutomationNodeImpl.prototype, dstAttributeName, {
+  Object.defineProperty(AutomationNode.prototype, dstAttributeName, {
     __proto__: null,
     get: function() {
       const ids = GetIntListAttribute(this.treeID, this.id, srcAttributeName);
@@ -1680,31 +1672,30 @@
   });
   if (dstReverseAttributeName) {
     Array.prototype.push.call(publicAttributes, dstReverseAttributeName);
-    Object.defineProperty(
-        AutomationNodeImpl.prototype, dstReverseAttributeName, {
-          __proto__: null,
-          get: function() {
-            const ids = GetIntListAttributeReverseRelations(
-                this.treeID, this.id, srcAttributeName);
-            if (!ids || !this.rootImpl_) {
-              return undefined;
-            }
-            const result = [];
-            for (let i = 0; i < ids.length; ++i) {
-              const node = this.rootImpl_.get(ids[i]);
-              if (node) {
-                Array.prototype.push.call(result, node);
-              }
-            }
-            return result;
-          },
-        });
+    Object.defineProperty(AutomationNode.prototype, dstReverseAttributeName, {
+      __proto__: null,
+      get: function() {
+        const ids = GetIntListAttributeReverseRelations(
+            this.treeID, this.id, srcAttributeName);
+        if (!ids || !this.rootImpl_) {
+          return undefined;
+        }
+        const result = [];
+        for (let i = 0; i < ids.length; ++i) {
+          const node = this.rootImpl_.get(ids[i]);
+          if (node) {
+            Array.prototype.push.call(result, node);
+          }
+        }
+        return result;
+      },
+    });
   }
 });
 
 Array.prototype.forEach.call(floatAttributes, function(attributeName) {
   Array.prototype.push.call(publicAttributes, attributeName);
-  Object.defineProperty(AutomationNodeImpl.prototype, attributeName, {
+  Object.defineProperty(AutomationNode.prototype, attributeName, {
     __proto__: null,
     get: function() {
       return GetFloatAttribute(this.treeID, this.id, attributeName);
@@ -1716,7 +1707,7 @@
   const srcAttributeName = params[0];
   const dstAttributeName = params[1];
   Array.prototype.push.call(publicAttributes, dstAttributeName);
-  Object.defineProperty(AutomationNodeImpl.prototype, dstAttributeName, {
+  Object.defineProperty(AutomationNode.prototype, dstAttributeName, {
     __proto__: null,
     get: function() {
       return GetHtmlAttribute(this.treeID, this.id, srcAttributeName);
@@ -1741,105 +1732,81 @@
  * renderer widget host.
  * @constructor
  */
-function AutomationRootNodeImpl(treeID) {
-  $Function.call(AutomationNodeImpl, this, this);
-  this.treeID_ = treeID;
-  this.axNodeDataCache_ = {__proto__: null};
-}
+class AutomationRootNode extends AutomationNode {
+  constructor(treeID) {
+    super(null);
 
-utils.defineProperty(AutomationRootNodeImpl, 'get', function(treeID) {
-  const result = AutomationTreeCache.idToAutomationRootNode[treeID];
-  return result || undefined;
-});
+    this.rootImpl_ = this;
+    this.treeID_ = treeID;
+    this.isRootNode_ = true;
 
-utils.defineProperty(AutomationRootNodeImpl, 'getOrCreate', function(treeID) {
-  if (AutomationTreeCache.idToAutomationRootNode[treeID]) {
-    return AutomationTreeCache.idToAutomationRootNode[treeID];
+    /**
+     * A map from id to AutomationNode.
+     * @type {Object<number, AutomationNode>}
+     * @private
+     */
+    this.axNodeDataCache_ = {__proto__: null};
   }
-  const result = new AutomationRootNode(treeID);
-  AutomationTreeCache.idToAutomationRootNode[treeID] = result;
-  return result;
-});
 
-utils.defineProperty(
-    AutomationRootNodeImpl, 'getNodeFromTree', function(treeId, nodeId) {
-      const tree = AutomationRootNodeImpl.get(treeId);
-      if (!tree) {
-        return;
-      }
-      const impl = privates(tree).impl;
-      if (impl) {
-        return impl.get(nodeId);
-      }
-    });
-
-utils.defineProperty(AutomationRootNodeImpl, 'destroy', function(treeID) {
-  delete AutomationTreeCache.idToAutomationRootNode[treeID];
-});
-
-utils.defineProperty(AutomationRootNodeImpl, 'destroyAll', function() {
-  AutomationTreeCache.idToAutomationRootNode = {};
-});
-
-/**
- * A counter keeping track of IDs to use for mapping action requests to
- * their callback function.
- */
-AutomationRootNodeImpl.actionRequestCounter = 0;
-
-/**
- * A map from a request ID to the corresponding callback function to call
- * when the action response event is received.
- */
-AutomationRootNodeImpl.actionRequestIDToCallback = {};
-
-AutomationRootNodeImpl.prototype = {
-  __proto__: AutomationNodeImpl.prototype,
-
-  /**
-   * @type {boolean}
-   * @private
-   */
-  isRootNode_: true,
-
-  /**
-   * A map from id to AutomationNode.
-   * @type {Object<number, AutomationNode>}
-   * @private
-   */
-  axNodeDataCache_: null,
-
-  get id_() {
-    const result = GetRootID(this.treeID);
-
+  get id() {
+    let id = GetRootID(this.treeID);
     // Don't return undefined, because the id is often passed directly
     // as an argument to a native binding that expects only a valid number.
-    if (result === undefined) {
-      return -1;
+    if (id === undefined) {
+      id = -1;
     }
+    return id;
+  }
 
+  static get(treeID) {
+    const result = AutomationTreeCache.idToAutomationRootNode[treeID];
+    return result || undefined;
+  }
+
+  static getOrCreate(treeID) {
+    if (AutomationTreeCache.idToAutomationRootNode[treeID]) {
+      return AutomationTreeCache.idToAutomationRootNode[treeID];
+    }
+    const result = new AutomationRootNode(treeID);
+    AutomationTreeCache.idToAutomationRootNode[treeID] = result;
     return result;
-  },
+  }
+
+  static getNodeFromTree(treeId, nodeId) {
+    const tree = AutomationRootNode.get(treeId);
+    if (!tree) {
+      return;
+    }
+    return tree.get(nodeId);
+  }
+
+  static destroy(treeID) {
+    delete AutomationTreeCache.idToAutomationRootNode[treeID];
+  }
+
+  static destroyAll() {
+    AutomationTreeCache.idToAutomationRootNode = {};
+  }
 
   get docUrl() {
     return GetDocURL(this.treeID);
-  },
+  }
 
   get docTitle() {
     return GetDocTitle(this.treeID);
-  },
+  }
 
   get docLoaded() {
     return GetDocLoaded(this.treeID);
-  },
+  }
 
   get docLoadingProgress() {
     return GetDocLoadingProgress(this.treeID);
-  },
+  }
 
   get isSelectionBackward() {
     return GetIsSelectionBackward(this.treeID);
-  },
+  }
 
   get anchorObject() {
     const id = GetAnchorObjectID(this.treeID);
@@ -1847,7 +1814,7 @@
       return this.get(id);
     }
     return undefined;
-  },
+  }
 
   get anchorOffset() {
     const id = GetAnchorObjectID(this.treeID);
@@ -1855,7 +1822,7 @@
       return GetAnchorOffset(this.treeID);
     }
     return undefined;
-  },
+  }
 
   get anchorAffinity() {
     const id = GetAnchorObjectID(this.treeID);
@@ -1863,7 +1830,7 @@
       return GetAnchorAffinity(this.treeID);
     }
     return undefined;
-  },
+  }
 
   get focusObject() {
     const id = GetFocusObjectID(this.treeID);
@@ -1871,7 +1838,7 @@
       return this.get(id);
     }
     return undefined;
-  },
+  }
 
   get focusOffset() {
     const id = GetFocusObjectID(this.treeID);
@@ -1879,7 +1846,7 @@
       return GetFocusOffset(this.treeID);
     }
     return undefined;
-  },
+  }
 
   get focusAffinity() {
     const id = GetFocusObjectID(this.treeID);
@@ -1887,7 +1854,7 @@
       return GetFocusAffinity(this.treeID);
     }
     return undefined;
-  },
+  }
 
   get selectionStartObject() {
     const id = GetSelectionStartObjectID(this.treeID);
@@ -1895,7 +1862,7 @@
       return this.get(id);
     }
     return undefined;
-  },
+  }
 
   get selectionStartOffset() {
     const id = GetSelectionStartObjectID(this.treeID);
@@ -1903,7 +1870,7 @@
       return GetSelectionStartOffset(this.treeID);
     }
     return undefined;
-  },
+  }
 
   get selectionStartAffinity() {
     const id = GetSelectionStartObjectID(this.treeID);
@@ -1911,7 +1878,7 @@
       return GetSelectionStartAffinity(this.treeID);
     }
     return undefined;
-  },
+  }
 
   get selectionEndObject() {
     const id = GetSelectionEndObjectID(this.treeID);
@@ -1919,7 +1886,7 @@
       return this.get(id);
     }
     return undefined;
-  },
+  }
 
   get selectionEndOffset() {
     const id = GetSelectionEndObjectID(this.treeID);
@@ -1927,7 +1894,7 @@
       return GetSelectionEndOffset(this.treeID);
     }
     return undefined;
-  },
+  }
 
   get selectionEndAffinity() {
     const id = GetSelectionEndObjectID(this.treeID);
@@ -1935,15 +1902,15 @@
       return GetSelectionEndAffinity(this.treeID);
     }
     return undefined;
-  },
+  }
 
-  get: function(id) {
+  get(id) {
     if (id == undefined) {
       return undefined;
     }
 
     if (id == this.id) {
-      return this.wrapper;
+      return this;
     }
 
     let obj = this.axNodeDataCache_[id];
@@ -1957,28 +1924,28 @@
     }
 
     obj = new AutomationNode(this);
-    privates(obj).impl.treeID_ = this.treeID;
-    privates(obj).impl.id_ = id;
+    obj.treeID_ = this.treeID;
+    obj.id_ = id;
     this.axNodeDataCache_[id] = obj;
 
     return obj;
-  },
+  }
 
-  remove: function(id) {
+  remove(id) {
     if (this.axNodeDataCache_[id]) {
-      privates(this.axNodeDataCache_[id]).impl.detach();
+      this.axNodeDataCache_[id].detach();
     }
     delete this.axNodeDataCache_[id];
-  },
+  }
 
-  destroy: function() {
+  destroy() {
     for (const id in this.axNodeDataCache_) {
       this.remove(id);
     }
     this.detach();
-  },
+  }
 
-  onAccessibilityEvent: function(eventParams) {
+  onAccessibilityEvent(eventParams) {
     const targetNode = this.get(eventParams.targetID);
     if (targetNode) {
       if (eventParams.actionRequestID != -1 &&
@@ -1986,8 +1953,7 @@
         return;
       }
 
-      const targetNodeImpl = privates(targetNode).impl;
-      targetNodeImpl.dispatchEvent(
+      targetNode.dispatchEvent(
           eventParams.eventType, eventParams.eventFrom,
           eventParams.eventFromAction, eventParams.mouseX, eventParams.mouseY,
           eventParams.intents);
@@ -1996,24 +1962,24 @@
           'Got ' + eventParams.eventType + ' event on unknown node: ' +
           eventParams.targetID + '; this: ' + this.id);
     }
-  },
+  }
 
-  addActionResultCallback: function(actionType, opt_args, callback) {
-    AutomationRootNodeImpl
-        .actionRequestIDToCallback[++AutomationRootNodeImpl
-                                         .actionRequestCounter] = {
-      actionType,
-      opt_args,
-      callback,
-    };
-    return AutomationRootNodeImpl.actionRequestCounter;
-  },
+  addActionResultCallback(actionType, opt_args, callback) {
+    AutomationRootNode
+        .actionRequestIDToCallback[++AutomationRootNode.actionRequestCounter] =
+        {
+          actionType,
+          opt_args,
+          callback,
+        };
+    return AutomationRootNode.actionRequestCounter;
+  }
 
-  onGetTextLocationResult: function(textLocationParams) {
+  onGetTextLocationResult(textLocationParams) {
     const requestID = textLocationParams.requestID;
-    if (requestID in AutomationRootNodeImpl.actionRequestIDToCallback) {
+    if (requestID in AutomationRootNode.actionRequestIDToCallback) {
       const callback =
-          AutomationRootNodeImpl.actionRequestIDToCallback[requestID].callback;
+          AutomationRootNode.actionRequestIDToCallback[requestID].callback;
       try {
         if (textLocationParams.result) {
           callback(ComputeGlobalBounds(
@@ -2026,13 +1992,13 @@
       } catch (e) {
         logging.WARNING('Error with onGetTextLocationResult callback:' + e);
       }
-      delete AutomationRootNodeImpl.actionRequestIDToCallback[requestID];
+      delete AutomationRootNode.actionRequestIDToCallback[requestID];
     }
-  },
+  }
 
-  onActionResult: function(requestID, result) {
-    if (requestID in AutomationRootNodeImpl.actionRequestIDToCallback) {
-      const data = AutomationRootNodeImpl.actionRequestIDToCallback[requestID];
+  onActionResult(requestID, result) {
+    if (requestID in AutomationRootNode.actionRequestIDToCallback) {
+      const data = AutomationRootNode.actionRequestIDToCallback[requestID];
       if (data.actionType.indexOf('hitTest') === 0 && result &&
           result.role === 'window' && result.className &&
           result.className.indexOf('ExoSurface') === 0) {
@@ -2069,22 +2035,21 @@
 
         const appNode = findApp(result);
         if (appNode) {
-          delete AutomationRootNodeImpl.actionRequestIDToCallback[requestID];
+          delete AutomationRootNode.actionRequestIDToCallback[requestID];
 
           // Repost the hit test on |appNode|.
-          privates(appNode).impl.performAction_(
-              data.actionType, data.opt_args, data.callback);
+          appNode.performAction_(data.actionType, data.opt_args, data.callback);
           return true;
         }
       }
 
       data.callback(result);
-      delete AutomationRootNodeImpl.actionRequestIDToCallback[requestID];
+      delete AutomationRootNode.actionRequestIDToCallback[requestID];
       return false;
     }
-  },
+  }
 
-  toString: function() {
+  toString() {
     function toStringInternal(nodeImpl, indent) {
       if (!nodeImpl) {
         return '';
@@ -2094,162 +2059,29 @@
         output += indent + 'tree id=' + nodeImpl.treeID + '\n';
       }
       output += indent +
-        $Function.call(AutomationNodeImpl.prototype.toString, nodeImpl) + '\n';
+          $Function.call(AutomationNode.prototype.toString, nodeImpl) + '\n';
       indent += '  ';
       const children = nodeImpl.children;
       for (let i = 0; i < children.length; ++i) {
-        output += toStringInternal(privates(children[i]).impl, indent);
+        output += toStringInternal(children[i], indent);
       }
       return output;
     }
     return toStringInternal(this, '');
-  },
-};
-
-function AutomationNode() {
-  privates(AutomationNode).constructPrivate(this, arguments);
+  }
 }
-utils.expose(AutomationNode, AutomationNodeImpl, {
-  functions: [
-    'addEventListener',
-    'boundsForRange',
-    'createPosition',
-    'doDefault',
-    'find',
-    'findAll',
-    'focus',
-    'getImageData',
-    'getNextTextMatch',
-    'hitTest',
-    'hitTestWithReply',
-    'languageAnnotationForStringAttribute',
-    'makeVisible',
-    'matches',
-    'performCustomAction',
-    'performStandardAction',
-    'removeEventListener',
-    'replaceSelectedText',
-    'resumeMedia',
-    'scrollBackward',
-    'scrollDown',
-    'scrollForward',
-    'scrollLeft',
-    'scrollRight',
-    'scrollToPoint',
-    'scrollToPositionAtRowColumn',
-    'scrollUp',
-    'setAccessibilityFocus',
-    'setScrollOffset',
-    'setSelection',
-    'setSequentialFocusNavigationStartingPoint',
-    'setValue',
-    'showContextMenu',
-    'startDuckingMedia',
-    'stopDuckingMedia',
-    'suspendMedia',
-    'longClick',
-    'toString',
-    'unclippedBoundsForRange',
-  ],
-  readonly: Array.prototype.concat.call(
-      publicAttributes,
-      [
-        'ariaCurrentState',
-        'bold',
-        'caretBounds',
-        'checked',
-        'children',
-        'customActions',
-        'defaultActionVerb',
-        'descriptionFrom',
-        'detectedLanguage',
-        'firstChild',
-        'hasPopup',
-        'htmlAttributes',
-        'imageAnnotation',
-        'indexInParent',
-        'invalidState',
-        'isButton',
-        'isCheckBox',
-        'isComboBox',
-        'isImage',
-        'isRootNode',
-        'italic',
-        'lastChild',
-        'lineStartOffsets',
-        'lineThrough',
-        'location',
-        'markers',
-        'name',
-        'nameFrom',
-        'nextSibling',
-        'nonInlineTextWordEnds',
-        'nonInlineTextWordStarts',
-        'parent',
-        'previousSibling',
-        'restriction',
-        'role',
-        'root',
-        'sortDirection',
-        'standardActions',
-        'state',
-        'sentenceStarts',
-        'sentenceEnds',
-        'tableCellAriaColumnIndex',
-        'tableCellAriaRowIndex',
-        'tableCellColumnHeaders',
-        'tableCellColumnIndex',
-        'tableCellRowHeaders',
-        'tableCellRowIndex',
-        'tableColumnCount',
-        'tableRowCount',
-        'unclippedLocation',
-        'underline',
-        'value',
-      ]),
-});
 
-function AutomationRootNode() {
-  privates(AutomationRootNode).constructPrivate(this, arguments);
-}
-utils.expose(AutomationRootNode, AutomationRootNodeImpl, {
-  superclass: AutomationNode,
-  readonly: [
-    'docTitle',
-    'docUrl',
-    'docLoaded',
-    'docLoadingProgress',
-    'isSelectionBackward',
-    'anchorObject',
-    'anchorOffset',
-    'anchorAffinity',
-    'focusObject',
-    'focusOffset',
-    'focusAffinity',
-    'selectionStartObject',
-    'selectionStartOffset',
-    'selectionStartAffinity',
-    'selectionEndObject',
-    'selectionEndOffset',
-    'selectionEndAffinity',
-  ],
-});
+/**
+ * A counter keeping track of IDs to use for mapping action requests to
+ * their callback function.
+ */
+AutomationRootNode.actionRequestCounter = 0;
 
-utils.defineProperty(AutomationRootNode, 'get', function(treeID) {
-  return AutomationRootNodeImpl.get(treeID);
-});
-
-utils.defineProperty(AutomationRootNode, 'getOrCreate', function(treeID) {
-  return AutomationRootNodeImpl.getOrCreate(treeID);
-});
-
-utils.defineProperty(AutomationRootNode, 'destroy', function(treeID) {
-  AutomationRootNodeImpl.destroy(treeID);
-});
-
-utils.defineProperty(AutomationRootNode, 'destroyAll', function() {
-  AutomationRootNodeImpl.destroyAll();
-});
+/**
+ * A map from a request ID to the corresponding callback function to call
+ * when the action response event is received.
+ */
+AutomationRootNode.actionRequestIDToCallback = {};
 
 exports.$set('AutomationNode', AutomationNode);
 exports.$set('AutomationRootNode', AutomationRootNode);
diff --git a/gpu/command_buffer/common/shared_image_capabilities.h b/gpu/command_buffer/common/shared_image_capabilities.h
index 38d60cf..70a8270 100644
--- a/gpu/command_buffer/common/shared_image_capabilities.h
+++ b/gpu/command_buffer/common/shared_image_capabilities.h
@@ -14,6 +14,7 @@
   bool supports_luminance_shared_images = false;
   bool supports_r16_shared_images = false;
   bool disable_r8_shared_images = false;
+  bool disable_webgpu_shared_images = false;
 
   bool shared_image_d3d = false;
   bool shared_image_swap_chain = false;
diff --git a/gpu/command_buffer/service/service_utils.cc b/gpu/command_buffer/service/service_utils.cc
index 98dd11a..676db8d8 100644
--- a/gpu/command_buffer/service/service_utils.cc
+++ b/gpu/command_buffer/service/service_utils.cc
@@ -93,8 +93,7 @@
     bool use_passthrough_cmd_decoder) {
   gl::GLContextAttribs attribs;
   if (use_passthrough_cmd_decoder) {
-    // TODO(vasilyt): switch this to false
-    attribs.bind_generates_resource = true;
+    attribs.bind_generates_resource = false;
 
     // Always use the global texture and semaphore share group for the
     // passthrough command decoder
diff --git a/gpu/command_buffer/service/shared_image/shared_image_factory.cc b/gpu/command_buffer/service/shared_image/shared_image_factory.cc
index 2c84896..c1bbd339 100644
--- a/gpu/command_buffer/service/shared_image/shared_image_factory.cc
+++ b/gpu/command_buffer/service/shared_image/shared_image_factory.cc
@@ -877,6 +877,8 @@
       is_angle_metal || is_skia_graphite;
   shared_image_caps.disable_r8_shared_images =
       workarounds_.r8_egl_images_broken;
+  shared_image_caps.disable_webgpu_shared_images =
+      workarounds_.disable_webgpu_shared_images;
 
 #if BUILDFLAG(IS_WIN)
   shared_image_caps.shared_image_d3d =
diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json
index 2bac61b..ef1cad6 100644
--- a/gpu/config/gpu_driver_bug_list.json
+++ b/gpu/config/gpu_driver_bug_list.json
@@ -3828,6 +3828,18 @@
         "disable_accelerated_vp8_encode",
         "disable_accelerated_h264_encode"
       ]
+    },
+    {
+      "id": 423,
+      "description": "Legacy AMD GPUs can't synchronize multiple write streams on SharedImages [b/293613437]",
+      "os": {
+        "type": "chromeos"
+      },
+      "vendor_id": "0x1002",
+      "device_id": ["0x9802"],
+      "features": [
+        "disable_webgpu_shared_images"
+      ]
     }
   ]
 }
diff --git a/gpu/config/gpu_workaround_list.txt b/gpu/config/gpu_workaround_list.txt
index e23a57e..967daf5 100644
--- a/gpu/config/gpu_workaround_list.txt
+++ b/gpu/config/gpu_workaround_list.txt
@@ -62,6 +62,7 @@
 disable_vp_scaling
 disable_vp_super_resolution
 disable_webgl_rgb_multisampling_usage
+disable_webgpu_shared_images
 disallow_large_instanced_draw
 dont_delete_source_texture_for_egl_image
 dont_initialize_uninitialized_locals
diff --git a/gpu/ipc/common/shared_image_capabilities.mojom b/gpu/ipc/common/shared_image_capabilities.mojom
index 0f3ba67e..ca04bded 100644
--- a/gpu/ipc/common/shared_image_capabilities.mojom
+++ b/gpu/ipc/common/shared_image_capabilities.mojom
@@ -10,6 +10,7 @@
   bool supports_luminance_shared_images;
   bool supports_r16_shared_images;
   bool disable_r8_shared_images;
+  bool disable_webgpu_shared_images;
 
   bool shared_image_d3d;
   bool shared_image_swap_chain;
diff --git a/gpu/ipc/common/shared_image_capabilities_mojom_traits.cc b/gpu/ipc/common/shared_image_capabilities_mojom_traits.cc
index fba997d9..78197d30 100644
--- a/gpu/ipc/common/shared_image_capabilities_mojom_traits.cc
+++ b/gpu/ipc/common/shared_image_capabilities_mojom_traits.cc
@@ -16,6 +16,7 @@
       data.supports_luminance_shared_images();
   out->supports_r16_shared_images = data.supports_r16_shared_images();
   out->disable_r8_shared_images = data.disable_r8_shared_images();
+  out->disable_webgpu_shared_images = data.disable_webgpu_shared_images();
 
   out->shared_image_d3d = data.shared_image_d3d();
   out->shared_image_swap_chain = data.shared_image_swap_chain();
diff --git a/gpu/ipc/common/shared_image_capabilities_mojom_traits.h b/gpu/ipc/common/shared_image_capabilities_mojom_traits.h
index 0c7ac47..d970785 100644
--- a/gpu/ipc/common/shared_image_capabilities_mojom_traits.h
+++ b/gpu/ipc/common/shared_image_capabilities_mojom_traits.h
@@ -37,6 +37,11 @@
     return input.disable_r8_shared_images;
   }
 
+  static bool disable_webgpu_shared_images(
+      const gpu::SharedImageCapabilities& input) {
+    return input.disable_webgpu_shared_images;
+  }
+
   static bool shared_image_d3d(const gpu::SharedImageCapabilities& input) {
     return input.shared_image_d3d;
   }
diff --git a/gpu/ipc/service/image_transport_surface_overlay_mac.h b/gpu/ipc/service/image_transport_surface_overlay_mac.h
index d1deb3d7..f8d4dc3 100644
--- a/gpu/ipc/service/image_transport_surface_overlay_mac.h
+++ b/gpu/ipc/service/image_transport_surface_overlay_mac.h
@@ -93,6 +93,14 @@
   int64_t display_id_ = display::kInvalidDisplayId;
   scoped_refptr<ui::DisplayLinkMac> display_link_mac_;
   std::unique_ptr<ui::VSyncCallbackMac> vsync_callback_mac_;
+
+  // This is the number of vsync_callbacks running without populating CaLayer
+  // parameters, used for detecting consecutive frames.
+  int vsync_callback_mac_keep_alive_counter_ = 0;
+
+  // Ensure vsync_callback_mac_ is still alive in the case of frame rate
+  // throttling such as 30 fps video playback.
+  constexpr static int kMaxKeepAliveCounter = 5;
 #endif
 
   SwapCompletionCallback completion_callback_;
diff --git a/gpu/ipc/service/image_transport_surface_overlay_mac.mm b/gpu/ipc/service/image_transport_surface_overlay_mac.mm
index caa7b44..82061e8 100644
--- a/gpu/ipc/service/image_transport_surface_overlay_mac.mm
+++ b/gpu/ipc/service/image_transport_surface_overlay_mac.mm
@@ -171,6 +171,7 @@
   num_committed_ca_layer_trees_++;
 
 #if BUILDFLAG(IS_MAC)
+  bool has_previous_vsync_callback_mac = !!vsync_callback_mac_;
   if (display_link_mac_ && !vsync_callback_mac_) {
     vsync_callback_mac_ = display_link_mac_->RegisterCallback(
         base::BindRepeating(
@@ -179,9 +180,14 @@
         /*do_callback_on_register_thread=*/true);
   }
 
+  // To avoid FID (First Input Delay), delay PopulateCALayerParameters only if
+  // this is not the first frame after vsync stops.
   if (vsync_callback_mac_) {
-    // PopulateCALayerParameters will be called in OnVSyncPresentation.
-    return;
+    vsync_callback_mac_keep_alive_counter_ = kMaxKeepAliveCounter;
+    if (has_previous_vsync_callback_mac) {
+      // PopulateCALayerParameters will be called in OnVSyncPresentation.
+      return;
+    }
   }
 #endif
 
@@ -298,10 +304,16 @@
 
   if ((!display_link_mac_ || display_id != display_id_) &&
       display_id != display::kInvalidDisplayId) {
+    // Call PopulateCALayerParameters if there is a pending frame.
     if (vsync_callback_mac_) {
+      // Set the keep_alive_counter to the last one so vsync_callback_mac_ will
+      // be destroyed.
+      vsync_callback_mac_keep_alive_counter_ =
+          num_committed_ca_layer_trees_ ? 0 : 1;
       OnVSyncPresentation(ui::VSyncParamsMac());
       DCHECK(!vsync_callback_mac_);
     }
+
     display_link_mac_ = ui::DisplayLinkMac::GetForDisplay(display_id);
   }
 
@@ -312,10 +324,12 @@
     ui::VSyncParamsMac params) {
   if (num_committed_ca_layer_trees_) {
     PopulateCALayerParameters();
+  } else {
+    DCHECK(vsync_callback_mac_keep_alive_counter_ > 0);
+    vsync_callback_mac_keep_alive_counter_ -= 1;
   }
 
-  // No more pending frames. Now stop the vsync callback.
-  if (!num_committed_ca_layer_trees_) {
+  if (vsync_callback_mac_keep_alive_counter_ == 0) {
     vsync_callback_mac_ = nullptr;
   }
 }
diff --git a/infra/config/generated/builders/ci/android-12-x64-rel/properties.json b/infra/config/generated/builders/ci/android-12-x64-rel/properties.json
index 3a5e9aa..bbd1077 100644
--- a/infra/config/generated/builders/ci/android-12-x64-rel/properties.json
+++ b/infra/config/generated/builders/ci/android-12-x64-rel/properties.json
@@ -89,10 +89,6 @@
       ],
       "mirroring_builder_group_and_names": [
         {
-          "builder": "android-12-x64-dual-coverage-exp-rel",
-          "group": "tryserver.chromium.android"
-        },
-        {
           "builder": "android-12-x64-rel",
           "group": "tryserver.chromium.android"
         }
diff --git a/infra/config/generated/builders/ci/android-oreo-x86-rel/properties.json b/infra/config/generated/builders/ci/android-oreo-x86-rel/properties.json
index b8eed45..32a2973 100644
--- a/infra/config/generated/builders/ci/android-oreo-x86-rel/properties.json
+++ b/infra/config/generated/builders/ci/android-oreo-x86-rel/properties.json
@@ -49,10 +49,6 @@
           "group": "tryserver.chromium.android"
         },
         {
-          "builder": "android-x86-dual-coverage-exp-rel",
-          "group": "tryserver.chromium.android"
-        },
-        {
           "builder": "android-x86-rel",
           "group": "tryserver.chromium.android"
         }
diff --git a/infra/config/generated/builders/gn_args_locations.json b/infra/config/generated/builders/gn_args_locations.json
index 7e46c2a..29c90483 100644
--- a/infra/config/generated/builders/gn_args_locations.json
+++ b/infra/config/generated/builders/gn_args_locations.json
@@ -161,7 +161,6 @@
     "android-10-arm64-rel": "try/android-10-arm64-rel/gn-args.json",
     "android-11-x86-rel": "try/android-11-x86-rel/gn-args.json",
     "android-12-x64-dbg": "try/android-12-x64-dbg/gn-args.json",
-    "android-12-x64-dual-coverage-exp-rel": "try/android-12-x64-dual-coverage-exp-rel/gn-args.json",
     "android-12-x64-rel": "try/android-12-x64-rel/gn-args.json",
     "android-12l-x64-dbg": "try/android-12l-x64-dbg/gn-args.json",
     "android-13-x64-rel": "try/android-13-x64-rel/gn-args.json",
@@ -206,7 +205,6 @@
     "android-webview-oreo-arm64-dbg": "try/android-webview-oreo-arm64-dbg/gn-args.json",
     "android-webview-pie-arm64-dbg": "try/android-webview-pie-arm64-dbg/gn-args.json",
     "android-x64-cast": "try/android-x64-cast/gn-args.json",
-    "android-x86-dual-coverage-exp-rel": "try/android-x86-dual-coverage-exp-rel/gn-args.json",
     "android-x86-rel": "try/android-x86-rel/gn-args.json",
     "android_arm64_dbg_recipe": "try/android_arm64_dbg_recipe/gn-args.json",
     "android_compile_dbg": "try/android_compile_dbg/gn-args.json",
diff --git a/infra/config/generated/builders/try/android-12-x64-dual-coverage-exp-rel-compilator/properties.json b/infra/config/generated/builders/try/android-12-x64-dual-coverage-exp-rel-compilator/properties.json
deleted file mode 100644
index 75247b83c..0000000
--- a/infra/config/generated/builders/try/android-12-x64-dual-coverage-exp-rel-compilator/properties.json
+++ /dev/null
@@ -1,86 +0,0 @@
-{
-  "$build/chromium_tests_builder_config": {
-    "builder_config": {
-      "additional_exclusions": [
-        "infra/config/generated/builders/try/android-12-x64-dual-coverage-exp-rel/gn-args.json"
-      ],
-      "builder_db": {
-        "entries": [
-          {
-            "builder_id": {
-              "bucket": "ci",
-              "builder": "android-12-x64-rel",
-              "project": "chromium"
-            },
-            "builder_spec": {
-              "build_gs_bucket": "chromium-android-archive",
-              "builder_group": "chromium.android",
-              "execution_mode": "COMPILE_AND_TEST",
-              "legacy_android_config": {
-                "config": "x64_builder"
-              },
-              "legacy_chromium_config": {
-                "apply_configs": [
-                  "mb"
-                ],
-                "build_config": "Release",
-                "config": "android",
-                "target_bits": 64,
-                "target_platform": "android"
-              },
-              "legacy_gclient_config": {
-                "apply_configs": [
-                  "android"
-                ],
-                "config": "chromium"
-              }
-            }
-          }
-        ]
-      },
-      "builder_ids": [
-        {
-          "bucket": "ci",
-          "builder": "android-12-x64-rel",
-          "project": "chromium"
-        }
-      ]
-    }
-  },
-  "$build/code_coverage": {
-    "coverage_test_types": [
-      "unit",
-      "overall"
-    ],
-    "use_clang_coverage": true,
-    "use_java_coverage": true
-  },
-  "$build/flakiness": {
-    "check_for_flakiness": true,
-    "check_for_flakiness_with_resultdb": true
-  },
-  "$build/reclient": {
-    "instance": "rbe-chromium-untrusted",
-    "jobs": 500,
-    "metrics_project": "chromium-reclient-metrics",
-    "scandeps_server": true
-  },
-  "$build/siso": {
-    "configs": [
-      "builder"
-    ],
-    "enable_cloud_profiler": true,
-    "enable_cloud_trace": true,
-    "experiments": [],
-    "project": "rbe-chromium-untrusted"
-  },
-  "$recipe_engine/resultdb/test_presentation": {
-    "column_keys": [],
-    "grouping_keys": [
-      "status",
-      "v.test_suite"
-    ]
-  },
-  "builder_group": "tryserver.chromium.android",
-  "recipe": "chromium/compilator"
-}
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/android-12-x64-dual-coverage-exp-rel/gn-args.json b/infra/config/generated/builders/try/android-12-x64-dual-coverage-exp-rel/gn-args.json
deleted file mode 100644
index 1abd33c4..0000000
--- a/infra/config/generated/builders/try/android-12-x64-dual-coverage-exp-rel/gn-args.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-  "gn_args": {
-    "android_static_analysis": "off",
-    "coverage_instrumentation_input_file": "//.code-coverage/files_to_instrument.txt",
-    "dcheck_always_on": true,
-    "debuggable_apks": false,
-    "ffmpeg_branding": "Chrome",
-    "is_component_build": false,
-    "is_debug": false,
-    "proprietary_codecs": true,
-    "skip_secondary_abi_for_cq": true,
-    "strip_debug_info": true,
-    "symbol_level": 0,
-    "system_webview_package_name": "com.google.android.webview.debug",
-    "system_webview_shell_package_name": "org.chromium.my_webview_shell",
-    "target_cpu": "x64",
-    "target_os": "android",
-    "use_clang_coverage": true,
-    "use_dummy_lastchange": true,
-    "use_jacoco_coverage": true,
-    "use_remoteexec": true
-  }
-}
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/android-12-x64-dual-coverage-exp-rel/properties.json b/infra/config/generated/builders/try/android-12-x64-dual-coverage-exp-rel/properties.json
deleted file mode 100644
index 27c4124..0000000
--- a/infra/config/generated/builders/try/android-12-x64-dual-coverage-exp-rel/properties.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "$build/chromium_orchestrator": {
-    "compilator": "android-12-x64-dual-coverage-exp-rel-compilator",
-    "compilator_watcher_git_revision": "e6d08be3fd589d4f222dae5d18dbc972e6117b23"
-  },
-  "$build/chromium_tests_builder_config": {
-    "builder_config": {
-      "additional_exclusions": [
-        "infra/config/generated/builders/try/android-12-x64-dual-coverage-exp-rel/gn-args.json"
-      ],
-      "builder_db": {
-        "entries": [
-          {
-            "builder_id": {
-              "bucket": "ci",
-              "builder": "android-12-x64-rel",
-              "project": "chromium"
-            },
-            "builder_spec": {
-              "build_gs_bucket": "chromium-android-archive",
-              "builder_group": "chromium.android",
-              "execution_mode": "COMPILE_AND_TEST",
-              "legacy_android_config": {
-                "config": "x64_builder"
-              },
-              "legacy_chromium_config": {
-                "apply_configs": [
-                  "mb"
-                ],
-                "build_config": "Release",
-                "config": "android",
-                "target_bits": 64,
-                "target_platform": "android"
-              },
-              "legacy_gclient_config": {
-                "apply_configs": [
-                  "android"
-                ],
-                "config": "chromium"
-              }
-            }
-          }
-        ]
-      },
-      "builder_ids": [
-        {
-          "bucket": "ci",
-          "builder": "android-12-x64-rel",
-          "project": "chromium"
-        }
-      ]
-    }
-  },
-  "$build/code_coverage": {
-    "coverage_test_types": [
-      "unit",
-      "overall"
-    ],
-    "use_clang_coverage": true,
-    "use_java_coverage": true
-  },
-  "$build/flakiness": {
-    "check_for_flakiness": true,
-    "check_for_flakiness_with_resultdb": true
-  },
-  "$recipe_engine/resultdb/test_presentation": {
-    "column_keys": [],
-    "grouping_keys": [
-      "status",
-      "v.test_suite"
-    ]
-  },
-  "builder_group": "tryserver.chromium.android",
-  "cq": "required",
-  "recipe": "chromium/orchestrator"
-}
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/android-x86-dual-coverage-exp-rel-compilator/properties.json b/infra/config/generated/builders/try/android-x86-dual-coverage-exp-rel-compilator/properties.json
deleted file mode 100644
index 8f61672..0000000
--- a/infra/config/generated/builders/try/android-x86-dual-coverage-exp-rel-compilator/properties.json
+++ /dev/null
@@ -1,84 +0,0 @@
-{
-  "$build/chromium_tests_builder_config": {
-    "builder_config": {
-      "additional_exclusions": [
-        "infra/config/generated/builders/try/android-x86-dual-coverage-exp-rel/gn-args.json"
-      ],
-      "builder_db": {
-        "entries": [
-          {
-            "builder_id": {
-              "bucket": "ci",
-              "builder": "android-oreo-x86-rel",
-              "project": "chromium"
-            },
-            "builder_spec": {
-              "build_gs_bucket": "chromium-android-archive",
-              "builder_group": "chromium.android",
-              "execution_mode": "COMPILE_AND_TEST",
-              "legacy_android_config": {
-                "config": "x86_builder_mb"
-              },
-              "legacy_chromium_config": {
-                "build_config": "Release",
-                "config": "android",
-                "target_bits": 32,
-                "target_platform": "android"
-              },
-              "legacy_gclient_config": {
-                "apply_configs": [
-                  "android",
-                  "enable_wpr_tests"
-                ],
-                "config": "chromium"
-              }
-            }
-          }
-        ]
-      },
-      "builder_ids": [
-        {
-          "bucket": "ci",
-          "builder": "android-oreo-x86-rel",
-          "project": "chromium"
-        }
-      ]
-    }
-  },
-  "$build/code_coverage": {
-    "coverage_test_types": [
-      "unit",
-      "overall"
-    ],
-    "use_clang_coverage": true,
-    "use_java_coverage": true
-  },
-  "$build/flakiness": {
-    "check_for_flakiness": true,
-    "check_for_flakiness_with_resultdb": true
-  },
-  "$build/reclient": {
-    "instance": "rbe-chromium-untrusted",
-    "jobs": 500,
-    "metrics_project": "chromium-reclient-metrics",
-    "scandeps_server": true
-  },
-  "$build/siso": {
-    "configs": [
-      "builder"
-    ],
-    "enable_cloud_profiler": true,
-    "enable_cloud_trace": true,
-    "experiments": [],
-    "project": "rbe-chromium-untrusted"
-  },
-  "$recipe_engine/resultdb/test_presentation": {
-    "column_keys": [],
-    "grouping_keys": [
-      "status",
-      "v.test_suite"
-    ]
-  },
-  "builder_group": "tryserver.chromium.android",
-  "recipe": "chromium/compilator"
-}
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/android-x86-dual-coverage-exp-rel/gn-args.json b/infra/config/generated/builders/try/android-x86-dual-coverage-exp-rel/gn-args.json
deleted file mode 100644
index fd52a171..0000000
--- a/infra/config/generated/builders/try/android-x86-dual-coverage-exp-rel/gn-args.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-  "gn_args": {
-    "android_static_analysis": "off",
-    "coverage_instrumentation_input_file": "//.code-coverage/files_to_instrument.txt",
-    "dcheck_always_on": true,
-    "debuggable_apks": false,
-    "ffmpeg_branding": "Chrome",
-    "is_component_build": false,
-    "is_debug": false,
-    "proprietary_codecs": true,
-    "strip_debug_info": true,
-    "symbol_level": 0,
-    "system_webview_package_name": "com.google.android.apps.chrome",
-    "system_webview_shell_package_name": "org.chromium.my_webview_shell",
-    "target_cpu": "x86",
-    "target_os": "android",
-    "use_clang_coverage": true,
-    "use_dummy_lastchange": true,
-    "use_jacoco_coverage": true,
-    "use_remoteexec": true
-  }
-}
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/android-x86-dual-coverage-exp-rel/properties.json b/infra/config/generated/builders/try/android-x86-dual-coverage-exp-rel/properties.json
deleted file mode 100644
index 64b3f4c..0000000
--- a/infra/config/generated/builders/try/android-x86-dual-coverage-exp-rel/properties.json
+++ /dev/null
@@ -1,74 +0,0 @@
-{
-  "$build/chromium_orchestrator": {
-    "compilator": "android-x86-dual-coverage-exp-rel-compilator",
-    "compilator_watcher_git_revision": "e6d08be3fd589d4f222dae5d18dbc972e6117b23"
-  },
-  "$build/chromium_tests_builder_config": {
-    "builder_config": {
-      "additional_exclusions": [
-        "infra/config/generated/builders/try/android-x86-dual-coverage-exp-rel/gn-args.json"
-      ],
-      "builder_db": {
-        "entries": [
-          {
-            "builder_id": {
-              "bucket": "ci",
-              "builder": "android-oreo-x86-rel",
-              "project": "chromium"
-            },
-            "builder_spec": {
-              "build_gs_bucket": "chromium-android-archive",
-              "builder_group": "chromium.android",
-              "execution_mode": "COMPILE_AND_TEST",
-              "legacy_android_config": {
-                "config": "x86_builder_mb"
-              },
-              "legacy_chromium_config": {
-                "build_config": "Release",
-                "config": "android",
-                "target_bits": 32,
-                "target_platform": "android"
-              },
-              "legacy_gclient_config": {
-                "apply_configs": [
-                  "android",
-                  "enable_wpr_tests"
-                ],
-                "config": "chromium"
-              }
-            }
-          }
-        ]
-      },
-      "builder_ids": [
-        {
-          "bucket": "ci",
-          "builder": "android-oreo-x86-rel",
-          "project": "chromium"
-        }
-      ]
-    }
-  },
-  "$build/code_coverage": {
-    "coverage_test_types": [
-      "unit",
-      "overall"
-    ],
-    "use_clang_coverage": true,
-    "use_java_coverage": true
-  },
-  "$build/flakiness": {
-    "check_for_flakiness": true,
-    "check_for_flakiness_with_resultdb": true
-  },
-  "$recipe_engine/resultdb/test_presentation": {
-    "column_keys": [],
-    "grouping_keys": [
-      "status",
-      "v.test_suite"
-    ]
-  },
-  "builder_group": "tryserver.chromium.android",
-  "cq": "required",
-  "recipe": "chromium/orchestrator"
-}
\ No newline at end of file
diff --git a/infra/config/generated/cq-builders.md b/infra/config/generated/cq-builders.md
index 2b608a75..5b4bf35 100644
--- a/infra/config/generated/cq-builders.md
+++ b/infra/config/generated/cq-builders.md
@@ -597,18 +597,12 @@
 as required builders.
 
 ### chromium
-* [android-12-x64-dual-coverage-exp-rel](https://ci.chromium.org/p/chromium/builders/try/android-12-x64-dual-coverage-exp-rel) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""android-12-x64-dual-coverage-exp-rel""))
-  * Experiment percentage: 10.0
-
 * [android-arm64-siso-rel](https://ci.chromium.org/p/chromium/builders/try/android-arm64-siso-rel) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""android-arm64-siso-rel""))
   * Experiment percentage: 5.0
 
 * [android-binary-size-siso](https://ci.chromium.org/p/chromium/builders/try/android-binary-size-siso) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""android-binary-size-siso""))
   * Experiment percentage: 10.0
 
-* [android-x86-dual-coverage-exp-rel](https://ci.chromium.org/p/chromium/builders/try/android-x86-dual-coverage-exp-rel) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""android-x86-dual-coverage-exp-rel""))
-  * Experiment percentage: 10.0
-
 * [android_compile_siso_dbg](https://ci.chromium.org/p/chromium/builders/try/android_compile_siso_dbg) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""android_compile_siso_dbg""))
   * Experiment percentage: 10.0
 
diff --git a/infra/config/generated/cq-usage/mega_cq_bots.txt b/infra/config/generated/cq-usage/mega_cq_bots.txt
index 1c62d069..fc39f21 100644
--- a/infra/config/generated/cq-usage/mega_cq_bots.txt
+++ b/infra/config/generated/cq-usage/mega_cq_bots.txt
@@ -1,6 +1,5 @@
 chromium/try/android-10-arm64-rel
 chromium/try/android-12-x64-dbg
-chromium/try/android-12-x64-dual-coverage-exp-rel
 chromium/try/android-12-x64-rel
 chromium/try/android-12l-x64-dbg
 chromium/try/android-arm-compile-dbg
@@ -22,7 +21,6 @@
 chromium/try/android-webview-oreo-arm64-dbg
 chromium/try/android-webview-pie-arm64-dbg
 chromium/try/android-x64-cast
-chromium/try/android-x86-dual-coverage-exp-rel
 chromium/try/android-x86-rel
 chromium/try/android_arm64_dbg_recipe
 chromium/try/android_compile_dbg
diff --git a/infra/config/generated/luci/commit-queue.cfg b/infra/config/generated/luci/commit-queue.cfg
index 0320471c..fcad6705 100644
--- a/infra/config/generated/luci/commit-queue.cfg
+++ b/infra/config/generated/luci/commit-queue.cfg
@@ -434,33 +434,6 @@
         includable_only: true
       }
       builders {
-        name: "chromium/try/android-12-x64-dual-coverage-exp-rel"
-        experiment_percentage: 10
-        location_filters {
-          gerrit_host_regexp: ".*"
-          gerrit_project_regexp: ".*"
-          path_regexp: "docs/.+"
-          exclude: true
-        }
-        location_filters {
-          gerrit_host_regexp: ".*"
-          gerrit_project_regexp: ".*"
-          path_regexp: "infra/config/.+"
-          exclude: true
-        }
-        location_filters {
-          gerrit_host_regexp: ".*"
-          gerrit_project_regexp: ".*"
-          path_regexp: "infra/config/generated/builders/try/android-12-x64-dual-coverage-exp-rel/.+"
-        }
-        mode_allowlist: "DRY_RUN"
-        mode_allowlist: "FULL_RUN"
-      }
-      builders {
-        name: "chromium/try/android-12-x64-dual-coverage-exp-rel-compilator"
-        includable_only: true
-      }
-      builders {
         name: "chromium/try/android-12-x64-rel"
         location_filters {
           gerrit_host_regexp: ".*"
@@ -1105,33 +1078,6 @@
         mode_allowlist: "FULL_RUN"
       }
       builders {
-        name: "chromium/try/android-x86-dual-coverage-exp-rel"
-        experiment_percentage: 10
-        location_filters {
-          gerrit_host_regexp: ".*"
-          gerrit_project_regexp: ".*"
-          path_regexp: "docs/.+"
-          exclude: true
-        }
-        location_filters {
-          gerrit_host_regexp: ".*"
-          gerrit_project_regexp: ".*"
-          path_regexp: "infra/config/.+"
-          exclude: true
-        }
-        location_filters {
-          gerrit_host_regexp: ".*"
-          gerrit_project_regexp: ".*"
-          path_regexp: "infra/config/generated/builders/try/android-x86-dual-coverage-exp-rel/.+"
-        }
-        mode_allowlist: "DRY_RUN"
-        mode_allowlist: "FULL_RUN"
-      }
-      builders {
-        name: "chromium/try/android-x86-dual-coverage-exp-rel-compilator"
-        includable_only: true
-      }
-      builders {
         name: "chromium/try/android-x86-rel"
         location_filters {
           gerrit_host_regexp: ".*"
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg
index d7169fd..cf14537 100644
--- a/infra/config/generated/luci/cr-buildbucket.cfg
+++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -28719,7 +28719,7 @@
           use_invocation_timestamp: true
         }
       }
-      description_html: "This builder is mirrored by any of the following try builders:<br/><ul><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android-12-x64-dual-coverage-exp-rel\">android-12-x64-dual-coverage-exp-rel</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android-12-x64-rel\">android-12-x64-rel</a></li></ul>"
+      description_html: "This builder is mirrored by any of the following try builders:<br/><ul><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android-12-x64-rel\">android-12-x64-rel</a></li></ul>"
       shadow_builder_adjustments {
         service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
         pool: "luci.chromium.try"
@@ -33553,7 +33553,7 @@
           use_invocation_timestamp: true
         }
       }
-      description_html: "This builder is mirrored by any of the following try builders:<br/><ul><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android-oreo-x86-rel\">android-oreo-x86-rel</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android-x86-dual-coverage-exp-rel\">android-x86-dual-coverage-exp-rel</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android-x86-rel\">android-x86-rel</a></li></ul>"
+      description_html: "This builder is mirrored by any of the following try builders:<br/><ul><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android-oreo-x86-rel\">android-oreo-x86-rel</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/try/android-x86-rel\">android-x86-rel</a></li></ul>"
       shadow_builder_adjustments {
         service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
         pool: "luci.chromium.try"
@@ -56868,6 +56868,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -56949,6 +56953,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -57030,6 +57038,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -57110,6 +57122,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -57191,6 +57207,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -57268,6 +57288,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -57348,6 +57372,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -57429,6 +57457,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -57509,6 +57541,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -62151,6 +62187,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -62231,6 +62271,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -62312,6 +62356,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -62404,6 +62452,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -62495,6 +62547,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -62586,6 +62642,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -62621,189 +62681,6 @@
       description_html: "This builder mirrors the following CI builders:<br/><ul><li><a href=\"https://ci.chromium.org/p/chromium/builders/ci/Android x64 Builder (dbg)\">Android x64 Builder (dbg)</a></li><li><a href=\"https://ci.chromium.org/p/chromium/builders/ci/android-12-x64-dbg-tests\">android-12-x64-dbg-tests</a></li></ul>"
     }
     builders {
-      name: "android-12-x64-dual-coverage-exp-rel"
-      swarming_host: "chromium-swarm.appspot.com"
-      dimensions: "builder:android-12-x64-dual-coverage-exp-rel"
-      dimensions: "cores:4"
-      dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-22.04"
-      dimensions: "pool:luci.chromium.try"
-      exe {
-        cipd_package: "infra/chromium/bootstrapper/${platform}"
-        cipd_version: "latest"
-        cmd: "bootstrapper"
-      }
-      properties:
-        '{'
-        '  "$bootstrap/exe": {'
-        '    "exe": {'
-        '      "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
-        '      "cipd_version": "refs/heads/main",'
-        '      "cmd": ['
-        '        "luciexe"'
-        '      ]'
-        '    }'
-        '  },'
-        '  "$bootstrap/properties": {'
-        '    "properties_file": "infra/config/generated/builders/try/android-12-x64-dual-coverage-exp-rel/properties.json",'
-        '    "top_level_project": {'
-        '      "ref": "refs/heads/main",'
-        '      "repo": {'
-        '        "host": "chromium.googlesource.com",'
-        '        "project": "chromium/src"'
-        '      }'
-        '    }'
-        '  },'
-        '  "builder_group": "tryserver.chromium.android",'
-        '  "cq": "required",'
-        '  "led_builder_is_bootstrapped": true,'
-        '  "recipe": "chromium/orchestrator"'
-        '}'
-      execution_timeout_secs: 14400
-      expiration_secs: 7200
-      grace_period {
-        seconds: 120
-      }
-      build_numbers: YES
-      service_account: "chromium-orchestrator@chops-service-accounts.iam.gserviceaccount.com"
-      task_template_canary_percentage {
-        value: 5
-      }
-      experiments {
-        key: "chromium_swarming.expose_merge_script_failures"
-        value: 100
-      }
-      experiments {
-        key: "luci.recipes.use_python3"
-        value: 100
-      }
-      resultdb {
-        enable: true
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "try_test_results"
-          test_results {}
-        }
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "gpu_try_test_results"
-          test_results {
-            predicate {
-              test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
-            }
-          }
-        }
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "blink_web_tests_try_test_results"
-          test_results {
-            predicate {
-              test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*_wpt_tests/.+)"
-            }
-          }
-        }
-        history_options {
-          use_invocation_timestamp: true
-        }
-      }
-      description_html: "This builder shadows android-12-x64-rel builder to experiment both jacoco and clang coverage enabled builds.\n<br/>This builder mirrors the following CI builders:<br/><ul><li><a href=\"https://ci.chromium.org/p/chromium/builders/ci/android-12-x64-rel\">android-12-x64-rel</a></li></ul><br/>This is the orchestrator half of an orchestrator + compilator pair of builders. The compilator is <a href=\"https://ci.chromium.org/p/chromium/builders/try/android-12-x64-dual-coverage-exp-rel-compilator\">android-12-x64-dual-coverage-exp-rel-compilator</a>."
-    }
-    builders {
-      name: "android-12-x64-dual-coverage-exp-rel-compilator"
-      swarming_host: "chromium-swarm.appspot.com"
-      dimensions: "builder:android-12-x64-dual-coverage-exp-rel-compilator"
-      dimensions: "cores:32"
-      dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-22.04"
-      dimensions: "pool:luci.chromium.try"
-      dimensions: "ssd:1"
-      exe {
-        cipd_package: "infra/chromium/bootstrapper/${platform}"
-        cipd_version: "latest"
-        cmd: "bootstrapper"
-      }
-      properties:
-        '{'
-        '  "$bootstrap/exe": {'
-        '    "exe": {'
-        '      "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
-        '      "cipd_version": "refs/heads/main",'
-        '      "cmd": ['
-        '        "luciexe"'
-        '      ]'
-        '    }'
-        '  },'
-        '  "$bootstrap/properties": {'
-        '    "properties_file": "infra/config/generated/builders/try/android-12-x64-dual-coverage-exp-rel-compilator/properties.json",'
-        '    "top_level_project": {'
-        '      "ref": "refs/heads/main",'
-        '      "repo": {'
-        '        "host": "chromium.googlesource.com",'
-        '        "project": "chromium/src"'
-        '      }'
-        '    }'
-        '  },'
-        '  "builder_group": "tryserver.chromium.android",'
-        '  "led_builder_is_bootstrapped": true,'
-        '  "recipe": "chromium/compilator"'
-        '}'
-      execution_timeout_secs: 14400
-      expiration_secs: 7200
-      grace_period {
-        seconds: 120
-      }
-      build_numbers: YES
-      service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
-      task_template_canary_percentage {
-        value: 5
-      }
-      experiments {
-        key: "chromium_swarming.expose_merge_script_failures"
-        value: 100
-      }
-      experiments {
-        key: "luci.recipes.use_python3"
-        value: 100
-      }
-      resultdb {
-        enable: true
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "try_test_results"
-          test_results {}
-        }
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "gpu_try_test_results"
-          test_results {
-            predicate {
-              test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
-            }
-          }
-        }
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "blink_web_tests_try_test_results"
-          test_results {
-            predicate {
-              test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*_wpt_tests/.+)"
-            }
-          }
-        }
-        history_options {
-          use_invocation_timestamp: true
-        }
-      }
-      description_html: "This is the compilator half of an orchestrator + compilator pair of builders. The orchestrator is <a href=\"https://ci.chromium.org/p/chromium/builders/try/android-12-x64-dual-coverage-exp-rel\">android-12-x64-dual-coverage-exp-rel</a>."
-      contact_team_email: "clank-engprod@google.com"
-    }
-    builders {
       name: "android-12-x64-rel"
       swarming_host: "chromium-swarm.appspot.com"
       dimensions: "builder:android-12-x64-rel"
@@ -62864,6 +62741,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -62955,6 +62836,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -63046,6 +62931,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -63137,6 +63026,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -63303,6 +63196,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -63394,6 +63291,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -63485,6 +63386,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -63584,6 +63489,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -63675,6 +63584,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -63766,6 +63679,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -63857,6 +63774,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -63948,6 +63869,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -64039,6 +63964,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -64142,6 +64071,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -64253,6 +64186,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -64345,6 +64282,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -64436,6 +64377,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -64520,6 +64465,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -64610,6 +64559,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -64702,6 +64655,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -64793,6 +64750,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -64885,6 +64846,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -64977,6 +64942,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -65069,6 +65038,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -65161,6 +65134,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -65253,6 +65230,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -65345,6 +65326,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -65437,6 +65422,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -65529,6 +65518,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -65621,6 +65614,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -65713,6 +65710,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -65805,6 +65806,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -65897,6 +65902,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -65990,6 +65999,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -66082,6 +66095,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -66174,6 +66191,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -66266,6 +66287,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -66358,6 +66383,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -66450,6 +66479,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -66543,6 +66576,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -66635,6 +66672,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -66727,6 +66768,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -66819,6 +66864,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -66911,6 +66960,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -67003,6 +67056,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -67093,6 +67150,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -67183,6 +67244,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -67268,6 +67333,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -67351,6 +67420,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -67441,6 +67514,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -67532,6 +67609,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -67624,6 +67705,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -67715,6 +67800,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -67806,6 +67895,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -67897,6 +67990,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -67988,6 +68085,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -68079,6 +68180,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -68170,6 +68275,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -68261,6 +68370,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -68352,6 +68465,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -68443,6 +68560,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -68534,6 +68655,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -68625,6 +68750,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -68716,6 +68845,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -68807,6 +68940,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -68898,6 +69035,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -68933,194 +69074,6 @@
       description_html: "This builder mirrors the following CI builders:<br/><ul><li><a href=\"https://ci.chromium.org/p/chromium/builders/ci/Cast Android (dbg)\">Cast Android (dbg)</a></li></ul>"
     }
     builders {
-      name: "android-x86-dual-coverage-exp-rel"
-      swarming_host: "chromium-swarm.appspot.com"
-      dimensions: "builder:android-x86-dual-coverage-exp-rel"
-      dimensions: "cores:4"
-      dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-22.04"
-      dimensions: "pool:luci.chromium.try"
-      exe {
-        cipd_package: "infra/chromium/bootstrapper/${platform}"
-        cipd_version: "latest"
-        cmd: "bootstrapper"
-      }
-      properties:
-        '{'
-        '  "$bootstrap/exe": {'
-        '    "exe": {'
-        '      "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
-        '      "cipd_version": "refs/heads/main",'
-        '      "cmd": ['
-        '        "luciexe"'
-        '      ]'
-        '    }'
-        '  },'
-        '  "$bootstrap/properties": {'
-        '    "properties_file": "infra/config/generated/builders/try/android-x86-dual-coverage-exp-rel/properties.json",'
-        '    "top_level_project": {'
-        '      "ref": "refs/heads/main",'
-        '      "repo": {'
-        '        "host": "chromium.googlesource.com",'
-        '        "project": "chromium/src"'
-        '      }'
-        '    }'
-        '  },'
-        '  "builder_group": "tryserver.chromium.android",'
-        '  "cq": "required",'
-        '  "led_builder_is_bootstrapped": true,'
-        '  "recipe": "chromium/orchestrator"'
-        '}'
-      execution_timeout_secs: 14400
-      expiration_secs: 7200
-      grace_period {
-        seconds: 120
-      }
-      build_numbers: YES
-      service_account: "chromium-orchestrator@chops-service-accounts.iam.gserviceaccount.com"
-      task_template_canary_percentage {
-        value: 5
-      }
-      experiments {
-        key: "chromium.add_one_test_shard"
-        value: 10
-      }
-      experiments {
-        key: "chromium_swarming.expose_merge_script_failures"
-        value: 100
-      }
-      experiments {
-        key: "luci.recipes.use_python3"
-        value: 100
-      }
-      resultdb {
-        enable: true
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "try_test_results"
-          test_results {}
-        }
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "gpu_try_test_results"
-          test_results {
-            predicate {
-              test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
-            }
-          }
-        }
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "blink_web_tests_try_test_results"
-          test_results {
-            predicate {
-              test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*_wpt_tests/.+)"
-            }
-          }
-        }
-        history_options {
-          use_invocation_timestamp: true
-        }
-      }
-      description_html: "This builder is similar to \"try/android-x86-rel\", but experiment both jacoco and clang coverage enabled builds.\n<br/>This builder mirrors the following CI builders:<br/><ul><li><a href=\"https://ci.chromium.org/p/chromium/builders/ci/android-oreo-x86-rel\">android-oreo-x86-rel</a></li></ul><br/>This is the orchestrator half of an orchestrator + compilator pair of builders. The compilator is <a href=\"https://ci.chromium.org/p/chromium/builders/try/android-x86-dual-coverage-exp-rel-compilator\">android-x86-dual-coverage-exp-rel-compilator</a>."
-      contact_team_email: "clank-engprod@google.com"
-    }
-    builders {
-      name: "android-x86-dual-coverage-exp-rel-compilator"
-      swarming_host: "chromium-swarm.appspot.com"
-      dimensions: "builder:android-x86-dual-coverage-exp-rel-compilator"
-      dimensions: "cores:64"
-      dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-22.04"
-      dimensions: "pool:luci.chromium.try"
-      dimensions: "ssd:1"
-      exe {
-        cipd_package: "infra/chromium/bootstrapper/${platform}"
-        cipd_version: "latest"
-        cmd: "bootstrapper"
-      }
-      properties:
-        '{'
-        '  "$bootstrap/exe": {'
-        '    "exe": {'
-        '      "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
-        '      "cipd_version": "refs/heads/main",'
-        '      "cmd": ['
-        '        "luciexe"'
-        '      ]'
-        '    }'
-        '  },'
-        '  "$bootstrap/properties": {'
-        '    "properties_file": "infra/config/generated/builders/try/android-x86-dual-coverage-exp-rel-compilator/properties.json",'
-        '    "top_level_project": {'
-        '      "ref": "refs/heads/main",'
-        '      "repo": {'
-        '        "host": "chromium.googlesource.com",'
-        '        "project": "chromium/src"'
-        '      }'
-        '    }'
-        '  },'
-        '  "builder_group": "tryserver.chromium.android",'
-        '  "led_builder_is_bootstrapped": true,'
-        '  "recipe": "chromium/compilator"'
-        '}'
-      execution_timeout_secs: 14400
-      expiration_secs: 7200
-      grace_period {
-        seconds: 120
-      }
-      build_numbers: YES
-      service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
-      task_template_canary_percentage {
-        value: 5
-      }
-      experiments {
-        key: "chromium_swarming.expose_merge_script_failures"
-        value: 100
-      }
-      experiments {
-        key: "luci.recipes.use_python3"
-        value: 100
-      }
-      resultdb {
-        enable: true
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "try_test_results"
-          test_results {}
-        }
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "gpu_try_test_results"
-          test_results {
-            predicate {
-              test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
-            }
-          }
-        }
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "blink_web_tests_try_test_results"
-          test_results {
-            predicate {
-              test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*_wpt_tests/.+)"
-            }
-          }
-        }
-        history_options {
-          use_invocation_timestamp: true
-        }
-      }
-      description_html: "This is the compilator half of an orchestrator + compilator pair of builders. The orchestrator is <a href=\"https://ci.chromium.org/p/chromium/builders/try/android-x86-dual-coverage-exp-rel\">android-x86-dual-coverage-exp-rel</a>."
-      contact_team_email: "clank-engprod@google.com"
-    }
-    builders {
       name: "android-x86-rel"
       swarming_host: "chromium-swarm.appspot.com"
       dimensions: "builder:android-x86-rel"
@@ -69181,6 +69134,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -69273,6 +69230,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -69365,6 +69326,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -69456,6 +69421,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -69547,6 +69516,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -69639,6 +69612,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -69732,6 +69709,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -69824,6 +69805,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -69915,6 +69900,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -70007,6 +69996,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -70098,6 +70091,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -70177,6 +70174,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -70268,6 +70269,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -70359,6 +70364,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -70451,6 +70460,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -70542,6 +70555,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -70633,6 +70650,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -70730,6 +70751,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -70821,6 +70846,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -70913,6 +70942,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -71010,6 +71043,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -71107,6 +71144,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -71203,6 +71244,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -71299,6 +71344,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -71390,6 +71439,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -71481,6 +71534,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -71572,6 +71629,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -71663,6 +71724,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -71754,6 +71819,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -71845,6 +71914,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -71937,6 +72010,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -72029,6 +72106,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -72120,6 +72201,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -72204,6 +72289,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -72293,6 +72382,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -72384,6 +72477,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -72475,6 +72572,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -72566,6 +72667,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -72657,6 +72762,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -72747,6 +72856,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -72837,6 +72950,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -72927,6 +73044,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -73017,6 +73138,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -73108,6 +73233,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -73199,6 +73328,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -73290,6 +73423,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -73381,6 +73518,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -73471,6 +73612,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -73562,6 +73707,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -73653,6 +73802,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -73781,6 +73934,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -73873,6 +74030,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -73970,6 +74131,10 @@
         value: 100
       }
       experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
+      experiments {
         key: "weetbix.enable_weetbix_exonerations"
         value: 100
       }
@@ -74073,6 +74238,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -74177,6 +74346,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -74262,6 +74435,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -74352,6 +74529,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -74444,6 +74625,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -74528,6 +74713,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -74618,6 +74807,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -74709,6 +74902,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -74801,6 +74998,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -74892,6 +75093,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -74984,6 +75189,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -75076,6 +75285,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -75175,6 +75388,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -75266,6 +75483,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -75362,6 +75583,10 @@
         value: 100
       }
       experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
+      experiments {
         key: "weetbix.enable_weetbix_exonerations"
         value: 100
       }
@@ -75452,6 +75677,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -75544,6 +75773,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -75631,6 +75864,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -75719,6 +75956,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -75807,6 +76048,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -75895,6 +76140,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -75983,6 +76232,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -76071,6 +76324,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -76159,6 +76416,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -76247,6 +76508,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -76335,6 +76600,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -76423,6 +76692,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -76511,6 +76784,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -76599,6 +76876,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -76687,6 +76968,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -76775,6 +77060,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -76863,6 +77152,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -76950,6 +77243,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -77037,6 +77334,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -77124,6 +77425,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -77211,6 +77516,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -77298,6 +77607,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -77385,6 +77698,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -77472,6 +77789,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -77559,6 +77880,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -77646,6 +77971,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -77733,6 +78062,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -77820,6 +78153,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -77907,6 +78244,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -77994,6 +78335,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -78081,6 +78426,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -78169,6 +78518,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -78257,6 +78610,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -78345,6 +78702,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -78433,6 +78794,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -78521,6 +78886,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -78609,6 +78978,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -78697,6 +79070,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -78785,6 +79162,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -78873,6 +79254,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -78961,6 +79346,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -79049,6 +79438,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -79137,6 +79530,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -79224,6 +79621,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -79311,6 +79712,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -79399,6 +79804,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -79571,6 +79980,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -79664,6 +80077,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -79757,6 +80174,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -79850,6 +80271,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -79943,6 +80368,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -80036,6 +80465,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -80129,6 +80562,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -80224,6 +80661,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -80317,6 +80758,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -80410,6 +80855,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -80504,6 +80953,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -80597,6 +81050,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -80691,6 +81148,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -80786,6 +81247,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -80881,6 +81346,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -80975,6 +81444,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -81068,6 +81541,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -81161,6 +81638,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -81254,6 +81735,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -81347,6 +81832,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -81438,6 +81927,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -81530,6 +82023,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -81622,6 +82119,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -81713,6 +82214,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -81805,6 +82310,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -81896,6 +82405,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -81988,6 +82501,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -82079,6 +82596,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -82171,6 +82692,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -82262,6 +82787,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -82345,6 +82874,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -82548,6 +83081,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -82639,6 +83176,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -82731,6 +83272,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -82822,6 +83367,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -82913,6 +83462,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -83004,6 +83557,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -83095,6 +83652,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -83186,6 +83747,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -83277,6 +83842,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -83368,6 +83937,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -83459,6 +84032,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -83550,6 +84127,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -83641,6 +84222,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -83732,6 +84317,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -83815,6 +84404,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -83906,6 +84499,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -83997,6 +84594,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -84088,6 +84689,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -84171,6 +84776,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -84261,6 +84870,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -84352,6 +84965,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -84444,6 +85061,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -84536,6 +85157,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -84635,6 +85260,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -84726,6 +85355,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -84809,6 +85442,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -84899,6 +85536,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -84991,6 +85632,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -85080,6 +85725,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -85172,6 +85821,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -85263,6 +85916,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -85354,6 +86011,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -85445,6 +86106,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -85536,6 +86201,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -85627,6 +86296,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -85718,6 +86391,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -85810,6 +86487,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -85901,6 +86582,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -85993,6 +86678,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -86084,6 +86773,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -86168,6 +86861,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -86258,6 +86955,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -86349,6 +87050,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -86440,6 +87145,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -86535,6 +87244,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -86626,6 +87339,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -86717,6 +87434,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -86808,6 +87529,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -86894,6 +87619,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -86984,6 +87713,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -87075,6 +87808,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -87166,6 +87903,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -87257,6 +87998,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -87348,6 +88093,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -87440,6 +88189,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -87539,6 +88292,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -87630,6 +88387,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -87725,6 +88486,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -87816,6 +88581,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -87907,6 +88676,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -88002,6 +88775,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -88093,6 +88870,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -88181,6 +88962,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -88269,6 +89054,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -88393,6 +89182,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -88481,6 +89274,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -88569,6 +89366,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -88660,6 +89461,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -88751,6 +89556,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -88842,6 +89651,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -88933,6 +89746,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -89024,6 +89841,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -89115,6 +89936,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -89206,6 +90031,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -89297,6 +90126,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -89389,6 +90222,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -89480,6 +90317,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -89570,6 +90411,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -89661,6 +90506,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -89752,6 +90601,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -89843,6 +90696,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -89934,6 +90791,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -90025,6 +90886,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -90116,6 +90981,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -90207,6 +91076,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -90298,6 +91171,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -90390,6 +91267,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -90481,6 +91362,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -90580,6 +91465,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -90671,6 +91560,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -90766,6 +91659,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -90857,6 +91754,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -90949,6 +91850,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -91040,6 +91945,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -91131,6 +92040,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -91215,6 +92128,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -91309,6 +92226,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -91400,6 +92321,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -91496,6 +92421,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -91593,6 +92522,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -91684,6 +92617,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -91779,6 +92716,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -91870,6 +92811,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -91965,6 +92910,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -92056,6 +93005,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -92147,6 +93100,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -92229,6 +93186,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -92311,6 +93272,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -92516,6 +93481,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -92606,6 +93575,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -92696,6 +93669,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -92785,6 +93762,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -92874,6 +93855,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -92964,6 +93949,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -93052,6 +94041,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -93141,6 +94134,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -93231,6 +94228,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -93320,6 +94321,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -93411,6 +94416,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -93501,6 +94510,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -93590,6 +94603,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -93680,6 +94697,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -93770,6 +94791,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -93865,6 +94890,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -93954,6 +94983,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -94043,6 +95076,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -94132,6 +95169,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -94227,6 +95268,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -94318,6 +95363,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -94405,6 +95454,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -94495,6 +95548,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -94585,6 +95642,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -94675,6 +95736,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -94764,6 +95829,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -94854,6 +95923,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -94944,6 +96017,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -95034,6 +96111,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -95124,6 +96205,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -95213,6 +96298,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -95302,6 +96391,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -95392,6 +96485,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -95482,6 +96579,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -95572,6 +96673,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -95662,6 +96767,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -95751,6 +96860,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -95841,6 +96954,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -95931,6 +97048,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -96021,6 +97142,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -96111,6 +97236,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -96200,6 +97329,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -96290,6 +97423,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -96380,6 +97517,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -96469,6 +97610,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -96559,6 +97704,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -96649,6 +97798,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -96740,6 +97893,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -96830,6 +97987,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -96920,6 +98081,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -97010,6 +98175,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -97091,6 +98260,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -97172,6 +98345,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -97253,6 +98430,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -97334,6 +98515,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -97411,6 +98596,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -97503,6 +98692,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -97594,6 +98787,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -97672,6 +98869,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -97751,6 +98952,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -97838,6 +99043,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -97920,6 +99129,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -98002,6 +99215,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -98084,6 +99301,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -98287,6 +99508,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -98414,6 +99639,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -98505,6 +99734,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -98596,6 +99829,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -98687,6 +99924,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -98778,6 +100019,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -98866,6 +100111,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -98956,6 +100205,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -99046,6 +100299,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -99138,6 +100395,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -99226,6 +100487,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -99316,6 +100581,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -99407,6 +100676,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -99491,6 +100764,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -99589,6 +100866,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -99680,6 +100961,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -99718,7 +101003,7 @@
       name: "win-rel-compilator"
       swarming_host: "chromium-swarm.appspot.com"
       dimensions: "builder:win-rel-compilator"
-      dimensions: "cores:16|32"
+      dimensions: "cores:32"
       dimensions: "cpu:x86-64"
       dimensions: "os:Windows-10"
       dimensions: "pool:luci.chromium.try"
@@ -99771,6 +101056,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -99862,6 +101151,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -99953,6 +101246,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -100048,6 +101345,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -100139,6 +101440,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -100227,6 +101532,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -100351,6 +101660,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -100475,6 +101788,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -100563,6 +101880,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -100651,6 +101972,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -100743,6 +102068,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -100835,6 +102164,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -100919,6 +102252,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -101009,6 +102346,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -101100,6 +102441,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -101191,6 +102536,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -101282,6 +102631,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -101372,6 +102725,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -101462,6 +102819,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -101552,6 +102913,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -101644,6 +103009,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -101735,6 +103104,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -101827,6 +103200,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -101919,6 +103296,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -102010,6 +103391,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -102101,6 +103486,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -102192,6 +103581,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -102268,6 +103661,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
@@ -102344,6 +103741,10 @@
         key: "luci.recipes.use_python3"
         value: 100
       }
+      experiments {
+        key: "swarming.prpc.cli"
+        value: 5
+      }
       resultdb {
         enable: true
         bq_exports {
diff --git a/infra/config/generated/luci/luci-milo.cfg b/infra/config/generated/luci/luci-milo.cfg
index deaacda3..d9dfcd0 100644
--- a/infra/config/generated/luci/luci-milo.cfg
+++ b/infra/config/generated/luci/luci-milo.cfg
@@ -2990,12 +2990,6 @@
   id: "try"
   name: "Chromium CQ Console"
   builders {
-    name: "buildbucket/luci.chromium.try/android-12-x64-dual-coverage-exp-rel"
-  }
-  builders {
-    name: "buildbucket/luci.chromium.try/android-12-x64-dual-coverage-exp-rel-compilator"
-  }
-  builders {
     name: "buildbucket/luci.chromium.try/android-12-x64-rel"
   }
   builders {
@@ -3035,12 +3029,6 @@
     name: "buildbucket/luci.chromium.try/android-x64-cast"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/android-x86-dual-coverage-exp-rel"
-  }
-  builders {
-    name: "buildbucket/luci.chromium.try/android-x86-dual-coverage-exp-rel-compilator"
-  }
-  builders {
     name: "buildbucket/luci.chromium.try/android-x86-rel"
   }
   builders {
@@ -16999,12 +16987,6 @@
     name: "buildbucket/luci.chromium.try/android-12-x64-dbg"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/android-12-x64-dual-coverage-exp-rel"
-  }
-  builders {
-    name: "buildbucket/luci.chromium.try/android-12-x64-dual-coverage-exp-rel-compilator"
-  }
-  builders {
     name: "buildbucket/luci.chromium.try/android-12-x64-rel"
   }
   builders {
@@ -17203,12 +17185,6 @@
     name: "buildbucket/luci.chromium.try/android-x64-cast"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/android-x86-dual-coverage-exp-rel"
-  }
-  builders {
-    name: "buildbucket/luci.chromium.try/android-x86-dual-coverage-exp-rel-compilator"
-  }
-  builders {
     name: "buildbucket/luci.chromium.try/android-x86-rel"
   }
   builders {
@@ -18429,12 +18405,6 @@
     name: "buildbucket/luci.chromium.try/android-12-x64-dbg"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/android-12-x64-dual-coverage-exp-rel"
-  }
-  builders {
-    name: "buildbucket/luci.chromium.try/android-12-x64-dual-coverage-exp-rel-compilator"
-  }
-  builders {
     name: "buildbucket/luci.chromium.try/android-12-x64-rel"
   }
   builders {
@@ -18609,12 +18579,6 @@
     name: "buildbucket/luci.chromium.try/android-x64-cast"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/android-x86-dual-coverage-exp-rel"
-  }
-  builders {
-    name: "buildbucket/luci.chromium.try/android-x86-dual-coverage-exp-rel-compilator"
-  }
-  builders {
     name: "buildbucket/luci.chromium.try/android-x86-rel"
   }
   builders {
diff --git a/infra/config/generated/testing/test_suites.pyl b/infra/config/generated/testing/test_suites.pyl
index e4825fc..7cec711 100644
--- a/infra/config/generated/testing/test_suites.pyl
+++ b/infra/config/generated/testing/test_suites.pyl
@@ -1462,6 +1462,29 @@
       },
     },
 
+    'chromium_wpt_tests_isolated_scripts': {
+      'chrome_wpt_tests': {
+        'test': 'chrome_wpt_tests',
+        'results_handler': 'layout tests',
+        'args': [
+          '--test-type',
+          'testharness',
+          'reftest',
+          'crashtest',
+          'print-reftest',
+        ],
+        'swarming': {
+          'shards': 15,
+        },
+        'merge': {
+          'script': '//third_party/blink/tools/merge_web_test_results.py',
+          'args': [
+            '--verbose',
+          ],
+        },
+      },
+    },
+
     'clang_tot_gtests': {
       'base_unittests': {},
     },
@@ -5565,29 +5588,6 @@
       },
     },
 
-    'wpt_web_tests': {
-      'chrome_wpt_tests': {
-        'test': 'chrome_wpt_tests',
-        'results_handler': 'layout tests',
-        'args': [
-          '--test-type',
-          'testharness',
-          'reftest',
-          'crashtest',
-          'print-reftest',
-        ],
-        'swarming': {
-          'shards': 15,
-        },
-        'merge': {
-          'script': '//third_party/blink/tools/merge_web_test_results.py',
-          'args': [
-            '--verbose',
-          ],
-        },
-      },
-    },
-
     'wpt_web_tests_android': {
       'chrome_public_wpt': {
         'results_handler': 'layout tests',
@@ -5961,6 +5961,7 @@
       'vulkan_swiftshader_isolated_scripts',
       'chromium_web_tests_high_dpi_isolated_scripts',
       'chromium_web_tests_brfetch_isolated_scripts',
+      'chromium_wpt_tests_isolated_scripts',
     ],
 
     'chromium_mac_gtests': [
diff --git a/infra/config/lib/builder_health_indicators.star b/infra/config/lib/builder_health_indicators.star
index 6992796b..99b2249 100644
--- a/infra/config/lib/builder_health_indicators.star
+++ b/infra/config/lib/builder_health_indicators.star
@@ -473,7 +473,6 @@
         "android-10-arm64-rel",
         "android-11-x86-rel",
         "android-12-x64-dbg",
-        "android-12-x64-dual-coverage-exp-rel",
         "android-12-x64-rel",
         "android-12-x64-rel-compilator",
         "android-12-x64-siso-rel",
diff --git a/infra/config/lib/description_exceptions.star b/infra/config/lib/description_exceptions.star
index 9cb0cb3..4eac2bfd 100644
--- a/infra/config/lib/description_exceptions.star
+++ b/infra/config/lib/description_exceptions.star
@@ -615,7 +615,6 @@
         "android-10-arm64-rel",
         "android-11-x86-rel",
         "android-12-x64-dbg",
-        "android-12-x64-dual-coverage-exp-rel-compilator",
         "android-12-x64-rel",
         "android-12-x64-rel-compilator",
         "android-12l-x64-dbg",
@@ -676,7 +675,6 @@
         "android-webview-pie-arm64-dbg",
         "android-webview-pie-x86-wpt-fyi-rel",
         "android-x64-cast",
-        "android-x86-dual-coverage-exp-rel-compilator",
         "android-x86-rel",
         "android-x86-rel-compilator",
         "android_arm64_dbg_recipe",
diff --git a/infra/config/lib/try.star b/infra/config/lib/try.star
index a0835c96..4014c24 100644
--- a/infra/config/lib/try.star
+++ b/infra/config/lib/try.star
@@ -232,6 +232,9 @@
     # TODO(crbug.com/1346781): Remove when the experiment is the default.
     experiments.setdefault("chromium_swarming.expose_merge_script_failures", 100)
 
+    # TODO(crbug.com/1466962): Remove when the experiment is the default.
+    experiments.setdefault("swarming.prpc.cli", 5)
+
     merged_resultdb_bigquery_exports = [
         resultdb.export_test_results(
             bq_table = "chrome-luci-data.chromium.try_test_results",
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
index 6111fa6..ed8cbc1 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
@@ -77,45 +77,6 @@
     reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CQ,
 )
 
-# TODO(crbug.com/1416662): Remove the builder after the experiment.
-try_.orchestrator_builder(
-    name = "android-12-x64-dual-coverage-exp-rel",
-    description_html = """\
-This builder shadows android-12-x64-rel builder to experiment both jacoco and clang coverage enabled builds.
-""",
-    mirrors = [
-        "ci/android-12-x64-rel",
-    ],
-    compilator = "android-12-x64-dual-coverage-exp-rel-compilator",
-    coverage_test_types = ["unit", "overall"],
-    gn_args = gn_args.config(
-        configs = [
-            "ci/android-12-x64-rel",
-            "release_try_builder",
-            "use_clang_coverage",
-            "use_java_coverage",
-            "partial_code_coverage_instrumentation",
-        ],
-    ),
-    main_list_view = "try",
-    tryjob = try_.job(
-        experiment_percentage = 10,
-    ),
-    # TODO(crbug.com/1372179): Use orchestrator pool once overloaded test pools
-    # are addressed
-    # use_orchestrator_pool = True,
-    use_clang_coverage = True,
-    use_java_coverage = True,
-)
-
-# TODO(crbug.com/1416662): Remove the builder after the experiment.
-try_.compilator_builder(
-    name = "android-12-x64-dual-coverage-exp-rel-compilator",
-    contact_team_email = "clank-engprod@google.com",
-    main_list_view = "try",
-    siso_enabled = True,
-)
-
 try_.orchestrator_builder(
     name = "android-12-x64-rel",
     branch_selector = branches.selector.ANDROID_BRANCHES,
@@ -655,50 +616,6 @@
     mirrors = ["ci/android-fieldtrial-rel"],
 )
 
-# TODO(crbug.com/1416662): Remove the builder after the experiment.
-try_.orchestrator_builder(
-    name = "android-x86-dual-coverage-exp-rel",
-    description_html = """\
-This builder is similar to "try/android-x86-rel", but experiment both jacoco and clang coverage enabled builds.
-""",
-    mirrors = [
-        "ci/android-oreo-x86-rel",
-    ],
-    compilator = "android-x86-dual-coverage-exp-rel-compilator",
-    contact_team_email = "clank-engprod@google.com",
-    coverage_test_types = ["unit", "overall"],
-    experiments = {
-        "chromium.add_one_test_shard": 10,
-    },
-    gn_args = gn_args.config(
-        configs = [
-            "ci/android-oreo-x86-rel",
-            "release_try_builder",
-            "use_clang_coverage",
-            "use_java_coverage",
-            "partial_code_coverage_instrumentation",
-        ],
-    ),
-    main_list_view = "try",
-    tryjob = try_.job(
-        experiment_percentage = 10,
-    ),
-    # TODO(crbug.com/1372179): Use orchestrator pool once overloaded test pools
-    # are addressed
-    # use_orchestrator_pool = True,
-    use_clang_coverage = True,
-    use_java_coverage = True,
-)
-
-# TODO(crbug.com/1416662): Remove the builder after the experiment.
-try_.compilator_builder(
-    name = "android-x86-dual-coverage-exp-rel-compilator",
-    cores = 64,
-    contact_team_email = "clank-engprod@google.com",
-    main_list_view = "try",
-    siso_enabled = True,
-)
-
 try_.builder(
     name = "android-oreo-arm64-dbg",
     branch_selector = branches.selector.ANDROID_BRANCHES,
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.win.star b/infra/config/subprojects/chromium/try/tryserver.chromium.win.star
index c21f0829..5fa62b8c 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.win.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.win.star
@@ -8,6 +8,7 @@
 load("//lib/builders.star", "os", "reclient", "siso")
 load("//lib/try.star", "try_")
 load("//lib/consoles.star", "consoles")
+load("//project.star", "settings")
 
 try_.defaults.set(
     executable = try_.DEFAULT_EXECUTABLE,
@@ -107,8 +108,7 @@
 try_.compilator_builder(
     name = "win-rel-compilator",
     branch_selector = branches.selector.WINDOWS_BRANCHES,
-    # TODO(b/309482810): Change to 32 once bots have landed
-    cores = "16|32",
+    cores = 32 if settings.is_main else 16,
     # TODO (crbug.com/1245171): Revert when root issue is fixed
     grace_period = 4 * time.minute,
     main_list_view = "try",
diff --git a/infra/config/targets/basic_suites.star b/infra/config/targets/basic_suites.star
index ed2a258..1f96d18 100644
--- a/infra/config/targets/basic_suites.star
+++ b/infra/config/targets/basic_suites.star
@@ -1743,6 +1743,32 @@
 )
 
 targets.legacy_basic_suite(
+    name = "chromium_wpt_tests_isolated_scripts",
+    tests = {
+        "chrome_wpt_tests": targets.legacy_test_config(
+            test = "chrome_wpt_tests",
+            results_handler = "layout tests",
+            args = [
+                "--test-type",
+                "testharness",
+                "reftest",
+                "crashtest",
+                "print-reftest",
+            ],
+            swarming = targets.swarming(
+                shards = 15,
+            ),
+            merge = targets.merge(
+                script = "//third_party/blink/tools/merge_web_test_results.py",
+                args = [
+                    "--verbose",
+                ],
+            ),
+        ),
+    },
+)
+
+targets.legacy_basic_suite(
     name = "clang_tot_gtests",
     tests = {
         "base_unittests": None,
@@ -6596,32 +6622,6 @@
 )
 
 targets.legacy_basic_suite(
-    name = "wpt_web_tests",
-    tests = {
-        "chrome_wpt_tests": targets.legacy_test_config(
-            test = "chrome_wpt_tests",
-            results_handler = "layout tests",
-            args = [
-                "--test-type",
-                "testharness",
-                "reftest",
-                "crashtest",
-                "print-reftest",
-            ],
-            swarming = targets.swarming(
-                shards = 15,
-            ),
-            merge = targets.merge(
-                script = "//third_party/blink/tools/merge_web_test_results.py",
-                args = [
-                    "--verbose",
-                ],
-            ),
-        ),
-    },
-)
-
-targets.legacy_basic_suite(
     name = "wpt_web_tests_android",
     tests = {
         "chrome_public_wpt": targets.legacy_test_config(
diff --git a/infra/config/targets/compound_suites.star b/infra/config/targets/compound_suites.star
index f017a7e..9bede8a 100644
--- a/infra/config/targets/compound_suites.star
+++ b/infra/config/targets/compound_suites.star
@@ -362,6 +362,10 @@
         "telemetry_perf_unittests_isolated_scripts",
         "vulkan_swiftshader_isolated_scripts",
         "chromium_web_tests_high_dpi_isolated_scripts",
+        # TODO(weizhong): we should eventually run chrome_wpt_tests where
+        # blink_wpt_tests runs on Linux. There should not have any resource
+        # concern on this because those are all CI builders.
+        #"chromium_wpt_tests_isolated_scripts",
     ],
 )
 
@@ -400,6 +404,7 @@
         # TODO(crbug.com/1498364): Remove this once the BackgroundResourceFetch
         # feature launches.
         "chromium_web_tests_brfetch_isolated_scripts",
+        "chromium_wpt_tests_isolated_scripts",
     ],
 )
 
diff --git a/infra/inclusive_language_presubmit_exempt_dirs.txt b/infra/inclusive_language_presubmit_exempt_dirs.txt
index 96cd6a2..2cd81af 100644
--- a/infra/inclusive_language_presubmit_exempt_dirs.txt
+++ b/infra/inclusive_language_presubmit_exempt_dirs.txt
@@ -100,6 +100,7 @@
 chrome/test/data/variations/http_server 1 1
 chrome/test/data/webui 1 1
 chrome/updater/win 1 1
+codelabs/mojo_examples 1 1
 components/android_autofill/browser/test_support/java/src/org/chromium/components/autofill 1 1
 components/autofill/core/browser/webdata 1 1
 components/cast/named_message_port_connector 2 2
@@ -178,7 +179,7 @@
 docs/speed_metrics 3 1
 docs/speed/metrics_changelog 1 1
 docs/telemetry_extension 2 1
-docs/testing 4 4
+docs/testing 3 3
 docs/updater 4 2
 extensions/browser 1 1
 extensions/common 2 2
@@ -189,6 +190,7 @@
 gpu/config 1 1
 infra 4 2
 infra/config/generated/luci 1 1
+infra/config/gn_args 1 1
 infra/config/subprojects/webrtc/consoles 1 1
 infra/config/targets 2 1
 ios/build/bots/scripts 15 3
@@ -196,7 +198,7 @@
 ios/chrome/test/wpt/tools 1 1
 media/audio/alsa 2 1
 media/audio/android 2 1
-media/audio/mac 10 2
+media/audio/mac 12 2
 media/audio/pulse 1 1
 media/audio/win 5 2
 media/base 1 1
@@ -250,7 +252,7 @@
 testing 1 1
 testing/buildbot 1 1
 testing/buildbot/filters 1 1
-testing/libfuzzer 6 4
+testing/libfuzzer 5 3
 testing/libfuzzer/proto 1 1
 testing/merge_scripts/code_coverage 1 1
 testing/scripts 2 2
@@ -273,15 +275,13 @@
 third_party/afl/src/qemu_mode 1 1
 third_party/android_build_tools/json 1 1
 third_party/android_deps_autorolled 1 1
-third_party/android_deps/buildSrc/src/main/groovy 24 2
+third_party/android_deps/buildSrc/src/main/groovy 38 2
 third_party/android_deps/libs 1 1
 third_party/android_deps/libs/com_google_auto_auto_common 1 1
 third_party/android_deps/libs/com_google_auto_service_auto_service 1 1
 third_party/android_deps/libs/com_google_auto_service_auto_service_annotations 1 1
-third_party/android_deps/libs/com_google_auto_value_auto_value_annotations 1 1
 third_party/android_deps/libs/com_google_protobuf_protobuf_java 1 1
 third_party/android_deps/libs/com_google_protobuf_protobuf_javalite 1 1
-third_party/android_provider 2 1
 third_party/arcore-android-sdk 1 1
 third_party/axe-core 2 1
 third_party/blink/perf_tests/bindings/resources/data 1 1
@@ -355,7 +355,7 @@
 third_party/blink/renderer/core/html/custom 1 1
 third_party/blink/renderer/core/html/fenced_frame 2 1
 third_party/blink/renderer/core/layout 1 1
-third_party/blink/renderer/core/layout/ng/inline 2 2
+third_party/blink/renderer/core/layout/inline 2 2
 third_party/blink/renderer/core/permissions_policy 1 1
 third_party/blink/renderer/core/resize_observer 1 1
 third_party/blink/renderer/core/script 1 1
@@ -379,7 +379,6 @@
 third_party/blink/renderer/modules/websockets 2 2
 third_party/blink/renderer/modules/window_controls_overlay 3 3
 third_party/blink/renderer/modules/xr 4 4
-third_party/blink/renderer/platform 1 1
 third_party/blink/renderer/platform/media 2 2
 third_party/blink/renderer/platform/storage 1 1
 third_party/blink/renderer/platform/testing 3 1
@@ -461,6 +460,7 @@
 third_party/boringssl 1 1
 third_party/brotli 2 1
 third_party/brotli/enc 1 1
+third_party/bspatch 1 1
 third_party/chevron 2 1
 third_party/closure_compiler/compiler 1 1
 third_party/closure_compiler/externs 5 1
@@ -627,88 +627,88 @@
 third_party/protobuf/src/google/protobuf/util/internal 7 1
 third_party/pylint/pylint 4 2
 third_party/qcms 1 1
-third_party/rust/aho_corasick/v0_7/crate/.github/workflows 2 1
-third_party/rust/aho_corasick/v0_7/crate/src 1 1
-third_party/rust/anstyle/v1/crate 1 1
-third_party/rust/anyhow/v1/crate 2 1
-third_party/rust/anyhow/v1/crate/.github/workflows 3 1
-third_party/rust/autocfg/v1/crate 1 1
-third_party/rust/base64/v0_13/crate 1 1
-third_party/rust/cfg_if/v1/crate/.github/workflows 4 1
-third_party/rust/clap_builder/v4/crate/src 1 1
-third_party/rust/clap_builder/v4/crate/src/builder 10 3
-third_party/rust/clap_builder/v4/crate/src/parser 1 1
-third_party/rust/clap_lex/v0_5/crate 2 2
-third_party/rust/clap/v4/crate 2 1
-third_party/rust/clap/v4/crate/src 2 1
-third_party/rust/codespan_reporting/v0_11/crate 2 1
-third_party/rust/codespan_reporting/v0_11/crate/examples 1 1
-third_party/rust/cxx/v1/crate 1 1
-third_party/rust/cxx/v1/crate/book 1 1
-third_party/rust/cxx/v1/crate/book/src 3 1
-third_party/rust/cxx/v1/crate/.github/workflows 3 2
-third_party/rust/cxx/v1/crate/src 4 1
-third_party/rust/getrandom/v0_2/crate 3 1
-third_party/rust/getrandom/v0_2/crate/src 1 1
-third_party/rust/hex/v0_4/crate 1 1
-third_party/rust/itoa/v1/crate 2 1
-third_party/rust/itoa/v1/crate/.github/workflows 1 1
-third_party/rust/itoa/v1/crate/src 1 1
-third_party/rust/lazy_static/v1/crate 1 1
-third_party/rust/libc/v0_2/crate 7 1
-third_party/rust/libc/v0_2/crate/src/unix/bsd/apple 2 1
-third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike 1 1
-third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/dragonfly 1 1
-third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd 1 1
-third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd 4 1
-third_party/rust/libc/v0_2/crate/src/unix/haiku 1 1
-third_party/rust/libc/v0_2/crate/src/unix/linux_like/android 1 1
-third_party/rust/libc/v0_2/crate/src/unix/newlib 1 1
-third_party/rust/link_cplusplus/v1/crate 1 1
-third_party/rust/link_cplusplus/v1/crate/.github/workflows 2 1
-third_party/rust/log/v0_4/crate 1 1
-third_party/rust/proc_macro2/v1/crate 1 1
-third_party/rust/proc_macro2/v1/crate/.github/workflows 2 1
-third_party/rust/qr_code/v2/crate 1 1
-third_party/rust/quote/v1/crate 1 1
-third_party/rust/quote/v1/crate/.github/workflows 2 1
-third_party/rust/rand_chacha/v0_3/crate 4 1
-third_party/rust/rand_core/v0_6/crate 4 1
-third_party/rust/rand_core/v0_6/crate/src 3 1
-third_party/rust/rand_pcg/v0_3/crate 4 1
-third_party/rust/rand/v0_8/crate 9 2
-third_party/rust/read_fonts/v0_11/crate/src/tables 3 1
-third_party/rust/regex/v1/crate 1 1
-third_party/rust/regex/v1/crate/src 2 2
-third_party/rust/rustc_version/v0_4/crate/.github/workflows 1 1
-third_party/rust/rustversion/v1/crate 2 1
-third_party/rust/rustversion/v1/crate/.github/workflows 1 1
-third_party/rust/rustversion/v1/crate/src 1 1
-third_party/rust/ryu/v1/crate 1 1
-third_party/rust/ryu/v1/crate/.github/workflows 1 1
-third_party/rust/semver/v1/crate 1 1
-third_party/rust/semver/v1/crate/.github/workflows 1 1
-third_party/rust/serde_derive/v1/crate 1 1
-third_party/rust/serde_json_lenient/v0_1/crate 1 1
-third_party/rust/serde_json/v1/crate 6 1
-third_party/rust/serde_json/v1/crate/.github/workflows 1 1
-third_party/rust/serde/v1/crate 1 1
-third_party/rust/serde/v1/crate/src 1 1
-third_party/rust/skrifa/v0_10/crate/src 1 1
-third_party/rust/skrifa/v0_10/crate/src/scale 1 1
-third_party/rust/static_assertions/v1/crate 5 2
-third_party/rust/static_assertions/v1/crate/src 2 1
-third_party/rust/strsim/v0_10/crate 2 1
-third_party/rust/syn/v1/crate 1 1
-third_party/rust/syn/v1/crate/src 4 2
-third_party/rust/syn/v2/crate 1 1
-third_party/rust/syn/v2/crate/src 2 1
-third_party/rust/termcolor/v1/crate/.github/workflows 1 1
-third_party/rust/unicode_ident/v1/crate 1 1
-third_party/rust/unicode_ident/v1/crate/.github/workflows 2 1
-third_party/rust/unicode_width/v0_1/crate 1 1
-third_party/rust/winapi_util/v0_1/crate/.github/workflows 1 1
-third_party/rust/winapi/v0_3/crate 1 1
+third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/.github/workflows 2 1
+third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src 1 1
+third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4 1 1
+third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70 2 1
+third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/.github/workflows 3 1
+third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0 1 1
+third_party/rust/chromium_crates_io/vendor/base64-0.13.1 1 1
+third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/.github/workflows 4 1
+third_party/rust/chromium_crates_io/vendor/clap-4.4.6 2 1
+third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src 2 1
+third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src 1 1
+third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder 10 3
+third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser 1 1
+third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1 2 2
+third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1 2 1
+third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/examples 1 1
+third_party/rust/chromium_crates_io/vendor/cxx-1.0.110 1 1
+third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book 1 1
+third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src 3 1
+third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.github/workflows 4 3
+third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src 4 1
+third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9 3 1
+third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src 1 1
+third_party/rust/chromium_crates_io/vendor/hex-0.4.3 1 1
+third_party/rust/chromium_crates_io/vendor/itoa-1.0.1 2 1
+third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/.github/workflows 1 1
+third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/src 1 1
+third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0 1 1
+third_party/rust/chromium_crates_io/vendor/libc-0.2.144 7 1
+third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple 2 1
+third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike 1 1
+third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/dragonfly 1 1
+third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd 1 1
+third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd 4 1
+third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/haiku 1 1
+third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android 1 1
+third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib 1 1
+third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9 1 1
+third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/.github/workflows 2 1
+third_party/rust/chromium_crates_io/vendor/log-0.4.17 1 1
+third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66 1 1
+third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/.github/workflows 2 1
+third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0 1 1
+third_party/rust/chromium_crates_io/vendor/quote-1.0.33 1 1
+third_party/rust/chromium_crates_io/vendor/quote-1.0.33/.github/workflows 2 1
+third_party/rust/chromium_crates_io/vendor/rand-0.8.5 9 2
+third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1 4 1
+third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4 4 1
+third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src 3 1
+third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1 4 1
+third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables 3 1
+third_party/rust/chromium_crates_io/vendor/regex-1.6.0 1 1
+third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src 2 2
+third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/.github/workflows 1 1
+third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6 2 1
+third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/.github/workflows 1 1
+third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src 1 1
+third_party/rust/chromium_crates_io/vendor/ryu-1.0.5 1 1
+third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/.github/workflows 1 1
+third_party/rust/chromium_crates_io/vendor/semver-1.0.4 1 1
+third_party/rust/chromium_crates_io/vendor/semver-1.0.4/.github/workflows 1 1
+third_party/rust/chromium_crates_io/vendor/serde-1.0.188 1 1
+third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src 1 1
+third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188 1 1
+third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78 6 1
+third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/.github/workflows 1 1
+third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8 1 1
+third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src 1 1
+third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale 1 1
+third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0 5 2
+third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src 2 1
+third_party/rust/chromium_crates_io/vendor/strsim-0.10.0 2 1
+third_party/rust/chromium_crates_io/vendor/syn-1.0.99 1 1
+third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src 4 2
+third_party/rust/chromium_crates_io/vendor/syn-2.0.29 1 1
+third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src 2 1
+third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/.github/workflows 1 1
+third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8 1 1
+third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/.github/workflows 2 1
+third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9 1 1
+third_party/rust/chromium_crates_io/vendor/winapi-0.3.9 1 1
+third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/.github/workflows 1 1
 third_party/sentencepiece/src 2 2
 third_party/sentencepiece/src/doc 3 1
 third_party/sentencepiece/src/src 1 1
@@ -768,7 +768,6 @@
 third_party/wuffs 3 1
 third_party/xcbproto 2 1
 third_party/xcbproto/src/src 2 1
-third_party/xdg_shared_mime_info 6 3
 third_party/zlib/contrib/minizip 2 2
 third_party/zlib/patches 1 1
 tools 4 2
@@ -788,8 +787,8 @@
 tools/md_browser 7 5
 tools/memory/partition_allocator/palloc_viewer 1 1
 tools/metrics/actions 1 1
-tools/metrics/histograms 34 2
-tools/metrics/histograms/metadata/others 3 1
+tools/metrics/histograms 13 2
+tools/metrics/histograms/metadata/others 1 1
 tools/metrics/ukm 1 1
 tools/perf 7 5
 tools/perf/cli_tools/update_wpr 2 1
diff --git a/internal b/internal
index 66690ed..f62985a 160000
--- a/internal
+++ b/internal
@@ -1 +1 @@
-Subproject commit 66690edc601db6694434d7be268b39275daf9ba4
+Subproject commit f62985a32f0c92053e73ebb03c3f801005933bb3
diff --git a/ios/chrome/browser/safe_browsing/model/safe_browsing_egtest.mm b/ios/chrome/browser/safe_browsing/model/safe_browsing_egtest.mm
index ec5094be..28ea60a9 100644
--- a/ios/chrome/browser/safe_browsing/model/safe_browsing_egtest.mm
+++ b/ios/chrome/browser/safe_browsing/model/safe_browsing_egtest.mm
@@ -36,11 +36,16 @@
 
 // Text that is found when expanding details on the phishing warning page.
 const char kPhishingWarningDetails[] =
-    "Google Safe Browsing recently detected phishing";
+    "Google Safe Browsing, which recently found phishing";
 
 // Text that is found when expanding details on the malware warning page.
 const char kMalwareWarningDetails[] =
-    "Google Safe Browsing recently detected malware";
+    "Google Safe Browsing, which recently found malware";
+
+// Text that is found when expanding details on the malware warning page for an
+// iframe with malware.
+const char kIframeMalwareWarningDetails[] =
+    "Safe Browsing recently found malware";
 
 // Request handler for net::EmbeddedTestServer that returns the request URL's
 // path as the body of the response if the request URL's path starts with
@@ -98,7 +103,6 @@
 
 - (AppLaunchConfiguration)appConfigurationForTestCase {
   AppLaunchConfiguration config;
-  config.features_disabled.push_back(safe_browsing::kRedInterstitialFacelift);
   if ([self isRunningTest:@selector(testPageWithUnsafeIframe)] ||
       [self isRunningTest:@selector(testPageWithUnsafeIframeInIncognito)] ||
       [self isRunningTest:@selector
@@ -249,8 +253,8 @@
 
   // Load the phishing page and verify a warning is shown.
   [ChromeEarlGrey loadURL:_phishingURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_PHISHING_V4_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   // Tap on the "Back to safety" button and verify that the previous page's
   // contents are loaded.
@@ -267,8 +271,8 @@
 
   // Load the phishing page and verify a warning is shown.
   [ChromeEarlGrey loadURL:_phishingURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_PHISHING_V4_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   // Tap on the Details button and verify that warning details are shown.
   [ChromeEarlGrey tapWebStateElementWithID:@"details-button"];
@@ -283,8 +287,8 @@
   // proceeded to the unsafe content in the other tab.
   [ChromeEarlGrey openNewTab];
   [ChromeEarlGrey loadURL:_phishingURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_PHISHING_V4_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 }
 
 // Tests expanding the details on a phishing warning, and proceeding past the
@@ -297,8 +301,8 @@
 
   // Load the phishing page and verify a warning is shown.
   [ChromeEarlGrey loadURL:_phishingURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_PHISHING_V4_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   // Tap on the Details button and verify that warning details are shown.
   [ChromeEarlGrey tapWebStateElementWithID:@"details-button"];
@@ -313,8 +317,8 @@
   // proceeded to the unsafe content in the other tab.
   [ChromeEarlGrey openNewIncognitoTab];
   [ChromeEarlGrey loadURL:_phishingURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_PHISHING_V4_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 }
 
 // Tests that a malware page is blocked, and the "Back to safety" button on the
@@ -325,8 +329,8 @@
 
   // Load the malware page and verify a warning is shown.
   [ChromeEarlGrey loadURL:_malwareURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   // Tap on the "Back to safety" button and verify that the previous page's
   // contents are loaded.
@@ -342,8 +346,8 @@
 
   // Load the malware page and verify a warning is shown.
   [ChromeEarlGrey loadURL:_malwareURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   // Tap on the Details button and verify that warning details are shown.
   [ChromeEarlGrey tapWebStateElementWithID:@"details-button"];
@@ -387,8 +391,8 @@
 
   // Load the malware page and verify a warning is shown.
   [ChromeEarlGrey loadURL:_malwareURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   // Tap on the Details button and verify that warning details are shown.
   [ChromeEarlGrey tapWebStateElementWithID:@"details-button"];
@@ -439,8 +443,8 @@
   [ChromeEarlGrey loadURL:_safeURL2];
   [ChromeEarlGrey waitForWebStateContainingText:_safeContent2];
   [ChromeEarlGrey loadURL:_malwareURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 }
 
 // Tests enabling Enhanced Protection from a Standard Protection state (Default
@@ -463,8 +467,8 @@
   [ChromeEarlGrey loadURL:_safeURL2];
   [ChromeEarlGrey waitForWebStateContainingText:_safeContent2];
   [ChromeEarlGrey loadURL:_realTimePhishingURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_PHISHING_V4_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
   [ChromeEarlGrey
       waitForWebStateNotContainingElement:enhancedSafeBrowsingMessage];
 }
@@ -494,8 +498,8 @@
   // Verify that a dark red box prompting to turn on Enhanced Protection is not
   // visible.
   [ChromeEarlGrey loadURL:_phishingURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_PHISHING_V4_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
   [ChromeEarlGrey
       waitForWebStateNotContainingElement:enhancedSafeBrowsingMessage];
 }
@@ -509,8 +513,8 @@
 
   // Load the phishing page and verify a warning is shown.
   [ChromeEarlGrey loadURL:_phishingURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_PHISHING_V4_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   // Tap on the Details button and verify that warning details are shown.
   [ChromeEarlGrey tapWebStateElementWithID:@"details-button"];
@@ -532,12 +536,10 @@
 
   // Load the a malware safe browsing error page.
   [ChromeEarlGrey loadURL:_malwareURL];
-  [ChromeEarlGrey
-      waitForWebStateContainingText:"The site ahead contains malware"];
+  [ChromeEarlGrey waitForWebStateContainingText:"Dangerous site"];
 
   [ChromeEarlGrey tapWebStateElementWithID:@"details-button"];
-  [ChromeEarlGrey waitForWebStateContainingText:
-                      "Google Safe Browsing recently detected malware"];
+  [ChromeEarlGrey waitForWebStateContainingText:kMalwareWarningDetails];
 
   // Verify that the proceed-link element is not found.  When the proceed link
   // is disabled, the entire second paragraph hidden.
@@ -564,8 +566,8 @@
 
   // Load the malware page and verify a warning is shown.
   [ChromeEarlGrey loadURL:_malwareURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   [ChromeEarlGrey loadURL:_safeURL2];
   [ChromeEarlGrey waitForWebStateContainingText:_safeContent2];
@@ -574,8 +576,8 @@
   base::test::ios::SpinRunLoopWithMinDelay(base::Seconds(1));
 
   [ChromeEarlGrey goBack];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
   // TODO(crbug.com/1153261): Adding a delay to avoid never-ending load on the
   // last navigation forward. Should be fixed in newer iOS version.
   base::test::ios::SpinRunLoopWithMinDelay(base::Seconds(1));
@@ -593,15 +595,15 @@
 
   // Load the malware page and verify a warning is shown.
   [ChromeEarlGrey loadURL:_malwareURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   [ChromeEarlGrey loadURL:_safeURL2];
   [ChromeEarlGrey waitForWebStateContainingText:_safeContent2];
 
   [[EarlGrey selectElementWithMatcher:BackButton()] performAction:grey_tap()];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   [[EarlGrey selectElementWithMatcher:ForwardButton()]
       performAction:grey_tap()];
@@ -618,8 +620,8 @@
 
   // Load the malware page and verify a warning is shown.
   [ChromeEarlGrey loadURL:_malwareURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   // Tap on the "Back to safety" button and verify that the previous page's
   // contents are loaded.
@@ -627,29 +629,29 @@
   [ChromeEarlGrey waitForWebStateContainingText:_safeContent1];
 
   [ChromeEarlGrey goForward];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
   [ChromeEarlGrey loadURL:_safeURL2];
   [ChromeEarlGrey waitForWebStateContainingText:_safeContent2];
 
   // Navigate back so that both the back list and the forward list are
   // non-empty.
   [ChromeEarlGrey goBack];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   // Do a session restoration and verify that all navigation history is
   // preserved.
   [ChromeEarlGrey triggerRestoreViaTabGridRemoveAllUndo];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   [ChromeEarlGrey goBack];
   [ChromeEarlGrey waitForWebStateContainingText:_safeContent1];
 
   [ChromeEarlGrey goForward];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   [ChromeEarlGrey goForward];
   [ChromeEarlGrey waitForWebStateContainingText:_safeContent2];
@@ -666,8 +668,8 @@
   // Load a page that has an iframe with malware, and verify that a warning is
   // shown.
   [ChromeEarlGrey loadURL:_iframeWithMalwareURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   // Ensure back history is preserved. Tap on the "Back to safety" button and
   // verify that the previous page's contents are loaded.
@@ -680,8 +682,8 @@
   [ChromeEarlGrey goForward];
   [ChromeEarlGrey waitForWebStateContainingText:_safeContent1];
   [ChromeEarlGrey goForward];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 }
 
 // Tests that a page with an unsafe ifame is not blocked when subframe checks
@@ -710,8 +712,8 @@
   // Load a page that has an iframe with malware, and verify that a warning is
   // shown.
   [ChromeEarlGrey loadURL:_iframeWithMalwareURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   // Ensure back history is preserved. Tap on the "Back to safety" button and
   // verify that the previous page's contents are loaded.
@@ -726,8 +728,8 @@
   [ChromeEarlGrey waitForWebStateContainingText:_safeContent1];
   [[EarlGrey selectElementWithMatcher:ForwardButton()]
       performAction:grey_tap()];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 }
 
 // Tests that a page with an unsafe ifame is not blocked when subframe checks
@@ -754,15 +756,15 @@
   // Load a page that has an iframe with malware, and verify that a warning is
   // shown.
   [ChromeEarlGrey loadURL:_iframeWithMalwareURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   [ChromeEarlGrey loadURL:_safeURL2];
   [ChromeEarlGrey waitForWebStateContainingText:_safeContent2];
 
   [[EarlGrey selectElementWithMatcher:BackButton()] performAction:grey_tap()];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   [[EarlGrey selectElementWithMatcher:ForwardButton()]
       performAction:grey_tap()];
@@ -780,12 +782,12 @@
   // Load a page that has an iframe with malware, and verify that a warning is
   // shown.
   [ChromeEarlGrey loadURL:_iframeWithMalwareURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   // Tap on the Details button and verify that warning details are shown.
   [ChromeEarlGrey tapWebStateElementWithID:@"details-button"];
-  [ChromeEarlGrey waitForWebStateContainingText:kMalwareWarningDetails];
+  [ChromeEarlGrey waitForWebStateContainingText:kIframeMalwareWarningDetails];
 
   // Tap on the link to proceed to the unsafe page, and verify that this page is
   // loaded.
@@ -809,8 +811,8 @@
   // Verify that a warning is still shown when loading the page in a new tab.
   [ChromeEarlGrey openNewTab];
   [ChromeEarlGrey loadURL:_iframeWithMalwareURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_MALWARE_V3_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 }
 
 // Tests that real-time lookups are not performed when opted-out of real-time
@@ -847,8 +849,8 @@
 
   // Load the real-time phishing page and verify that a warning page is shown.
   [ChromeEarlGrey loadURL:_realTimePhishingURL];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_PHISHING_V4_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 }
 
 // Tests that real-time lookups are not performed in incognito mode.
@@ -876,13 +878,13 @@
   [ChromeEarlGrey loadURL:_realTimePhishingURL];
 
   // Verify that a warning is shown for the unsafe page.
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_PHISHING_V4_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 
   // Perform session restoration, and verify that a warning is still shown.
   [ChromeEarlGrey triggerRestoreViaTabGridRemoveAllUndo];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_PHISHING_V4_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 }
 
 // Tests that when a page identified as unsafe by real-time Safe Browsing is
@@ -903,8 +905,8 @@
   [[EarlGrey
       selectElementWithMatcher:TappableBookmarkNodeWithLabel(phishingTitle)]
       performAction:grey_tap()];
-  [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8(
-                                                    IDS_PHISHING_V4_HEADING)];
+  [ChromeEarlGrey
+      waitForWebStateContainingText:l10n_util::GetStringUTF8(IDS_HEADING_NEW)];
 }
 
 @end
diff --git a/ios/chrome/browser/ui/webui/interstitials/interstitial_ui_egtest.mm b/ios/chrome/browser/ui/webui/interstitials/interstitial_ui_egtest.mm
index 695e9536..d1068ede 100644
--- a/ios/chrome/browser/ui/webui/interstitials/interstitial_ui_egtest.mm
+++ b/ios/chrome/browser/ui/webui/interstitials/interstitial_ui_egtest.mm
@@ -4,7 +4,6 @@
 
 #import <XCTest/XCTest.h>
 
-#import "components/safe_browsing/core/common/features.h"
 #import "ios/chrome/browser/shared/model/url/chrome_url_constants.h"
 #import "ios/chrome/browser/ui/webui/interstitials/interstitial_ui_constants.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
@@ -27,12 +26,6 @@
 
 @implementation InterstitialWebUITestCase
 
-- (AppLaunchConfiguration)appConfigurationForTestCase {
-  AppLaunchConfiguration config;
-  config.features_disabled.push_back(safe_browsing::kRedInterstitialFacelift);
-  return config;
-}
-
 - (void)setUp {
   [super setUp];
   _schemeRegistry = std::make_unique<url::ScopedSchemeRegistryForTests>();
@@ -81,8 +74,7 @@
       kChromeInterstitialSafeBrowsingTypeMalwareValue);
   [ChromeEarlGrey loadURL:safeBrowsingURL];
 
-  [ChromeEarlGrey
-      waitForWebStateContainingText:"The site ahead contains malware"];
+  [ChromeEarlGrey waitForWebStateContainingText:"Dangerous site"];
 }
 
 // Tests that chrome://interstitials/safe_browsing?type=phishing loads
@@ -95,7 +87,7 @@
       kChromeInterstitialSafeBrowsingTypePhishingValue);
   [ChromeEarlGrey loadURL:safeBrowsingURL];
 
-  [ChromeEarlGrey waitForWebStateContainingText:"Deceptive site ahead"];
+  [ChromeEarlGrey waitForWebStateContainingText:"Dangerous site"];
 }
 
 // Tests that chrome://interstitials/safe_browsing?type=unwanted loads
@@ -108,8 +100,7 @@
       kChromeInterstitialSafeBrowsingTypeUnwantedValue);
   [ChromeEarlGrey loadURL:safeBrowsingURL];
 
-  [ChromeEarlGrey
-      waitForWebStateContainingText:"The site ahead contains harmful programs"];
+  [ChromeEarlGrey waitForWebStateContainingText:"Dangerous site"];
 }
 
 // Tests that chrome://interstitials/safe_browsing?type=clientside_malware loads
@@ -122,8 +113,7 @@
       kChromeInterstitialSafeBrowsingTypeClientsideMalwareValue);
   [ChromeEarlGrey loadURL:safeBrowsingURL];
 
-  [ChromeEarlGrey
-      waitForWebStateContainingText:"The site ahead contains malware"];
+  [ChromeEarlGrey waitForWebStateContainingText:"Dangerous site"];
 }
 
 // Tests that chrome://interstitials/safe_browsing?type=clientside_phishing
@@ -136,7 +126,7 @@
       kChromeInterstitialSafeBrowsingTypeClientsidePhishingValue);
   [ChromeEarlGrey loadURL:safeBrowsingURL];
 
-  [ChromeEarlGrey waitForWebStateContainingText:"Deceptive site ahead"];
+  [ChromeEarlGrey waitForWebStateContainingText:"Dangerous site"];
 }
 
 // Tests that chrome://interstitials/safe_browsing?type=billing loads correctly.
diff --git a/ios_internal b/ios_internal
index ffad5e3..efe7eee 160000
--- a/ios_internal
+++ b/ios_internal
@@ -1 +1 @@
-Subproject commit ffad5e3cdc70181d9913574cd90ede7b9be515da
+Subproject commit efe7eeeaf4dbd8c81218e61413c847859fe081f9
diff --git a/media/base/test_helpers.cc b/media/base/test_helpers.cc
index e2e4c6a..9a75b6f 100644
--- a/media/base/test_helpers.cc
+++ b/media/base/test_helpers.cc
@@ -223,7 +223,7 @@
 
 // static
 VideoDecoderConfig TestVideoConfig::NormalRotated(VideoRotation rotation) {
-  return GetTestConfig(VideoCodec::kVP8, MinProfile(VideoCodec::kVP8),
+  return GetTestConfig(VideoCodec::kAV1, MinProfile(VideoCodec::kAV1),
                        VideoColorSpace::JPEG(), rotation, kNormalSize, false);
 }
 
diff --git a/media/base/test_helpers.h b/media/base/test_helpers.h
index a66118cc..289483bf 100644
--- a/media/base/test_helpers.h
+++ b/media/base/test_helpers.h
@@ -95,37 +95,37 @@
   // Returns a configuration that is invalid.
   static VideoDecoderConfig Invalid();
 
-  static VideoDecoderConfig Normal(VideoCodec codec = VideoCodec::kVP8);
+  static VideoDecoderConfig Normal(VideoCodec codec = VideoCodec::kAV1);
   static VideoDecoderConfig NormalWithColorSpace(
       VideoCodec codec,
       const VideoColorSpace& color_space);
   static VideoDecoderConfig NormalH264(VideoCodecProfile = H264PROFILE_MIN);
   static VideoDecoderConfig NormalCodecProfile(
-      VideoCodec codec = VideoCodec::kVP8,
+      VideoCodec codec = VideoCodec::kAV1,
       VideoCodecProfile profile = VP8PROFILE_MIN);
   static VideoDecoderConfig NormalEncrypted(
-      VideoCodec codec = VideoCodec::kVP8);
+      VideoCodec codec = VideoCodec::kAV1);
   static VideoDecoderConfig NormalEncrypted(VideoCodec codec,
                                             VideoCodecProfile);
   static VideoDecoderConfig NormalRotated(VideoRotation rotation);
-  static VideoDecoderConfig NormalHdr(VideoCodec codec = VideoCodec::kVP8);
+  static VideoDecoderConfig NormalHdr(VideoCodec codec = VideoCodec::kAV1);
   static VideoDecoderConfig NormalHdrEncrypted(
-      VideoCodec codec = VideoCodec::kVP8);
+      VideoCodec codec = VideoCodec::kAV1);
 
   // Returns a configuration that is larger in dimensions than Normal().
-  static VideoDecoderConfig Large(VideoCodec codec = VideoCodec::kVP8);
-  static VideoDecoderConfig LargeEncrypted(VideoCodec codec = VideoCodec::kVP8);
+  static VideoDecoderConfig Large(VideoCodec codec = VideoCodec::kAV1);
+  static VideoDecoderConfig LargeEncrypted(VideoCodec codec = VideoCodec::kAV1);
 
   // Returns a configuration that is larger in dimensions that Large().
-  static VideoDecoderConfig ExtraLarge(VideoCodec codec = VideoCodec::kVP8);
+  static VideoDecoderConfig ExtraLarge(VideoCodec codec = VideoCodec::kAV1);
   static VideoDecoderConfig ExtraLargeEncrypted(
-      VideoCodec codec = VideoCodec::kVP8);
+      VideoCodec codec = VideoCodec::kAV1);
 
   static VideoDecoderConfig Custom(gfx::Size size,
-                                   VideoCodec codec = VideoCodec::kVP8);
+                                   VideoCodec codec = VideoCodec::kAV1);
   static VideoDecoderConfig CustomEncrypted(
       gfx::Size size,
-      VideoCodec codec = VideoCodec::kVP8);
+      VideoCodec codec = VideoCodec::kAV1);
 
   // Returns coded size for Normal and Large config.
   static gfx::Size NormalCodedSize();
diff --git a/media/gpu/chromeos/mailbox_video_frame_converter.cc b/media/gpu/chromeos/mailbox_video_frame_converter.cc
index 21f7c73..961b88de 100644
--- a/media/gpu/chromeos/mailbox_video_frame_converter.cc
+++ b/media/gpu/chromeos/mailbox_video_frame_converter.cc
@@ -15,12 +15,14 @@
 #include "components/viz/common/resources/shared_image_format.h"
 #include "gpu/command_buffer/common/shared_image_usage.h"
 #include "gpu/command_buffer/service/scheduler.h"
+#include "gpu/command_buffer/service/shared_image/shared_image_factory.h"
 #include "gpu/ipc/service/gpu_channel.h"
 #include "media/base/format_utils.h"
 #include "media/base/media_switches.h"
 #include "media/base/video_util.h"
 #include "media/gpu/chromeos/platform_video_frame_utils.h"
 #include "media/gpu/macros.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/gfx/gpu_memory_buffer.h"
 #include "ui/gl/gl_bindings.h"
 
@@ -97,6 +99,19 @@
     return !!gpu_channel_;
   }
 
+  absl::optional<gpu::SharedImageCapabilities> GetCapabilities() override {
+    DCHECK(gpu_task_runner_->BelongsToCurrentThread());
+    if (!gpu_channel_) {
+      return absl::nullopt;
+    }
+
+    gpu::SharedImageStub* shared_image_stub = gpu_channel_->shared_image_stub();
+    DCHECK(shared_image_stub);
+    gpu::SharedImageFactory* factory = shared_image_stub->factory();
+    CHECK(factory);
+    return factory->MakeCapabilities();
+  }
+
   gpu::SharedImageStub::SharedImageDestructionCallback CreateSharedImage(
       const gpu::Mailbox& mailbox,
       gfx::GpuMemoryBufferHandle handle,
@@ -540,11 +555,20 @@
   const gfx::Size shared_image_size =
       GetRectSizeFromOrigin(destination_visible_rect);
 
+  const absl::optional<gpu::SharedImageCapabilities> shared_image_caps =
+      gpu_delegate_->GetCapabilities();
+
+  if (!shared_image_caps.has_value()) {
+    OnError(FROM_HERE, "Can't get the SharedImageCapabilities");
+    return false;
+  }
+
   // The allocated SharedImages should be usable for the (Display) compositor
   // and, potentially, for overlays (Scanout).
   uint32_t shared_image_usage =
       gpu::SHARED_IMAGE_USAGE_DISPLAY_READ | gpu::SHARED_IMAGE_USAGE_SCANOUT;
-  if (video_frame->metadata().is_webgpu_compatible) {
+  if (video_frame->metadata().is_webgpu_compatible &&
+      !shared_image_caps->disable_webgpu_shared_images) {
     shared_image_usage |= gpu::SHARED_IMAGE_USAGE_WEBGPU;
   }
 
diff --git a/media/gpu/chromeos/mailbox_video_frame_converter.h b/media/gpu/chromeos/mailbox_video_frame_converter.h
index dcd5a1a8..67d4cba 100644
--- a/media/gpu/chromeos/mailbox_video_frame_converter.h
+++ b/media/gpu/chromeos/mailbox_video_frame_converter.h
@@ -11,10 +11,12 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "gpu/command_buffer/common/mailbox.h"
+#include "gpu/command_buffer/common/shared_image_capabilities.h"
 #include "gpu/ipc/common/surface_handle.h"
 #include "gpu/ipc/service/shared_image_stub.h"
 #include "media/base/video_frame.h"
 #include "media/gpu/media_gpu_export.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/skia/include/core/SkAlphaType.h"
 #include "third_party/skia/include/gpu/GrTypes.h"
 #include "ui/gfx/buffer_types.h"
@@ -54,6 +56,7 @@
     virtual ~GpuDelegate() = default;
 
     virtual bool Initialize() = 0;
+    virtual absl::optional<gpu::SharedImageCapabilities> GetCapabilities() = 0;
     virtual gpu::SharedImageStub::SharedImageDestructionCallback
     CreateSharedImage(const gpu::Mailbox& mailbox,
                       gfx::GpuMemoryBufferHandle handle,
diff --git a/media/gpu/chromeos/mailbox_video_frame_converter_unittest.cc b/media/gpu/chromeos/mailbox_video_frame_converter_unittest.cc
index 4a01d6d..f751b3d 100644
--- a/media/gpu/chromeos/mailbox_video_frame_converter_unittest.cc
+++ b/media/gpu/chromeos/mailbox_video_frame_converter_unittest.cc
@@ -10,12 +10,14 @@
 #include "base/task/thread_pool.h"
 #include "base/test/mock_callback.h"
 #include "base/test/task_environment.h"
+#include "gpu/command_buffer/common/shared_image_capabilities.h"
 #include "gpu/command_buffer/common/sync_token.h"
 #include "media/base/media_switches.h"
 #include "media/base/simple_sync_token_client.h"
 #include "media/video/fake_gpu_memory_buffer.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/gfx/gpu_fence_handle.h"
 #include "ui/gfx/gpu_memory_buffer.h"
 
@@ -38,6 +40,7 @@
 class MockGpuDelegate : public MailboxVideoFrameConverter::GpuDelegate {
  public:
   MOCK_METHOD0(Initialize, bool());
+  MOCK_METHOD0(GetCapabilities, absl::optional<gpu::SharedImageCapabilities>());
   MOCK_METHOD9(CreateSharedImage,
                gpu::SharedImageStub::SharedImageDestructionCallback(
                    const gpu::Mailbox& mailbox,
@@ -248,6 +251,8 @@
           .WillOnce(SaveArg<0>(&converted_frames[i]));
     }
 
+    EXPECT_CALL(*mock_gpu_delegate_, GetCapabilities())
+        .WillRepeatedly(Return(gpu::SharedImageCapabilities()));
     // Note: after this, the MailboxVideoFrameConverter should have full
     // ownership of the *|gmb_frame|.
     converter_->ConvertFrame(std::move(gmb_frame));
diff --git a/media/gpu/h265_decoder.cc b/media/gpu/h265_decoder.cc
index e34ef3fa..f962e0f 100644
--- a/media/gpu/h265_decoder.cc
+++ b/media/gpu/h265_decoder.cc
@@ -168,6 +168,7 @@
   last_slice_hdr_ = nullptr;
   curr_sps_id_ = -1;
   curr_pps_id_ = -1;
+  aux_alpha_layer_id_ = 0;
 
   prev_tid0_pic_ = nullptr;
   ref_pic_list_.clear();
@@ -234,12 +235,11 @@
       DVLOG(4) << "New NALU: " << static_cast<int>(curr_nalu_->nal_unit_type);
     }
 
-    // 8.1.2 We only handle nuh_layer_id of zero.
-    // As a workaround for accelerators that support alpha layers, the data is
-    // simply passed through.
-    // TODO(crbug.com/1331597): Only pass through vps->aux_alpha_layer_id.
     if (curr_nalu_->nuh_layer_id) {
-      if (accelerator_->IsAlphaLayerSupported()) {
+      // For accelerators that support alpha layers, the data is
+      // simply passed through.
+      if (aux_alpha_layer_id_ == curr_nalu_->nuh_layer_id &&
+          accelerator_->IsAlphaLayerSupported()) {
         switch (curr_nalu_->nal_unit_type) {
           case H265NALU::BLA_W_LP:
           case H265NALU::BLA_W_RADL:
@@ -314,6 +314,7 @@
             break;
         }
       } else {
+        // 8.1.2 Otherwise only handle nuh_layer_id of zero.
         DVLOG(4) << "Skipping NALU with nuh_layer_id="
                  << curr_nalu_->nuh_layer_id;
       }
@@ -676,6 +677,13 @@
 
   const H265PPS* pps = parser_.GetPPS(curr_pps_id_);
   DCHECK(pps);
+
+  const H265VPS* vps = parser_.GetVPS(sps->sps_video_parameter_set_id);
+  if (!vps) {
+    return H265Accelerator::Status::kFail;
+  }
+  aux_alpha_layer_id_ = vps->aux_alpha_layer_id;
+
   return accelerator_->SubmitSlice(
       sps, pps, slice_hdr, ref_pic_list0_, ref_pic_list1_, ref_pic_set_lt_curr_,
       ref_pic_set_st_curr_after_, ref_pic_set_st_curr_before_, curr_pic_.get(),
diff --git a/media/gpu/h265_decoder.h b/media/gpu/h265_decoder.h
index dccd6c8e..7bfe8feb1 100644
--- a/media/gpu/h265_decoder.h
+++ b/media/gpu/h265_decoder.h
@@ -352,6 +352,10 @@
   int curr_sps_id_ = -1;
   int curr_pps_id_ = -1;
 
+  // If this value larger than 0, then that means the current NALU contain alpha
+  // layer.
+  int aux_alpha_layer_id_ = 0;
+
   // Current NALU and slice header being processed.
   std::unique_ptr<H265NALU> curr_nalu_;
   std::unique_ptr<H265SliceHeader> curr_slice_hdr_;
diff --git a/media/video/h265_parser.cc b/media/video/h265_parser.cc
index 7871795..b099ab95 100644
--- a/media/video/h265_parser.cc
+++ b/media/video/h265_parser.cc
@@ -780,10 +780,6 @@
     READ_BOOL_OR_RETURN(&sps->persistent_rice_adaptation_enabled_flag);
     READ_BOOL_OR_RETURN(&sps->cabac_bypass_alignment_enabled_flag);
   }
-  if (sps->sps_multilayer_extension_flag) {
-    DVLOG(1) << "HEVC multilayer extension not supported";
-    return kInvalidStream;
-  }
   if (sps->sps_3d_extension_flag) {
     DVLOG(1) << "HEVC 3D extension not supported";
     return kInvalidStream;
@@ -959,10 +955,6 @@
     IN_RANGE_OR_RETURN(pps->log2_sao_offset_scale_chroma, 0,
                        std::max(sps->bit_depth_chroma_minus8 - 2, 0));
   }
-  if (pps->pps_multilayer_extension_flag) {
-    DVLOG(1) << "HEVC multilayer extension not supported";
-    return kInvalidStream;
-  }
   if (pps->pps_3d_extension_flag) {
     DVLOG(1) << "HEVC 3D extension not supported";
     return kInvalidStream;
diff --git a/net/http/bidirectional_stream.cc b/net/http/bidirectional_stream.cc
index bf1a314..c2457e9 100644
--- a/net/http/bidirectional_stream.cc
+++ b/net/http/bidirectional_stream.cc
@@ -209,8 +209,7 @@
   http_request_info.socket_tag = request_info_->socket_tag;
   stream_request_ =
       session_->http_stream_factory()->RequestBidirectionalStreamImpl(
-          http_request_info, request_info_->priority, ssl_config, ssl_config,
-          this,
+          http_request_info, request_info_->priority, ssl_config, this,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, net_log_);
   // Check that this call does not fail.
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc
index c5bdccb..8c8dddf 100644
--- a/net/http/http_network_transaction.cc
+++ b/net/http/http_network_transaction.cc
@@ -232,11 +232,6 @@
 #endif  // BUILDFLAG(ENABLE_REPORTING)
   start_timeticks_ = base::TimeTicks::Now();
 
-  if (request_->load_flags & LOAD_DISABLE_CERT_NETWORK_FETCHES) {
-    server_ssl_config_.disable_cert_verification_network_fetches = true;
-    base_proxy_ssl_config_.disable_cert_verification_network_fetches = true;
-  }
-
   if (request_->idempotency == IDEMPOTENT ||
       (request_->idempotency == DEFAULT_IDEMPOTENCY &&
        HttpUtil::IsMethodSafe(request_info->method))) {
@@ -901,12 +896,12 @@
   if (ForWebSocketHandshake()) {
     stream_request_ =
         session_->http_stream_factory()->RequestWebSocketHandshakeStream(
-            *request_, priority_, server_ssl_config_, base_proxy_ssl_config_,
-            this, websocket_handshake_stream_base_create_helper_,
+            *request_, priority_, server_ssl_config_, this,
+            websocket_handshake_stream_base_create_helper_,
             enable_ip_based_pooling_, enable_alternative_services_, net_log_);
   } else {
     stream_request_ = session_->http_stream_factory()->RequestStream(
-        *request_, priority_, server_ssl_config_, base_proxy_ssl_config_, this,
+        *request_, priority_, server_ssl_config_, this,
         enable_ip_based_pooling_, enable_alternative_services_, net_log_);
   }
   DCHECK(stream_request_.get());
diff --git a/net/http/http_network_transaction.h b/net/http/http_network_transaction.h
index 92d8557..0226083 100644
--- a/net/http/http_network_transaction.h
+++ b/net/http/http_network_transaction.h
@@ -420,7 +420,6 @@
   // modifications being idempotent. Address this as part of other work to make
   // sense of SSLConfig (related to https://crbug.com/488043).
   SSLConfig server_ssl_config_;
-  SSLConfig base_proxy_ssl_config_;
 
   HttpRequestHeaders request_headers_;
 #if BUILDFLAG(ENABLE_REPORTING)
diff --git a/net/http/http_stream_factory.cc b/net/http/http_stream_factory.cc
index 6d1988b..a992594 100644
--- a/net/http/http_stream_factory.cc
+++ b/net/http/http_stream_factory.cc
@@ -88,13 +88,12 @@
     const HttpRequestInfo& request_info,
     RequestPriority priority,
     const SSLConfig& server_ssl_config,
-    const SSLConfig& base_proxy_ssl_config,
     HttpStreamRequest::Delegate* delegate,
     bool enable_ip_based_pooling,
     bool enable_alternative_services,
     const NetLogWithSource& net_log) {
   return RequestStreamInternal(request_info, priority, server_ssl_config,
-                               base_proxy_ssl_config, delegate, nullptr,
+                               delegate, nullptr,
                                HttpStreamRequest::HTTP_STREAM,
                                /*is_websocket=*/false, enable_ip_based_pooling,
                                enable_alternative_services, net_log);
@@ -105,7 +104,6 @@
     const HttpRequestInfo& request_info,
     RequestPriority priority,
     const SSLConfig& server_ssl_config,
-    const SSLConfig& base_proxy_ssl_config,
     HttpStreamRequest::Delegate* delegate,
     WebSocketHandshakeStreamBase::CreateHelper* create_helper,
     bool enable_ip_based_pooling,
@@ -113,7 +111,7 @@
     const NetLogWithSource& net_log) {
   DCHECK(create_helper);
   return RequestStreamInternal(request_info, priority, server_ssl_config,
-                               base_proxy_ssl_config, delegate, create_helper,
+                               delegate, create_helper,
                                HttpStreamRequest::HTTP_STREAM,
                                /*is_websocket=*/true, enable_ip_based_pooling,
                                enable_alternative_services, net_log);
@@ -124,7 +122,6 @@
     const HttpRequestInfo& request_info,
     RequestPriority priority,
     const SSLConfig& server_ssl_config,
-    const SSLConfig& base_proxy_ssl_config,
     HttpStreamRequest::Delegate* delegate,
     bool enable_ip_based_pooling,
     bool enable_alternative_services,
@@ -132,7 +129,7 @@
   DCHECK(request_info.url.SchemeIs(url::kHttpsScheme));
 
   return RequestStreamInternal(request_info, priority, server_ssl_config,
-                               base_proxy_ssl_config, delegate, nullptr,
+                               delegate, nullptr,
                                HttpStreamRequest::BIDIRECTIONAL_STREAM,
                                /*is_websocket=*/false, enable_ip_based_pooling,
                                enable_alternative_services, net_log);
@@ -142,7 +139,6 @@
     const HttpRequestInfo& request_info,
     RequestPriority priority,
     const SSLConfig& server_ssl_config,
-    const SSLConfig& base_proxy_ssl_config,
     HttpStreamRequest::Delegate* delegate,
     WebSocketHandshakeStreamBase::CreateHelper*
         websocket_handshake_stream_create_helper,
@@ -158,7 +154,7 @@
       session_->context()
           .quic_context->params()
           ->delay_main_job_with_available_spdy_session,
-      server_ssl_config, base_proxy_ssl_config);
+      server_ssl_config);
   JobController* job_controller_raw_ptr = job_controller.get();
   job_controller_set_.insert(std::move(job_controller));
   return job_controller_raw_ptr->Start(delegate,
@@ -179,8 +175,7 @@
       session_->context()
           .quic_context->params()
           ->delay_main_job_with_available_spdy_session,
-      /*server_ssl_config=*/SSLConfig(),
-      /*base_proxy_ssl_config=*/SSLConfig());
+      /*server_ssl_config=*/SSLConfig());
   JobController* job_controller_raw_ptr = job_controller.get();
   job_controller_set_.insert(std::move(job_controller));
   job_controller_raw_ptr->Preconnect(num_streams);
diff --git a/net/http/http_stream_factory.h b/net/http/http_stream_factory.h
index 14cac487..4d73a88 100644
--- a/net/http/http_stream_factory.h
+++ b/net/http/http_stream_factory.h
@@ -81,7 +81,6 @@
       const HttpRequestInfo& info,
       RequestPriority priority,
       const SSLConfig& server_ssl_config,
-      const SSLConfig& base_proxy_ssl_config,
       HttpStreamRequest::Delegate* delegate,
       bool enable_ip_based_pooling,
       bool enable_alternative_services,
@@ -94,7 +93,6 @@
       const HttpRequestInfo& info,
       RequestPriority priority,
       const SSLConfig& server_ssl_config,
-      const SSLConfig& base_proxy_ssl_config,
       HttpStreamRequest::Delegate* delegate,
       WebSocketHandshakeStreamBase::CreateHelper* create_helper,
       bool enable_ip_based_pooling,
@@ -110,7 +108,6 @@
       const HttpRequestInfo& info,
       RequestPriority priority,
       const SSLConfig& server_ssl_config,
-      const SSLConfig& base_proxy_ssl_config,
       HttpStreamRequest::Delegate* delegate,
       bool enable_ip_based_pooling,
       bool enable_alternative_services,
@@ -146,7 +143,6 @@
       const HttpRequestInfo& info,
       RequestPriority priority,
       const SSLConfig& server_ssl_config,
-      const SSLConfig& base_proxy_ssl_config,
       HttpStreamRequest::Delegate* delegate,
       WebSocketHandshakeStreamBase::CreateHelper* create_helper,
       HttpStreamRequest::StreamType stream_type,
diff --git a/net/http/http_stream_factory_job.cc b/net/http/http_stream_factory_job.cc
index d2c9d22..9f8f70a 100644
--- a/net/http/http_stream_factory_job.cc
+++ b/net/http/http_stream_factory_job.cc
@@ -18,6 +18,7 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "net/base/host_port_pair.h"
+#include "net/base/load_flags.h"
 #include "net/base/port_util.h"
 #include "net/base/proxy_delegate.h"
 #include "net/cert/cert_verifier.h"
@@ -111,7 +112,6 @@
                             RequestPriority priority,
                             const ProxyInfo& proxy_info,
                             const SSLConfig& server_ssl_config,
-                            const SSLConfig& base_proxy_ssl_config,
                             url::SchemeHostPort destination,
                             GURL origin_url,
                             NextProto alternative_protocol,
@@ -123,7 +123,6 @@
       priority_(priority),
       proxy_info_(proxy_info),
       server_ssl_config_(server_ssl_config),
-      base_proxy_ssl_config_(base_proxy_ssl_config),
       net_log_(
           NetLogWithSource::Make(net_log, NetLogSourceType::HTTP_STREAM_JOB)),
       io_callback_(
@@ -179,6 +178,14 @@
   // `HttpNetworkTransaction`, which consumes additional fields.
   DCHECK(!proxy_info_.is_empty());
 
+  // TODO(https://crbug.com/1498285):  Remove this and move
+  // `disable_cert_verification_network_fetches` handling down to the socket
+  // layer.
+  bool disable_cert_verification_network_fetches =
+      !!(request_info_.load_flags & LOAD_DISABLE_CERT_NETWORK_FETCHES);
+  server_ssl_config_.disable_cert_verification_network_fetches =
+      disable_cert_verification_network_fetches;
+
   // QUIC can only be spoken to servers, never to proxies.
   if (alternative_protocol == kProtoQUIC) {
     DCHECK(proxy_info_.is_direct());
@@ -750,11 +757,6 @@
   DCHECK(proxy_info_.proxy_chain().IsValid());
   next_state_ = STATE_INIT_CONNECTION_COMPLETE;
 
-  if (proxy_info_.is_secure_http_like()) {
-    // Disable network fetches for HTTPS proxies, since the network requests
-    // are probably going to need to go through the proxy chain too.
-    base_proxy_ssl_config_.disable_cert_verification_network_fetches = true;
-  }
   if (using_ssl_) {
     // Prior to HTTP/2 and SPDY, some servers use TLS renegotiation to request
     // TLS client authentication after the HTTP request was sent. Allow
@@ -769,14 +771,15 @@
     server_ssl_config_.renego_allowed_for_protos.push_back(kProtoHTTP11);
   }
 
+  SSLConfig base_proxy_ssl_config;
   server_ssl_config_.alpn_protos = session_->GetAlpnProtos();
-  base_proxy_ssl_config_.alpn_protos = session_->GetAlpnProtos();
+  base_proxy_ssl_config.alpn_protos = session_->GetAlpnProtos();
   server_ssl_config_.application_settings = session_->GetApplicationSettings();
-  base_proxy_ssl_config_.application_settings =
+  base_proxy_ssl_config.application_settings =
       session_->GetApplicationSettings();
   server_ssl_config_.ignore_certificate_errors =
       session_->params().ignore_certificate_errors;
-  base_proxy_ssl_config_.ignore_certificate_errors =
+  base_proxy_ssl_config.ignore_certificate_errors =
       session_->params().ignore_certificate_errors;
 
   // TODO(https://crbug.com/964642): Also enable 0-RTT for TLS proxies.
@@ -864,7 +867,7 @@
 
     return PreconnectSocketsForHttpRequest(
         destination_, request_info_.load_flags, priority_, session_,
-        proxy_info_, server_ssl_config_, base_proxy_ssl_config_,
+        proxy_info_, server_ssl_config_, base_proxy_ssl_config,
         request_info_.privacy_mode, request_info_.network_anonymization_key,
         request_info_.secure_dns_policy, net_log_, num_streams_,
         std::move(callback));
@@ -889,14 +892,14 @@
     websocket_server_ssl_config.alpn_protos = {kProtoHTTP11};
     return InitSocketHandleForWebSocketRequest(
         destination_, request_info_.load_flags, priority_, session_,
-        proxy_info_, websocket_server_ssl_config, base_proxy_ssl_config_,
+        proxy_info_, websocket_server_ssl_config, base_proxy_ssl_config,
         request_info_.privacy_mode, request_info_.network_anonymization_key,
         net_log_, connection_.get(), io_callback_, proxy_auth_callback);
   }
 
   return InitSocketHandleForHttpRequest(
       destination_, request_info_.load_flags, priority_, session_, proxy_info_,
-      server_ssl_config_, base_proxy_ssl_config_, request_info_.privacy_mode,
+      server_ssl_config_, base_proxy_ssl_config, request_info_.privacy_mode,
       request_info_.network_anonymization_key, request_info_.secure_dns_policy,
       request_info_.socket_tag, net_log_, connection_.get(), io_callback_,
       proxy_auth_callback);
@@ -904,10 +907,15 @@
 
 int HttpStreamFactory::Job::DoInitConnectionImplQuic() {
   url::SchemeHostPort destination;
-  SSLConfig* ssl_config;
   GURL url(request_info_.url);
+  int cert_verifier_flags;
   if (proxy_info_.is_quic()) {
-    ssl_config = &base_proxy_ssl_config_;
+    // Disable network fetches for QUIC proxies, since the network requests
+    // are probably going to need to go through the proxy chain too.
+    //
+    // Any proxy-specific SSL behavior here should also be configured for HTTPS
+    // proxies in ConnectJobFactory.
+    cert_verifier_flags = CertVerifier::VERIFY_DISABLE_NETWORK_FETCHES;
     const HostPortPair& proxy_endpoint =
         proxy_info_.proxy_server().host_port_pair();
     destination = url::SchemeHostPort(url::kHttpsScheme, proxy_endpoint.host(),
@@ -916,7 +924,7 @@
   } else {
     DCHECK(using_ssl_);
     destination = destination_;
-    ssl_config = &server_ssl_config_;
+    cert_verifier_flags = server_ssl_config_.GetCertVerifyFlags();
   }
   DCHECK(url.SchemeIs(url::kHttpsScheme));
   bool require_dns_https_alpn =
@@ -926,8 +934,8 @@
       std::move(destination), quic_version_, request_info_.privacy_mode,
       priority_, request_info_.socket_tag,
       request_info_.network_anonymization_key, request_info_.secure_dns_policy,
-      proxy_info_.is_direct(), require_dns_https_alpn,
-      ssl_config->GetCertVerifyFlags(), url, net_log_, &net_error_details_,
+      proxy_info_.is_direct(), require_dns_https_alpn, cert_verifier_flags, url,
+      net_log_, &net_error_details_,
       base::BindOnce(&Job::OnFailedOnDefaultNetwork, ptr_factory_.GetWeakPtr()),
       io_callback_);
   if (rv == OK) {
@@ -1314,7 +1322,6 @@
     RequestPriority priority,
     const ProxyInfo& proxy_info,
     const SSLConfig& server_ssl_config,
-    const SSLConfig& base_proxy_ssl_config,
     url::SchemeHostPort destination,
     GURL origin_url,
     bool is_websocket,
@@ -1324,9 +1331,9 @@
     quic::ParsedQuicVersion quic_version) {
   return std::make_unique<HttpStreamFactory::Job>(
       delegate, job_type, session, request_info, priority, proxy_info,
-      server_ssl_config, base_proxy_ssl_config, std::move(destination),
-      origin_url, alternative_protocol, quic_version, is_websocket,
-      enable_ip_based_pooling, net_log);
+      server_ssl_config, std::move(destination), origin_url,
+      alternative_protocol, quic_version, is_websocket, enable_ip_based_pooling,
+      net_log);
 }
 
 bool HttpStreamFactory::Job::ShouldThrottleConnectForSpdy() const {
diff --git a/net/http/http_stream_factory_job.h b/net/http/http_stream_factory_job.h
index f46e757..c8fad87 100644
--- a/net/http/http_stream_factory_job.h
+++ b/net/http/http_stream_factory_job.h
@@ -157,7 +157,6 @@
       RequestPriority priority,
       const ProxyInfo& proxy_info,
       const SSLConfig& server_ssl_config,
-      const SSLConfig& proxy_ssl_config,
       url::SchemeHostPort destination,
       GURL origin_url,
       NextProto alternative_protocol,
@@ -372,7 +371,6 @@
   RequestPriority priority_;
   const ProxyInfo proxy_info_;
   SSLConfig server_ssl_config_;
-  SSLConfig base_proxy_ssl_config_;
   const NetLogWithSource net_log_;
 
   const CompletionRepeatingCallback io_callback_;
@@ -505,7 +503,6 @@
       RequestPriority priority,
       const ProxyInfo& proxy_info,
       const SSLConfig& server_ssl_config,
-      const SSLConfig& proxy_ssl_config,
       url::SchemeHostPort destination,
       GURL origin_url,
       bool is_websocket,
diff --git a/net/http/http_stream_factory_job_controller.cc b/net/http/http_stream_factory_job_controller.cc
index fd802335..5d912e6 100644
--- a/net/http/http_stream_factory_job_controller.cc
+++ b/net/http/http_stream_factory_job_controller.cc
@@ -132,8 +132,7 @@
     bool enable_ip_based_pooling,
     bool enable_alternative_services,
     bool delay_main_job_with_available_spdy_session,
-    const SSLConfig& server_ssl_config,
-    const SSLConfig& base_proxy_ssl_config)
+    const SSLConfig& server_ssl_config)
     : factory_(factory),
       session_(session),
       job_factory_(job_factory),
@@ -146,7 +145,6 @@
           delay_main_job_with_available_spdy_session),
       request_info_(request_info),
       server_ssl_config_(server_ssl_config),
-      base_proxy_ssl_config_(base_proxy_ssl_config),
       net_log_(NetLogWithSource::Make(
           session->net_log(),
           NetLogSourceType::HTTP_STREAM_JOB_CONTROLLER)) {
@@ -838,8 +836,8 @@
     std::unique_ptr<Job> preconnect_job = job_factory_->CreateJob(
         this, dns_alpn_h3_job_enabled ? PRECONNECT_DNS_ALPN_H3 : PRECONNECT,
         session_, request_info_, IDLE, proxy_info_, server_ssl_config_,
-        base_proxy_ssl_config_, destination, origin_url, is_websocket_,
-        enable_ip_based_pooling_, net_log_.net_log());
+        destination, origin_url, is_websocket_, enable_ip_based_pooling_,
+        net_log_.net_log());
     // When there is an valid alternative service info, and `preconnect_job`
     // has no existing QUIC session, create a job for the alternative service.
     if (alternative_service_info_.protocol() != kProtoUnknown &&
@@ -854,9 +852,8 @@
 
       main_job_ = job_factory_->CreateJob(
           this, PRECONNECT, session_, request_info_, IDLE, proxy_info_,
-          server_ssl_config_, base_proxy_ssl_config_,
-          std::move(alternative_destination), origin_url, is_websocket_,
-          enable_ip_based_pooling_, session_->net_log(),
+          server_ssl_config_, std::move(alternative_destination), origin_url,
+          is_websocket_, enable_ip_based_pooling_, session_->net_log(),
           alternative_service_info_.protocol(), quic_version);
     } else {
       main_job_ = std::move(preconnect_job);
@@ -864,9 +861,8 @@
       if (dns_alpn_h3_job_enabled) {
         preconnect_backup_job_ = job_factory_->CreateJob(
             this, PRECONNECT, session_, request_info_, IDLE, proxy_info_,
-            server_ssl_config_, base_proxy_ssl_config_, std::move(destination),
-            origin_url, is_websocket_, enable_ip_based_pooling_,
-            net_log_.net_log());
+            server_ssl_config_, std::move(destination), origin_url,
+            is_websocket_, enable_ip_based_pooling_, net_log_.net_log());
       }
     }
     main_job_->Preconnect(num_streams_);
@@ -874,8 +870,8 @@
   }
   main_job_ = job_factory_->CreateJob(
       this, MAIN, session_, request_info_, priority_, proxy_info_,
-      server_ssl_config_, base_proxy_ssl_config_, std::move(destination),
-      origin_url, is_websocket_, enable_ip_based_pooling_, net_log_.net_log());
+      server_ssl_config_, std::move(destination), origin_url, is_websocket_,
+      enable_ip_based_pooling_, net_log_.net_log());
 
   // Alternative Service can only be set for HTTPS requests while Alternative
   // Proxy is set for HTTP requests.
@@ -901,9 +897,8 @@
 
     alternative_job_ = job_factory_->CreateJob(
         this, ALTERNATIVE, session_, request_info_, priority_, proxy_info_,
-        server_ssl_config_, base_proxy_ssl_config_,
-        std::move(alternative_destination), origin_url, is_websocket_,
-        enable_ip_based_pooling_, net_log_.net_log(),
+        server_ssl_config_, std::move(alternative_destination), origin_url,
+        is_websocket_, enable_ip_based_pooling_, net_log_.net_log(),
         alternative_service_info_.protocol(), quic_version);
   }
 
@@ -913,9 +908,8 @@
         url::SchemeHostPort(origin_url);
     dns_alpn_h3_job_ = job_factory_->CreateJob(
         this, DNS_ALPN_H3, session_, request_info_, priority_, proxy_info_,
-        server_ssl_config_, base_proxy_ssl_config_,
-        std::move(dns_alpn_h3_destination), origin_url, is_websocket_,
-        enable_ip_based_pooling_, net_log_.net_log());
+        server_ssl_config_, std::move(dns_alpn_h3_destination), origin_url,
+        is_websocket_, enable_ip_based_pooling_, net_log_.net_log());
   }
 
   ClearInappropriateJobs();
diff --git a/net/http/http_stream_factory_job_controller.h b/net/http/http_stream_factory_job_controller.h
index 1b6ccd0..e91034fe 100644
--- a/net/http/http_stream_factory_job_controller.h
+++ b/net/http/http_stream_factory_job_controller.h
@@ -42,8 +42,7 @@
                 bool enable_ip_based_pooling,
                 bool enable_alternative_services,
                 bool delay_main_job_with_available_spdy_session,
-                const SSLConfig& server_ssl_config,
-                const SSLConfig& base_proxy_ssl_config);
+                const SSLConfig& server_ssl_config);
 
   ~JobController() override;
 
@@ -371,7 +370,6 @@
   const HttpRequestInfo request_info_;
   ProxyInfo proxy_info_;
   const SSLConfig server_ssl_config_;
-  const SSLConfig base_proxy_ssl_config_;
   int num_streams_ = 0;
   HttpStreamRequest::StreamType stream_type_;
   RequestPriority priority_ = IDLE;
diff --git a/net/http/http_stream_factory_job_controller_unittest.cc b/net/http/http_stream_factory_job_controller_unittest.cc
index 9b2e490..17f3811 100644
--- a/net/http/http_stream_factory_job_controller_unittest.cc
+++ b/net/http/http_stream_factory_job_controller_unittest.cc
@@ -294,10 +294,9 @@
     if (create_job_controller_) {
       auto job_controller = std::make_unique<HttpStreamFactory::JobController>(
           factory_, &request_delegate_, session_.get(), &job_factory_,
-          request_info, is_preconnect_, false /* is_websocket */,
+          request_info, is_preconnect_, /*is_websocket=*/false,
           enable_ip_based_pooling_, enable_alternative_services_,
-          delay_main_job_with_available_spdy_session_, SSLConfig(),
-          SSLConfig());
+          delay_main_job_with_available_spdy_session_, SSLConfig());
       job_controller_ = job_controller.get();
       HttpStreamFactoryPeer::AddJobController(factory_,
                                               std::move(job_controller));
@@ -593,9 +592,9 @@
       const HttpRequestInfo& request_info) {
     auto job_controller = std::make_unique<HttpStreamFactory::JobController>(
         factory_, &request_delegate_, session_.get(), &default_job_factory_,
-        request_info, is_preconnect_, false /* is_websocket */,
+        request_info, is_preconnect_, /*is_websocket=*/false,
         enable_ip_based_pooling_, enable_alternative_services_,
-        delay_main_job_with_available_spdy_session_, SSLConfig(), SSLConfig());
+        delay_main_job_with_available_spdy_session_, SSLConfig());
     auto* job_controller_ptr = job_controller.get();
     HttpStreamFactoryPeer::AddJobController(factory_,
                                             std::move(job_controller));
@@ -3137,9 +3136,9 @@
     MockHttpStreamRequestDelegate request_delegate;
     auto job_controller = std::make_unique<HttpStreamFactory::JobController>(
         factory_, &request_delegate, session_.get(), &job_factory_,
-        request_info, is_preconnect_, false /* is_websocket */,
+        request_info, is_preconnect_, /*is_websocket=*/false,
         enable_ip_based_pooling_, enable_alternative_services_,
-        delay_main_job_with_available_spdy_session_, SSLConfig(), SSLConfig());
+        delay_main_job_with_available_spdy_session_, SSLConfig());
     auto* job_controller_ptr = job_controller.get();
     HttpStreamFactoryPeer::AddJobController(factory_,
                                             std::move(job_controller));
@@ -3271,9 +3270,9 @@
   MockHttpStreamRequestDelegate preconnect_request_delegate;
   auto job_controller = std::make_unique<HttpStreamFactory::JobController>(
       factory_, &preconnect_request_delegate, session_.get(), &job_factory_,
-      request_info, true /* is_preconnect */, false /* is_websocket */,
+      request_info, /*is_preconnect=*/true, /*is_websocket=*/false,
       enable_ip_based_pooling_, enable_alternative_services_,
-      delay_main_job_with_available_spdy_session_, SSLConfig(), SSLConfig());
+      delay_main_job_with_available_spdy_session_, SSLConfig());
   auto* job_controller_ptr = job_controller.get();
   HttpStreamFactoryPeer::AddJobController(factory_, std::move(job_controller));
   job_controller_ptr->Preconnect(1);
@@ -3299,7 +3298,7 @@
               request_info.privacy_mode, SpdySessionKey::IsProxySession::kFalse,
               request_info.socket_tag, request_info.network_anonymization_key,
               request_info.secure_dns_policy),
-          false /* enable_ip_based_pooling */, false /* is_websocket */,
+          false /* enable_ip_based_pooling */, /*is_websocket=*/false,
           NetLogWithSource());
   EXPECT_TRUE(spdy_session);
 }
@@ -3396,8 +3395,7 @@
           other_request_info, /*is_preconnect=*/true,
           /*is_websocket=*/false, /*enable_ip_based_pooling=*/true,
           enable_alternative_services_,
-          delay_main_job_with_available_spdy_session_, SSLConfig(),
-          SSLConfig());
+          delay_main_job_with_available_spdy_session_, SSLConfig());
   auto* preconnect_job_controller_ptr = preconnect_job_controller.get();
   HttpStreamFactoryPeer::AddJobController(factory_,
                                           std::move(preconnect_job_controller));
@@ -3429,7 +3427,7 @@
         other_request_info, /*is_preconnect=*/false,
         /*is_websocket=*/false, /*enable_ip_based_pooling=*/true,
         enable_alternative_services_,
-        delay_main_job_with_available_spdy_session_, SSLConfig(), SSLConfig());
+        delay_main_job_with_available_spdy_session_, SSLConfig());
     auto* job_controller_ptr = job_controller.get();
     HttpStreamFactoryPeer::AddJobController(factory_,
                                             std::move(job_controller));
@@ -3493,9 +3491,9 @@
         std::make_unique<MockHttpStreamRequestDelegate>());
     auto job_controller = std::make_unique<HttpStreamFactory::JobController>(
         factory_, request_delegates[i].get(), session_.get(), &job_factory_,
-        request_info, is_preconnect_, false /* is_websocket */,
+        request_info, is_preconnect_, /*is_websocket=*/false,
         enable_ip_based_pooling_, enable_alternative_services_,
-        delay_main_job_with_available_spdy_session_, SSLConfig(), SSLConfig());
+        delay_main_job_with_available_spdy_session_, SSLConfig());
     auto* job_controller_ptr = job_controller.get();
     HttpStreamFactoryPeer::AddJobController(factory_,
                                             std::move(job_controller));
@@ -3587,10 +3585,9 @@
           std::make_unique<MockHttpStreamRequestDelegate>());
       auto job_controller = std::make_unique<HttpStreamFactory::JobController>(
           factory_, request_delegates[i].get(), session_.get(), &job_factory_,
-          request_info, is_preconnect_, false /* is_websocket */,
+          request_info, is_preconnect_, /*is_websocket=*/false,
           enable_ip_based_pooling_, enable_alternative_services_,
-          delay_main_job_with_available_spdy_session_, SSLConfig(),
-          SSLConfig());
+          delay_main_job_with_available_spdy_session_, SSLConfig());
       auto* job_controller_ptr = job_controller.get();
       HttpStreamFactoryPeer::AddJobController(factory_,
                                               std::move(job_controller));
@@ -3665,9 +3662,9 @@
         std::make_unique<MockHttpStreamRequestDelegate>());
     auto job_controller = std::make_unique<HttpStreamFactory::JobController>(
         factory_, request_delegates[i].get(), session_.get(), &job_factory_,
-        request_info, is_preconnect_, false /* is_websocket */,
+        request_info, is_preconnect_, /*is_websocket=*/false,
         enable_ip_based_pooling_, enable_alternative_services_,
-        delay_main_job_with_available_spdy_session_, SSLConfig(), SSLConfig());
+        delay_main_job_with_available_spdy_session_, SSLConfig());
     auto* job_controller_ptr = job_controller.get();
     HttpStreamFactoryPeer::AddJobController(factory_,
                                             std::move(job_controller));
@@ -3739,9 +3736,9 @@
         std::make_unique<MockHttpStreamRequestDelegate>());
     auto job_controller = std::make_unique<HttpStreamFactory::JobController>(
         factory_, request_delegates[i].get(), session_.get(), &job_factory_,
-        request_info, is_preconnect_, false /* is_websocket */,
+        request_info, is_preconnect_, /*is_websocket=*/false,
         enable_ip_based_pooling_, enable_alternative_services_,
-        delay_main_job_with_available_spdy_session_, SSLConfig(), SSLConfig());
+        delay_main_job_with_available_spdy_session_, SSLConfig());
     auto* job_controller_ptr = job_controller.get();
     HttpStreamFactoryPeer::AddJobController(factory_,
                                             std::move(job_controller));
@@ -3795,9 +3792,9 @@
         std::make_unique<MockHttpStreamRequestDelegate>());
     auto job_controller = std::make_unique<HttpStreamFactory::JobController>(
         factory_, request_delegates[i].get(), session_.get(), &job_factory_,
-        request_info, is_preconnect_, false /* is_websocket */,
+        request_info, is_preconnect_, /*is_websocket=*/false,
         enable_ip_based_pooling_, enable_alternative_services_,
-        delay_main_job_with_available_spdy_session_, SSLConfig(), SSLConfig());
+        delay_main_job_with_available_spdy_session_, SSLConfig());
     auto* job_controller_ptr = job_controller.get();
     HttpStreamFactoryPeer::AddJobController(factory_,
                                             std::move(job_controller));
@@ -3844,9 +3841,9 @@
         std::make_unique<MockHttpStreamRequestDelegate>());
     auto job_controller = std::make_unique<HttpStreamFactory::JobController>(
         factory_, request_delegates[i].get(), session_.get(), &job_factory_,
-        request_info, is_preconnect_, false /* is_websocket */,
+        request_info, is_preconnect_, /*is_websocket=*/false,
         enable_ip_based_pooling_, enable_alternative_services_,
-        delay_main_job_with_available_spdy_session_, SSLConfig(), SSLConfig());
+        delay_main_job_with_available_spdy_session_, SSLConfig());
     auto* job_controller_ptr = job_controller.get();
     HttpStreamFactoryPeer::AddJobController(factory_,
                                             std::move(job_controller));
@@ -3907,9 +3904,9 @@
   HttpStreamFactory::JobFactory default_job_factory;
   auto job_controller = std::make_unique<HttpStreamFactory::JobController>(
       factory_, &request_delegate_, session_.get(), &default_job_factory,
-      request_info, is_preconnect_, false /* is_websocket */,
+      request_info, is_preconnect_, /*is_websocket=*/false,
       enable_ip_based_pooling_, enable_alternative_services_,
-      delay_main_job_with_available_spdy_session_, SSLConfig(), SSLConfig());
+      delay_main_job_with_available_spdy_session_, SSLConfig());
   auto* job_controller_ptr = job_controller.get();
   HttpStreamFactoryPeer::AddJobController(factory_, std::move(job_controller));
   request_ = job_controller_ptr->Start(
@@ -4013,8 +4010,7 @@
         /* is_websocket = */ false,
         /* enable_ip_based_pooling = */ true,
         /* enable_alternative_services = */ true,
-        /* delay_main_job_with_available_spdy_session = */ true, SSLConfig(),
-        SSLConfig());
+        /* delay_main_job_with_available_spdy_session = */ true, SSLConfig());
     job_controller_ = job_controller.get();
     HttpStreamFactoryPeer::AddJobController(factory_,
                                             std::move(job_controller));
@@ -4472,9 +4468,9 @@
       const HttpRequestInfo& request_info) {
     auto controller = std::make_unique<HttpStreamFactory::JobController>(
         factory_, request_delegate, session_.get(), &default_job_factory_,
-        request_info, is_preconnect_, false /* is_websocket */,
+        request_info, is_preconnect_, /*is_websocket=*/false,
         enable_ip_based_pooling_, enable_alternative_services_,
-        delay_main_job_with_available_spdy_session_, SSLConfig(), SSLConfig());
+        delay_main_job_with_available_spdy_session_, SSLConfig());
     *job_controller = controller.get();
     HttpStreamFactoryPeer::AddJobController(factory_, std::move(controller));
   }
diff --git a/net/http/http_stream_factory_test_util.cc b/net/http/http_stream_factory_test_util.cc
index b934d2e..0cb7e508 100644
--- a/net/http/http_stream_factory_test_util.cc
+++ b/net/http/http_stream_factory_test_util.cc
@@ -24,7 +24,6 @@
     RequestPriority priority,
     ProxyInfo proxy_info,
     const SSLConfig& server_ssl_config,
-    const SSLConfig& proxy_ssl_config,
     url::SchemeHostPort destination,
     GURL origin_url,
     NextProto alternative_protocol,
@@ -39,7 +38,6 @@
                              priority,
                              proxy_info,
                              server_ssl_config,
-                             proxy_ssl_config,
                              std::move(destination),
                              origin_url,
                              alternative_protocol,
@@ -68,7 +66,6 @@
     RequestPriority priority,
     const ProxyInfo& proxy_info,
     const SSLConfig& server_ssl_config,
-    const SSLConfig& proxy_ssl_config,
     url::SchemeHostPort destination,
     GURL origin_url,
     bool is_websocket,
@@ -79,9 +76,8 @@
         quic::ParsedQuicVersion::Unsupported()) {
   auto job = std::make_unique<MockHttpStreamFactoryJob>(
       delegate, job_type, session, request_info, priority, proxy_info,
-      SSLConfig(), SSLConfig(), std::move(destination), origin_url,
-      alternative_protocol, quic_version, is_websocket, enable_ip_based_pooling,
-      net_log);
+      SSLConfig(), std::move(destination), origin_url, alternative_protocol,
+      quic_version, is_websocket, enable_ip_based_pooling, net_log);
 
   // Keep raw pointer to Job but pass ownership.
   switch (job_type) {
diff --git a/net/http/http_stream_factory_test_util.h b/net/http/http_stream_factory_test_util.h
index e4bc9f58..e7c4ff7 100644
--- a/net/http/http_stream_factory_test_util.h
+++ b/net/http/http_stream_factory_test_util.h
@@ -111,7 +111,6 @@
                            RequestPriority priority,
                            ProxyInfo proxy_info,
                            const SSLConfig& server_ssl_config,
-                           const SSLConfig& proxy_ssl_config,
                            url::SchemeHostPort destination,
                            GURL origin_url,
                            NextProto alternative_protocol,
@@ -143,7 +142,6 @@
       RequestPriority priority,
       const ProxyInfo& proxy_info,
       const SSLConfig& server_ssl_config,
-      const SSLConfig& proxy_ssl_config,
       url::SchemeHostPort destination,
       GURL origin_url,
       bool is_websocket,
diff --git a/net/http/http_stream_factory_unittest.cc b/net/http/http_stream_factory_unittest.cc
index b10949a5..5ce4d42c2 100644
--- a/net/http/http_stream_factory_unittest.cc
+++ b/net/http/http_stream_factory_unittest.cc
@@ -766,7 +766,7 @@
   StreamRequestWaiter waiter;
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -821,7 +821,7 @@
   StreamRequestWaiter waiter;
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -914,7 +914,7 @@
     StreamRequestWaiter waiter;
     std::unique_ptr<HttpStreamRequest> request(
         session->http_stream_factory()->RequestStream(
-            request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+            request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
             /* enable_ip_based_pooling = */ true,
             /* enable_alternative_services = */ true, NetLogWithSource()));
     waiter.WaitForStream();
@@ -1129,7 +1129,7 @@
 
   std::unique_ptr<HttpStreamRequest> request1(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -1138,7 +1138,7 @@
 
   std::unique_ptr<HttpStreamRequest> request2(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -1148,7 +1148,7 @@
   request_info.privacy_mode = PRIVACY_MODE_ENABLED;
   std::unique_ptr<HttpStreamRequest> request3(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -1198,7 +1198,7 @@
 
   std::unique_ptr<HttpStreamRequest> request1(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -1209,7 +1209,7 @@
 
   std::unique_ptr<HttpStreamRequest> request2(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -1221,7 +1221,7 @@
   request_info.secure_dns_policy = SecureDnsPolicy::kDisable;
   std::unique_ptr<HttpStreamRequest> request3(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -1252,7 +1252,7 @@
   StreamRequestWaiter waiter;
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
 
@@ -1285,7 +1285,7 @@
   StreamRequestWaiter waiter;
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -1334,7 +1334,7 @@
   EXPECT_EQ(0, GetSpdySessionCount(session.get()));
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
-          request_info, LOWEST, ssl_config, ssl_config, &waiter,
+          request_info, LOWEST, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   EXPECT_FALSE(waiter.stream_done());
@@ -1382,7 +1382,7 @@
   StreamRequestWaiter waiter;
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -1422,7 +1422,7 @@
   StreamRequestWaiter waiter;
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -1473,8 +1473,7 @@
   WebSocketStreamCreateHelper create_helper;
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestWebSocketHandshakeStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          &create_helper,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter, &create_helper,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -1518,8 +1517,7 @@
   WebSocketStreamCreateHelper create_helper;
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestWebSocketHandshakeStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          &create_helper,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter, &create_helper,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -1561,8 +1559,7 @@
   WebSocketStreamCreateHelper create_helper;
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestWebSocketHandshakeStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
-          &create_helper,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter, &create_helper,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -1615,7 +1612,7 @@
   StreamRequestWaiter waiter;
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -1670,7 +1667,7 @@
   StreamRequestWaiter waiter;
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -1746,7 +1743,7 @@
   StreamRequestWaiter waiter;
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -1840,12 +1837,12 @@
   StreamRequestWaiter waiter2;
   std::unique_ptr<HttpStreamRequest> request1(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter1,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter1,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   std::unique_ptr<HttpStreamRequest> request2(
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter2,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter2,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter1.WaitForStream();
@@ -1900,14 +1897,14 @@
   StreamRequestWaiter waiter1;
   std::unique_ptr<HttpStreamRequest> request1 =
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter1,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter1,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource());
 
   StreamRequestWaiter waiter2;
   std::unique_ptr<HttpStreamRequest> request2 =
       session->http_stream_factory()->RequestStream(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter2,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter2,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource());
 
@@ -1959,7 +1956,7 @@
   StreamRequestWaiter waiter;
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestBidirectionalStreamImpl(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -2151,7 +2148,7 @@
   StreamRequestWaiter waiter;
   std::unique_ptr<HttpStreamRequest> request(
       session()->http_stream_factory()->RequestBidirectionalStreamImpl(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
 
@@ -2239,7 +2236,7 @@
   StreamRequestWaiter waiter;
   std::unique_ptr<HttpStreamRequest> request(
       session()->http_stream_factory()->RequestBidirectionalStreamImpl(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
 
@@ -2305,7 +2302,7 @@
   StreamRequestWaiter waiter;
   std::unique_ptr<HttpStreamRequest> request(
       session->http_stream_factory()->RequestBidirectionalStreamImpl(
-          request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+          request_info, DEFAULT_PRIORITY, ssl_config, &waiter,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter.WaitForStream();
@@ -2375,7 +2372,7 @@
   StreamRequestWaiter waiter1;
   std::unique_ptr<HttpStreamRequest> request1(
       session->http_stream_factory()->RequestStream(
-          request_info1, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter1,
+          request_info1, DEFAULT_PRIORITY, ssl_config, &waiter1,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter1.WaitForStream();
@@ -2400,7 +2397,7 @@
   StreamRequestWaiter waiter2;
   std::unique_ptr<HttpStreamRequest> request2(
       session->http_stream_factory()->RequestStream(
-          request_info2, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter2,
+          request_info2, DEFAULT_PRIORITY, ssl_config, &waiter2,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter2.WaitForStream();
@@ -2425,7 +2422,7 @@
   StreamRequestWaiter waiter3;
   std::unique_ptr<HttpStreamRequest> request3(
       session->http_stream_factory()->RequestStream(
-          request_info2, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter3,
+          request_info2, DEFAULT_PRIORITY, ssl_config, &waiter3,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter3.WaitForStream();
@@ -2517,7 +2514,7 @@
   StreamRequestWaiter waiter1;
   std::unique_ptr<HttpStreamRequest> request1(
       session()->http_stream_factory()->RequestStream(
-          request_info1, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter1,
+          request_info1, DEFAULT_PRIORITY, ssl_config, &waiter1,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter1.WaitForStream();
@@ -2538,7 +2535,7 @@
   StreamRequestWaiter waiter2;
   std::unique_ptr<HttpStreamRequest> request2(
       session()->http_stream_factory()->RequestStream(
-          request_info2, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter2,
+          request_info2, DEFAULT_PRIORITY, ssl_config, &waiter2,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter2.WaitForStream();
@@ -2558,7 +2555,7 @@
   StreamRequestWaiter waiter3;
   std::unique_ptr<HttpStreamRequest> request3(
       session()->http_stream_factory()->RequestStream(
-          request_info2, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter3,
+          request_info2, DEFAULT_PRIORITY, ssl_config, &waiter3,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter3.WaitForStream();
@@ -2630,7 +2627,7 @@
   StreamRequestWaiter waiter1;
   std::unique_ptr<HttpStreamRequest> request1(
       session->http_stream_factory()->RequestStream(
-          request_info1, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter1,
+          request_info1, DEFAULT_PRIORITY, ssl_config, &waiter1,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter1.WaitForStream();
@@ -2655,7 +2652,7 @@
   StreamRequestWaiter waiter2;
   std::unique_ptr<HttpStreamRequest> request2(
       session->http_stream_factory()->RequestStream(
-          request_info2, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter2,
+          request_info2, DEFAULT_PRIORITY, ssl_config, &waiter2,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter2.WaitForStream();
@@ -2689,7 +2686,7 @@
   StreamRequestWaiter waiter3;
   std::unique_ptr<HttpStreamRequest> request3(
       session->http_stream_factory()->RequestStream(
-          request_info3, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter3,
+          request_info3, DEFAULT_PRIORITY, ssl_config, &waiter3,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter3.WaitForStream();
@@ -2723,7 +2720,7 @@
   StreamRequestWaiter waiter4;
   std::unique_ptr<HttpStreamRequest> request4(
       session->http_stream_factory()->RequestStream(
-          request_info2, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter4,
+          request_info2, DEFAULT_PRIORITY, ssl_config, &waiter4,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter4.WaitForStream();
@@ -2814,7 +2811,7 @@
   StreamRequestWaiter waiter1;
   std::unique_ptr<HttpStreamRequest> request1(
       session->http_stream_factory()->RequestStream(
-          request_info1, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter1,
+          request_info1, DEFAULT_PRIORITY, ssl_config, &waiter1,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter1.WaitForStream();
@@ -2847,7 +2844,7 @@
   StreamRequestWaiter waiter2;
   std::unique_ptr<HttpStreamRequest> request2(
       session->http_stream_factory()->RequestStream(
-          request_info2, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter2,
+          request_info2, DEFAULT_PRIORITY, ssl_config, &waiter2,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter2.WaitForStream();
@@ -2887,7 +2884,7 @@
   StreamRequestWaiter waiter3;
   std::unique_ptr<HttpStreamRequest> request3(
       session->http_stream_factory()->RequestStream(
-          request_info3, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter3,
+          request_info3, DEFAULT_PRIORITY, ssl_config, &waiter3,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter3.WaitForStream();
@@ -2916,7 +2913,7 @@
   StreamRequestWaiter waiter4;
   std::unique_ptr<HttpStreamRequest> request4(
       session->http_stream_factory()->RequestStream(
-          request_info4, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter4,
+          request_info4, DEFAULT_PRIORITY, ssl_config, &waiter4,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter4.WaitForStream();
@@ -2987,7 +2984,7 @@
   StreamRequestWaiter waiter1;
   std::unique_ptr<HttpStreamRequest> request1(
       session->http_stream_factory()->RequestStream(
-          request_info1, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter1,
+          request_info1, DEFAULT_PRIORITY, ssl_config, &waiter1,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter1.WaitForStream();
@@ -3008,7 +3005,7 @@
   StreamRequestWaiter waiter2;
   std::unique_ptr<HttpStreamRequest> request2(
       session->http_stream_factory()->RequestStream(
-          request_info2, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter2,
+          request_info2, DEFAULT_PRIORITY, ssl_config, &waiter2,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter2.WaitForStream();
@@ -3029,8 +3026,7 @@
   StreamRequestWaiter waiter3;
   std::unique_ptr<HttpStreamRequest> request3(
       session->http_stream_factory()->RequestStream(
-          request_info1_alias, DEFAULT_PRIORITY, ssl_config, ssl_config,
-          &waiter3,
+          request_info1_alias, DEFAULT_PRIORITY, ssl_config, &waiter3,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter3.WaitForStream();
@@ -3053,8 +3049,7 @@
   StreamRequestWaiter waiter4;
   std::unique_ptr<HttpStreamRequest> request4(
       session->http_stream_factory()->RequestStream(
-          request_info2_alias, DEFAULT_PRIORITY, ssl_config, ssl_config,
-          &waiter4,
+          request_info2_alias, DEFAULT_PRIORITY, ssl_config, &waiter4,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter4.WaitForStream();
@@ -3121,7 +3116,7 @@
   StreamRequestWaiter waiter1;
   std::unique_ptr<HttpStreamRequest> request1(
       session->http_stream_factory()->RequestStream(
-          request_info_a, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter1,
+          request_info_a, DEFAULT_PRIORITY, ssl_config, &waiter1,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter1.WaitForStream();
@@ -3143,7 +3138,7 @@
   StreamRequestWaiter waiter2;
   std::unique_ptr<HttpStreamRequest> request2(
       session->http_stream_factory()->RequestStream(
-          request_info_b, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter2,
+          request_info_b, DEFAULT_PRIORITY, ssl_config, &waiter2,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter2.WaitForStream();
@@ -3167,7 +3162,7 @@
   StreamRequestWaiter waiter3;
   std::unique_ptr<HttpStreamRequest> request3(
       session->http_stream_factory()->RequestStream(
-          request_info_c, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter3,
+          request_info_c, DEFAULT_PRIORITY, ssl_config, &waiter3,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter3.WaitForStream();
@@ -3195,7 +3190,7 @@
   // non-default DNS aliases.
   std::unique_ptr<HttpStreamRequest> request4(
       session->http_stream_factory()->RequestStream(
-          request_info_a, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter1,
+          request_info_a, DEFAULT_PRIORITY, ssl_config, &waiter1,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter1.WaitForStream();
@@ -3218,7 +3213,7 @@
   // aliases.
   std::unique_ptr<HttpStreamRequest> request5(
       session->http_stream_factory()->RequestStream(
-          request_info_b, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter2,
+          request_info_b, DEFAULT_PRIORITY, ssl_config, &waiter2,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter2.WaitForStream();
@@ -3242,7 +3237,7 @@
   // DNS alias (the host name).
   std::unique_ptr<HttpStreamRequest> request6(
       session->http_stream_factory()->RequestStream(
-          request_info_c, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter3,
+          request_info_c, DEFAULT_PRIORITY, ssl_config, &waiter3,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter3.WaitForStream();
@@ -3331,7 +3326,7 @@
   StreamRequestWaiter waiter1;
   std::unique_ptr<HttpStreamRequest> request1(
       session()->http_stream_factory()->RequestStream(
-          request_info_a, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter1,
+          request_info_a, DEFAULT_PRIORITY, ssl_config, &waiter1,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter1.WaitForStream();
@@ -3348,7 +3343,7 @@
   StreamRequestWaiter waiter2;
   std::unique_ptr<HttpStreamRequest> request2(
       session()->http_stream_factory()->RequestStream(
-          request_info_b, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter2,
+          request_info_b, DEFAULT_PRIORITY, ssl_config, &waiter2,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter2.WaitForStream();
@@ -3367,7 +3362,7 @@
   StreamRequestWaiter waiter3;
   std::unique_ptr<HttpStreamRequest> request3(
       session()->http_stream_factory()->RequestStream(
-          request_info_c, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter3,
+          request_info_c, DEFAULT_PRIORITY, ssl_config, &waiter3,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter3.WaitForStream();
@@ -3388,7 +3383,7 @@
   // Create a request that will reuse the first session.
   std::unique_ptr<HttpStreamRequest> request4(
       session()->http_stream_factory()->RequestStream(
-          request_info_a, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter1,
+          request_info_a, DEFAULT_PRIORITY, ssl_config, &waiter1,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter1.WaitForStream();
@@ -3405,7 +3400,7 @@
   // Create another request that will alias and reuse the first session.
   std::unique_ptr<HttpStreamRequest> request5(
       session()->http_stream_factory()->RequestStream(
-          request_info_b, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter2,
+          request_info_b, DEFAULT_PRIORITY, ssl_config, &waiter2,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter2.WaitForStream();
@@ -3423,7 +3418,7 @@
   // Create another request that will alias and reuse the first session.
   std::unique_ptr<HttpStreamRequest> request6(
       session()->http_stream_factory()->RequestStream(
-          request_info_c, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter3,
+          request_info_c, DEFAULT_PRIORITY, ssl_config, &waiter3,
           /* enable_ip_based_pooling = */ true,
           /* enable_alternative_services = */ true, NetLogWithSource()));
   waiter3.WaitForStream();
diff --git a/net/http/http_stream_request_unittest.cc b/net/http/http_stream_request_unittest.cc
index 29c05b9..716ea88a 100644
--- a/net/http/http_stream_request_unittest.cc
+++ b/net/http/http_stream_request_unittest.cc
@@ -45,8 +45,7 @@
       /* is_websocket = */ false,
       /* enable_ip_based_pooling = */ true,
       /* enable_alternative_services = */ true,
-      /* delay_main_job_with_available_spdy_session = */ true, SSLConfig(),
-      SSLConfig());
+      /* delay_main_job_with_available_spdy_session = */ true, SSLConfig());
   HttpStreamFactory::JobController* job_controller_raw_ptr =
       job_controller.get();
   factory->job_controller_set_.insert(std::move(job_controller));
diff --git a/net/socket/connect_job_factory.cc b/net/socket/connect_job_factory.cc
index 999bbcf..ef4f73db 100644
--- a/net/socket/connect_job_factory.cc
+++ b/net/socket/connect_job_factory.cc
@@ -177,6 +177,17 @@
     if (proxy_chain.proxy_server().is_secure_http_like()) {
       DCHECK(base_ssl_config_for_proxies);
       first_proxy_server_ssl_config = *base_ssl_config_for_proxies;
+      // Disable cert verification network fetches for secure proxies, since
+      // those network requests are probably going to need to go through the
+      // proxy chain too.
+      //
+      // Any proxy-specific SSL behavior here should also be configured for QUIC
+      // proxies.
+      //
+      // TODO(https://crbug.com/1491092): Also do this for the other hops if
+      // the proxy chain is multi-hop.
+      first_proxy_server_ssl_config.disable_cert_verification_network_fetches =
+          true;
 
       HttpServerProperties* http_server_properties =
           common_connect_job_params->http_server_properties;
diff --git a/net/socket/connect_job_factory_unittest.cc b/net/socket/connect_job_factory_unittest.cc
index c149773b..1b1b699 100644
--- a/net/socket/connect_job_factory_unittest.cc
+++ b/net/socket/connect_job_factory_unittest.cc
@@ -256,6 +256,8 @@
   const SSLSocketParams& params = *ssl_job_factory_->params().front();
   EXPECT_EQ(params.host_and_port(),
             HostPortPair::FromSchemeHostPort(kEndpoint));
+  EXPECT_FALSE(params.ssl_config().disable_cert_verification_network_fetches);
+  EXPECT_EQ(0, params.ssl_config().GetCertVerifyFlags());
 
   ASSERT_EQ(params.GetConnectionType(), SSLSocketParams::DIRECT);
   const TransportSocketParams& transport_params =
@@ -284,6 +286,8 @@
   ASSERT_THAT(ssl_job_factory_->params(), testing::SizeIs(1));
   const SSLSocketParams& params = *ssl_job_factory_->params().front();
   EXPECT_EQ(params.host_and_port(), kEndpoint);
+  EXPECT_FALSE(params.ssl_config().disable_cert_verification_network_fetches);
+  EXPECT_EQ(0, params.ssl_config().GetCertVerifyFlags());
 
   ASSERT_EQ(params.GetConnectionType(), SSLSocketParams::DIRECT);
   const TransportSocketParams& transport_params =
@@ -368,6 +372,8 @@
   const SSLSocketParams& params = *ssl_job_factory_->params().front();
   EXPECT_EQ(params.host_and_port(),
             HostPortPair::FromSchemeHostPort(kEndpoint));
+  EXPECT_FALSE(params.ssl_config().disable_cert_verification_network_fetches);
+  EXPECT_EQ(0, params.ssl_config().GetCertVerifyFlags());
 
   ASSERT_EQ(params.GetConnectionType(), SSLSocketParams::HTTP_PROXY);
   const HttpProxySocketParams& proxy_params =
@@ -443,6 +449,10 @@
   ASSERT_TRUE(params.ssl_params());
   const SSLSocketParams& ssl_params = *params.ssl_params();
   EXPECT_EQ(ssl_params.host_and_port(), kProxy.proxy_server().host_port_pair());
+  EXPECT_TRUE(
+      ssl_params.ssl_config().disable_cert_verification_network_fetches);
+  EXPECT_EQ(CertVerifier::VERIFY_DISABLE_NETWORK_FETCHES,
+            ssl_params.ssl_config().GetCertVerifyFlags());
 
   ASSERT_EQ(ssl_params.GetConnectionType(), SSLSocketParams::DIRECT);
   const TransportSocketParams& transport_params =
@@ -477,6 +487,10 @@
   ASSERT_TRUE(params.ssl_params());
   const SSLSocketParams& ssl_params = *params.ssl_params();
   EXPECT_EQ(ssl_params.host_and_port(), kProxy.proxy_server().host_port_pair());
+  EXPECT_TRUE(
+      ssl_params.ssl_config().disable_cert_verification_network_fetches);
+  EXPECT_EQ(CertVerifier::VERIFY_DISABLE_NETWORK_FETCHES,
+            ssl_params.ssl_config().GetCertVerifyFlags());
 
   ASSERT_EQ(ssl_params.GetConnectionType(), SSLSocketParams::DIRECT);
   const TransportSocketParams& transport_params =
diff --git a/net/url_request/http_with_dns_over_https_unittest.cc b/net/url_request/http_with_dns_over_https_unittest.cc
index e76e6aa..2abfc32 100644
--- a/net/url_request/http_with_dns_over_https_unittest.cc
+++ b/net/url_request/http_with_dns_over_https_unittest.cc
@@ -295,8 +295,8 @@
   request_info.url = http_server.GetURL("localhost", "/preconnect");
 
   std::unique_ptr<HttpStreamRequest> request(factory->RequestStream(
-      request_info, DEFAULT_PRIORITY, SSLConfig(), SSLConfig(),
-      &request_delegate, false, false, NetLogWithSource()));
+      request_info, DEFAULT_PRIORITY, SSLConfig(), &request_delegate, false,
+      false, NetLogWithSource()));
   loop.Run();
 
   ClientSocketPool::GroupId group_id(
diff --git a/services/tracing/public/cpp/trace_startup.cc b/services/tracing/public/cpp/trace_startup.cc
index 6ebc0d2..a09db45 100644
--- a/services/tracing/public/cpp/trace_startup.cc
+++ b/services/tracing/public/cpp/trace_startup.cc
@@ -21,6 +21,10 @@
 #include "services/tracing/public/cpp/tracing_features.h"
 #include "third_party/perfetto/include/perfetto/tracing/track.h"
 
+#if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) && BUILDFLAG(IS_WIN)
+#include "components/tracing/common/etw_export_win.h"
+#endif
+
 namespace tracing {
 namespace {
 
@@ -187,6 +191,8 @@
                          ->ConnectToSystemService();
                    }));
   }
+#elif BUILDFLAG(IS_WIN)  // !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
+  tracing::EnableETWExport();
 #endif  // !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
 }
 
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json
index 1112eb3..521cbd4b 100644
--- a/testing/buildbot/chromium.linux.json
+++ b/testing/buildbot/chromium.linux.json
@@ -3131,6 +3131,34 @@
       },
       {
         "args": [
+          "--test-type",
+          "testharness",
+          "reftest",
+          "crashtest",
+          "print-reftest"
+        ],
+        "experiment_percentage": 10,
+        "isolate_profile_data": true,
+        "merge": {
+          "args": [
+            "--verbose"
+          ],
+          "script": "//third_party/blink/tools/merge_web_test_results.py"
+        },
+        "name": "chrome_wpt_tests",
+        "results_handler": "layout tests",
+        "swarming": {
+          "dimensions": {
+            "os": "Ubuntu-22.04"
+          },
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 15
+        },
+        "test": "chrome_wpt_tests",
+        "test_id_prefix": "ninja://:chrome_wpt_tests/"
+      },
+      {
+        "args": [
           "--test-type=integration"
         ],
         "isolate_profile_data": true,
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index 905c1d2..9528821 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -1670,6 +1670,14 @@
       },
     },
   },
+  # TODO(weizhong): Remove this once experiment completes
+  'chrome_wpt_tests': {
+    'modifications': {
+      'Linux Tests': {
+        'experiment_percentage': 10,
+      },
+    },
+  },
   'chromedriver_py_tests': {
     'modifications': {
       'Win10 Tests x64': {
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index e4825fc..7cec711 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -1462,6 +1462,29 @@
       },
     },
 
+    'chromium_wpt_tests_isolated_scripts': {
+      'chrome_wpt_tests': {
+        'test': 'chrome_wpt_tests',
+        'results_handler': 'layout tests',
+        'args': [
+          '--test-type',
+          'testharness',
+          'reftest',
+          'crashtest',
+          'print-reftest',
+        ],
+        'swarming': {
+          'shards': 15,
+        },
+        'merge': {
+          'script': '//third_party/blink/tools/merge_web_test_results.py',
+          'args': [
+            '--verbose',
+          ],
+        },
+      },
+    },
+
     'clang_tot_gtests': {
       'base_unittests': {},
     },
@@ -5565,29 +5588,6 @@
       },
     },
 
-    'wpt_web_tests': {
-      'chrome_wpt_tests': {
-        'test': 'chrome_wpt_tests',
-        'results_handler': 'layout tests',
-        'args': [
-          '--test-type',
-          'testharness',
-          'reftest',
-          'crashtest',
-          'print-reftest',
-        ],
-        'swarming': {
-          'shards': 15,
-        },
-        'merge': {
-          'script': '//third_party/blink/tools/merge_web_test_results.py',
-          'args': [
-            '--verbose',
-          ],
-        },
-      },
-    },
-
     'wpt_web_tests_android': {
       'chrome_public_wpt': {
         'results_handler': 'layout tests',
@@ -5961,6 +5961,7 @@
       'vulkan_swiftshader_isolated_scripts',
       'chromium_web_tests_high_dpi_isolated_scripts',
       'chromium_web_tests_brfetch_isolated_scripts',
+      'chromium_wpt_tests_isolated_scripts',
     ],
 
     'chromium_mac_gtests': [
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index 5cb20eb..03ddab7 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -3811,7 +3811,7 @@
           'linux-jammy',
         ],
         'test_suites': {
-          'isolated_scripts': 'wpt_web_tests',
+          'isolated_scripts': 'chromium_wpt_tests_isolated_scripts',
         },
       },
       'mac-fieldtrial-tester': {
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index c3761d0a..95250b6 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -6521,22 +6521,15 @@
             ]
         }
     ],
-    "EnableShoppingListIOS": [
+    "EnableShoppingListIOSM119": [
         {
             "platforms": [
                 "ios"
             ],
             "experiments": [
                 {
-                    "name": "Enabled_20230517",
-                    "params": {
-                        "enable_price_notification": "true"
-                    },
+                    "name": "Enabled_20231112",
                     "enable_features": [
-                        "CommercePriceTracking",
-                        "IPH_PriceNotificationsWhileBrowsing",
-                        "NotificationSettingsMenuItem",
-                        "OptimizationGuidePushNotifications",
                         "ShoppingList"
                     ]
                 }
@@ -11077,6 +11070,209 @@
             ]
         }
     ],
+    "OmniboxCompanyEntityIconAdjustmentAndroid": [
+        {
+            "platforms": [
+                "android"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled_LeastAggressive",
+                    "params": {
+                        "OmniboxCompanyEntityAdjustmentGroup": "least-aggressive"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                },
+                {
+                    "name": "Enabled_Moderate",
+                    "params": {
+                        "OmniboxCompanyEntityAdjustmentGroup": "moderate"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                },
+                {
+                    "name": "Enabled_MostAggressive",
+                    "params": {
+                        "OmniboxCompanyEntityAdjustmentGroup": "most-aggressive"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                },
+                {
+                    "name": "Enabled_LeastAggressive_Counterfactual",
+                    "params": {
+                        "CompanyEntityIconAdjustmentCounterfactual": "true",
+                        "OmniboxCompanyEntityAdjustmentGroup": "least-aggressive"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                },
+                {
+                    "name": "Enabled_Moderate_Counterfactual",
+                    "params": {
+                        "CompanyEntityIconAdjustmentCounterfactual": "true",
+                        "OmniboxCompanyEntityAdjustmentGroup": "moderate"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                },
+                {
+                    "name": "Enabled_MostAggressive_Counterfactual",
+                    "params": {
+                        "CompanyEntityIconAdjustmentCounterfactual": "true",
+                        "OmniboxCompanyEntityAdjustmentGroup": "most-aggressive"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                }
+            ]
+        }
+    ],
+    "OmniboxCompanyEntityIconAdjustmentDesktop": [
+        {
+            "platforms": [
+                "chromeos",
+                "chromeos_lacros",
+                "fuchsia",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled_LeastAggressive",
+                    "params": {
+                        "OmniboxCompanyEntityAdjustmentGroup": "least-aggressive"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                },
+                {
+                    "name": "Enabled_Moderate",
+                    "params": {
+                        "OmniboxCompanyEntityAdjustmentGroup": "moderate"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                },
+                {
+                    "name": "Enabled_MostAggressive",
+                    "params": {
+                        "OmniboxCompanyEntityAdjustmentGroup": "most-aggressive"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                },
+                {
+                    "name": "Enabled_LeastAggressive_Counterfactual",
+                    "params": {
+                        "CompanyEntityIconAdjustmentCounterfactual": "true",
+                        "OmniboxCompanyEntityAdjustmentGroup": "least-aggressive"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                },
+                {
+                    "name": "Enabled_Moderate_Counterfactual",
+                    "params": {
+                        "CompanyEntityIconAdjustmentCounterfactual": "true",
+                        "OmniboxCompanyEntityAdjustmentGroup": "moderate"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                },
+                {
+                    "name": "Enabled_MostAggressive_Counterfactual",
+                    "params": {
+                        "CompanyEntityIconAdjustmentCounterfactual": "true",
+                        "OmniboxCompanyEntityAdjustmentGroup": "most-aggressive"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                }
+            ]
+        }
+    ],
+    "OmniboxCompanyEntityIconAdjustmentIOS": [
+        {
+            "platforms": [
+                "ios"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled_LeastAggressive",
+                    "params": {
+                        "OmniboxCompanyEntityAdjustmentGroup": "least-aggressive"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                },
+                {
+                    "name": "Enabled_Moderate",
+                    "params": {
+                        "OmniboxCompanyEntityAdjustmentGroup": "moderate"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                },
+                {
+                    "name": "Enabled_MostAggressive",
+                    "params": {
+                        "OmniboxCompanyEntityAdjustmentGroup": "most-aggressive"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                },
+                {
+                    "name": "Enabled_LeastAggressive_Counterfactual",
+                    "params": {
+                        "CompanyEntityIconAdjustmentCounterfactual": "true",
+                        "OmniboxCompanyEntityAdjustmentGroup": "least-aggressive"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                },
+                {
+                    "name": "Enabled_Moderate_Counterfactual",
+                    "params": {
+                        "CompanyEntityIconAdjustmentCounterfactual": "true",
+                        "OmniboxCompanyEntityAdjustmentGroup": "moderate"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                },
+                {
+                    "name": "Enabled_MostAggressive_Counterfactual",
+                    "params": {
+                        "CompanyEntityIconAdjustmentCounterfactual": "true",
+                        "OmniboxCompanyEntityAdjustmentGroup": "most-aggressive"
+                    },
+                    "enable_features": [
+                        "CompanyEntityIconAdjustment"
+                    ]
+                }
+            ]
+        }
+    ],
     "OmniboxConsumesImeInsets": [
         {
             "platforms": [
@@ -18471,6 +18667,27 @@
             ]
         }
     ],
+    "TrackingProtectionRollback": [
+        {
+            "platforms": [
+                "android",
+                "chromeos",
+                "chromeos_lacros",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "TrackingProtectionOnboardingRollback",
+                        "TrackingProtectionSettingsPageRollbackNotice"
+                    ]
+                }
+            ]
+        }
+    ],
     "TrackingProtectionSentimentSurvey": [
         {
             "platforms": [
diff --git a/third_party/angle b/third_party/angle
index a75659e..95bacc2 160000
--- a/third_party/angle
+++ b/third_party/angle
@@ -1 +1 @@
-Subproject commit a75659eb40cc887619bb1e4d4efb91030891ced7
+Subproject commit 95bacc28b87bf1ea639891b7fb7e17d2afc868a1
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index cc14f043..8f81b28 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -2061,6 +2061,10 @@
     kVSyncDecodingHiddenOccludedTickDuration{
         &kVSyncDecoding, "occluded_tick_duration", base::Hertz(10)};
 
+BASE_FEATURE(kWebRtcUseCaptureBeginTimestamp,
+             "WebRtcUseCaptureBeginTimestamp",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 // Enable borderless mode for desktop PWAs. go/borderless-mode
 BASE_FEATURE(kWebAppBorderless,
              "WebAppBorderless",
@@ -2275,5 +2279,12 @@
          base::FeatureList::IsEnabled(kFetchLaterAPI);
 }
 
+BASE_FEATURE(kExpandCompositedCullRect,
+             "ExpandCompositedCullRect",
+             base::FEATURE_ENABLED_BY_DEFAULT);
+const base::FeatureParam<int> kPixelDistanceToExpand(&kExpandCompositedCullRect,
+                                                     "pixels",
+                                                     4000);
+
 }  // namespace features
 }  // namespace blink
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn
index 8d54331..460738c6 100644
--- a/third_party/blink/public/BUILD.gn
+++ b/third_party/blink/public/BUILD.gn
@@ -312,6 +312,7 @@
     "web/web_embedded_worker_start_data.h",
     "web/web_form_control_element.h",
     "web/web_form_element.h",
+    "web/web_form_related_change_type.h",
     "web/web_frame.h",
     "web/web_frame_content_dumper.h",
     "web/web_frame_load_type.h",
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index b05a4d0..c5f2a9c 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -1382,6 +1382,11 @@
 BLINK_COMMON_EXPORT extern const base::FeatureParam<base::TimeDelta>
     kVSyncDecodingHiddenOccludedTickDuration;
 
+// Feature flag for making use of VideoFrameMetadata::capture_begin_time
+// if set, instead of relating incoming media timestamps to local time in the
+// WebRTC track source.
+BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kWebRtcUseCaptureBeginTimestamp);
+
 BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kWebAppBorderless);
 BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kWebAppEnableScopeExtensions);
 BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kWebAppEnableUrlHandlers);
@@ -1477,6 +1482,11 @@
 BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(
     kRemoveAuthroizationOnCrossOriginRedirect);
 
+// Number of pixels to expand in root coordinates for cull rect under
+// scroll translation or other composited transform.
+BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kExpandCompositedCullRect);
+BLINK_COMMON_EXPORT extern const base::FeatureParam<int> kPixelDistanceToExpand;
+
 }  // namespace features
 }  // namespace blink
 
diff --git a/third_party/blink/public/common/input/web_gesture_event.h b/third_party/blink/public/common/input/web_gesture_event.h
index 1c90757..b244bb3 100644
--- a/third_party/blink/public/common/input/web_gesture_event.h
+++ b/third_party/blink/public/common/input/web_gesture_event.h
@@ -275,6 +275,7 @@
       case Type::kGestureShortPress:
       case Type::kGestureLongPress:
       case Type::kGestureLongTap:
+      case Type::kGestureDoubleTap:
         return false;
       default:
         NOTREACHED();
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
index 8fabfc9..7353f22 100644
--- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl
+++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -4250,7 +4250,7 @@
     parameters
       # User agent to use.
       string userAgent
-      # Browser langugage to emulate.
+      # Browser language to emulate.
       optional string acceptLanguage
       # The platform navigator.platform should return.
       optional string platform
@@ -6427,7 +6427,7 @@
     parameters
       # User agent to use.
       string userAgent
-      # Browser langugage to emulate.
+      # Browser language to emulate.
       optional string acceptLanguage
       # The platform navigator.platform should return.
       optional string platform
diff --git a/third_party/blink/public/mojom/frame/frame.mojom b/third_party/blink/public/mojom/frame/frame.mojom
index 76f0bf1..9379007d 100644
--- a/third_party/blink/public/mojom/frame/frame.mojom
+++ b/third_party/blink/public/mojom/frame/frame.mojom
@@ -193,6 +193,8 @@
   bool credentialless;
   // 'browsingtopics' attribute of the iframe.
   bool browsing_topics;
+  // 'adauctionheaders' attribute of the iframe.
+  bool ad_auction_headers;
   // 'sharedstoragewritable' attribute of the iframe.
   bool shared_storage_writable_opted_in;
   // 'id' attribute of the iframe. This can be optional because id might not be set.
diff --git a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
index 6ac92ce8..d6acbdc 100644
--- a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
+++ b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
@@ -4074,7 +4074,7 @@
   kThirdPartyCookieDeprecation_AllowBy3PCDHeuristics = 4735,
   kThirdPartyCookieDeprecation_AllowByStorageAccess = 4736,
   kThirdPartyCookieDeprecation_AllowByTopLevelStorageAccess = 4737,
-
+  kIframeAdAuctionHeadersAttribute = 4738,
 
   // Add new features immediately above this line. Don't change assigned
   // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/public/web/web_autofill_client.h b/third_party/blink/public/web/web_autofill_client.h
index b56768fe8..78d02a88 100644
--- a/third_party/blink/public/web/web_autofill_client.h
+++ b/third_party/blink/public/web/web_autofill_client.h
@@ -32,6 +32,7 @@
 #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_AUTOFILL_CLIENT_H_
 
 #include "third_party/blink/public/web/web_element.h"
+#include "third_party/blink/public/web/web_form_related_change_type.h"
 #include "third_party/blink/public/web/web_local_frame.h"
 
 namespace blink {
@@ -82,7 +83,9 @@
   // Called when the user interacts with the page after a load.
   virtual void UserGestureObserved() {}
 
-  virtual void DidAddOrRemoveFormRelatedElementsDynamically() {}
+  virtual void DidChangeFormRelatedElementDynamically(
+      const WebElement&,
+      WebFormRelatedChangeType) {}
   virtual void AjaxSucceeded() {}
   // Called when |element| is in autofilled state and the value has been changed
   // by JavaScript. |old_value| contains the value before being changed.
diff --git a/third_party/blink/public/web/web_form_related_change_type.h b/third_party/blink/public/web/web_form_related_change_type.h
new file mode 100644
index 0000000..40b438c7
--- /dev/null
+++ b/third_party/blink/public/web/web_form_related_change_type.h
@@ -0,0 +1,14 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_FORM_RELATED_CHANGE_TYPE_H_
+#define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_FORM_RELATED_CHANGE_TYPE_H_
+
+namespace blink {
+
+enum class WebFormRelatedChangeType { kAdd, kRemove, kReassociate };
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_FORM_RELATED_CHANGE_TYPE_H_
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
index 12723b6..71c8ebc 100644
--- a/third_party/blink/renderer/core/dom/document.cc
+++ b/third_party/blink/renderer/core/dom/document.cc
@@ -8393,14 +8393,17 @@
   return *template_document_.Get();
 }
 
-void Document::DidAddOrRemoveFormRelatedElement(Element* element) {
+void Document::DidChangeFormRelatedElementDynamically(
+    HTMLElement* element,
+    WebFormRelatedChangeType form_related_change) {
   if (!GetFrame() || !GetFrame()->GetPage() || !HasFinishedParsing())
     return;
 
   GetFrame()
       ->GetPage()
       ->GetChromeClient()
-      .DidAddOrRemoveFormRelatedElementsAfterLoad(GetFrame());
+      .DidChangeFormRelatedElementDynamically(GetFrame(), element,
+                                              form_related_change);
 }
 
 float Document::DevicePixelRatio() const {
diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h
index 8c5fa2c6..79c27f4 100644
--- a/third_party/blink/renderer/core/dom/document.h
+++ b/third_party/blink/renderer/core/dom/document.h
@@ -54,6 +54,7 @@
 #include "third_party/blink/public/mojom/permissions/permission_status.mojom-blink-forward.h"
 #include "third_party/blink/public/mojom/permissions_policy/document_policy_feature.mojom-blink-forward.h"
 #include "third_party/blink/public/mojom/scroll/scrollbar_mode.mojom-blink-forward.h"
+#include "third_party/blink/public/web/web_form_related_change_type.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_typedefs.h"
 #include "third_party/blink/renderer/core/accessibility/axid.h"
 #include "third_party/blink/renderer/core/animation/animation_clock.h"
@@ -1597,7 +1598,11 @@
   Document& EnsureTemplateDocument();
   Document* TemplateDocumentHost() { return template_document_host_.Get(); }
 
-  void DidAddOrRemoveFormRelatedElement(Element*);
+  // Signals the ChromeClient that a (Form|Listed)Element changed dynamically,
+  // passing the changed element as well as the type of the change.
+  // TODO(crbug.com/1483242): Fire the signal for elements that become hidden.
+  void DidChangeFormRelatedElementDynamically(HTMLElement*,
+                                              WebFormRelatedChangeType);
 
   void AddConsoleMessage(ConsoleMessage* message,
                          bool discard_duplicates = false) const;
diff --git a/third_party/blink/renderer/core/dom/document_test.cc b/third_party/blink/renderer/core/dom/document_test.cc
index a2fcc03..f6b5a7a 100644
--- a/third_party/blink/renderer/core/dom/document_test.cc
+++ b/third_party/blink/renderer/core/dom/document_test.cc
@@ -1679,7 +1679,6 @@
 }
 
 TEST_F(DocumentSimTest, DuplicatedDocumentPolicyViolationsAreIgnored) {
-  blink::ScopedDocumentPolicyForTest scoped_document_policy(true);
   SimRequest::Params params;
   params.response_http_headers = {
       {"Document-Policy", "lossless-images-max-bpp=1.0"}};
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc
index 7790f35..10e01da 100644
--- a/third_party/blink/renderer/core/execution_context/execution_context.cc
+++ b/third_party/blink/renderer/core/execution_context/execution_context.cc
@@ -599,10 +599,6 @@
 bool ExecutionContext::IsFeatureEnabled(
     mojom::blink::DocumentPolicyFeature feature,
     PolicyValue threshold_value) const {
-  // The default value for any feature should be true unless restricted by
-  // document policy
-  if (!RuntimeEnabledFeatures::DocumentPolicyEnabled())
-    return true;
   return security_context_.IsFeatureEnabled(feature, threshold_value).enabled;
 }
 
@@ -623,11 +619,6 @@
     ReportOptions report_option,
     const String& message,
     const String& source_file) {
-  // The default value for any feature should be true unless restricted by
-  // document policy
-  if (!RuntimeEnabledFeatures::DocumentPolicyEnabled())
-    return true;
-
   SecurityContext::FeatureStatus status =
       security_context_.IsFeatureEnabled(feature, threshold_value);
   if (status.should_report &&
diff --git a/third_party/blink/renderer/core/execution_context/security_context_init.cc b/third_party/blink/renderer/core/execution_context/security_context_init.cc
index b972a4c..e4eb31a 100644
--- a/third_party/blink/renderer/core/execution_context/security_context_init.cc
+++ b/third_party/blink/renderer/core/execution_context/security_context_init.cc
@@ -60,9 +60,6 @@
 void SecurityContextInit::ApplyDocumentPolicy(
     DocumentPolicy::ParsedDocumentPolicy& document_policy,
     const String& report_only_document_policy_header) {
-  if (!RuntimeEnabledFeatures::DocumentPolicyEnabled())
-    return;
-
   // Because Document-Policy http header is parsed in DocumentLoader,
   // when origin trial context is not initialized yet.
   // Needs to filter out features that are not in origin trial after
diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_party/blink/renderer/core/frame/local_dom_window.cc
index d4aa9ffaf..6a25fd1 100644
--- a/third_party/blink/renderer/core/frame/local_dom_window.cc
+++ b/third_party/blink/renderer/core/frame/local_dom_window.cc
@@ -437,6 +437,9 @@
   if (!GetFrame())
     return false;
 
+  // Detached frames should not be attempting to execute script.
+  DCHECK(!GetFrame()->IsDetached());
+
   // Normally, scripts are not allowed in sandboxed contexts that disallow them.
   // However, there is an exception for cases when the script should bypass the
   // main world's CSP (such as for privileged isolated worlds). See
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
index d4c2618..77694b7 100644
--- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
+++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
@@ -1025,9 +1025,8 @@
     const WebGestureEvent& event) {
   WebInputEventResult event_result = WebInputEventResult::kNotHandled;
 
-  // Fling events are not sent to the renderer.
-  CHECK(event.GetType() != WebInputEvent::Type::kGestureFlingStart);
-  CHECK(event.GetType() != WebInputEvent::Type::kGestureFlingCancel);
+  // Fling and scroll events are not sent to the renderer main thread.
+  CHECK(!event.IsScrollEvent());
 
   WebViewImpl* web_view = View();
 
@@ -1058,21 +1057,6 @@
       event_result = WebInputEventResult::kHandledSystem;
       DidHandleGestureEvent(event);
       return event_result;
-    case WebInputEvent::Type::kGestureScrollBegin:
-    case WebInputEvent::Type::kGestureScrollEnd:
-    case WebInputEvent::Type::kGestureScrollUpdate:
-      // If we are getting any scroll toss close any page popup that is open.
-      web_view->CancelPagePopup();
-
-      // Scrolling-related gesture events invoke EventHandler recursively for
-      // each frame down the chain, doing a single-frame hit-test per frame.
-      // This matches handleWheelEvent.  Perhaps we could simplify things by
-      // rewriting scroll handling to work inner frame out, and then unify with
-      // other gesture events.
-      event_result =
-          frame->GetEventHandler().HandleGestureScrollEvent(scaled_event);
-      DidHandleGestureEvent(event);
-      return event_result;
     default:
       break;
   }
diff --git a/third_party/blink/renderer/core/html/forms/html_form_element.cc b/third_party/blink/renderer/core/html/forms/html_form_element.cc
index c337d9cb..4985d01 100644
--- a/third_party/blink/renderer/core/html/forms/html_form_element.cc
+++ b/third_party/blink/renderer/core/html/forms/html_form_element.cc
@@ -139,8 +139,10 @@
   HTMLElement::InsertedInto(insertion_point);
   LogAddElementIfIsolatedWorldAndInDocument("form", html_names::kMethodAttr,
                                             html_names::kActionAttr);
-  if (insertion_point.isConnected())
-    GetDocument().DidAddOrRemoveFormRelatedElement(this);
+  if (insertion_point.isConnected()) {
+    GetDocument().DidChangeFormRelatedElementDynamically(
+        this, WebFormRelatedChangeType::kAdd);
+  }
   return kInsertionDone;
 }
 
@@ -185,7 +187,8 @@
   if (base::FeatureList::IsEnabled(
           blink::features::kAutofillDetectRemovedFormControls) &&
       insertion_point.isConnected()) {
-    GetDocument().DidAddOrRemoveFormRelatedElement(this);
+    GetDocument().DidChangeFormRelatedElementDynamically(
+        this, WebFormRelatedChangeType::kRemove);
   }
 }
 
diff --git a/third_party/blink/renderer/core/html/forms/listed_element.cc b/third_party/blink/renderer/core/html/forms/listed_element.cc
index aa73485..ea5c7b2 100644
--- a/third_party/blink/renderer/core/html/forms/listed_element.cc
+++ b/third_party/blink/renderer/core/html/forms/listed_element.cc
@@ -142,8 +142,10 @@
   }
 
   // Trigger for elements outside of forms.
-  if (!form_ && insertion_point.isConnected())
-    element.GetDocument().DidAddOrRemoveFormRelatedElement(&element);
+  if (!form_ && insertion_point.isConnected()) {
+    element.GetDocument().DidChangeFormRelatedElementDynamically(
+        &element, WebFormRelatedChangeType::kAdd);
+  }
 
   InvalidateShadowIncludingAncestorForms(insertion_point);
 }
@@ -190,7 +192,8 @@
       insertion_point.isConnected()) {
     // We don't insist on form_ being non-null as the form does not take care of
     // reporting the removal.
-    element.GetDocument().DidAddOrRemoveFormRelatedElement(&element);
+    element.GetDocument().DidChangeFormRelatedElementDynamically(
+        &element, WebFormRelatedChangeType::kRemove);
   }
 }
 
@@ -257,7 +260,8 @@
 void ListedElement::DidChangeForm() {
   if (!form_was_set_by_parser_ && form_ && form_->isConnected()) {
     auto& element = ToHTMLElement();
-    element.GetDocument().DidAddOrRemoveFormRelatedElement(&element);
+    element.GetDocument().DidChangeFormRelatedElementDynamically(
+        &element, WebFormRelatedChangeType::kReassociate);
   }
   FormOwnerSetNeedsValidityCheck();
 }
diff --git a/third_party/blink/renderer/core/html/html_attribute_names.json5 b/third_party/blink/renderer/core/html/html_attribute_names.json5
index 22fdc91..b023f90 100644
--- a/third_party/blink/renderer/core/html/html_attribute_names.json5
+++ b/third_party/blink/renderer/core/html/html_attribute_names.json5
@@ -13,6 +13,7 @@
     "accept",
     "accesskey",
     "action",
+    "adauctionheaders",
     "align",
     "alink",
     "allow",
diff --git a/third_party/blink/renderer/core/html/html_iframe_element.cc b/third_party/blink/renderer/core/html/html_iframe_element.cc
index 61496e8..b0a94702 100644
--- a/third_party/blink/renderer/core/html/html_iframe_element.cc
+++ b/third_party/blink/renderer/core/html/html_iframe_element.cc
@@ -92,8 +92,9 @@
 }
 
 void HTMLIFrameElement::SetCollapsed(bool collapse) {
-  if (collapsed_by_client_ == collapse)
+  if (collapsed_by_client_ == collapse) {
     return;
+  }
 
   collapsed_by_client_ = collapse;
 
@@ -122,8 +123,9 @@
 bool HTMLIFrameElement::IsPresentationAttribute(
     const QualifiedName& name) const {
   if (name == html_names::kWidthAttr || name == html_names::kHeightAttr ||
-      name == html_names::kAlignAttr || name == html_names::kFrameborderAttr)
+      name == html_names::kAlignAttr || name == html_names::kFrameborderAttr) {
     return true;
+  }
   return HTMLFrameElementBase::IsPresentationAttribute(name);
 }
 
@@ -175,10 +177,12 @@
       FrameOwnerPropertiesChanged();
       should_call_did_change_attributes = true;
     }
-    if (name_.Contains('\n'))
+    if (name_.Contains('\n')) {
       UseCounter::Count(GetDocument(), WebFeature::kFrameNameContainsNewline);
-    if (name_.Contains('<'))
+    }
+    if (name_.Contains('<')) {
       UseCounter::Count(GetDocument(), WebFeature::kFrameNameContainsBrace);
+    }
     if (name_.Contains('\n') && name_.Contains('<')) {
       UseCounter::Count(GetDocument(), WebFeature::kDanglingMarkupInWindowName);
       if (!name_.EndsWith('>')) {
@@ -288,6 +292,24 @@
         should_call_did_change_attributes = true;
       }
     }
+  } else if (name == html_names::kAdauctionheadersAttr &&
+             RuntimeEnabledFeatures::FledgeNegativeTargetingEnabled(
+                 GetExecutionContext())) {
+    if (!GetExecutionContext()->IsSecureContext()) {
+      GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
+          mojom::blink::ConsoleMessageSource::kOther,
+          mojom::blink::ConsoleMessageLevel::kError,
+          String("adAuctionHeaders: Protected Audience APIs "
+                 "are only available in secure contexts.")));
+    } else {
+      if (params.new_value.IsNull() != params.old_value.IsNull()) {
+        should_call_did_change_attributes = true;
+      }
+      if (!params.new_value.IsNull()) {
+        UseCounter::Count(GetDocument(),
+                          WebFeature::kSharedStorageAPI_Iframe_Attribute);
+      }
+    }
   } else if (name == html_names::kSharedstoragewritableAttr &&
              RuntimeEnabledFeatures::SharedStorageAPIM118Enabled(
                  GetExecutionContext())) {
@@ -295,8 +317,8 @@
       GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
           mojom::blink::ConsoleMessageSource::kOther,
           mojom::blink::ConsoleMessageLevel::kError,
-          WebString::FromUTF8("sharedStorageWritable: sharedStorage operations "
-                              "are only available in secure contexts.")));
+          String("sharedStorageWritable: sharedStorage operations "
+                 "are only available in secure contexts.")));
     } else {
       if (params.new_value.IsNull() != params.old_value.IsNull()) {
         should_call_did_change_attributes = true;
@@ -376,8 +398,9 @@
 
 DocumentPolicyFeatureState HTMLIFrameElement::ConstructRequiredPolicy() const {
   if (!RuntimeEnabledFeatures::DocumentPolicyNegotiationEnabled(
-          GetExecutionContext()))
+          GetExecutionContext())) {
     return {};
+  }
 
   if (!required_policy_.empty()) {
     UseCounter::Count(
@@ -414,8 +437,9 @@
 }
 
 ParsedPermissionsPolicy HTMLIFrameElement::ConstructContainerPolicy() const {
-  if (!GetExecutionContext())
+  if (!GetExecutionContext()) {
     return ParsedPermissionsPolicy();
+  }
 
   scoped_refptr<const SecurityOrigin> src_origin =
       GetOriginForPermissionsPolicy();
@@ -464,8 +488,9 @@
 
   // Update the JavaScript policy object associated with this iframe, if it
   // exists.
-  if (policy_)
+  if (policy_) {
     policy_->UpdateContainerPolicy(container_policy, src_origin);
+  }
 
   for (const auto& message : logger.GetMessages()) {
     GetDocument().AddConsoleMessage(
@@ -493,8 +518,9 @@
       HTMLFrameElementBase::InsertedInto(insertion_point);
 
   auto* html_doc = DynamicTo<HTMLDocument>(GetDocument());
-  if (html_doc && insertion_point.IsInDocumentTree())
+  if (html_doc && insertion_point.IsInDocumentTree()) {
     html_doc->AddNamedItem(name_);
+  }
   LogAddElementIfIsolatedWorldAndInDocument("iframe", html_names::kSrcAttr);
   return result;
 }
@@ -502,8 +528,9 @@
 void HTMLIFrameElement::RemovedFrom(ContainerNode& insertion_point) {
   HTMLFrameElementBase::RemovedFrom(insertion_point);
   auto* html_doc = DynamicTo<HTMLDocument>(GetDocument());
-  if (html_doc && insertion_point.IsInDocumentTree())
+  if (html_doc && insertion_point.IsInDocumentTree()) {
     html_doc->RemoveNamedItem(name_);
+  }
 }
 
 bool HTMLIFrameElement::IsInteractiveContent() const {
@@ -516,8 +543,9 @@
 
 network::mojom::blink::TrustTokenParamsPtr
 HTMLIFrameElement::ConstructTrustTokenParams() const {
-  if (!trust_token_)
+  if (!trust_token_) {
     return nullptr;
+  }
 
   JSONParseError parse_error;
   std::unique_ptr<JSONValue> parsed_attribute =
@@ -574,8 +602,9 @@
   // the subframe hasn't been created yet; or if we are in the middle of
   // swapping one frame for another, in which case the final state
   // will be propagated at the end of the swapping operation.
-  if (is_swapping_frames() || !ContentFrame())
+  if (is_swapping_frames() || !ContentFrame()) {
     return;
+  }
 
   // ParseContentSecurityPolicies needs a url to resolve report endpoints and
   // for matching the keyword 'self'. However, the csp attribute does not allow
@@ -600,6 +629,13 @@
         !FastGetAttribute(html_names::kBrowsingtopicsAttr).IsNull();
   }
 
+  if (RuntimeEnabledFeatures::FledgeNegativeTargetingEnabled(
+          GetExecutionContext()) &&
+      GetExecutionContext()->IsSecureContext()) {
+    attributes->ad_auction_headers =
+        !FastGetAttribute(html_names::kAdauctionheadersAttr).IsNull();
+  }
+
   if (RuntimeEnabledFeatures::SharedStorageAPIM118Enabled(
           GetExecutionContext()) &&
       GetExecutionContext()->IsSecureContext()) {
@@ -615,8 +651,9 @@
 
   // Make sure we update the srcdoc value, if any, in the browser.
   String srcdoc_value = "";
-  if (FastHasAttribute(html_names::kSrcdocAttr))
+  if (FastHasAttribute(html_names::kSrcdocAttr)) {
     srcdoc_value = FastGetAttribute(html_names::kSrcdocAttr).GetString();
+  }
   GetDocument().GetFrame()->GetLocalFrameHostRemote().DidChangeSrcDoc(
       ContentFrame()->GetFrameToken(), srcdoc_value);
 }
diff --git a/third_party/blink/renderer/core/html/html_iframe_element.idl b/third_party/blink/renderer/core/html/html_iframe_element.idl
index 2fbb5d1..950bc1d 100644
--- a/third_party/blink/renderer/core/html/html_iframe_element.idl
+++ b/third_party/blink/renderer/core/html/html_iframe_element.idl
@@ -59,6 +59,9 @@
     // Topics API (https://github.com/patcg-individual-drafts/topics)
     [RuntimeEnabled=TopicsAPI, SecureContext, CEReactions, Reflect] attribute boolean browsingTopics;
 
+    // Protected Audience (https://wicg.github.io/turtledove)
+    [RuntimeEnabled=FledgeNegativeTargeting, SecureContext, CEReactions, Reflect] attribute boolean adAuctionHeaders;
+
     // Iframes credentialless
     // https://github.com/WICG/anonymous-iframe
     [CEReactions, Reflect, RuntimeEnabled=AnonymousIframe] attribute boolean credentialless;
diff --git a/third_party/blink/renderer/core/html/html_iframe_element_test.cc b/third_party/blink/renderer/core/html/html_iframe_element_test.cc
index f8a061ad..489f34a 100644
--- a/third_party/blink/renderer/core/html/html_iframe_element_test.cc
+++ b/third_party/blink/renderer/core/html/html_iframe_element_test.cc
@@ -8,6 +8,7 @@
 #include "third_party/blink/public/common/permissions_policy/origin_with_possible_wildcards.h"
 #include "third_party/blink/public/mojom/permissions_policy/permissions_policy.mojom-blink.h"
 #include "third_party/blink/public/platform/web_runtime_features.h"
+#include "third_party/blink/public/platform/web_runtime_features_base.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.h"
@@ -302,7 +303,6 @@
 using HTMLIFrameElementSimTest = SimTest;
 
 TEST_F(HTMLIFrameElementSimTest, PolicyAttributeParsingError) {
-  blink::ScopedDocumentPolicyForTest sdp(true);
   SimRequest main_resource("https://example.com", "text/html");
   LoadURL("https://example.com");
   main_resource.Complete(R"(
@@ -342,6 +342,30 @@
       << ConsoleMessages().front();
 }
 
+TEST_F(HTMLIFrameElementSimTest, Adauctionheaders_SecureContext_Allowed) {
+  SimRequest main_resource("https://example.com", "text/html");
+  LoadURL("https://example.com");
+  main_resource.Complete(R"(
+    <iframe adauctionheaders></iframe>
+  )");
+
+  EXPECT_TRUE(ConsoleMessages().empty());
+}
+
+TEST_F(HTMLIFrameElementSimTest, Adauctionheaders_InsecureContext_NotAllowed) {
+  SimRequest main_resource("http://example.com", "text/html");
+  LoadURL("http://example.com");
+  main_resource.Complete(R"(
+    <iframe adauctionheaders></iframe>
+  )");
+
+  EXPECT_EQ(ConsoleMessages().size(), 1u);
+  EXPECT_TRUE(ConsoleMessages().front().StartsWith(
+      "adAuctionHeaders: Protected Audience APIs "
+      "are only available in secure contexts."))
+      << "Unexpected error; got: " << ConsoleMessages().front();
+}
+
 TEST_F(HTMLIFrameElementSimTest, Sharedstoragewritable_SecureContext_Allowed) {
   WebRuntimeFeaturesBase::EnableSharedStorageAPI(true);
   WebRuntimeFeaturesBase::EnableSharedStorageAPIM118(true);
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.cc b/third_party/blink/renderer/core/html/media/html_media_element.cc
index 6f932e92..2bd7f1f 100644
--- a/third_party/blink/renderer/core/html/media/html_media_element.cc
+++ b/third_party/blink/renderer/core/html/media/html_media_element.cc
@@ -2922,6 +2922,11 @@
 }
 
 bool HTMLMediaElement::ShouldShowControls() const {
+  // If the document is not active, then we should not show controls.
+  if (!GetDocument().IsActive()) {
+    return false;
+  }
+
   Settings* settings = GetDocument().GetSettings();
   if (settings && !settings->GetMediaControlsEnabled()) {
     return false;
diff --git a/third_party/blink/renderer/core/html/media/html_media_element_test.cc b/third_party/blink/renderer/core/html/media/html_media_element_test.cc
index daf7082e..5470fc3 100644
--- a/third_party/blink/renderer/core/html/media/html_media_element_test.cc
+++ b/third_party/blink/renderer/core/html/media/html_media_element_test.cc
@@ -15,9 +15,11 @@
 #include "third_party/blink/public/mojom/autoplay/autoplay.mojom-blink.h"
 #include "third_party/blink/public/platform/web_media_player.h"
 #include "third_party/blink/public/platform/web_media_player_source.h"
+#include "third_party/blink/renderer/core/dom/dom_implementation.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/core/frame/settings.h"
+#include "third_party/blink/renderer/core/html/html_document.h"
 #include "third_party/blink/renderer/core/html/media/html_audio_element.h"
 #include "third_party/blink/renderer/core/html/media/html_video_element.h"
 #include "third_party/blink/renderer/core/html/media/media_error.h"
@@ -537,12 +539,13 @@
     EXPECT_FALSE(WasPlayerDestroyed());
   }
 
+  std::unique_ptr<DummyPageHolder> dummy_page_holder_;
+
  private:
   TestMediaPlayerObserver& media_player_observer() {
     return media_player_host_.observer();
   }
 
-  std::unique_ptr<DummyPageHolder> dummy_page_holder_;
   Persistent<HTMLMediaElement> media_;
 
   // Owned by WebMediaStubLocalFrameClient.
@@ -1585,4 +1588,19 @@
   EXPECT_FALSE(MediaIsPlaying());
 }
 
+TEST_P(HTMLMediaElementTest, MoveToAnotherDocument) {
+  auto* second_document =
+      dummy_page_holder_->GetDocument().implementation().createHTMLDocument();
+
+  // The second document is not active. When Media() is moved over, it triggers
+  // a call to HTMLMediaElement::ShouldShowControls. This should not violate any
+  // DCHECKs.
+  second_document->body()->AppendChild(Media());
+
+  // Destroying the first document should not cause anything unusual to happen.
+  dummy_page_holder_.reset();
+
+  EXPECT_FALSE(ControlsVisible());
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
index c67c4c7f..c3f7640 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
@@ -2312,7 +2312,7 @@
     }
 
     if (child_block_break_token->MonolithicOverflow() &&
-        !BreakToken()->MonolithicOverflow()) {
+        (Node().IsPaginatedRoot() || !BreakToken()->MonolithicOverflow())) {
       // Every container that needs to be pushed to steer clear of monolithic
       // overflow on a previous page will have this stored in its break token.
       // So we'll only add the additional offset here if the child is the
diff --git a/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.cc b/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.cc
index 07cb7e4..919c770 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.cc
@@ -11,6 +11,7 @@
 #include "third_party/blink/renderer/core/layout/layout_object.h"
 #include "third_party/blink/renderer/core/layout/ng/ng_block_break_token.h"
 #include "third_party/blink/renderer/core/layout/ng/ng_block_node.h"
+#include "third_party/blink/renderer/core/layout/ng/ng_box_fragment.h"
 #include "third_party/blink/renderer/core/layout/ng/ng_break_token.h"
 #include "third_party/blink/renderer/core/layout/ng/ng_column_spanner_path.h"
 #include "third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.h"
@@ -381,13 +382,28 @@
        !child_fragment.IsFloatingOrOutOfFlowPositioned()) ||
       child_layout_result.ShouldForceSameFragmentationFlow();
 
-  if (ConstraintSpace().IsPaginated() && child_is_in_same_flow &&
-      !IsFragmentainerBoxType()) {
+  if (ConstraintSpace().IsPaginated() &&
+      ((child_is_in_same_flow && !IsFragmentainerBoxType()) ||
+       Node().IsPaginatedRoot())) {
     DCHECK(ConstraintSpace().HasKnownFragmentainerBlockSize());
-    LogicalFragment logical_fragment(
-        child_fragment.Style().GetWritingDirection(), child_fragment);
-    LayoutUnit fragment_block_end =
-        offset.block_offset + logical_fragment.BlockSize();
+    // Include overflow inside monolithic content if this is for a page
+    // fragment. Otherwise just use the fragment size.
+    LayoutUnit block_size;
+    if (Node().IsPaginatedRoot()) {
+      // The root node is guaranteed to be block-level, so there should be a
+      // child box fragment here.
+      DCHECK(child_box_fragment);
+
+      LogicalBoxFragment logical_fragment(
+          child_box_fragment->Style().GetWritingDirection(),
+          *child_box_fragment);
+      block_size = logical_fragment.BlockEndLayoutOverflow();
+    } else {
+      LogicalFragment logical_fragment(
+          child_fragment.Style().GetWritingDirection(), child_fragment);
+      block_size = logical_fragment.BlockSize();
+    }
+    LayoutUnit fragment_block_end = offset.block_offset + block_size;
     LayoutUnit fragmentainer_overflow =
         fragment_block_end - FragmentainerSpaceLeft(ConstraintSpace());
     if (fragmentainer_overflow > LayoutUnit()) {
diff --git a/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h b/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h
index 2085fe1..ff162f7 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h
@@ -349,6 +349,12 @@
     // next fragmentianer.
     if (last_inline_break_token_)
       return true;
+
+    // If overflowed by monolithic overflow, we need more pages.
+    if (break_token_data_ && break_token_data_->monolithic_overflow) {
+      return true;
+    }
+
     // Grid layout doesn't insert break before tokens, and instead set this bit
     // to indicate there is content after the current break.
     return has_subsequent_children_;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.cc
index dfaf017..1655da6 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.cc
@@ -762,6 +762,16 @@
         consumed_block_size;
     builder->SetConsumedBlockSizeLegacyAdjustment(
         consumed_block_size_legacy_adjustment);
+
+    if (previous_break_token && previous_break_token->MonolithicOverflow()) {
+      // Add pages as long as there's monolithic overflow that requires it.
+      LayoutUnit remaining_overflow =
+          previous_break_token->MonolithicOverflow() -
+          FragmentainerCapacity(space);
+      if (remaining_overflow > LayoutUnit()) {
+        builder->ReserveSpaceForMonolithicOverflow(remaining_overflow);
+      }
+    }
   } else {
     LayoutUnit fragments_total_block_size = builder->FragmentsTotalBlockSize();
     // Just pass the value through. This is a fragmentainer, and fragmentainers
diff --git a/third_party/blink/renderer/core/loader/empty_clients.h b/third_party/blink/renderer/core/loader/empty_clients.h
index e0c700c7..21b4346 100644
--- a/third_party/blink/renderer/core/loader/empty_clients.h
+++ b/third_party/blink/renderer/core/loader/empty_clients.h
@@ -239,7 +239,10 @@
   void RequestUnbufferedInputEvents(LocalFrame*) override {}
   void SetTouchAction(LocalFrame*, TouchAction) override {}
   void SetPanAction(LocalFrame*, mojom::blink::PanAction pan_action) override {}
-  void DidAddOrRemoveFormRelatedElementsAfterLoad(LocalFrame*) override {}
+  void DidChangeFormRelatedElementDynamically(
+      LocalFrame*,
+      HTMLElement*,
+      WebFormRelatedChangeType) override {}
   String AcceptLanguages() override;
   void RegisterPopupOpeningObserver(PopupOpeningObserver*) override {}
   void UnregisterPopupOpeningObserver(PopupOpeningObserver*) override {}
diff --git a/third_party/blink/renderer/core/page/chrome_client.h b/third_party/blink/renderer/core/page/chrome_client.h
index b19b5744..b6ab6cb 100644
--- a/third_party/blink/renderer/core/page/chrome_client.h
+++ b/third_party/blink/renderer/core/page/chrome_client.h
@@ -493,7 +493,10 @@
 
   virtual bool IsChromeClientImpl() const { return false; }
 
-  virtual void DidAddOrRemoveFormRelatedElementsAfterLoad(LocalFrame*) {}
+  virtual void DidChangeFormRelatedElementDynamically(
+      LocalFrame*,
+      HTMLElement*,
+      WebFormRelatedChangeType) {}
   virtual void DidChangeValueInTextField(HTMLFormControlElement&) {}
   virtual void DidEndEditingOnTextField(HTMLInputElement&) {}
   virtual void HandleKeyboardEventOnTextField(HTMLInputElement&,
diff --git a/third_party/blink/renderer/core/page/chrome_client_impl.cc b/third_party/blink/renderer/core/page/chrome_client_impl.cc
index 5357e47..4d1c8dc 100644
--- a/third_party/blink/renderer/core/page/chrome_client_impl.cc
+++ b/third_party/blink/renderer/core/page/chrome_client_impl.cc
@@ -1193,10 +1193,14 @@
   widget->SetPanAction(pan_action);
 }
 
-void ChromeClientImpl::DidAddOrRemoveFormRelatedElementsAfterLoad(
-    LocalFrame* frame) {
-  if (auto* fill_client = AutofillClientFromFrame(frame))
-    fill_client->DidAddOrRemoveFormRelatedElementsDynamically();
+void ChromeClientImpl::DidChangeFormRelatedElementDynamically(
+    LocalFrame* frame,
+    HTMLElement* element,
+    WebFormRelatedChangeType form_related_change) {
+  if (auto* fill_client = AutofillClientFromFrame(frame)) {
+    fill_client->DidChangeFormRelatedElementDynamically(element,
+                                                        form_related_change);
+  }
 }
 
 void ChromeClientImpl::ShowVirtualKeyboardOnElementFocus(LocalFrame& frame) {
diff --git a/third_party/blink/renderer/core/page/chrome_client_impl.h b/third_party/blink/renderer/core/page/chrome_client_impl.h
index 1b93a90..d0459b32 100644
--- a/third_party/blink/renderer/core/page/chrome_client_impl.h
+++ b/third_party/blink/renderer/core/page/chrome_client_impl.h
@@ -253,7 +253,10 @@
       Document::PageDismissalType) const override;
 
   // AutofillClient pass throughs:
-  void DidAddOrRemoveFormRelatedElementsAfterLoad(LocalFrame*) override;
+  void DidChangeFormRelatedElementDynamically(
+      LocalFrame*,
+      HTMLElement*,
+      WebFormRelatedChangeType) override;
   void HandleKeyboardEventOnTextField(HTMLInputElement&,
                                       KeyboardEvent&) override;
   void DidChangeValueInTextField(HTMLFormControlElement&) override;
diff --git a/third_party/blink/renderer/core/page/print_context.cc b/third_party/blink/renderer/core/page/print_context.cc
index cbffcb7a..b5e581b 100644
--- a/third_party/blink/renderer/core/page/print_context.cc
+++ b/third_party/blink/renderer/core/page/print_context.cc
@@ -71,30 +71,7 @@
 
   auto* view = frame_->GetDocument()->GetLayoutView();
   const auto& fragments = view->GetPhysicalFragment(0)->Children();
-
   page_count_ = ClampTo<wtf_size_t>(fragments.size());
-
-  PhysicalRect doc_rect = view->DocumentRect();
-  WritingModeConverter converter(view->Style()->GetWritingDirection(),
-                                 doc_rect.size);
-  const NGLink& last_page = fragments.back();
-  LogicalRect last_page_rect =
-      converter.ToLogical(PhysicalRect(last_page.offset, last_page->Size()));
-
-  bool is_horizontal = view->StyleRef().IsHorizontalWritingMode();
-  LayoutUnit doc_block_size(is_horizontal ? doc_rect.size.height
-                                          : doc_rect.size.width);
-  LayoutUnit remaining_block_size =
-      doc_block_size - last_page_rect.BlockEndOffset();
-  if (remaining_block_size > LayoutUnit()) {
-    // Synthesize additional pages for monolithic overflow, and add them to the
-    // number of fragments that we've already counted.
-    int additional_pages =
-        (remaining_block_size /
-         std::max(LayoutUnit(1), last_page_rect.size.block_size))
-            .Ceil();
-    page_count_ += additional_pages;
-  }
 }
 
 gfx::Rect PrintContext::PageRect(wtf_size_t page_number) const {
@@ -112,28 +89,8 @@
   CHECK_GE(fragments.size(), 1u);
   DCHECK(fragments[0]->IsFragmentainerBox());
 
-  // Make sure that the page number is within the range of pages that were laid
-  // out. In cases of monolithic overflow (a large image sliced into multiple
-  // pages, for instance) there may be more pages than were actually laid
-  // out. In such cases we need to synthesize a page rectangle, based on the
-  // size and offset of the last page that was laid out.
-  wtf_size_t valid_page_number =
-      std::min(page_number, ClampTo<wtf_size_t>(fragments.size()) - 1);
-
-  const NGLink& page = fragments[valid_page_number];
+  const NGLink& page = fragments[page_number];
   PhysicalRect physical_rect(page.offset, page->Size());
-
-  if (page_number > valid_page_number) {
-    // Synthesize additional page rectangles for monolithic overflow.
-    wtf_size_t pages_to_synthesize = page_number - valid_page_number;
-    WritingModeConverter converter(layout_view.Style()->GetWritingDirection(),
-                                   layout_view.DocumentRect().size);
-    LogicalRect logical_rect = converter.ToLogical(physical_rect);
-    logical_rect.offset.block_offset +=
-        pages_to_synthesize * logical_rect.size.block_size;
-    physical_rect = converter.ToPhysical(logical_rect);
-  }
-
   gfx::Rect page_rect = ToEnclosingRect(physical_rect);
 
   // There's code to avoid fractional page sizes, so we shouldn't have to worry
diff --git a/third_party/blink/renderer/core/permissions_policy/document_policy_sim_test.cc b/third_party/blink/renderer/core/permissions_policy/document_policy_sim_test.cc
index 704d2f5..e1d29a3 100644
--- a/third_party/blink/renderer/core/permissions_policy/document_policy_sim_test.cc
+++ b/third_party/blink/renderer/core/permissions_policy/document_policy_sim_test.cc
@@ -17,84 +17,13 @@
 
 class DocumentPolicySimTest : public SimTest {
  public:
-  DocumentPolicySimTest()
-      : scoped_document_policy_(true),
-        scoped_document_policy_negotiation_(true) {
-    ResetAvailableDocumentPolicyFeaturesForTest();
-  }
+  DocumentPolicySimTest() { ResetAvailableDocumentPolicyFeaturesForTest(); }
 
  private:
-  ScopedDocumentPolicyForTest scoped_document_policy_;
-  ScopedDocumentPolicyNegotiationForTest scoped_document_policy_negotiation_;
+  ScopedDocumentPolicyNegotiationForTest scoped_document_policy_negotiation_{
+      true};
 };
 
-// When runtime feature DocumentPolicy is not enabled, specifying
-// Document-Policy, Require-Document-Policy and policy attribute
-// should have no effect, i.e.
-// document load should not be blocked even if the required policy and incoming
-// policy are incompatible and calling
-// |Document::IsFeatureEnabled(DocumentPolicyFeature...)| should always return
-// true.
-TEST_F(DocumentPolicySimTest, DocumentPolicyNoEffectWhenFlagNotSet) {
-  ScopedDocumentPolicyForTest sdp(false);
-  ScopedDocumentPolicyNegotiationForTest sdpn(false);
-  ResetAvailableDocumentPolicyFeaturesForTest();
-
-  SimRequest::Params main_params;
-  main_params.response_http_headers = {
-      {"Require-Document-Policy", "lossless-images-max-bpp=1.0"}};
-
-  SimRequest::Params iframe_params;
-  iframe_params.response_http_headers = {
-      {"Document-Policy", "lossless-images-max-bpp=1.1"}};
-
-  SimRequest main_resource("https://example.com", "text/html", main_params);
-  SimRequest iframe_resource("https://example.com/foo.html", "text/html",
-                             iframe_params);
-
-  LoadURL("https://example.com");
-  main_resource.Complete(R"(
-    <iframe
-      src="https://example.com/foo.html"
-      policy="lossless-images-max-bpp=1.0">
-    </iframe>
-  )");
-
-  iframe_resource.Finish();
-  auto* child_frame = To<WebLocalFrameImpl>(MainFrame().FirstChild());
-  auto* child_window = child_frame->GetFrame()->DomWindow();
-  auto& console_messages = static_cast<frame_test_helpers::TestWebFrameClient*>(
-                               child_frame->Client())
-                               ->ConsoleMessages();
-
-  // Should not receive a console error message caused by document policy
-  // violation blocking document load.
-  EXPECT_TRUE(console_messages.empty());
-
-  EXPECT_EQ(child_window->Url(), KURL("https://example.com/foo.html"));
-
-  EXPECT_FALSE(child_window->document()->IsUseCounted(
-      mojom::WebFeature::kDocumentPolicyCausedPageUnload));
-
-  // lossless-images-max-bpp should be set to inf in main document, i.e. allow
-  // all values.
-  EXPECT_TRUE(Window().IsFeatureEnabled(
-      mojom::blink::DocumentPolicyFeature::kLosslessImagesMaxBpp,
-      PolicyValue::CreateDecDouble(2.0)));
-  EXPECT_TRUE(Window().IsFeatureEnabled(
-      mojom::blink::DocumentPolicyFeature::kLosslessImagesMaxBpp,
-      PolicyValue::CreateDecDouble(1.0)));
-
-  // lossless-images-max-bpp should be set to inf in child document, i.e. allow
-  // all values.
-  EXPECT_TRUE(child_window->IsFeatureEnabled(
-      mojom::blink::DocumentPolicyFeature::kLosslessImagesMaxBpp,
-      PolicyValue::CreateDecDouble(2.0)));
-  EXPECT_TRUE(child_window->IsFeatureEnabled(
-      mojom::blink::DocumentPolicyFeature::kLosslessImagesMaxBpp,
-      PolicyValue::CreateDecDouble(1.0)));
-}
-
 // When runtime feature DocumentPolicyNegotiation is not enabled, specifying
 // Require-Document-Policy HTTP header and policy attribute on iframe should
 // have no effect, i.e. document load should not be blocked even if the required
diff --git a/third_party/blink/renderer/core/style/computed_style.cc b/third_party/blink/renderer/core/style/computed_style.cc
index 5e17fd0..29934494 100644
--- a/third_party/blink/renderer/core/style/computed_style.cc
+++ b/third_party/blink/renderer/core/style/computed_style.cc
@@ -1980,7 +1980,6 @@
   if (const SimpleFontData* font_data = GetFont().PrimaryFont()) {
     return font_data->GetFontMetrics().GetFontHeight(baseline);
   }
-  NOTREACHED();
   return FontHeight();
 }
 
diff --git a/third_party/blink/renderer/modules/webcodecs/video_decoder_broker_test.cc b/third_party/blink/renderer/modules/webcodecs/video_decoder_broker_test.cc
index 1ae169d..2a0c8199 100644
--- a/third_party/blink/renderer/modules/webcodecs/video_decoder_broker_test.cc
+++ b/third_party/blink/renderer/modules/webcodecs/video_decoder_broker_test.cc
@@ -367,7 +367,7 @@
   ConstructDecoder(*v8_scope.GetExecutionContext());
   EXPECT_EQ(GetDecoderType(), media::VideoDecoderType::kBroker);
 
-  InitializeDecoder(media::TestVideoConfig::Normal());
+  InitializeDecoder(media::TestVideoConfig::Normal(media::VideoCodec::kVP8));
   EXPECT_NE(GetDecoderType(), media::VideoDecoderType::kBroker);
 
   DecodeBuffer(media::ReadTestDataFile("vp8-I-frame-320x120"));
@@ -393,7 +393,8 @@
 
   decoder_broker_->SetHardwarePreference(HardwarePreference::kPreferHardware);
 
-  InitializeDecoder(media::TestVideoConfig::Normal(), /*expect_success*/ false);
+  InitializeDecoder(media::TestVideoConfig::Normal(media::VideoCodec::kVP8),
+                    /*expect_success*/ false);
   EXPECT_EQ(GetDecoderType(), media::VideoDecoderType::kBroker);
 }
 
@@ -424,7 +425,7 @@
 
   // Make sure we can decode software only.
   decoder_broker_->SetHardwarePreference(HardwarePreference::kPreferSoftware);
-  InitializeDecoder(media::TestVideoConfig::Normal());
+  InitializeDecoder(media::TestVideoConfig::Normal(media::VideoCodec::kVP8));
   DecodeBuffer(media::ReadTestDataFile("vp8-I-frame-320x120"));
   DecodeBuffer(media::DecoderBuffer::CreateEOSBuffer());
   ASSERT_EQ(1U, output_frames_.size());
@@ -453,7 +454,7 @@
 
   // Use a small frame to force software decode, without changing the
   // acceleration preference.
-  InitializeDecoder(media::TestVideoConfig::Normal());
+  InitializeDecoder(media::TestVideoConfig::Normal(media::VideoCodec::kVP8));
   DecodeBuffer(media::ReadTestDataFile("vp8-I-frame-320x120"));
   DecodeBuffer(media::DecoderBuffer::CreateEOSBuffer());
   ASSERT_EQ(4U, output_frames_.size());
diff --git a/third_party/blink/renderer/platform/graphics/paint/cull_rect.cc b/third_party/blink/renderer/platform/graphics/paint/cull_rect.cc
index d2411e1..8183dbe 100644
--- a/third_party/blink/renderer/platform/graphics/paint/cull_rect.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/cull_rect.cc
@@ -7,6 +7,7 @@
 #include "base/containers/adapters.h"
 #include "base/feature_list.h"
 #include "base/metrics/field_trial_params.h"
+#include "third_party/blink/public/common/features.h"
 #include "third_party/blink/renderer/platform/geometry/layout_rect.h"
 #include "third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h"
 #include "third_party/blink/renderer/platform/graphics/paint/scroll_paint_property_node.h"
@@ -23,21 +24,12 @@
 constexpr int kReasonablePixelLimit = kIntMaxForLayoutUnit;
 constexpr int kChangedEnoughMinimumDistance = 512;
 
-BASE_FEATURE(kExpandCompositedCullRect,
-             "ExpandCompositedCullRect",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
-// Number of pixels to expand in root coordinates for cull rect under
-// composited scroll translation or other composited transform.
-constexpr base::FeatureParam<int>
-    kPixelDistanceToExpand(&kExpandCompositedCullRect, "pixels", 4000);
-
 // Returns the number of pixels to expand the cull rect for composited scroll
 // and transform.
 int LocalPixelDistanceToExpand(
     const TransformPaintPropertyNode& root_transform,
     const TransformPaintPropertyNode& local_transform) {
-  static int pixel_distance_to_expand = kPixelDistanceToExpand.Get();
+  static int pixel_distance_to_expand = features::kPixelDistanceToExpand.Get();
   float scale = GeometryMapper::SourceToDestinationApproximateMinimumScale(
       root_transform, local_transform);
   // A very big scale may be caused by non-invertable near non-invertable
diff --git a/third_party/blink/renderer/platform/heap/collection_support/heap_vector_backing.h b/third_party/blink/renderer/platform/heap/collection_support/heap_vector_backing.h
index aca00fc..fa0c4bd 100644
--- a/third_party/blink/renderer/platform/heap/collection_support/heap_vector_backing.h
+++ b/third_party/blink/renderer/platform/heap/collection_support/heap_vector_backing.h
@@ -166,20 +166,13 @@
     // already zeroed out).
     ANNOTATE_CHANGE_SIZE(array, length, 0, length);
 #endif  // ANNOTATE_CONTIGUOUS_CONTAINER
-    if (std::is_polymorphic<T>::value) {
+    if constexpr (IsTraceableInCollectionTrait<Traits>::value) {
       for (unsigned i = 0; i < length; ++i) {
-        if (blink::internal::VTableInitialized(&array[i])) {
-          blink::TraceIfNeeded<
-              T, IsTraceableInCollectionTrait<Traits>::value>::Trace(visitor,
-                                                                     array[i]);
+        if (!std::is_polymorphic_v<T> ||
+            blink::internal::VTableInitialized(&array[i])) {
+          visitor->Trace(array[i]);
         }
       }
-    } else {
-      for (size_t i = 0; i < length; ++i) {
-        blink::TraceIfNeeded<
-            T, IsTraceableInCollectionTrait<Traits>::value>::Trace(visitor,
-                                                                   array[i]);
-      }
     }
   }
 };
diff --git a/third_party/blink/renderer/platform/heap/disallow_new_wrapper.h b/third_party/blink/renderer/platform/heap/disallow_new_wrapper.h
index cca6506..0449d9f 100644
--- a/third_party/blink/renderer/platform/heap/disallow_new_wrapper.h
+++ b/third_party/blink/renderer/platform/heap/disallow_new_wrapper.h
@@ -16,21 +16,18 @@
     : public GarbageCollected<DisallowNewWrapper<T>> {
  public:
   explicit DisallowNewWrapper(const T& value) : value_(value) {
-    static_assert(WTF::IsDisallowNew<T>::value,
-                  "T needs to be a disallow new type");
+    static_assert(WTF::IsDisallowNew<T>, "T needs to be a disallow new type");
     static_assert(WTF::IsTraceable<T>::value, "T needs to be traceable");
   }
   explicit DisallowNewWrapper(T&& value) : value_(std::forward<T>(value)) {
-    static_assert(WTF::IsDisallowNew<T>::value,
-                  "T needs to be a disallow new type");
+    static_assert(WTF::IsDisallowNew<T>, "T needs to be a disallow new type");
     static_assert(WTF::IsTraceable<T>::value, "T needs to be traceable");
   }
 
   template <typename... Args>
   explicit DisallowNewWrapper(Args&&... args)
       : value_(std::forward<Args>(args)...) {
-    static_assert(WTF::IsDisallowNew<T>::value,
-                  "T needs to be a disallow new type");
+    static_assert(WTF::IsDisallowNew<T>, "T needs to be a disallow new type");
     static_assert(WTF::IsTraceable<T>::value, "T needs to be traceable");
   }
 
diff --git a/third_party/blink/renderer/platform/heap/heap_allocator_impl.h b/third_party/blink/renderer/platform/heap/heap_allocator_impl.h
index e23a70ed..b80294b8 100644
--- a/third_party/blink/renderer/platform/heap/heap_allocator_impl.h
+++ b/third_party/blink/renderer/platform/heap/heap_allocator_impl.h
@@ -225,8 +225,8 @@
 
   template <typename T, typename Traits>
   static void Trace(Visitor* visitor, const T& t) {
-    TraceCollectionIfEnabled<WTF::WeakHandlingTrait<T>::value, T,
-                             Traits>::Trace(visitor, &t);
+    TraceCollectionIfEnabled<WTF::kWeakHandlingTrait<T>, T, Traits>::Trace(
+        visitor, &t);
   }
 
   template <typename T>
diff --git a/third_party/blink/renderer/platform/heap/trace_traits.h b/third_party/blink/renderer/platform/heap/trace_traits.h
index af938e4..26fab80 100644
--- a/third_party/blink/renderer/platform/heap/trace_traits.h
+++ b/third_party/blink/renderer/platform/heap/trace_traits.h
@@ -18,26 +18,21 @@
 
 namespace blink {
 
-template <typename T, bool = WTF::IsTraceable<T>::value>
-struct TraceIfNeeded;
-
 template <typename T>
-struct TraceIfNeeded<T, false> {
+struct TraceIfNeeded {
   STATIC_ONLY(TraceIfNeeded);
-  static void Trace(Visitor*, const T&) {}
-};
-
-template <typename T>
-struct TraceIfNeeded<T, true> {
-  STATIC_ONLY(TraceIfNeeded);
-  static void Trace(Visitor* visitor, const T& t) { visitor->Trace(t); }
+  static void Trace(Visitor* visitor, const T& t) {
+    if constexpr (WTF::IsTraceable<T>::value) {
+      visitor->Trace(t);
+    }
+  }
 };
 
 template <WTF::WeakHandlingFlag weakness,
           typename T,
           typename Traits,
           bool = WTF::IsTraceableInCollectionTrait<Traits>::value,
-          WTF::WeakHandlingFlag = WTF::WeakHandlingTrait<T>::value>
+          WTF::WeakHandlingFlag = WTF::kWeakHandlingTrait<T>>
 struct TraceCollectionIfEnabled;
 
 template <WTF::WeakHandlingFlag weakness, typename T, typename Traits>
@@ -168,10 +163,10 @@
     // (ephemeron). Order of invocation does not matter as `IsAlive()` does not
     // have any side effects.
     return blink::TraceCollectionIfEnabled<
-               WTF::WeakHandlingTrait<Key>::value, Key,
+               WTF::kWeakHandlingTrait<Key>, Key,
                typename Traits::KeyTraits>::IsAlive(info, kvp.key) &&
            blink::TraceCollectionIfEnabled<
-               WTF::WeakHandlingTrait<Value>::value, Value,
+               WTF::kWeakHandlingTrait<Value>, Value,
                typename Traits::ValueTraits>::IsAlive(info, kvp.value);
   }
 
diff --git a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc
index 4df723d6..dafe472 100644
--- a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc
+++ b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc
@@ -218,7 +218,8 @@
   stream->num_read_bytes += num_bytes;
 }
 
-inline float FractionToFloat(uint32_t numerator, uint32_t denominator) {
+template <typename T>
+inline float FractionToFloat(T numerator, uint32_t denominator) {
   // First cast to double and not float because uint32_t->float conversion can
   // cause precision loss.
   return static_cast<double>(numerator) / denominator;
@@ -1237,37 +1238,57 @@
   // 'tmap' box.
   if (decoder_->gainMapPresent) {
     const avifGainMapMetadata& metadata = decoder_->image->gainMap.metadata;
+    if (metadata.baseHdrHeadroomD == 0 || metadata.alternateHdrHeadroomD == 0) {
+      DVLOG(1) << "Invalid gainmap metadata: a denominator value is zero";
+      return false;
+    }
+    const float base_headroom = std::exp2(
+        FractionToFloat(metadata.baseHdrHeadroomN, metadata.baseHdrHeadroomD));
+    const float alternate_headroom = std::exp2(FractionToFloat(
+        metadata.alternateHdrHeadroomN, metadata.alternateHdrHeadroomD));
+    const bool base_is_hdr = base_headroom > alternate_headroom;
+    if (base_is_hdr != metadata.backwardDirection) {
+      // TODO(crbug.com/1451889): support gain maps computed as the ratio of SDR
+      // over HDR. Currently, SkGainmapShader expects the gain map to always be
+      // computed as the ratio of HDR over SDR.
+      DVLOG(1) << "Unsupported gain map type";
+      return false;
+    }
+    out_gainmap_info.fDisplayRatioSdr =
+        base_is_hdr ? alternate_headroom : base_headroom;
+    out_gainmap_info.fDisplayRatioHdr =
+        base_is_hdr ? base_headroom : alternate_headroom;
+    out_gainmap_info.fBaseImageType = base_is_hdr
+                                          ? SkGainmapInfo::BaseImageType::kHDR
+                                          : SkGainmapInfo::BaseImageType::kSDR;
     for (int i = 0; i < 3; ++i) {
       if (metadata.gainMapMinD[i] == 0 || metadata.gainMapMaxD[i] == 0 ||
-          metadata.gainMapGammaD[i] == 0 || metadata.offsetSdrD[i] == 0 ||
-          metadata.offsetHdrD[i] == 0) {
+          metadata.gainMapGammaD[i] == 0 || metadata.baseOffsetD[i] == 0 ||
+          metadata.alternateOffsetD[i] == 0) {
         DVLOG(1) << "Invalid gainmap metadata: a denominator value is zero";
         return false;
       }
       // Using double and not float because uint32_t->float conversion can cause
       // precision loss.
-      out_gainmap_info.fGainmapRatioMin[i] =
-          FractionToFloat(metadata.gainMapMinN[i], metadata.gainMapMinD[i]);
-      out_gainmap_info.fGainmapRatioMax[i] =
-          FractionToFloat(metadata.gainMapMaxN[i], metadata.gainMapMaxD[i]);
+      out_gainmap_info.fGainmapRatioMin[i] = std::exp2(
+          FractionToFloat(metadata.gainMapMinN[i], metadata.gainMapMinD[i]));
+      out_gainmap_info.fGainmapRatioMax[i] = std::exp2(
+          FractionToFloat(metadata.gainMapMaxN[i], metadata.gainMapMaxD[i]));
+      // Numerator and denominator intentionally swapped to get 1.0/gamma.
       out_gainmap_info.fGainmapGamma[i] =
-          FractionToFloat(metadata.gainMapGammaN[i], metadata.gainMapGammaD[i]);
+          FractionToFloat(metadata.gainMapGammaD[i], metadata.gainMapGammaN[i]);
+      const float base_offset =
+          FractionToFloat(metadata.baseOffsetN[i], metadata.baseOffsetD[i]);
+      const float alternate_offset = FractionToFloat(
+          metadata.alternateOffsetN[i], metadata.alternateOffsetD[i]);
       out_gainmap_info.fEpsilonSdr[i] =
-          FractionToFloat(metadata.offsetSdrN[i], metadata.offsetSdrD[i]);
+          base_is_hdr ? alternate_offset : base_offset;
       out_gainmap_info.fEpsilonHdr[i] =
-          FractionToFloat(metadata.offsetHdrN[i], metadata.offsetHdrD[i]);
+          base_is_hdr ? base_offset : alternate_offset;
     }
-    if (metadata.hdrCapacityMinD == 0 || metadata.hdrCapacityMaxD == 0) {
-      DVLOG(1) << "Invalid gainmap metadata: a denominator value is zero";
-      return false;
-    }
-    out_gainmap_info.fDisplayRatioSdr =
-        FractionToFloat(metadata.hdrCapacityMinN, metadata.hdrCapacityMinD);
-    out_gainmap_info.fDisplayRatioHdr =
-        FractionToFloat(metadata.hdrCapacityMaxN, metadata.hdrCapacityMaxD);
-    out_gainmap_info.fBaseImageType = metadata.baseRenditionIsHDR
-                                          ? SkGainmapInfo::BaseImageType::kHDR
-                                          : SkGainmapInfo::BaseImageType::kSDR;
+    // TODO(crbug.com/1451889): add support for 'useBaseColorSpace' which is
+    // ignored for now since SkGainmapInfo does not support it.
+
     return true;
   }
   // Otherwise, the metadata should be in the gain map image's XMP.
diff --git a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder_test.cc b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder_test.cc
index caa02ca..23c7db7 100644
--- a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder_test.cc
+++ b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder_test.cc
@@ -1079,6 +1079,9 @@
                             features::kAvifGainmapHdrImages},
       /*disabled_features=*/{});
 
+  // Image was generated by converting
+  // blink/web_tests/images/resources/gainmap-trattore0.jpg
+  // with avifenc.
   scoped_refptr<SharedBuffer> data =
       ReadFile("/images/resources/avif/small-with-gainmap-iso.avif");
   std::unique_ptr<ImageDecoder> decoder = CreateAVIFDecoder();
diff --git a/third_party/blink/renderer/platform/peerconnection/webrtc_video_track_source.cc b/third_party/blink/renderer/platform/peerconnection/webrtc_video_track_source.cc
index 3619fcd..55968006 100644
--- a/third_party/blink/renderer/platform/peerconnection/webrtc_video_track_source.cc
+++ b/third_party/blink/renderer/platform/peerconnection/webrtc_video_track_source.cc
@@ -11,6 +11,7 @@
 #include "base/types/optional_util.h"
 #include "media/base/media_switches.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/public/common/features.h"
 #include "third_party/blink/renderer/platform/webrtc/convert_to_webrtc_video_frame_buffer.h"
 #include "third_party/blink/renderer/platform/webrtc/webrtc_video_utils.h"
 #include "third_party/webrtc/rtc_base/ref_counted_object.h"
@@ -211,9 +212,16 @@
   if (frame_adaptation_params.should_drop_frame)
     return;
 
-  const int64_t translated_camera_time_us =
-      timestamp_aligner_.TranslateTimestamp(frame->timestamp().InMicroseconds(),
-                                            now_us);
+  // timestamp_aligner_ is always updated, even if the result is unused, because
+  // it might happen that some frames don't have the `capture_begin_time`
+  // timestamp. In that case the aligner's result will be used, but for it to
+  // work it has to be updated on all samples.
+  int64_t timestamp_us = timestamp_aligner_.TranslateTimestamp(
+      frame->timestamp().InMicroseconds(), now_us);
+  if (base::FeatureList::IsEnabled(features::kWebRtcUseCaptureBeginTimestamp) &&
+      frame->metadata().capture_begin_time.has_value()) {
+    timestamp_us = frame->metadata().capture_begin_time->ToInternalValue();
+  }
 
   absl::optional<webrtc::Timestamp> capture_time_identifier;
   // Set |capture_time_identifier| only when frame->timestamp() is a valid
@@ -273,9 +281,9 @@
   // The soft-applied cropping will be taken into account by the remainder
   // of the pipeline.
   if (video_frame->natural_size() == video_frame->visible_rect().size()) {
-    DeliverFrame(
-        std::move(video_frame), base::OptionalToPtr(accumulated_update_rect_),
-        translated_camera_time_us, capture_time_identifier, reference_time);
+    DeliverFrame(std::move(video_frame),
+                 base::OptionalToPtr(accumulated_update_rect_), timestamp_us,
+                 capture_time_identifier, reference_time);
     return;
   }
 
@@ -285,9 +293,9 @@
         video_frame->natural_size());
   }
 
-  DeliverFrame(
-      std::move(video_frame), base::OptionalToPtr(accumulated_update_rect_),
-      translated_camera_time_us, capture_time_identifier, reference_time);
+  DeliverFrame(std::move(video_frame),
+               base::OptionalToPtr(accumulated_update_rect_), timestamp_us,
+               capture_time_identifier, reference_time);
 }
 
 void WebRtcVideoTrackSource::OnNotifyFrameDropped() {
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 7cbe5a7..14b9ca2 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1424,18 +1424,11 @@
         "default": "stable",
       },
     },
-    {
-      name: "DocumentPolicy",
-      public: true,
-      status: "stable",
-      base_feature: "none",
-    },
     // Enables the ability to use Document Policy header to control feature
     // DocumentDomain.
     {
       name: "DocumentPolicyDocumentDomain",
       status: "experimental",
-      depends_on: ["DocumentPolicy"],
       base_feature: "none",
     },
     {
@@ -1443,7 +1436,6 @@
       origin_trial_feature_name: "DocumentPolicyNegotiation",
       public: true,
       status: "experimental",
-      depends_on: ["DocumentPolicy"],
       base_feature: "none",
     },
     // Enables the ability to use Document Policy header to control feature
@@ -1451,7 +1443,6 @@
     {
       name: "DocumentPolicySyncXHR",
       status: "experimental",
-      depends_on: ["DocumentPolicy"],
       base_feature: "none",
     },
     {
@@ -1518,7 +1509,6 @@
     },
     {
       name: "ExperimentalPolicies",
-      depends_on: ["DocumentPolicy"],
       status: "experimental",
       base_feature: "none",
     },
@@ -1956,7 +1946,7 @@
     },
     {
       name: "HighlightInheritance",
-      status: "experimental",
+      status: "stable",
     },
     {
       name: "HighlightPointerEvents",
diff --git a/third_party/blink/renderer/platform/wtf/allocator/allocator_test.cc b/third_party/blink/renderer/platform/wtf/allocator/allocator_test.cc
index 58e6aa5d..259d05d 100644
--- a/third_party/blink/renderer/platform/wtf/allocator/allocator_test.cc
+++ b/third_party/blink/renderer/platform/wtf/allocator/allocator_test.cc
@@ -12,9 +12,9 @@
   STACK_ALLOCATED();
 };
 
-static_assert(!WTF::IsStackAllocatedType<Empty>::value,
+static_assert(!WTF::IsStackAllocatedType<Empty>,
               "Failed to detect STACK_ALLOCATED macro.");
-static_assert(WTF::IsStackAllocatedType<StackAllocatedType>::value,
+static_assert(WTF::IsStackAllocatedType<StackAllocatedType>,
               "Failed to detect STACK_ALLOCATED macro.");
 
 }  // namespace
diff --git a/third_party/blink/renderer/platform/wtf/deque.h b/third_party/blink/renderer/platform/wtf/deque.h
index ecad3af..1285740 100644
--- a/third_party/blink/renderer/platform/wtf/deque.h
+++ b/third_party/blink/renderer/platform/wtf/deque.h
@@ -156,7 +156,7 @@
   static_assert(!std::is_polymorphic<T>::value ||
                     !VectorTraits<T>::kCanInitializeWithMemset,
                 "Cannot initialize with memset if there is a vtable");
-  static_assert(Allocator::kIsGarbageCollected || !IsDisallowNew<T>::value ||
+  static_assert(Allocator::kIsGarbageCollected || !IsDisallowNew<T> ||
                     !IsTraceable<T>::value,
                 "Cannot put DISALLOW_NEW objects that "
                 "have trace methods into an off-heap Deque");
diff --git a/third_party/blink/renderer/platform/wtf/functional.h b/third_party/blink/renderer/platform/wtf/functional.h
index 26b5b16b..b7694c4 100644
--- a/third_party/blink/renderer/platform/wtf/functional.h
+++ b/third_party/blink/renderer/platform/wtf/functional.h
@@ -182,10 +182,10 @@
                 "WrapCrossThreadWeakPersistent.");
   static_assert(!WTF::IsGarbageCollectedType<T>::value,
                 "GCed types are forbidden as bound parameters.");
-  static_assert(!WTF::IsStackAllocatedType<T>::value,
+  static_assert(!WTF::IsStackAllocatedType<T>,
                 "Stack allocated types are forbidden as bound parameters.");
   static_assert(
-      !(WTF::IsDisallowNew<T>::value && WTF::IsTraceable<T>::value),
+      !(WTF::IsDisallowNew<T> && WTF::IsTraceable<T>::value),
       "Traceable disallow new types are forbidden as bound parameters.");
 };
 
diff --git a/third_party/blink/renderer/platform/wtf/hash_table.h b/third_party/blink/renderer/platform/wtf/hash_table.h
index 402694f1..7103a7c 100644
--- a/third_party/blink/renderer/platform/wtf/hash_table.h
+++ b/third_party/blink/renderer/platform/wtf/hash_table.h
@@ -1518,9 +1518,8 @@
       "empty value cannot be zero for things with a vtable");
   static_assert(
       Allocator::kIsGarbageCollected ||
-          ((!IsDisallowNew<KeyType>::value || !IsTraceable<KeyType>::value) &&
-           (!IsDisallowNew<ValueType>::value ||
-            !IsTraceable<ValueType>::value)),
+          ((!IsDisallowNew<KeyType> || !IsTraceable<KeyType>::value) &&
+           (!IsDisallowNew<ValueType> || !IsTraceable<ValueType>::value)),
       "Cannot put DISALLOW_NEW objects that "
       "have trace methods into an off-heap HashTable");
 
@@ -1993,8 +1992,8 @@
     // weakly multiple times.
     Allocator::template TraceHashTableBackingWeakly<ValueType, HashTable>(
         visitor, table, &table_,
-        WeakProcessingHashTableHelper<WeakHandlingTrait<ValueType>::value, Key,
-                                      Value, Extractor, Traits, KeyTraits,
+        WeakProcessingHashTableHelper<kWeakHandlingTrait<ValueType>, Key, Value,
+                                      Extractor, Traits, KeyTraits,
                                       Allocator>::Process,
         this);
   }
diff --git a/third_party/blink/renderer/platform/wtf/type_traits.h b/third_party/blink/renderer/platform/wtf/type_traits.h
index 3556aae0..e4346f1 100644
--- a/third_party/blink/renderer/platform/wtf/type_traits.h
+++ b/third_party/blink/renderer/platform/wtf/type_traits.h
@@ -161,29 +161,13 @@
 struct TraceInCollectionTrait;
 
 template <typename T>
-struct WeakHandlingTrait
-    : std::integral_constant<WeakHandlingFlag,
-                             IsWeak<T>::value ? kWeakHandling
-                                              : kNoWeakHandling> {};
+inline constexpr WeakHandlingFlag kWeakHandlingTrait =
+    IsWeak<T>::value ? kWeakHandling : kNoWeakHandling;
 
 // This is used to check that DISALLOW_NEW objects are not
 // stored in off-heap Vectors, HashTables etc.
 template <typename T>
-struct IsDisallowNew {
- private:
-  using YesType = char;
-  struct NoType {
-    char padding[8];
-  };
-
-  template <typename U>
-  static YesType CheckMarker(typename U::IsDisallowNewMarker*);
-  template <typename U>
-  static NoType CheckMarker(...);
-
- public:
-  static const bool value = sizeof(CheckMarker<T>(nullptr)) == sizeof(YesType);
-};
+concept IsDisallowNew = requires { typename T::IsDisallowNewMarker; };
 
 template <>
 class IsGarbageCollectedType<void> {
@@ -207,13 +191,9 @@
   static const bool value = IsGarbageCollectedType<T>::value;
 };
 
-template <typename T, typename = void>
-struct IsStackAllocatedType : std::false_type {};
-
 template <typename T>
-struct IsStackAllocatedType<T,
-                            std::void_t<typename T::IsStackAllocatedTypeMarker>>
-    : std::true_type {};
+concept IsStackAllocatedType =
+    requires { typename T::IsStackAllocatedTypeMarker; };
 
 template <typename T>
 struct IsPointerToGced {
diff --git a/third_party/blink/renderer/platform/wtf/vector.h b/third_party/blink/renderer/platform/wtf/vector.h
index 9d8ced8c..a566d3a 100644
--- a/third_party/blink/renderer/platform/wtf/vector.h
+++ b/third_party/blink/renderer/platform/wtf/vector.h
@@ -1507,7 +1507,7 @@
   static_assert(!std::is_polymorphic<T>::value ||
                     !VectorTraits<T>::kCanInitializeWithMemset,
                 "Cannot initialize with memset if there is a vtable.");
-  static_assert(Allocator::kIsGarbageCollected || !IsDisallowNew<T>::value ||
+  static_assert(Allocator::kIsGarbageCollected || !IsDisallowNew<T> ||
                     !IsTraceable<T>::value,
                 "Cannot put DISALLOW_NEW() objects that have trace methods "
                 "into an off-heap Vector.");
diff --git a/third_party/blink/web_tests/ChromeTestExpectations b/third_party/blink/web_tests/ChromeTestExpectations
index e0168d7..26fd856 100644
--- a/third_party/blink/web_tests/ChromeTestExpectations
+++ b/third_party/blink/web_tests/ChromeTestExpectations
@@ -25,6 +25,9 @@
 external/wpt/webdriver/tests/bidi/network/response_started/response_started.py [ Timeout ]
 external/wpt/webdriver/tests/bidi/network/response_started/response_started_cached.py [ Timeout ]
 crbug.com/1501802 external/wpt/webdriver/tests/classic/perform_actions/pointer_pen.py [ Pass Failure ]
+crbug.com/626703 external/wpt/webdriver/tests/bidi/network/add_intercept/phase_auth_required.py [ Timeout ]
+crbug.com/626703 external/wpt/webdriver/tests/bidi/network/auth_required/auth_required.py [ Timeout ]
+external/wpt/webdriver/tests/bidi/network/add_intercept/url_patterns.py [ Timeout ]
 
 # Chrome specific failures
 crbug.com/1499775 external/wpt/editing/other/join-pre-and-other-block.html?method=forwarddelete&block=blockquote [ Timeout ]
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 b85d33e..0d44cb9 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials
+++ b/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials
@@ -2,9 +2,6 @@
 # tags: [ Release Debug ]
 # results: [ Timeout Crash Pass Failure Slow Skip ]
 
-# No need to run Virtual test suite plz-dedicated-worker here
-virtual/plz-dedicated-worker/* [ Skip ]
-
 # Isolated-sandboxed-iframe require site isolation to be effective.
 virtual/isolate-sandboxed-iframes/* [ Skip ]
 
diff --git a/third_party/blink/web_tests/MSANExpectations b/third_party/blink/web_tests/MSANExpectations
index 3db6132..8694810 100644
--- a/third_party/blink/web_tests/MSANExpectations
+++ b/third_party/blink/web_tests/MSANExpectations
@@ -114,7 +114,3 @@
 crbug.com/1419916 [ Linux ] virtual/oopr-canvas2d/fast/canvas/canvas-fillPath-gradient-shadow.html [ Crash ]
 
 crbug.com/1457275 [ Linux ] external/wpt/dom/ranges/Range-surroundContents.html [ Skip ]
-
-# Gardener (Sheriff) 2023-07-12
-# use-of-uninitialized-value
-crbug.com/1464214 [ Linux ] virtual/plz-dedicated-worker/external/wpt/html/cross-origin-embedder-policy/credentialless/dedicated-worker.https.window.html [ Skip ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index a8b80d5..989ca95 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1511,7 +1511,7 @@
 crbug.com/1004760 [ Mac12-arm64 ] external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Timeout ]
 crbug.com/1191547 external/wpt/html/semantics/forms/the-label-element/proxy-modifier-click-to-associated-element.tentative.html [ Timeout ]
 crbug.com/1404463 external/wpt/html/semantics/embedded-content/the-img-element/responsive-image-select-print.html [ Failure ]
-crbug.com/1401590 [ Mac ] external/wpt/html/semantics/links/hyperlink-auditing/headers.optional.html [ Pass Failure Timeout ]
+crbug.com/1401590 [ Mac ] external/wpt/html/semantics/links/hyperlink-auditing/headers.optional.html [ Failure Pass Timeout ]
 
 # XML nodes aren't match by .class selectors:
 crbug.com/649444 external/wpt/css/selectors/xml-class-selector.xml [ Failure ]
@@ -1837,7 +1837,6 @@
 crbug.com/377696 printing/setPrinting.html [ Failure ]
 
 crbug.com/1204498 external/wpt/service-workers/service-worker/client-navigate.https.html [ Failure Pass Timeout ]
-crbug.com/1223681 virtual/plz-dedicated-worker/external/wpt/service-workers/service-worker/client-navigate.https.html [ Failure Pass Timeout ]
 
 # crbug.com/1218723 This test fails when SplitCacheByNetworkIsolationKey is enabled.
 crbug.com/1218723 http/tests/devtools/network/network-prefetch.js [ Failure ]
@@ -2608,12 +2607,9 @@
 crbug.com/626703 external/wpt/service-workers/service-worker/controlled-dedicatedworker-postMessage.https.html [ Failure Timeout ]
 crbug.com/626703 external/wpt/service-workers/service-worker/controlled-iframe-postMessage.https.html [ Failure Timeout ]
 crbug.com/626703 external/wpt/fetch/metadata/generated/worker-dedicated-constructor.sub.html [ Failure ]
-crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/metadata/generated/worker-dedicated-constructor.sub.html [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/web-bundle/subresource-loading/reuse-web-bundle-resource.https.tentative.html [ Failure ]
-crbug.com/626703 [ Linux ] virtual/plz-dedicated-worker/external/wpt/service-workers/service-worker/worker-interception.https.html [ Failure ]
 crbug.com/626703 [ Mac ] external/wpt/web-bundle/subresource-loading/reuse-web-bundle-resource.https.tentative.html [ Failure ]
 crbug.com/626703 external/wpt/service-workers/service-worker/navigation-timing-extended.https.html [ Failure ]
-crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/service-workers/service-worker/navigation-timing-extended.https.html [ Failure ]
 crbug.com/626703 external/wpt/preload/preload-resource-match.https.html [ Failure ]
 crbug.com/1359555 external/wpt/speculation-rules/prerender/workers.html [ Failure Timeout ]
 
@@ -2630,6 +2626,13 @@
 crbug.com/626703 [ Mac ] virtual/webcodecs-without-task-runner-with-custom-deleter/external/wpt/webcodecs/videoDecoder-codec-specific.https.any.worker.html?h265_hevc [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 external/wpt/css/css-contain/content-visibility/content-visibility-095.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-writing-modes/forms/checkbox-appearance-native-vertical-lr-baseline.optional.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-writing-modes/forms/checkbox-appearance-native-vertical-rl-baseline.optional.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-writing-modes/forms/radio-appearance-native-vertical-lr-baseline.optional.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-writing-modes/forms/radio-appearance-native-vertical-rl-baseline.optional.html [ Failure ]
+crbug.com/626703 external/wpt/html/rendering/widgets/input-checkbox-switch-rtl.tentative.html [ Failure ]
+crbug.com/626703 external/wpt/svg/color-inherit-link-visited.svg [ Failure ]
 crbug.com/626703 external/wpt/html/semantics/forms/the-input-element/input-type-checkbox-switch.tentative.window.html [ Failure ]
 crbug.com/626703 external/wpt/html/semantics/selectors/pseudo-classes/input-checkbox-switch.tentative.window.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-backgrounds/background-origin/origin-border-box.html [ Failure ]
@@ -2831,8 +2834,6 @@
 crbug.com/626703 external/wpt/workers/modules/shared-worker-options-credentials.html [ Skip Timeout ]
 crbug.com/626703 [ Mac10.15 ] virtual/fenced-frame-mparch/external/wpt/fenced-frame/anchor-focus.https.html [ Timeout ]
 crbug.com/626703 [ Mac10.15 ] virtual/keepalive-in-browser-migration/external/wpt/fetch/metadata/window-open.https.sub.html [ Timeout ]
-crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/workers/modules/dedicated-worker-options-credentials.html [ Skip Timeout ]
-crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/workers/modules/shared-worker-options-credentials.html [ Skip Timeout ]
 crbug.com/626703 [ Mac13 ] virtual/third-party-storage-partitioning/external/wpt/IndexedDB/reading-autoincrement-indexes.any.worker.html [ Timeout ]
 crbug.com/626703 [ Mac10.15 ] virtual/threaded-prefer-compositing/external/wpt/scroll-animations/scroll-timelines/layout-changes-on-percentage-based-timeline.html [ Timeout ]
 crbug.com/626703 [ Mac10.15 ] virtual/view-transition-wide-gamut/external/wpt/css/css-view-transitions/new-content-captures-clip-path.html [ Timeout ]
@@ -3009,8 +3010,6 @@
 crbug.com/626703 external/wpt/shape-detection/single-text-detection.https.html [ Failure Timeout ]
 crbug.com/626703 virtual/fenced-frame-mparch/wpt_internal/fenced_frame/unfenced-top.https.html [ Skip Timeout ]
 crbug.com/626703 [ Linux ] virtual/fenced-frame-mparch/external/wpt/html/anonymous-iframe/web-lock.tentative.https.window.html [ Timeout ]
-crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/private-network-access/redirect.tentative.https.window.html [ Timeout ]
-crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/metadata/generated/element-img.https.sub.html [ Timeout ]
 crbug.com/626703 [ Mac10.15 ] external/wpt/font-access/font_access_query_select.tentative.https.window.html [ Timeout ]
 crbug.com/626703 [ Mac11 ] external/wpt/font-access/font_access_query_select.tentative.https.window.html [ Timeout ]
 crbug.com/626703 [ Mac12 ] external/wpt/font-access/font_access_query_select.tentative.https.window.html [ Timeout ]
@@ -3057,7 +3056,6 @@
 crbug.com/626703 external/wpt/css/css-rhythm/block-step-size-establishes-independent-formatting-context-list-item.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-rhythm/block-step-size-establishes-independent-formatting-context.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-text/white-space/white-space-vs-joiners-002.html [ Failure ]
-crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/html/cross-origin-embedder-policy/credentialless/dedicated-worker.https.window.html [ Failure Timeout ]
 crbug.com/626703 [ Linux ] virtual/fenced-frame-mparch/external/wpt/fenced-frame/background-fetch.https.html [ Timeout ]
 crbug.com/626703 [ Mac12 ] virtual/fenced-frame-mparch/external/wpt/fenced-frame/background-fetch.https.html [ Timeout ]
 crbug.com/626703 external/wpt/html/semantics/interactive-elements/the-dialog-element/modal-dialog-backdrop-opacity.html [ Failure ]
@@ -3135,7 +3133,6 @@
 crbug.com/626703 [ Mac12-arm64 ] external/wpt/fetch/api/abort/serviceworker-intercepted.https.html [ Timeout ]
 crbug.com/626703 [ Mac13-arm64 ] external/wpt/fetch/api/abort/serviceworker-intercepted.https.html [ Timeout ]
 crbug.com/626703 [ Win ] external/wpt/fetch/api/abort/serviceworker-intercepted.https.html [ Timeout ]
-crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/api/abort/serviceworker-intercepted.https.html [ Timeout ]
 crbug.com/626703 external/wpt/avif/animated-avif-timeout.html [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/encoding/unsupported-labels.window.html [ Failure Timeout ]
 crbug.com/626703 [ Win ] external/wpt/encoding/unsupported-labels.window.html [ Failure Timeout ]
@@ -3152,7 +3149,6 @@
 crbug.com/626703 [ Mac12-arm64 ] external/wpt/service-workers/cache-storage/crashtests/cache-response-clone.https.html [ Timeout ]
 crbug.com/626703 [ Mac13-arm64 ] external/wpt/service-workers/cache-storage/crashtests/cache-response-clone.https.html [ Timeout ]
 crbug.com/626703 [ Win ] external/wpt/service-workers/cache-storage/crashtests/cache-response-clone.https.html [ Timeout ]
-crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/service-workers/cache-storage/crashtests/cache-response-clone.https.html [ Timeout ]
 crbug.com/626703 [ Win11 ] external/wpt/mediacapture-streams/MediaDevices-enumerateDevices-per-origin-ids.sub.https.html [ Failure Timeout ]
 crbug.com/626703 [ Win11 ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaDevices-enumerateDevices-per-origin-ids.sub.https.html [ Failure Timeout ]
 crbug.com/626703 [ Mac11-arm64 ] external/wpt/webrtc/RTCPeerConnection-videoDetectorTest.html [ Failure Timeout ]
@@ -3161,11 +3157,6 @@
 crbug.com/626703 external/wpt/fetch/metadata/generated/element-link-icon.https.sub.html [ Skip Timeout ]
 crbug.com/626703 external/wpt/fetch/metadata/generated/element-link-icon.sub.html [ Skip Timeout ]
 crbug.com/626703 external/wpt/fetch/metadata/generated/element-video-poster.https.sub.html [ Skip Timeout ]
-crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/metadata/generated/css-images.https.sub.tentative.html [ Skip Timeout ]
-crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/metadata/generated/css-images.sub.tentative.html [ Skip Timeout ]
-crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/metadata/generated/element-link-icon.https.sub.html [ Skip Timeout ]
-crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/metadata/generated/element-link-icon.sub.html [ Skip Timeout ]
-crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/metadata/generated/element-video-poster.https.sub.html [ Timeout ]
 crbug.com/626703 [ Mac11-arm64 ] external/wpt/mixed-content/gen/worker-classic.http-rp/opt-in/websocket.https.html [ Skip Timeout ]
 crbug.com/626703 [ Mac11-arm64 ] external/wpt/mixed-content/gen/worker-module-data.meta/opt-in/websocket.https.html [ Skip Timeout ]
 crbug.com/626703 [ Mac11-arm64 ] external/wpt/upgrade-insecure-requests/gen/worker-classic-data.meta/upgrade/websocket.https.html [ Skip Timeout ]
@@ -4452,7 +4443,6 @@
 crbug.com/1249043 external/wpt/html/cross-origin-embedder-policy/reporting-navigation.https.html [ Failure Pass ]
 crbug.com/1249043 external/wpt/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html [ Failure Pass ]
 crbug.com/1287036 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html [ Skip Timeout ]
-crbug.com/1287036 virtual/plz-dedicated-worker/external/wpt/html/cross-origin-embedder-policy/multi-globals/workers-coep-report.https.html [ Failure Pass ]
 crbug.com/1265587 external/wpt/html/user-activation/activation-trigger-pointerevent.html?pen [ Failure ]
 crbug.com/1270351 external/wpt/html/user-activation/activation-trigger-pointerevent.html?touch [ Failure ]
 crbug.com/1159661 external/wpt/html/interaction/focus/document-level-focus-apis/document-has-system-focus.html [ Timeout ]
@@ -4745,9 +4735,6 @@
 crbug.com/1190905 [ Linux ] http/tests/devtools/indexeddb/live-update-indexeddb-list.js [ Failure Pass ]
 crbug.com/1190905 [ Win ] http/tests/devtools/indexeddb/live-update-indexeddb-list.js [ Failure Pass ]
 
-# Temporarily disable test to unblock https://crrev.com/c/5024100
-crbug.com/1457416 http/tests/devtools/elements/elements-tab-stops.js [ Failure Pass ]
-
 # Sheriff 2021-03-31
 # Failing tests because of enabling scroll unification flag
 
@@ -4770,9 +4757,7 @@
 
 # Is fixed by PlzDedicatedWorker.
 crbug.com/1060837 external/wpt/html/cross-origin-embedder-policy/reporting-to-frame-owner.https.html [ Timeout ]
-crbug.com/1060837 virtual/plz-dedicated-worker/external/wpt/html/cross-origin-embedder-policy/reporting-to-frame-owner.https.html [ Pass ]
 
-crbug.com/1143102 virtual/plz-dedicated-worker/http/tests/inspector-protocol/fetch/dedicated-worker-main-script.js [ Crash Failure Pass Timeout ]
 
 # TODO(crbug.com/906991): Should be fixed after PlzDedicatedWorker is launched.
 crbug.com/1143102 http/tests/inspector-protocol/fetch/dedicated-worker-main-script.js [ Failure Pass Timeout ]
@@ -4780,7 +4765,6 @@
 
 # These timeout because COEP reporting to a worker is not implemented.
 crbug.com/1197041 external/wpt/html/cross-origin-embedder-policy/reporting-to-worker-owner.https.html [ Crash Failure Pass Timeout ]
-crbug.com/1197041 virtual/plz-dedicated-worker/external/wpt/html/cross-origin-embedder-policy/reporting-to-worker-owner.https.html [ Crash Failure Pass Timeout ]
 
 # Sheriff 2021-04-12
 
@@ -5039,9 +5023,6 @@
 crbug.com/1229802 fast/events/pointerevents/multi-touch-events.html [ Failure Pass ]
 crbug.com/1181886 external/wpt/pointerevents/pointerevent_movementxy.html?* [ Failure Pass Timeout ]
 
-# Sheriff 2021-07-21
-crbug.com/1231431 virtual/plz-dedicated-worker/external/wpt/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html [ Failure ]
-
 # Sheriff 2021-07-22
 crbug.com/1231596 [ Mac10.15 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html [ Failure Pass ]
 crbug.com/1231596 [ Mac11-arm64 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html [ Failure Pass ]
@@ -5381,7 +5362,6 @@
 crbug.com/1302856 [ Mac11-arm64 ] virtual/exotic-color-space/images/rgb-png-with-cmyk-color-profile.html [ Failure Pass ]
 
 crbug.com/1298836 external/wpt/fetch/api/basic/response-null-body.any.* [ Failure Pass ]
-crbug.com/1298836 virtual/plz-dedicated-worker/external/wpt/fetch/api/basic/response-null-body.any.* [ Failure Pass ]
 
 # Sheriff 2022-03-10
 crbug.com/1304956 storage/indexeddb/dont-wedge.html [ Failure Pass ]
@@ -5476,7 +5456,6 @@
 
 # Sheriff 2022-04-21
 crbug.com/1318318 external/wpt/fetch/private-network-access/service-worker-background-fetch.tentative.https.window.html [ Failure Pass Timeout ]
-crbug.com/1318318 virtual/plz-dedicated-worker/external/wpt/fetch/private-network-access/service-worker-background-fetch.tentative.https.window.html [ Failure Pass Timeout ]
 crbug.com/1318561 [ Linux ] external/wpt/x-frame-options/get-decode-split.html [ Failure Pass ]
 
 # Temp disable MST transfer tests until Browser feature can be enabled in tests
@@ -5514,7 +5493,6 @@
 crbug.com/1464614 [ Win11-arm64 ] http/tests/security/document-domain-canonicalizes-iframe.html [ Skip Timeout ]
 
 crbug.com/1322405 external/wpt/fetch/metadata/generated/window-history.https.sub.html [ Pass Timeout ]
-crbug.com/1322405 virtual/plz-dedicated-worker/external/wpt/fetch/metadata/generated/window-history.https.sub.html [ Pass Timeout ]
 
 # Sheriff 2022-05-06
 crbug.com/1322072 [ Mac10.15 Release ] external/wpt/fetch/content-type/script.window.html [ Failure Pass ]
@@ -5778,7 +5756,7 @@
 crbug.com/1479108 virtual/threaded-no-composited-antialiasing/animations/composited-animations-rotate-zero-degrees.html [ Failure ]
 crbug.com/1430215 [ Mac10.15 ] external/wpt/dom/events/scrolling/scrollend-event-fired-to-window.html [ Failure ]
 crbug.com/1492172 [ Win ] external/wpt/soft-navigation-heuristics/softnav-before-lcp-paint.tentative.html [ Failure ]
-crbug.com/1491472 [ Mac ] virtual/shared-storage-fenced-frame-mparch/http/tests/inspector-protocol/shared-storage/debugger-pause-on-first-script.js [ Timeout ]
+crbug.com/1491472 [ Mac ] virtual/shared-storage-fenced-frame-mparch/http/tests/inspector-protocol/shared-storage/debugger-pause-on-first-script.js [ Skip Timeout ]
 
 # Suppress http/tests/inspector-protocol/network/navigate-iframe-in2out.js test cluster
 crbug.com/1413112 [ Mac10.15 ] virtual/reduce-accept-language/http/tests/inspector-protocol/network/navigate-iframe-in2out.js [ Failure ]
@@ -6753,7 +6731,6 @@
 # Slightly flaky
 crbug.com/1459304 [ Linux ] fast/filesystem/workers/file-writer-events.html [ Failure Pass ]
 crbug.com/1459304 [ Linux ] virtual/compositor-threaded-percent-based-scrolling/fast/scrolling/scrolling-container-moves-offscreen.html [ Failure Pass ]
-crbug.com/1459304 [ Linux ] virtual/plz-dedicated-worker/http/tests/devtools/indexeddb/database-structure.js [ Failure Pass ]
 crbug.com/1459304 [ Linux ] virtual/coop-restrict-properties/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html?3-4 [ Failure Pass ]
 crbug.com/1459304 [ Linux ] virtual/coop-restrict-properties/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-un.https.html?7-8 [ Failure Pass ]
 crbug.com/1459304 [ Linux ] virtual/coop-restrict-properties/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-soap.https.html?7-8 [ Failure Pass ]
@@ -6800,7 +6777,6 @@
 crbug.com/1371756 virtual/static-routing-api/external/wpt/service-workers/service-worker/tentative/static-router/* [ Pass ]
 crbug.com/1371756 http/tests/inspector-protocol/service-worker/tentative/static-router/* [ Failure ]
 crbug.com/1371756 virtual/static-routing-api/http/tests/inspector-protocol/service-worker/tentative/static-router/* [ Pass ]
-crbug.com/1371756 virtual/plz-dedicated-worker/http/tests/inspector-protocol/service-worker/tentative/static-router/* [ Failure ]
 
 # Gardener 2023-07-11
 crbug.com/1463964 virtual/coop-restrict-properties/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-about-blank.https.window.html [ Crash Failure Pass Timeout ]
@@ -7058,13 +7034,11 @@
 crbug.com/1501324 [ Mac ] virtual/compute-pressure/external/wpt/compute-pressure/compute_pressure_rate_obfuscation_mitigation_triggered.tentative.https.window.html [ Failure Pass ]
 
 # Tentatively allowed to fail to roll changes in the DevTools frontend.
-crbug.com/1474670 http/tests/devtools/application-panel/resources-panel-on-navigation.js [ Pass Failure ]
-crbug.com/1474670 http/tests/devtools/application-panel/resources-panel-resource-preview.js [ Pass Failure ]
-crbug.com/1474670 http/tests/devtools/application-panel/resources-panel-selection-on-reload.js [ Pass Failure ]
+crbug.com/1474670 http/tests/devtools/application-panel/resources-panel-on-navigation.js [ Failure Pass ]
+crbug.com/1474670 http/tests/devtools/application-panel/resources-panel-resource-preview.js [ Failure Pass ]
+crbug.com/1474670 http/tests/devtools/application-panel/resources-panel-selection-on-reload.js [ Failure Pass ]
 
 # Gardener 2023-11-13
-crbug.com/1501802 [ Linux ] virtual/pna-permission/external/wpt/fetch/private-network-access/window-open.tentative.https.window.html [ Pass Failure ]
-crbug.com/1501802 virtual/fenced-frame-mparch/external/wpt/fenced-frame/default-enabled-features-attribute-change.https.html [ Pass Failure Timeout ]
-crbug.com/1501802 [ Linux ] external/wpt/idle-detection/idle-detection-allowed-by-permissions-policy.https.sub.html [ Pass Failure ]
-
-
+crbug.com/1501802 [ Linux ] virtual/pna-permission/external/wpt/fetch/private-network-access/window-open.tentative.https.window.html [ Failure Pass ]
+crbug.com/1501802 [ Linux ] virtual/fenced-frame-mparch/external/wpt/fenced-frame/default-enabled-features-attribute-change.https.html [ Failure Pass ]
+crbug.com/1501802 [ Linux ] external/wpt/idle-detection/idle-detection-allowed-by-permissions-policy.https.sub.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/TestLists/MacOld.txt b/third_party/blink/web_tests/TestLists/MacOld.txt
index 5a0dd6e..bcf03dc 100644
--- a/third_party/blink/web_tests/TestLists/MacOld.txt
+++ b/third_party/blink/web_tests/TestLists/MacOld.txt
@@ -82,7 +82,6 @@
 virtual/oopr-canvas2d/fast/canvas/OffscreenCanvas-2d-drawImage.html
 virtual/pending-beacon/external/wpt/pending-beacon/pending_beacon-sendonhidden.tentative.https.window.html
 virtual/pending-beacon/external/wpt/pending-beacon/pending_post_beacon-cors.tentative.https.window.html
-virtual/plz-dedicated-worker/external/wpt/fetch/api/basic/scheme-blob.sub.any.html
 virtual/produce-compile-hints/external/wpt/fetch/api/basic/scheme-blob.sub.any.html
 virtual/produce-compile-hints/external/wpt/fetch/api/basic/scheme-blob.sub.any.worker.html
 virtual/reduce-accept-language/http/tests/inspector-protocol/network/navigate-iframe-in2out.js
@@ -114,4 +113,4 @@
 virtual/threaded/external/wpt/css/css-backgrounds/border-image-image-type-005.htm
 virtual/view-transition-wide-gamut/external/wpt/css/css-view-transitions/new-content-captures-clip-path.htm
 webexposed/global-interface-listing-platform-specific.html
-wpt_internal/mediastream/mediastreamtrackprocessor-transfer-to-worker.html
\ No newline at end of file
+wpt_internal/mediastream/mediastreamtrackprocessor-transfer-to-worker.html
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index 2eca30ec..00f7ef1 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -594,7 +594,7 @@
     "expires": "Jul 1, 2023"
   },
   {
-    "prefix": "plz-dedicated-worker",
+    "prefix": "plz-dedicated-worker-disabled",
     "platforms": ["Linux"],
     "bases": ["external/wpt/content-security-policy/inside-worker",
               "external/wpt/content-security-policy/worker-src",
@@ -615,9 +615,12 @@
               "http/tests/workers",
               "inspector-protocol/worker"
             ],
-    "args": ["--enable-features=PlzDedicatedWorker",
-             "--disable-threaded-compositing", "--disable-threaded-animation"],
-    "expires": "Jul 1, 2024"
+    "args": ["--disable-features=PlzDedicatedWorker"],
+    "owners": [
+      "yyanagisawa@chromium.org",
+      "kouhei@chromium.org"
+    ],
+    "expires": "Nov 10, 2024"
   },
   {
     "prefix": "service-worker-storage-control-on-thread-pool",
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 55f2991..f616602 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
@@ -161,6 +161,13 @@
        {}
       ]
      ],
+     "first-letter-inside-before-pseudo.html": [
+      "d4eb11a76dbcf646ad2c2a2fb6728a91e2233cae",
+      [
+       null,
+       {}
+      ]
+     ],
      "hidden-textfield-with-combobox.html": [
       "e988c6edb9f0a1fbcb10036aeae8c08e63f88a37",
       [
@@ -3920,6 +3927,13 @@
         {}
        ]
       ],
+      "overflow-wrap-anywhere-crash.html": [
+       "11625fe1bf6aba1a01659096f477073724ed0df9",
+       [
+        null,
+        {}
+       ]
+      ],
       "rendering-rtl-bidi-override-crash.html": [
        "9ba75c9c37b23f3b2dc8ef85bc3f606807c55aaf",
        [
@@ -100489,6 +100503,19 @@
        {}
       ]
      ],
+     "currentcolor-visited-fallback.html": [
+      "a83506b5e581ac28a4864b47426e30d796f6d3d8",
+      [
+       null,
+       [
+        [
+         "/css/css-color/currentcolor-visited-fallback-ref.html",
+         "=="
+        ]
+       ],
+       {}
+      ]
+     ],
      "deprecated-sameas-001.html": [
       "b03af9eb29fb6f4e23a036a927dd35bbf12bf112",
       [
@@ -110293,6 +110320,32 @@
         {}
        ]
       ],
+      "content-visibility-094.html": [
+       "0434530298b578ed0ea81cef43987e69ea59142f",
+       [
+        null,
+        [
+         [
+          "/css/css-contain/content-visibility/content-visibility-094-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "content-visibility-095.html": [
+       "245a8dd827c31c166050cc5f2d0e6b1fd2eb7cf2",
+       [
+        null,
+        [
+         [
+          "/css/css-contain/content-visibility/content-visibility-095-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
       "content-visibility-animation-and-scroll.html": [
        "3c4fd9c4fafabad81dddc6d62b946afbf0b5b95d",
        [
@@ -142036,7 +142089,7 @@
      ],
      "gradient": {
       "css-color-4-colors-default-to-oklab-gradient.html": [
-       "9ef20db2362bedb85090128e7c3cbe4536deda29",
+       "2b1edca0da1e168c3fa921202c54346b911f354a",
        [
         null,
         [
@@ -142052,7 +142105,7 @@
            [
             [
              1,
-             8
+             12
             ],
             [
              0,
@@ -142384,7 +142437,7 @@
        ]
       ],
       "oklab-gradient.html": [
-       "5291a4f42844035ac291b239a5cafb52f67c6d60",
+       "338a0c9d3bcf80739f2f2e80b404d8dac7ba464f",
        [
         null,
         [
@@ -142400,7 +142453,7 @@
            [
             [
              1,
-             8
+             12
             ],
             [
              0,
@@ -142442,7 +142495,7 @@
        ]
       ],
       "srgb-linear-gradient.html": [
-       "8d928e21b5559462e93b668c3dc62f668bcaca97",
+       "a921c6244546e9925d30dc80ea4f884b120514ca",
        [
         null,
         [
@@ -142458,7 +142511,7 @@
            [
             [
              1,
-             8
+             10
             ],
             [
              0,
@@ -142471,7 +142524,7 @@
        ]
       ],
       "xyz-gradient.html": [
-       "74d6efe226663d23ecec439c3f3c2f3fcfbaec41",
+       "6c6a30db143fea93354f404fcd47d768f98d7d22",
        [
         null,
         [
@@ -142487,7 +142540,7 @@
            [
             [
              1,
-             8
+             10
             ],
             [
              0,
@@ -154330,6 +154383,35 @@
         }
        ]
       ],
+      "clip-path-strokeBox-1c.html": [
+       "577e6d0a4e9f814d768a825c4e3fa27272c2b46d",
+       [
+        null,
+        [
+         [
+          "/css/css-masking/clip-path/clip-path-geometryBox-1-ref.html",
+          "=="
+         ]
+        ],
+        {
+         "fuzzy": [
+          [
+           null,
+           [
+            [
+             0,
+             64
+            ],
+            [
+             0,
+             260
+            ]
+           ]
+          ]
+         ]
+        }
+       ]
+      ],
       "clip-path-svg-invalidate.html": [
        "0bf921c7cf125c1e8a9e6842c62f294b13104790",
        [
@@ -170762,7 +170844,7 @@
       ]
      ],
      "highlight-currentcolor-painting-properties-001.html": [
-      "9fdf11e739c431cadc98abb41dd01c60055c21b7",
+      "76d80d228a0482acfd8d1c57591eca540b445e6f",
       [
        null,
        [
@@ -170782,7 +170864,7 @@
            ],
            [
             0,
-            3
+            150
            ]
           ]
          ]
@@ -170791,7 +170873,7 @@
       ]
      ],
      "highlight-currentcolor-painting-properties-002.html": [
-      "8f6673132f13335812f579cab40892fafc418e05",
+      "ac3677c1cff258088942b00dd9bc0f903df5cb35",
       [
        null,
        [
@@ -170811,7 +170893,7 @@
            ],
            [
             0,
-            3
+            150
            ]
           ]
          ]
@@ -170924,7 +171006,7 @@
       ]
      ],
      "highlight-painting-003.html": [
-      "f479432403729ed8b008ead1b46775d0f567df21",
+      "1e9fa030c0920a99d2c3dea87a96e8721038d5e9",
       [
        null,
        [
@@ -170944,7 +171026,7 @@
            ],
            [
             0,
-            50
+            300
            ]
           ]
          ]
@@ -170953,7 +171035,7 @@
       ]
      ],
      "highlight-painting-004.html": [
-      "cbf01e832af442f262d5132d05127c769bac1809",
+      "41425e5f14e80b31d8bd7e0dcd9c05709137330b",
       [
        null,
        [
@@ -170981,7 +171063,7 @@
            ],
            [
             0,
-            20
+            320
            ]
           ]
          ]
@@ -174794,7 +174876,7 @@
       ]
      ],
      "scroll-target-snap-002.html": [
-      "28dc5698210e27338e02ee0883cae6a06223ea8e",
+      "6e928a435eb5c21c5d87a1754965336e1f3b7375",
       [
        null,
        [
@@ -186046,6 +186128,19 @@
         {}
        ]
       ],
+      "hyphens-none-shy-on-2nd-line-001.html": [
+       "3efaa54d4f4501d47ed4c4ef5ab07dfd2b6f4241",
+       [
+        null,
+        [
+         [
+          "/css/css-text/hyphens/reference/hyphens-none-shy-on-2nd-line-001-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
       "hyphens-out-of-flow-001.html": [
        "ebc13c0158bbf1f55e2e46663415422b8e6a4555",
        [
@@ -194077,7 +194172,7 @@
      },
      "text-autospace": {
       "text-autospace-break-001.html": [
-       "003833c387b275ec9792c9c6461399d27af74b99",
+       "5af0e1f65afed7d878bb82ac9dfe3695a273cc97",
        [
         null,
         [
@@ -199698,6 +199793,19 @@
         {}
        ]
       ],
+      "text-wrap-balance-overflow-001.html": [
+       "5f79832549bd6cb3ecfae01e6cf1320af864218c",
+       [
+        null,
+        [
+         [
+          "/css/css-text/white-space/reference/text-wrap-balance-overflow-001-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
       "text-wrap-balance-text-indent-001.html": [
        "0fe4447acfb0f3a9a0c445723c99071959ff6d6c",
        [
@@ -234948,6 +235056,39 @@
        {}
       ]
      ],
+     "block-with-overflowing-text.html": [
+      "b3f8f42cfdf7ea3eae4833b071eea9b56a6a6e29",
+      [
+       null,
+       [
+        [
+         "/css/css-view-transitions/block-with-overflowing-text-ref.html",
+         "=="
+        ]
+       ],
+       {
+        "fuzzy": [
+         [
+          [
+           "/css/css-view-transitions/block-with-overflowing-text.html",
+           "/css/css-view-transitions/block-with-overflowing-text-ref.html",
+           "=="
+          ],
+          [
+           [
+            0,
+            2
+           ],
+           [
+            0,
+            1200
+           ]
+          ]
+         ]
+        ]
+       }
+      ]
+     ],
      "break-inside-avoid-child.html": [
       "7791f7ab4f6012daa6612c4b14f4a26415103f98",
       [
@@ -235805,6 +235946,39 @@
        {}
       ]
      ],
+     "inline-with-offset-from-containing-block.html": [
+      "8640899814a08ac38a1ea1e69fc63c7e39c9c231",
+      [
+       null,
+       [
+        [
+         "/css/css-view-transitions/inline-with-offset-from-containing-block-ref.html",
+         "=="
+        ]
+       ],
+       {
+        "fuzzy": [
+         [
+          [
+           "/css/css-view-transitions/inline-with-offset-from-containing-block.html",
+           "/css/css-view-transitions/inline-with-offset-from-containing-block-ref.html",
+           "=="
+          ],
+          [
+           [
+            0,
+            255
+           ],
+           [
+            0,
+            1400
+           ]
+          ]
+         ]
+        ]
+       }
+      ]
+     ],
      "japanese-tag.html": [
       "976dcab4fca8f8cf17fbdedbf7af0a162036eb37",
       [
@@ -236478,6 +236652,39 @@
        }
       ]
      ],
+     "multiline-span-with-overflowing-text-and-box-decorations.html": [
+      "e166b3c9dfe66370a4800ff6cac37e236100d62d",
+      [
+       null,
+       [
+        [
+         "/css/css-view-transitions/multiline-span-with-overflowing-text-and-box-decorations-ref.html",
+         "=="
+        ]
+       ],
+       {
+        "fuzzy": [
+         [
+          [
+           "/css/css-view-transitions/multiline-span-with-overflowing-text-and-box-decorations.html",
+           "/css/css-view-transitions/multiline-span-with-overflowing-text-and-box-decorations-ref.html",
+           "=="
+          ],
+          [
+           [
+            0,
+            3
+           ],
+           [
+            0,
+            4900
+           ]
+          ]
+         ]
+        ]
+       }
+      ]
+     ],
      "named-element-with-fix-pos-child-new.html": [
       "8a552b03a5ec5d4f3c8c84433023faeb5130116d",
       [
@@ -236771,7 +236978,7 @@
       ]
      ],
      "new-content-is-inline.html": [
-      "c341444f3425de43a7bc47f2a718a36337398141",
+      "46c96acb0471eace651554d4796673b2e06dd7e6",
       [
        null,
        [
@@ -237307,7 +237514,7 @@
       ]
      ],
      "old-content-is-inline.html": [
-      "9f350237adcb1ea234c98f9374c8e357a14e6e78",
+      "70ff67c0e0ab78f891acf370ab19bf0e336f8dc7",
       [
        null,
        [
@@ -237952,6 +238159,39 @@
        }
       ]
      ],
+     "span-with-overflowing-text-and-box-decorations.html": [
+      "a2bf59ecb00771c3bcb68eefd6622ad86df18073",
+      [
+       null,
+       [
+        [
+         "/css/css-view-transitions/span-with-overflowing-text-and-box-decorations-ref.html",
+         "=="
+        ]
+       ],
+       {
+        "fuzzy": [
+         [
+          [
+           "/css/css-view-transitions/span-with-overflowing-text-and-box-decorations.html",
+           "/css/css-view-transitions/span-with-overflowing-text-and-box-decorations-ref.html",
+           "=="
+          ],
+          [
+           [
+            0,
+            3
+           ],
+           [
+            0,
+            4900
+           ]
+          ]
+         ]
+        ]
+       }
+      ]
+     ],
      "span-with-overflowing-text-hidden.html": [
       "65b1497c700599964efaa3e802794f2d16d5fbbf",
       [
@@ -237966,7 +238206,7 @@
       ]
      ],
      "span-with-overflowing-text.html": [
-      "4abee4e6e00728487c834c266e9bbfddf782c2a0",
+      "f3f0f534e9e10c57d42ada86aa08d60df044f080",
       [
        null,
        [
@@ -237986,7 +238226,7 @@
           [
            [
             0,
-            2
+            3
            ],
            [
             0,
@@ -245851,6 +246091,32 @@
         {}
        ]
       ],
+      "checkbox-appearance-native-vertical-lr-baseline.optional.html": [
+       "b19de139f15ca338d82a914342883b2e2a9bb257",
+       [
+        null,
+        [
+         [
+          "/css/css-writing-modes/forms/checkbox-appearance-native-vertical-lr-baseline.optional-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "checkbox-appearance-native-vertical-rl-baseline.optional.html": [
+       "3efb21136cd172bfd4960407c55cde4c2f87fa15",
+       [
+        null,
+        [
+         [
+          "/css/css-writing-modes/forms/checkbox-appearance-native-vertical-rl-baseline.optional-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
       "color-input-appearance-native-horizontal.optional.html": [
        "ef5fc29fcfd7f8c7231cea99eedff921792cc5ab",
        [
@@ -246145,6 +246411,32 @@
         {}
        ]
       ],
+      "radio-appearance-native-vertical-lr-baseline.optional.html": [
+       "8d5bf75fe8f354577b3d09e10704538fe41ec9e4",
+       [
+        null,
+        [
+         [
+          "/css/css-writing-modes/forms/radio-appearance-native-vertical-lr-baseline.optional-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "radio-appearance-native-vertical-rl-baseline.optional.html": [
+       "4c5a59a031a1acd5ab02a235ff739f43a72c88aa",
+       [
+        null,
+        [
+         [
+          "/css/css-writing-modes/forms/radio-appearance-native-vertical-rl-baseline.optional-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
       "range-input-appearance-native-horizontal-rtl.optional.html": [
        "9382f890fb9465f92e527a9b85cda2ff886453cd",
        [
@@ -246315,6 +246607,131 @@
         {}
        ]
       ],
+      "select-appearance-native-horizontal.optional.html": [
+       "669c2c8c03c82919ed129d2803ced8db5e09e051",
+       [
+        null,
+        [
+         [
+          "/css/css-writing-modes/forms/select-appearance-none-horizontal.optional.html",
+          "!="
+         ],
+         [
+          "/css/css-writing-modes/forms/select-appearance-native-vertical.optional.html",
+          "!="
+         ],
+         [
+          "/css/css-writing-modes/forms/select-appearance-none-vertical-lr.optional.html",
+          "!="
+         ],
+         [
+          "/css/css-writing-modes/forms/select-appearance-none-vertical-rl.optional.html",
+          "!="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "select-appearance-native-vertical.optional.html": [
+       "79eb364023d8e4b532045c4eb41d6ee0589552b9",
+       [
+        null,
+        [
+         [
+          "/css/css-writing-modes/forms/select-appearance-none-vertical-lr.optional.html",
+          "!="
+         ],
+         [
+          "/css/css-writing-modes/forms/select-appearance-none-vertical-rl.optional.html",
+          "!="
+         ],
+         [
+          "/css/css-writing-modes/forms/select-appearance-native-horizontal.optional.html",
+          "!="
+         ],
+         [
+          "/css/css-writing-modes/forms/select-appearance-none-horizontal.optional.html",
+          "!="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "select-appearance-none-horizontal.optional.html": [
+       "a7bcd3a85f7b05223d1c06d14eb86d03e60298c1",
+       [
+        null,
+        [
+         [
+          "/css/css-writing-modes/forms/select-appearance-native-horizontal.optional.html",
+          "!="
+         ],
+         [
+          "/css/css-writing-modes/forms/select-appearance-none-vertical-lr.optional.html",
+          "!="
+         ],
+         [
+          "/css/css-writing-modes/forms/select-appearance-none-vertical-rl.optional.html",
+          "!="
+         ],
+         [
+          "/css/css-writing-modes/forms/select-appearance-native-vertical.optional.html",
+          "!="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "select-appearance-none-vertical-lr.optional.html": [
+       "2b93db377387d8a7b20b9c0dd9c996c14dd89a7e",
+       [
+        null,
+        [
+         [
+          "/css/css-writing-modes/forms/select-appearance-none-vertical-rl.optional.html",
+          "=="
+         ],
+         [
+          "/css/css-writing-modes/forms/select-appearance-native-vertical.optional.html",
+          "!="
+         ],
+         [
+          "/css/css-writing-modes/forms/select-appearance-none-horizontal.optional.html",
+          "!="
+         ],
+         [
+          "/css/css-writing-modes/forms/select-appearance-native-horizontal.optional.html",
+          "!="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "select-appearance-none-vertical-rl.optional.html": [
+       "7a412d88f6582c182efceb04c3013e02b14d78bd",
+       [
+        null,
+        [
+         [
+          "/css/css-writing-modes/forms/select-appearance-none-vertical-lr.optional.html",
+          "=="
+         ],
+         [
+          "/css/css-writing-modes/forms/select-appearance-native-vertical.optional.html",
+          "!="
+         ],
+         [
+          "/css/css-writing-modes/forms/select-appearance-none-horizontal.optional.html",
+          "!="
+         ],
+         [
+          "/css/css-writing-modes/forms/select-appearance-native-horizontal.optional.html",
+          "!="
+         ]
+        ],
+        {}
+       ]
+      ],
       "select-multiple-appearance-native-horizontal.optional.html": [
        "57b84109a823a0e1781f56a5241c5b1394309820",
        [
@@ -253192,6 +253609,19 @@
        {}
       ]
      ],
+     "css-reference-large-svg-filter.html": [
+      "0750fd7f638034b807e2a6ba6846b5f6c314ecf8",
+      [
+       null,
+       [
+        [
+         "/css/filter-effects/css-reference-large-svg-filter-ref.html",
+         "=="
+        ]
+       ],
+       {}
+      ]
+     ],
      "drop-shadow-clipped-001.html": [
       "c08331d77ff3b1c4bfda9262e62d947b55eecf79",
       [
@@ -262628,6 +263058,45 @@
          {}
         ]
        ],
+       "2d.layer.clip-inside-and-outside.html": [
+        "1a727bbd3cc8f8ca15f30a4aee2ec47e3ad5e2c8",
+        [
+         null,
+         [
+          [
+           "/html/canvas/element/layers/2d.layer.clip-inside-and-outside-expected.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
+       "2d.layer.clip-inside.html": [
+        "f3555c8321a8b5a39155a82db971dd20374bc0dc",
+        [
+         null,
+         [
+          [
+           "/html/canvas/element/layers/2d.layer.clip-inside-expected.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
+       "2d.layer.clip-outside.html": [
+        "bf8e84e3d25542e88c65dc1281673e775d8ecc72",
+        [
+         null,
+         [
+          [
+           "/html/canvas/element/layers/2d.layer.clip-outside-expected.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
        "2d.layer.cross-layer-paths.html": [
         "7feebfdce6d1b8a712636654925fb6a143a8a839",
         [
@@ -262979,6 +263448,19 @@
          {}
         ]
        ],
+       "2d.layer.opaque-canvas.html": [
+        "be8b088fbbbd3b5778a032efe7ef0c3863537775",
+        [
+         null,
+         [
+          [
+           "/html/canvas/element/layers/2d.layer.opaque-canvas-expected.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
        "2d.layer.render-opportunities.createImageBitmap.html": [
         "9b3d79c9f92954af1a067fc561b586e7ddd4448b",
         [
@@ -264483,6 +264965,84 @@
          {}
         ]
        ],
+       "2d.layer.clip-inside-and-outside.html": [
+        "03a3aee60519379807cabf3641b3bfee59e16a66",
+        [
+         null,
+         [
+          [
+           "/html/canvas/offscreen/layers/2d.layer.clip-inside-and-outside-expected.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
+       "2d.layer.clip-inside-and-outside.w.html": [
+        "71f9fe7db4d80e7190c62f0d422144af2cd7e7ac",
+        [
+         null,
+         [
+          [
+           "/html/canvas/offscreen/layers/2d.layer.clip-inside-and-outside-expected.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
+       "2d.layer.clip-inside.html": [
+        "e0c41f21e17581a0aba9b2a34c5a23e00a62cdd7",
+        [
+         null,
+         [
+          [
+           "/html/canvas/offscreen/layers/2d.layer.clip-inside-expected.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
+       "2d.layer.clip-inside.w.html": [
+        "9c4260a8cec5b056e0879d17fe7c2812882e6e14",
+        [
+         null,
+         [
+          [
+           "/html/canvas/offscreen/layers/2d.layer.clip-inside-expected.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
+       "2d.layer.clip-outside.html": [
+        "d2d091e96b77638ab05a7d6cac7619e5f22121e7",
+        [
+         null,
+         [
+          [
+           "/html/canvas/offscreen/layers/2d.layer.clip-outside-expected.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
+       "2d.layer.clip-outside.w.html": [
+        "aed72db5ab721e21d0d41c5e27c6ace9195882ed",
+        [
+         null,
+         [
+          [
+           "/html/canvas/offscreen/layers/2d.layer.clip-outside-expected.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
        "2d.layer.cross-layer-paths.html": [
         "f167ae00bdf18f985cab62f350466bc903dbddaf",
         [
@@ -265185,6 +265745,32 @@
          {}
         ]
        ],
+       "2d.layer.opaque-canvas.html": [
+        "f9759abebeb71ed5733e03be85d58412429a9e1e",
+        [
+         null,
+         [
+          [
+           "/html/canvas/offscreen/layers/2d.layer.opaque-canvas-expected.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
+       "2d.layer.opaque-canvas.w.html": [
+        "ff5ec19418b51b30091fbd08ef77570b15a83235",
+        [
+         null,
+         [
+          [
+           "/html/canvas/offscreen/layers/2d.layer.opaque-canvas-expected.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
        "2d.layer.render-opportunities.convertToBlob.html": [
         "c9367532018adffa4cfe38f4d5e3789ebbee2522",
         [
@@ -270788,6 +271374,19 @@
         {}
        ]
       ],
+      "input-checkbox-switch-rtl.tentative.html": [
+       "3e0c5d44c932775987a8dd09aa585d9d23a72587",
+       [
+        null,
+        [
+         [
+          "/html/rendering/widgets/input-checkbox-switch-rtl-notref.html",
+          "!="
+         ]
+        ],
+        {}
+       ]
+      ],
       "input-checkbox-switch.tentative.html": [
        "315728d539056950a1112d8f0b93ea446a1ee041",
        [
@@ -273362,7 +273961,7 @@
       }
      },
      "popovers": {
-      "popover-anchor-change-display.html": [
+      "popover-anchor-change-display.tentative.html": [
        "435929a6c1b05adc811fe8df029f2a30e2e79cf3",
        [
         null,
@@ -273375,7 +273974,7 @@
         {}
        ]
       ],
-      "popover-anchor-display.html": [
+      "popover-anchor-display.tentative.html": [
        "d50dd6c857b24f5e75e979d6356151e5cf7b65c8",
        [
         null,
@@ -273388,7 +273987,7 @@
         {}
        ]
       ],
-      "popover-anchor-nested-display.html": [
+      "popover-anchor-nested-display.tentative.html": [
        "b60ff49e09cf189dcc6985aa353e649b4681936f",
        [
         null,
@@ -273401,7 +274000,7 @@
         {}
        ]
       ],
-      "popover-anchor-scroll-display.html": [
+      "popover-anchor-scroll-display.tentative.html": [
        "7ed6cf1adf8d11ce5ab121340879ea95dd170991",
        [
         null,
@@ -279492,6 +280091,19 @@
       ]
      ]
     },
+    "color-inherit-link-visited.svg": [
+     "9324f1116b0ec7a0362c081085ed6f6cc5556c67",
+     [
+      null,
+      [
+       [
+        "/svg/color-inherit-link-visited-ref.svg",
+        "=="
+       ]
+      ],
+      {}
+     ]
+    ],
     "coordinate-systems": {
      "abspos.html": [
       "fb37bbe7f3ae4a61d1c216970c8a263673aed0dc",
@@ -289289,7 +289901,7 @@
      []
     ],
     "OWNERS": [
-     "b88159551bd76df4fc51202b35271a84e27e3759",
+     "4713ae1797bfaef547c668c5ea0a9539389004e2",
      []
     ],
     "clipboard-item.https-expected.txt": [
@@ -300855,7 +301467,7 @@
        []
       ],
       "border-image-source-interpolation-expected.txt": [
-       "b849631a8e0a30024c21aced3eccd63eabf3ec9e",
+       "9204247b02da37e44592c49000dc463645f5f1a8",
        []
       ],
       "invalidation": {
@@ -303663,10 +304275,6 @@
       "e67b97276818d50adb0e47105fbecab3c91e52c7",
       []
      ],
-     "import-conditions-expected.txt": [
-      "70988e65f4e768a6687f6d881eb2af5be8e9851f",
-      []
-     ],
      "important-prop-ref.html": [
       "004679da7309ccc08640fe8c92b6f069090a37b6",
       []
@@ -303837,6 +304445,10 @@
       "835e4b81e62f9b0c95c81e87f4e9eac311dc8edd",
       []
      ],
+     "currentcolor-visited-fallback-ref.html": [
+      "8e6bf0d336145f13a42a9e60e43024339e487ac5",
+      []
+     ],
      "deprecated-sameas-ButtonBorder-ref.html": [
       "99359aa4a776757973814748a9b74032b55cb8d8",
       []
@@ -304868,6 +305480,14 @@
        "3bcfa1cdbd8d4b997a64112744ccb077992cd7c2",
        []
       ],
+      "content-visibility-094-ref.html": [
+       "a377fc66418e45f82b8bc56e895a107b73bb2e87",
+       []
+      ],
+      "content-visibility-095-ref.html": [
+       "844ca37eb6c05fa6b419227a55af8553bb61918c",
+       []
+      ],
       "content-visibility-animation-and-scroll-ref.html": [
        "548970812b6df963ab9cfb9ed206e612a16aa8ca",
        []
@@ -306849,11 +307469,11 @@
      ],
      "parsing": {
       "display-computed-expected.txt": [
-       "c13a29b794816107a5c621b2877ae1a6b4260b8f",
+       "7fbd76d15970212aa6393622d7750b40f827258a",
        []
       ],
       "display-valid-expected.txt": [
-       "741e8e4dc8e3101aa76686699bd752ae8b418b1c",
+       "b1c2a79d66fa1b2b618b43939d90ee60d6332ca6",
        []
       ]
      },
@@ -319973,7 +320593,7 @@
      ],
      "animations": {
       "list-style-image-interpolation-expected.txt": [
-       "e45abaeba82c187b801443289a407727306a1792",
+       "c6a7326627fe3c717604ee180b395717a4b87195",
        []
       ]
      },
@@ -320473,7 +321093,7 @@
      ],
      "animations": {
       "clip-path-interpolation-xywh-rect-expected.txt": [
-       "6e7248211d85dca878d1bf19c2f57349bb45ed3f",
+       "db03a5389b24065a40583614cb826aa28a11c0ef",
        []
       ]
      },
@@ -325477,7 +326097,7 @@
        []
       ],
       "scroll-target-snap-001-iframe.html": [
-       "3146a3bf8824d625b1e49032343d1956f496fdf7",
+       "b67c3f8d3ec7cec22beea2a4031227c51d6ee13e",
        []
       ]
      }
@@ -325522,7 +326142,11 @@
      "snapchanged": {
       "resources": {
        "common.js": [
-        "68dcab5cc8a2dabc76e64470e669057f7f85aef3",
+        "3e0fddd0b07b5fdc22cd6369f5ffc079e60c629e",
+        []
+       ],
+       "user-scroll-common.js": [
+        "75f8bf1328dfc6f9c3d2e3c43dc189f38519c294",
         []
        ]
       }
@@ -327951,6 +328575,10 @@
         "0c8db033c8b8356e6201d58e83d6f5f6d0c1481c",
         []
        ],
+       "hyphens-none-shy-on-2nd-line-001-ref.html": [
+        "932330e927a79810784676da17abe3d60f451ca0",
+        []
+       ],
        "hyphens-out-of-flow-001-ref.html": [
         "73394479247fc3491ba37e50ec85b8dd00f8eadc",
         []
@@ -330039,7 +330667,7 @@
        []
       ],
       "text-align-last-interpolation-expected.txt": [
-       "de09496bfb6b1cd471cbb4607b3b6dc945bf8cf7",
+       "2d33c8a1d063144718f1dd9c9c84d21e68f8aded",
        []
       ],
       "text-align-last-justify-ref.html": [
@@ -330081,7 +330709,7 @@
      },
      "text-autospace": {
       "text-autospace-break-001-ref.html": [
-       "80c82714c3a39a8051a2d5a840422a27d792b172",
+       "130c89fcba5dc5307a4b27a2f3ca4d46fc71f844",
        []
       ],
       "text-autospace-dynamic-text-001-ref.html": [
@@ -330941,6 +331569,10 @@
         "4e465be7ccf97dfe4e8523f92aa6aec4470acbe2",
         []
        ],
+       "text-wrap-balance-overflow-001-ref.html": [
+        "64a1cf3d8d5f097b667bc3ae543afb9fdc4c8d04",
+        []
+       ],
        "text-wrap-balance-text-indent-001-ref.html": [
         "401e35e2f1f8c534487782df003078b1a53b6e36",
         []
@@ -336679,6 +337311,10 @@
       "4defa6b90d704e910e3269646f9d0cae37876404",
       []
      ],
+     "block-with-overflowing-text-ref.html": [
+      "8d9c430fcc7ff3cc44b62d444cdb2cbb80506f9b",
+      []
+     ],
      "break-inside-avoid-child-ref.html": [
       "859abdfb5f259021120d3810fa3fadce8be968c5",
       []
@@ -336847,6 +337483,10 @@
       "177594c870ceb2fabcf309ba5a8ff7e7553ca7a5",
       []
      ],
+     "inline-with-offset-from-containing-block-ref.html": [
+      "4a66af4ece26abd69a41840319783f86001746d0",
+      []
+     ],
      "intrinsic-aspect-ratio-ref.html": [
       "4455ad6172ef93668ab239317a17e33e9b0cb35e",
       []
@@ -336895,6 +337535,10 @@
       "1df26bb375248b014906c54efb426f2cf4bf9035",
       []
      ],
+     "multiline-span-with-overflowing-text-and-box-decorations-ref.html": [
+      "ca9efc52d6e412d2eb2ee3511b5f3845a36854b8",
+      []
+     ],
      "named-element-with-fix-pos-child-ref.html": [
       "a161cd8fc9a6a78b4070eae00544de2f3ff7ca44",
       []
@@ -336952,7 +337596,7 @@
       []
      ],
      "new-content-is-inline-ref.html": [
-      "d2ba93e0948584ee4fecafa775fab0772b0bafaa",
+      "c75cfcc252ae25e2b5577243c3ed3662a4eba653",
       []
      ],
      "new-content-object-view-box-clip-path-ref.html": [
@@ -337032,7 +337676,7 @@
       []
      ],
      "old-content-is-inline-ref.html": [
-      "5fe7d3fa1d2753853edc49680f5b0da2d127cd0b",
+      "5459d1d482c306f9d5ffd3adcddb0f69ae0b25f6",
       []
      ],
      "old-content-object-view-box-clip-path-ref.html": [
@@ -337123,12 +337767,16 @@
       "8ed60934cafe3970b4bd8e5ddcbc79818b10679b",
       []
      ],
+     "span-with-overflowing-text-and-box-decorations-ref.html": [
+      "e0a75e730ffb134a797baa6847a14e59e8639fe7",
+      []
+     ],
      "span-with-overflowing-text-hidden-ref.html": [
       "1d27e470ac15cc48aef31079ccc6ff445cead05a",
       []
      ],
      "span-with-overflowing-text-ref.html": [
-      "76fc3671da1faafaaf25760d11dd84bd670f6b4a",
+      "4ec4d4ccf856b2c786825bfe2c60fd35f6d804a6",
       []
      ],
      "support": {
@@ -337572,6 +338220,14 @@
       []
      ],
      "forms": {
+      "checkbox-appearance-native-vertical-lr-baseline.optional-ref.html": [
+       "c3f6107546a9186a12016fc42db376cc88bf4102",
+       []
+      ],
+      "checkbox-appearance-native-vertical-rl-baseline.optional-ref.html": [
+       "a253a71dd4949090bf1a57fd820178f6ea0099e1",
+       []
+      ],
       "manual": {
        "support": {
         "form-controls-slr.png": [
@@ -337596,6 +338252,14 @@
        "ad1ecc35ee913a2850bf42ed0e66397f30d19315",
        []
       ],
+      "radio-appearance-native-vertical-lr-baseline.optional-ref.html": [
+       "9b09537c937742fb9a69bdde6555f4610b09339d",
+       []
+      ],
+      "radio-appearance-native-vertical-rl-baseline.optional-ref.html": [
+       "95871a518f1d2723a1c8f3bfc66b40462b2e3579",
+       []
+      ],
       "range-input-painting-ref.html": [
        "650a8139ca6cc13403957c2b68e8ef954cd80058",
        []
@@ -339739,10 +340403,6 @@
       "3250801f64b5d6b4d430083bdc06c09aa0844370",
       []
      ],
-     "cssimportrule-expected.txt": [
-      "252474eca172da208720321dc7f4055df6000747",
-      []
-     ],
      "cssom-getPropertyValue-common-checks-expected.txt": [
       "c858092d0b87aae3f2708f8aff09d29d6941e888",
       []
@@ -339788,7 +340448,7 @@
       []
      ],
      "idlharness-expected.txt": [
-      "2ccd774cfb0b7147114abbac4079c0d21217fe74",
+      "b488bce507dcdd79abb17d331999b1da7514cc50",
       []
      ],
      "insertRule-from-script-ref.html": [
@@ -340545,6 +341205,10 @@
       "7b21bfadf1eff5fdcd9d7b45bd59f07de4dbe1ae",
       []
      ],
+     "css-reference-large-svg-filter-ref.html": [
+      "21c33ea1cd44fa23f6f92c3881e6ef22d33587d2",
+      []
+     ],
      "fecolormatrix-type-ref.html": [
       "182b4b547c0d8f45c0b55a290d7d5b83e297364c",
       []
@@ -341241,7 +341905,7 @@
      ],
      "animation": {
       "offset-path-interpolation-006-expected.txt": [
-       "fd0ac65663f0901f6555959e1b703c6d2551e7ff",
+       "2ab958b79bb19faa43cd07c81a18a8ae3e01b9f8",
        []
       ],
       "reftests": {
@@ -342546,7 +343210,7 @@
       []
      ],
      "interpolation-testcommon.js": [
-      "115067465feed31358f6d417e0208e3663589113",
+      "211018ca053adfe4f03ad70bf31c060b8bfdb0b1",
       []
      ],
      "numeric-testcommon.js": [
@@ -344392,7 +345056,7 @@
       []
      ],
      "delete.js": [
-      "7e63c518c793c8aabb11cd7d9e1cbe7ec0dded70",
+      "5fad8c2678333c2f753d61c5d9c679e1b618d162",
       []
      ],
      "fontname.js": [
@@ -344412,7 +345076,7 @@
       []
      ],
      "forwarddelete.js": [
-      "661b62adb8d1509c229d8983256aedf80d024845",
+      "5119d6f50def051a6ffccf140283f392acd131e8",
       []
      ],
      "hilitecolor.js": [
@@ -348821,11 +349485,11 @@
        []
       ],
       "keepalive-helper.js": [
-       "ad1d4b2c7c368d076d90fac01cf92f51a377ab79",
+       "b70e22fca0aa9283ec38590702d61e57d47d78e4",
        []
       ],
       "keepalive-iframe.html": [
-       "335a1f8e318402781894271147deeaced20d6fa9",
+       "f9dae5a34ecdbd43c4572b7482772976f03c3c91",
        []
       ],
       "keepalive-redirect-iframe.html": [
@@ -348865,7 +349529,7 @@
        []
       ],
       "stash-put.py": [
-       "0530e1ba5b4206ee3ea138c305fd9fab423cf0e4",
+       "91c198abb7d1775c1f4230a2b5b1245788813148",
        []
       ],
       "stash-take.py": [
@@ -349747,10 +350411,6 @@
       "18952805bb71bb4ddb51e8630b531a3bcc75859b",
       []
      ],
-     "parsing-nosniff.window-expected.txt": [
-      "9ba9e8cc6580dfc798438adf370e162ccc08e3e5",
-      []
-     ],
      "resources": {
       "css.py": [
        "8afb56991d76abd898074ceccc688cc2873eba16",
@@ -350022,6 +350682,10 @@
        "304cc54ae4448b84bf43aad3279b2dd198add165",
        []
       ],
+      "opener.html": [
+       "40e3b60bb52bc559f66fd283df2ca564d533edaf",
+       []
+      ],
       "preflight.py": [
        "255bd56a33e73858498e02bb66e799b25b78a0ed",
        []
@@ -350051,7 +350715,7 @@
        []
       ],
       "support.sub.js": [
-       "0cb757ca640d97353b218ae5c257199962e2b9bd",
+       "c3bdb8139bae670efbef4bd97d238ebfd4cede09",
        []
       ],
       "worker-blob-fetcher.html": [
@@ -350103,12 +350767,24 @@
       "70da776c601858829245342c4a5d3bf8997327d5",
       []
      ],
+     "window-open.tentative.https.window-expected.txt": [
+      "a908ea02f0e2ab5d653cc9bdfed10d8995bae030",
+      []
+     ],
+     "window-open.tentative.window-expected.txt": [
+      "81401649dd1fc28fe3897a8ebbacbed1ca99d157",
+      []
+     ],
      "worker-fetch.tentative.https.window-expected.txt": [
-      "6e53b793db22fb8406a038fed82b25702ca5bf18",
+      "2e1603b5a34f9feff08bb00cea8af19546aef2e4",
       []
      ],
      "worker-fetch.tentative.window-expected.txt": [
-      "6d2c599aad2f70fe401868fbd302f5079b6155fc",
+      "fee7f23533064c72cc1e80014edfb9991c17ed6a",
+      []
+     ],
+     "worker.tentative.window-expected.txt": [
+      "8f48b11f954f3816fe13ac0da0461a27f83532ca",
       []
      ]
     },
@@ -350270,7 +350946,7 @@
    "fledge": {
     "tentative": {
      "TODO": [
-      "83591131076b7b64ce9c0ee6d13a14474c718cab",
+      "8a416f17e5717c8a10a4af7a61c1cba5adc75ff8",
       []
      ],
      "kanon-status-below-threshold.https.window-expected.txt": [
@@ -350283,7 +350959,11 @@
        []
       ],
       "decision-logic.sub.py": [
-       "d5ecd2db87a34136c5a0e8e07f1751811296f634",
+       "39a4fede5c5888294118f999a8adeeac7bea9b63",
+       []
+      ],
+      "direct-from-seller-signals.py": [
+       "0f9e29dd57254db7dbb81cfce4ef85892834423c",
        []
       ],
       "empty.html": [
@@ -350295,7 +350975,7 @@
        []
       ],
       "fledge-util.sub.js": [
-       "b547c3c7d5286d0bf19060c651f45d315b48a2e1",
+       "e9513ecb855b52b104ebf0acead6e7274445d651",
        []
       ],
       "fledge_http_server_util.py": [
@@ -350323,7 +351003,7 @@
        []
       ],
       "trusted-bidding-signals.py": [
-       "16272afc71ccedb19cdcd80305fa78dc0f974b03",
+       "b8e7c9ffb055db3e5b51c1a33dac0aaa4985cc96",
        []
       ],
       "trusted-scoring-signals.py": [
@@ -355299,6 +355979,18 @@
         "1823f789839a973121269406f387ae8a66b6f8e1",
         []
        ],
+       "2d.layer.clip-inside-and-outside-expected.html": [
+        "14e6d56245c0e0687cdaa050869175df1037d1c7",
+        []
+       ],
+       "2d.layer.clip-inside-expected.html": [
+        "281fc1d9137af1eb605f272b429e3eb4a31b2501",
+        []
+       ],
+       "2d.layer.clip-outside-expected.html": [
+        "1b18c2e8a701aa21d74d4cd8652bfff88d0639cc",
+        []
+       ],
        "2d.layer.cross-layer-paths-expected.html": [
         "c394ecdfe3904f0afb1e4879241cf38d985155e6",
         []
@@ -355407,6 +356099,10 @@
         "65525d4d6a23db56e5717147a60fa8e22d0519a2",
         []
        ],
+       "2d.layer.opaque-canvas-expected.html": [
+        "89c85de1e5cbad6bccef23a88e9de78de94293c4",
+        []
+       ],
        "2d.layer.render-opportunities.createImageBitmap-expected.html": [
         "de03ea6392a5db71e0cf80e4cc503882de9e98b0",
         []
@@ -356365,6 +357061,18 @@
         "1823f789839a973121269406f387ae8a66b6f8e1",
         []
        ],
+       "2d.layer.clip-inside-and-outside-expected.html": [
+        "14e6d56245c0e0687cdaa050869175df1037d1c7",
+        []
+       ],
+       "2d.layer.clip-inside-expected.html": [
+        "281fc1d9137af1eb605f272b429e3eb4a31b2501",
+        []
+       ],
+       "2d.layer.clip-outside-expected.html": [
+        "1b18c2e8a701aa21d74d4cd8652bfff88d0639cc",
+        []
+       ],
        "2d.layer.cross-layer-paths-expected.html": [
         "c394ecdfe3904f0afb1e4879241cf38d985155e6",
         []
@@ -356473,6 +357181,10 @@
         "65525d4d6a23db56e5717147a60fa8e22d0519a2",
         []
        ],
+       "2d.layer.opaque-canvas-expected.html": [
+        "89c85de1e5cbad6bccef23a88e9de78de94293c4",
+        []
+       ],
        "2d.layer.render-opportunities.convertToBlob-expected.html": [
         "12b12519f16c7e908140ae920086aedcff5707e1",
         []
@@ -356846,7 +357558,7 @@
         []
        ],
        "layers.yaml": [
-        "56cd0331f29c0244a6973f28789ee29db757e922",
+        "27d7937432c5337ba1fe7b19154346065cf7a2d2",
         []
        ],
        "line-styles.yaml": [
@@ -356946,12 +357658,8 @@
        "86654525dda61a31ed7a9617ad449309b8a55366",
        []
       ],
-      "cache-storage.https.window_dedicated_worker-expected.txt": [
-       "a06f3c5a1f0cf3bca310b662c9d8ac25596dc434",
-       []
-      ],
-      "dedicated-worker.https.window-expected.txt": [
-       "e516f9d11f5938d38482c6b375e5f45292249d5d",
+      "dedicated-worker.https.window.js.ini": [
+       "2cc29fdd4535bf7fc06f1fdef346138c2e3c43fa",
        []
       ],
       "resources": {
@@ -356989,8 +357697,8 @@
       "6604450991a122e3e241e40b1b9e0516c525389d",
       []
      ],
-     "dedicated-worker-cache-storage.https-expected.txt": [
-      "2b947a5c6ea72d1573cde07d98a3ca735643c729",
+     "dedicated-worker.https.html.ini": [
+      "2b1d8a059a3590e0fd44bbe43588ff91d002bc68",
       []
      ],
      "javascript.https.html.headers": [
@@ -357030,10 +357738,6 @@
        "fcc521e3137046515ed877e1ce8d2b90069625bc",
        []
       ],
-      "workers-coep-report.https-expected.txt": [
-       "3ccebc11dfb3cdba88783f3fcefb6d5fa0c78444",
-       []
-      ],
       "workers-coep-report.https.html.headers": [
        "6604450991a122e3e241e40b1b9e0516c525389d",
        []
@@ -362500,7 +363204,7 @@
         []
        ],
        "fieldset-display-expected.txt": [
-        "90899f7971234516c98629a03c8637ba4492ddab",
+        "d472e37a1258df8d175a79409453f43a05496f56",
         []
        ],
        "fieldset-div-display-contents.html": [
@@ -362576,7 +363280,7 @@
         []
        ],
        "legend-display-expected.txt": [
-        "7c4b3b72781ce493915b3ecc2c7e00da14dfe263",
+        "9d8997b640a61ec8afced6cf7ffd3f8161e82bd6",
         []
        ],
        "legend-display-none-rendering-ref.html": [
@@ -363080,11 +363784,11 @@
         []
        ],
        "computed-style-expected.txt": [
-        "2caf8297ea158007ce204c918884c0ad8ff23dfd",
+        "3ba4303ad9c096d43881f59f17f825886341aba3",
         []
        ],
        "display-other-expected.txt": [
-        "98ccee72247843cb2dbe89b594197f41ee848b6b",
+        "98b678f4354d2fb208aef520c6c45545615b4010",
         []
        ],
        "inline-level-ref.html": [
@@ -363120,6 +363824,10 @@
        "94aa1b7ecde8beda03aeb0719e62e79145fbbd41",
        []
       ],
+      "input-checkbox-switch-rtl-notref.html": [
+       "02d57baf43dd90d4a7fef4380661856f96df7dec",
+       []
+      ],
       "input-date-baseline-min-height-ref.html": [
        "249076a5b7b064509684ddb4c70c6cea31d4b5ed",
        []
@@ -365597,6 +366305,10 @@
        }
       },
       "hyperlink-auditing": {
+       "headers.optional-expected.txt": [
+        "4eff07a5d529d5714e1ad736d71e8d83a6f40d2b",
+        []
+       ],
        "resources": {
         "stash-headers.py": [
          "a0d4a388120cce33a0480b7ff4831a50c23f18fe",
@@ -373421,7 +374133,7 @@
        []
       ],
       "display-2-expected.txt": [
-       "e7ffbcd4192834880dcb14b0c77af1fd1ff3234c",
+       "9d6e6030409f08229f4d1e393bd5a9ea520549f3",
        []
       ],
       "display-with-overflow-ref.html": [
@@ -375648,7 +376360,7 @@
     ],
     "resources": {
      "orientation-event-helpers.js": [
-      "1f0deba278ee7ca21d48a8c378e3fedb16184ce0",
+      "d9ee728d1efa49d58e24a79b49cb4443dafa7f25",
       []
      ]
     }
@@ -379268,7 +379980,15 @@
        "2b1f844376c34f0f30666e0f25c2db5613389ad5",
        []
       ]
-     }
+     },
+     "workers-expected.txt": [
+      "61821843918f7c226ac811b0d04235e68ebc106c",
+      []
+     ],
+     "workers.html.ini": [
+      "ba3014d6df55fd6fd489edb3ab4d31f1c3c9c5e1",
+      []
+     ]
     },
     "ping-rt-entries-expected.txt": [
      "d5de33f4aedbebaef7bec7bbec25d9e2ca3b3436",
@@ -381677,18 +382397,6 @@
       "6eb70e36439733b9233c3fd9b97957e30dd56304",
       []
      ],
-     "client-url-of-blob-url-worker.https-expected.txt": [
-      "36cb81122141a9bc9ec0ae60f1cb656562c5d716",
-      []
-     ],
-     "clients-get-client-types.https-expected.txt": [
-      "d594d08428a93838883075179a5ef9d43c24d9d6",
-      []
-     ],
-     "clients-matchall-blob-url-worker.https-expected.txt": [
-      "3ffdbfed8d2c1c380b4387f98783c6616a50b448",
-      []
-     ],
      "clients-matchall-client-types.https-expected.txt": [
       "688c093c50434065750b03a23c6871a71f878fff",
       []
@@ -381697,10 +382405,6 @@
       "bc5ecc0e314d095e310a7e5f19615f9d2be11840",
       []
      ],
-     "dedicated-worker-service-worker-interception.https-expected.txt": [
-      "f00908fdb999a5c85767f8a17f21afe29cfd7950",
-      []
-     ],
      "fetch-event-redirect.https-expected.txt": [
       "ca711835efaf67167a5ab2ea4d1ff927f2303e84",
       []
@@ -381730,7 +382434,7 @@
       []
      ],
      "local-url-inherit-controller.https-expected.txt": [
-      "a71326e7006e8caa61d2be23b88df2bc1445212c",
+      "9972d94840b407e1a17e033636f90281546dc482",
       []
      ],
      "multi-globals": {
@@ -383518,7 +384222,7 @@
       []
      ],
      "worker-interception-redirect.https-expected.txt": [
-      "26fc548b5cb51ae3c6bda4244f0589a1661d1162",
+      "734736220ea27577a7605e3a694d8ccb2dd5ad93",
       []
      ],
      "xhr-content-length.https.window-expected.txt": [
@@ -384761,7 +385465,7 @@
        []
       ],
       "utils.js": [
-       "311d37f0a0198a0c0f669d603522ad17f26b9748",
+       "62b3b3225cd8579af76be6340cd20230657959d6",
        []
       ],
       "wake-lock.https.html": [
@@ -385006,11 +385710,11 @@
       []
      ],
      "storage-access-beyond-cookies-iframe-iframe.html": [
-      "1130c59edb61965f6fbeb2ef92c8aa402378c828",
+      "b33d3b0ddc551cc839129b931748e0649fbb89c4",
       []
      ],
      "storage-access-beyond-cookies-iframe.sub.html": [
-      "4d80f41c1c2fb5d6408552deeb3a59ebc8358053",
+      "364e5d70e1ec95f06223afc4be6d0c165e6af0fb",
       []
      ]
     }
@@ -385354,7 +386058,7 @@
       []
      ],
      "test-utils.js": [
-      "5ff8fc8cec939a4de8a608077aa3c57af03b50c4",
+      "a38f78027bf0e90ae4bca4a3557982768ad402e8",
       []
      ]
     },
@@ -385720,6 +386424,10 @@
       []
      ]
     },
+    "color-inherit-link-visited-ref.svg": [
+     "3342e9347c319bacd632dd20399dca03f9fe69e9",
+     []
+    ],
     "coordinate-systems": {
      "support": {
       "abspos-ref.html": [
@@ -387940,11 +388648,11 @@
       []
      ],
      "urlpatterntestdata.json": [
-      "56b3a0c0f23dbc7ae15583c9e31f07bac251ffae",
+      "058079bb6d17ace15e7cf6505dc966ea2de0ee45",
       []
      ],
      "urlpatterntests.js": [
-      "f774699bff99c3b78e342bf4a8da9207aa8c84dd",
+      "761f96b6fd3392027f357ce79c11734d9b97557f",
       []
      ]
     }
@@ -388835,7 +389543,7 @@
        []
       ],
       "property-list.js": [
-       "14a175d7549ccbb22a0604ac51d5e220ac6858c8",
+       "32b857c30ed5852ae8d027219dd473c46a94bc19",
        []
       ],
       "property-types.js": [
@@ -388891,7 +389599,7 @@
      },
      "Animation": {
       "style-change-events-expected.txt": [
-       "030d9b7ed806c3d6e1562a88a9e0c6d77793a29d",
+       "3e77da476e9852932be02b89d8ca5e355f06beb6",
        []
       ]
      },
@@ -390381,6 +391089,12 @@
          []
         ]
        },
+       "auth_required": {
+        "__init__.py": [
+         "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+         []
+        ]
+       },
        "before_request_sent": {
         "__init__.py": [
          "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
@@ -390458,7 +391172,7 @@
       },
       "script": {
        "__init__.py": [
-        "603abc84375072128c3b31db3c9c553342d8265e",
+        "0f62fe4475606c80e6d8293af8bd4db430b26a47",
         []
        ],
        "add_preload_script": {
@@ -391019,7 +391733,7 @@
        []
       ],
       "fixtures_bidi.py": [
-       "a4eab79ff87c4f31373a0cba0ec45494953f9029",
+       "b42c12519ae9d0efa2d90968d90b887613289c74",
        []
       ],
       "fixtures_http.py": [
@@ -391605,7 +392319,7 @@
        []
       ],
       "reduce_log_sum_exp.json": [
-       "00c55ded51995331cc48532a26ed4c3ea6667629",
+       "e5ebb2aba39741928c4a3d8f87a48a6e395ed392",
        []
       ],
       "reduce_max.json": [
@@ -391690,7 +392404,7 @@
       ]
      },
      "utils.js": [
-      "920459275d4bceac6d501b750bfaacbaecdb2a4d",
+      "41da41659106381a8ffc8e9b61819c5b59d2c5de",
       []
      ]
     },
@@ -391937,10 +392651,6 @@
       "bb71a4e91c2f9ec7d0234224a140e194133a63f8",
       []
      ],
-     "crypto-suite.https-expected.txt": [
-      "c092889c0ec797a3e79de4e2c586d06917cd1438",
-      []
-     ],
      "rtx-codecs.https-expected.txt": [
       "9f7455840d1175495f1a5c686bb9612d62d556c3",
       []
@@ -397394,16 +398104,8 @@
      "fbd56f8cf2b3dd70e5c8572b0193899d5c520a14",
      []
     ],
-    "send-authentication-basic-setrequestheader-existing-session-expected.txt": [
-     "ff04260ace44a636900371d650b1c40a30359885",
-     []
-    ],
-    "send-authentication-cors-basic-setrequestheader-expected.txt": [
-     "875090f690d4b1a3c00ea0c86424e4d204697008",
-     []
-    ],
     "send-authentication-cors-setrequestheader-no-cred-expected.txt": [
-     "749556b10cd51849b4577500e904514ae50dd8ce",
+     "928bfca5b64b447507359c5bfabd41c66678ec61",
      []
     ],
     "send-content-type-charset-expected.txt": [
@@ -422510,6 +423212,60 @@
       }
      ]
     ],
+    "compute_pressure_rate_obfuscation_mitigation_not_triggered.tentative.https.window.js": [
+     "9fd549d2db9ba69a26071cfe33e0857a8d8aef82",
+     [
+      "compute-pressure/compute_pressure_rate_obfuscation_mitigation_not_triggered.tentative.https.window.html",
+      {
+       "script_metadata": [
+        [
+         "timeout",
+         "long"
+        ],
+        [
+         "script",
+         "/resources/test-only-api.js"
+        ],
+        [
+         "script",
+         "resources/pressure-helpers.js"
+        ],
+        [
+         "global",
+         "window,dedicatedworker,sharedworker"
+        ]
+       ],
+       "timeout": "long"
+      }
+     ]
+    ],
+    "compute_pressure_rate_obfuscation_mitigation_triggered.tentative.https.window.js": [
+     "f8ed3f23143967e1ca7813eaafbbea6034143110",
+     [
+      "compute-pressure/compute_pressure_rate_obfuscation_mitigation_triggered.tentative.https.window.html",
+      {
+       "script_metadata": [
+        [
+         "timeout",
+         "long"
+        ],
+        [
+         "script",
+         "/resources/test-only-api.js"
+        ],
+        [
+         "script",
+         "resources/pressure-helpers.js"
+        ],
+        [
+         "global",
+         "window,dedicatedworker,sharedworker"
+        ]
+       ],
+       "timeout": "long"
+      }
+     ]
+    ],
     "compute_pressure_same_origin_focus_control.tentative.https.window.js": [
      "7df0be5c47d161fe4cadcba937f875a0a0cba320",
      [
@@ -432005,7 +432761,7 @@
      ]
     ],
     "fedcm-revoke.https.html": [
-     "127b928b6d8d6287db49b3ccaef3accc7c649895",
+     "fb631978af6440ad79c7c77840dbcd346814b2bf",
      [
       null,
       {
@@ -434207,6 +434963,13 @@
        {}
       ]
      ],
+     "position-fallback-container-query.html": [
+      "b4ef806206e6b20490ba6846dd8be5509ca40d05",
+      [
+       null,
+       {}
+      ]
+     ],
      "position-fallback-custom-property.html": [
       "edb7efc7ed6884a52f6b3a3b7ba8a06833d1c349",
       [
@@ -434228,6 +434991,13 @@
        {}
       ]
      ],
+     "position-fallback-pseudo-element.html": [
+      "e2f95b9a24ae963e459ca6c92a3d366ff1631509",
+      [
+       null,
+       {}
+      ]
+     ],
      "position-fallback-tree-scoped.html": [
       "1d65b966d8fddd9aaead85046173dfa4b4c3e683",
       [
@@ -437427,7 +438197,7 @@
        ]
       ],
       "color-valid-relative-color.html": [
-       "26f766ed4cea0c0c55aa5ab89dc4acd1708c459f",
+       "543c2486c013d977095181a3f8e6ec478c69826d",
        [
         null,
         {}
@@ -438844,7 +439614,7 @@
        ]
       ],
       "content-visibility-svg-text.html": [
-       "7f12a9448890362ea821e7fba1017dab912ba337",
+       "fd3e44386ce429249bad14130514cf7f875f911a",
        [
         null,
         {}
@@ -439198,7 +439968,7 @@
      ],
      "parsing": {
       "display-computed.html": [
-       "b8c7b5e47eaa242eefff4b983d96d21c71f7a998",
+       "c32f470e07a04b833791e525ec5b48fbcce9aabe",
        [
         null,
         {}
@@ -439212,7 +439982,7 @@
        ]
       ],
       "display-valid.html": [
-       "9501a6e2ba7cb195c8254355bafcaa0842d0ad23",
+       "c011c2a30ca26dab4c97c9278a845efb47d69970",
        [
         null,
         {}
@@ -446400,7 +447170,7 @@
        ]
       ],
       "grid-template-invalid.html": [
-       "d7c12be3fde5592ce6a9fc1c3f10686ab7ecaaad",
+       "49d781e91f8ff642cd3b0c74e282e0528467ce6a",
        [
         null,
         {}
@@ -448877,7 +449647,7 @@
       ]
      ],
      "parsing.html": [
-      "ee9f35484469cb310fc3428bf0b99d60de92eceb",
+      "f29eff9730788fc264355734e30ece9838d96225",
       [
        null,
        {}
@@ -452738,6 +453508,24 @@
         {}
        ]
       ],
+      "snapchanged-on-user-root-scroll.tentative.html": [
+       "8ea895cbe9860a8f84e3f7d7fc8640a6190b9f6c",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
+      "snapchanged-on-user-scroll.tentative.html": [
+       "8468aa58e67f8609073036c644e46a85996e3fd6",
+       [
+        null,
+        {
+         "testdriver": true
+        }
+       ]
+      ],
       "snapchanged-same-targets-after-layout-changed.html": [
        "e41e5629dfe593ab2749e3866c43ec8d9bbdb3d0",
        [
@@ -458599,6 +459387,13 @@
        {}
       ]
      ],
+     "2d-transform-inline-js.html": [
+      "0c842ddd66fc948de7b4680e01961939d219c02a",
+      [
+       null,
+       {}
+      ]
+     ],
      "3d-rendering-context-behavior.html": [
       "94e476c3426b53c96b6b1a7ebb70d7f0586e8313",
       [
@@ -463158,7 +463953,7 @@
       ]
      ],
      "calc-nesting-002.html": [
-      "269d4e940ac4dc7d525a6039a27b64193750ca27",
+      "564d6067fb2cdc8305ea5a3c19e0ad3c49878c98",
       [
        null,
        {}
@@ -463634,7 +464429,7 @@
       ]
      ],
      "signs-abs-computed.html": [
-      "32466dcf0b48bc47bf775b3687881ef2e0df84ae",
+      "9b8ec89e2a98729deadcbb3e07f700c4eaca6372",
       [
        null,
        {}
@@ -464398,6 +465193,20 @@
         {}
        ]
       ],
+      "color-input-appearance-native-computed-style.html": [
+       "7ab0e0923d3e2af5a62a7c97316032cb718ddcb9",
+       [
+        null,
+        {}
+       ]
+      ],
+      "date-input-appearance-native-computed-style.html": [
+       "0e79766793c4bdb79b21139678eca6a9f488f5e3",
+       [
+        null,
+        {}
+       ]
+      ],
       "file-input-computed-style.html": [
        "417534e9bd6cfa6ebae9f5ecb5f37b5de45b3d9b",
        [
@@ -464419,6 +465228,13 @@
         {}
        ]
       ],
+      "select-appearance-native-computed-style.html": [
+       "2cbe33f9d856cbfed30b265bf5e83a660cf26891",
+       [
+        null,
+        {}
+       ]
+      ],
       "select-multiple-keyboard-selection.optional.html": [
        "a6e26b6c48b2a9c241891e135acf85314813a7ec",
        [
@@ -466666,6 +467482,13 @@
        {}
       ]
      ],
+     "screen-detached-frame.html": [
+      "1d566d10f13e1055df6e6ef68017dbdd224ef422",
+      [
+       null,
+       {}
+      ]
+     ],
      "screenLeftTop.html": [
       "58d868866eb275724c996bdc1a636ff6173d75a9",
       [
@@ -469247,7 +470070,7 @@
        ]
       ],
       "target-pseudo-in-has.html": [
-       "629a6a826beec5f802bd5a91622609689259c529",
+       "a0bcc39b7f1b6f6bf00177e02337f249a108bcd9",
        [
         null,
         {}
@@ -469508,6 +470331,13 @@
         {}
        ]
       ],
+      "parse-state.html": [
+       "35a8364181e30a1deebb8dd21e459429c1cd2767",
+       [
+        null,
+        {}
+       ]
+      ],
       "parse-universal.html": [
        "e944a93f12c0eafc9c19a2e827d93eb4448984e0",
        [
@@ -469575,7 +470405,7 @@
       ]
      ],
      "user-invalid.html": [
-      "f20d9970715c308945cd670fc5e4eefd6f3fde05",
+      "e726791b30a8cdc431a5bb6bc18b1ba0990973cc",
       [
        null,
        {
@@ -470674,6 +471504,15 @@
     ]
    },
    "custom-state-pseudo-class": {
+    "custom-state-set-strong-ref.tentative.html": [
+     "8b31f83c7b0aba6d8dcbc4b64e59a73f9d2576d2",
+     [
+      null,
+      {
+       "timeout": "long"
+      }
+     ]
+    ],
     "idlharness.window.js": [
      "d5d40c54616745c6110078d34c591d6d07a92fb2",
      [
@@ -470691,6 +471530,15 @@
        ]
       }
      ]
+    ],
+    "state-css-selector.tentative.html": [
+     "a13cf4135086da0ef8d8b73addbdadeaacd7b36a",
+     [
+      null,
+      {
+       "timeout": "long"
+      }
+     ]
     ]
    },
    "delegated-ink": {
@@ -474514,7 +475362,7 @@
     "observable": {
      "tentative": {
       "observable-constructor.any.js": [
-       "9e5a044bd34d72e844b6c806bc3fed5b773b3ddc",
+       "42e1f615a9828eaffe29cfdd6f43704dc196fd98",
        [
         "dom/observable/tentative/observable-constructor.any.html",
         {}
@@ -497402,7 +498250,7 @@
        ]
       ],
       "cors-keepalive.any.js": [
-       "f68d90ef9aaba9953d02eedbf8f6a9cb4909f126",
+       "08229f9cfc762e94c9140eaaa08d0b155c4a8e5e",
        [
         "fetch/api/cors/cors-keepalive.any.html",
         {
@@ -499451,7 +500299,7 @@
        ]
       ],
       "redirect-keepalive.any.js": [
-       "bcfc444f5a6569655c8e26f961392d6c1a5fd72e",
+       "1cdec79748f710e32c4d376bd7a0e26aabeccf5d",
        [
         "fetch/api/redirect/redirect-keepalive.any.html",
         {
@@ -507383,7 +508231,7 @@
       ]
      ],
      "iframe.tentative.https.window.js": [
-      "bf16b6ca7e131d6c0021818fc780950117537039",
+      "1e00c0af41a4395db82c2126744703f0582ee145",
       [
        "fetch/private-network-access/iframe.tentative.https.window.html?include=from-local",
        {
@@ -507626,7 +508474,7 @@
       ]
      ],
      "iframe.tentative.window.js": [
-      "c0770df83854c2c463febaaef65e073d46b4446a",
+      "441e0884d275adfd47146746575bdecca997abb6",
       [
        "fetch/private-network-access/iframe.tentative.window.html",
        {
@@ -507984,6 +508832,50 @@
        }
       ]
      ],
+     "window-open.tentative.https.window.js": [
+      "85b929f34d4f3893c3e09f3bc23fa590108262b6",
+      [
+       "fetch/private-network-access/window-open.tentative.https.window.html",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/common/dispatcher/dispatcher.js"
+         ],
+         [
+          "script",
+          "/common/utils.js"
+         ],
+         [
+          "script",
+          "resources/support.sub.js"
+         ]
+        ]
+       }
+      ]
+     ],
+     "window-open.tentative.window.js": [
+      "8d023775226b8107abc1513b67cc2fd70eb43560",
+      [
+       "fetch/private-network-access/window-open.tentative.window.html",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/common/dispatcher/dispatcher.js"
+         ],
+         [
+          "script",
+          "/common/utils.js"
+         ],
+         [
+          "script",
+          "resources/support.sub.js"
+         ]
+        ]
+       }
+      ]
+     ],
      "worker-blob-fetch.tentative.window.js": [
       "e119746b8a6b298a2c57bde63f03a59d8e72d477",
       [
@@ -508740,7 +509632,7 @@
       ]
      ],
      "auction-config.https.window.js": [
-      "432be9cb10a5bcc456013c78f9686c563b1c77a6",
+      "efb05fc14dad026170041bcc87f50c19b39c5170",
       [
        "fledge/tentative/auction-config.https.window.html?1-5",
        {
@@ -509234,7 +510126,7 @@
       ]
      ],
      "component-ads.https.window.js": [
-      "fb59045572ff7305ca107eeb5c190ee74d64277d",
+      "719a645beb692c5e5e407f3daf61323d5ae0a264",
       [
        "fledge/tentative/component-ads.https.window.html?1-5",
        {
@@ -509715,7 +510607,7 @@
       ]
      ],
      "currency.https.window.js": [
-      "21b3f9af3a5a21be0d0c84ef0610a9db34c8a33d",
+      "9a33d12148a0681da4a7d1f5e781b2248f64a361",
       [
        "fledge/tentative/currency.https.window.html?1-4",
        {
@@ -509758,7 +510650,23 @@
          ],
          [
           "variant",
-          "?17-last"
+          "?17-20"
+         ],
+         [
+          "variant",
+          "?21-24"
+         ],
+         [
+          "variant",
+          "?25-28"
+         ],
+         [
+          "variant",
+          "?29-32"
+         ],
+         [
+          "variant",
+          "?33-last"
          ]
         ],
         "timeout": "long"
@@ -509806,14 +510714,30 @@
          ],
          [
           "variant",
-          "?17-last"
+          "?17-20"
+         ],
+         [
+          "variant",
+          "?21-24"
+         ],
+         [
+          "variant",
+          "?25-28"
+         ],
+         [
+          "variant",
+          "?29-32"
+         ],
+         [
+          "variant",
+          "?33-last"
          ]
         ],
         "timeout": "long"
        }
       ],
       [
-       "fledge/tentative/currency.https.window.html?17-last",
+       "fledge/tentative/currency.https.window.html?17-20",
        {
         "script_metadata": [
          [
@@ -509854,7 +510778,279 @@
          ],
          [
           "variant",
-          "?17-last"
+          "?17-20"
+         ],
+         [
+          "variant",
+          "?21-24"
+         ],
+         [
+          "variant",
+          "?25-28"
+         ],
+         [
+          "variant",
+          "?29-32"
+         ],
+         [
+          "variant",
+          "?33-last"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "fledge/tentative/currency.https.window.html?21-24",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/resources/testdriver.js"
+         ],
+         [
+          "script",
+          "/common/utils.js"
+         ],
+         [
+          "script",
+          "resources/fledge-util.sub.js"
+         ],
+         [
+          "script",
+          "/common/subset-tests.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ],
+         [
+          "variant",
+          "?1-4"
+         ],
+         [
+          "variant",
+          "?5-8"
+         ],
+         [
+          "variant",
+          "?9-12"
+         ],
+         [
+          "variant",
+          "?13-16"
+         ],
+         [
+          "variant",
+          "?17-20"
+         ],
+         [
+          "variant",
+          "?21-24"
+         ],
+         [
+          "variant",
+          "?25-28"
+         ],
+         [
+          "variant",
+          "?29-32"
+         ],
+         [
+          "variant",
+          "?33-last"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "fledge/tentative/currency.https.window.html?25-28",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/resources/testdriver.js"
+         ],
+         [
+          "script",
+          "/common/utils.js"
+         ],
+         [
+          "script",
+          "resources/fledge-util.sub.js"
+         ],
+         [
+          "script",
+          "/common/subset-tests.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ],
+         [
+          "variant",
+          "?1-4"
+         ],
+         [
+          "variant",
+          "?5-8"
+         ],
+         [
+          "variant",
+          "?9-12"
+         ],
+         [
+          "variant",
+          "?13-16"
+         ],
+         [
+          "variant",
+          "?17-20"
+         ],
+         [
+          "variant",
+          "?21-24"
+         ],
+         [
+          "variant",
+          "?25-28"
+         ],
+         [
+          "variant",
+          "?29-32"
+         ],
+         [
+          "variant",
+          "?33-last"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "fledge/tentative/currency.https.window.html?29-32",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/resources/testdriver.js"
+         ],
+         [
+          "script",
+          "/common/utils.js"
+         ],
+         [
+          "script",
+          "resources/fledge-util.sub.js"
+         ],
+         [
+          "script",
+          "/common/subset-tests.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ],
+         [
+          "variant",
+          "?1-4"
+         ],
+         [
+          "variant",
+          "?5-8"
+         ],
+         [
+          "variant",
+          "?9-12"
+         ],
+         [
+          "variant",
+          "?13-16"
+         ],
+         [
+          "variant",
+          "?17-20"
+         ],
+         [
+          "variant",
+          "?21-24"
+         ],
+         [
+          "variant",
+          "?25-28"
+         ],
+         [
+          "variant",
+          "?29-32"
+         ],
+         [
+          "variant",
+          "?33-last"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "fledge/tentative/currency.https.window.html?33-last",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/resources/testdriver.js"
+         ],
+         [
+          "script",
+          "/common/utils.js"
+         ],
+         [
+          "script",
+          "resources/fledge-util.sub.js"
+         ],
+         [
+          "script",
+          "/common/subset-tests.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ],
+         [
+          "variant",
+          "?1-4"
+         ],
+         [
+          "variant",
+          "?5-8"
+         ],
+         [
+          "variant",
+          "?9-12"
+         ],
+         [
+          "variant",
+          "?13-16"
+         ],
+         [
+          "variant",
+          "?17-20"
+         ],
+         [
+          "variant",
+          "?21-24"
+         ],
+         [
+          "variant",
+          "?25-28"
+         ],
+         [
+          "variant",
+          "?29-32"
+         ],
+         [
+          "variant",
+          "?33-last"
          ]
         ],
         "timeout": "long"
@@ -509902,7 +511098,23 @@
          ],
          [
           "variant",
-          "?17-last"
+          "?17-20"
+         ],
+         [
+          "variant",
+          "?21-24"
+         ],
+         [
+          "variant",
+          "?25-28"
+         ],
+         [
+          "variant",
+          "?29-32"
+         ],
+         [
+          "variant",
+          "?33-last"
          ]
         ],
         "timeout": "long"
@@ -509950,7 +511162,266 @@
          ],
          [
           "variant",
-          "?17-last"
+          "?17-20"
+         ],
+         [
+          "variant",
+          "?21-24"
+         ],
+         [
+          "variant",
+          "?25-28"
+         ],
+         [
+          "variant",
+          "?29-32"
+         ],
+         [
+          "variant",
+          "?33-last"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "direct-from-seller-signals.https.window.js": [
+      "5281c813ea7b915e5d014cec2ee3da00bbff84e8",
+      [
+       "fledge/tentative/direct-from-seller-signals.https.window.html?1-5",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/resources/testdriver.js"
+         ],
+         [
+          "script",
+          "/common/utils.js"
+         ],
+         [
+          "script",
+          "resources/fledge-util.sub.js"
+         ],
+         [
+          "script",
+          "/common/subset-tests.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ],
+         [
+          "variant",
+          "?1-5"
+         ],
+         [
+          "variant",
+          "?6-10"
+         ],
+         [
+          "variant",
+          "?11-15"
+         ],
+         [
+          "variant",
+          "?16-20"
+         ],
+         [
+          "variant",
+          "?21-last"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "fledge/tentative/direct-from-seller-signals.https.window.html?11-15",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/resources/testdriver.js"
+         ],
+         [
+          "script",
+          "/common/utils.js"
+         ],
+         [
+          "script",
+          "resources/fledge-util.sub.js"
+         ],
+         [
+          "script",
+          "/common/subset-tests.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ],
+         [
+          "variant",
+          "?1-5"
+         ],
+         [
+          "variant",
+          "?6-10"
+         ],
+         [
+          "variant",
+          "?11-15"
+         ],
+         [
+          "variant",
+          "?16-20"
+         ],
+         [
+          "variant",
+          "?21-last"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "fledge/tentative/direct-from-seller-signals.https.window.html?16-20",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/resources/testdriver.js"
+         ],
+         [
+          "script",
+          "/common/utils.js"
+         ],
+         [
+          "script",
+          "resources/fledge-util.sub.js"
+         ],
+         [
+          "script",
+          "/common/subset-tests.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ],
+         [
+          "variant",
+          "?1-5"
+         ],
+         [
+          "variant",
+          "?6-10"
+         ],
+         [
+          "variant",
+          "?11-15"
+         ],
+         [
+          "variant",
+          "?16-20"
+         ],
+         [
+          "variant",
+          "?21-last"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "fledge/tentative/direct-from-seller-signals.https.window.html?21-last",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/resources/testdriver.js"
+         ],
+         [
+          "script",
+          "/common/utils.js"
+         ],
+         [
+          "script",
+          "resources/fledge-util.sub.js"
+         ],
+         [
+          "script",
+          "/common/subset-tests.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ],
+         [
+          "variant",
+          "?1-5"
+         ],
+         [
+          "variant",
+          "?6-10"
+         ],
+         [
+          "variant",
+          "?11-15"
+         ],
+         [
+          "variant",
+          "?16-20"
+         ],
+         [
+          "variant",
+          "?21-last"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "fledge/tentative/direct-from-seller-signals.https.window.html?6-10",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/resources/testdriver.js"
+         ],
+         [
+          "script",
+          "/common/utils.js"
+         ],
+         [
+          "script",
+          "resources/fledge-util.sub.js"
+         ],
+         [
+          "script",
+          "/common/subset-tests.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ],
+         [
+          "variant",
+          "?1-5"
+         ],
+         [
+          "variant",
+          "?6-10"
+         ],
+         [
+          "variant",
+          "?11-15"
+         ],
+         [
+          "variant",
+          "?16-20"
+         ],
+         [
+          "variant",
+          "?21-last"
          ]
         ],
         "timeout": "long"
@@ -510006,7 +511477,7 @@
       ]
      ],
      "join-leave-ad-interest-group-in-fenced-frame.https.window.js": [
-      "1bf5d017b2cd30d7fccc9150f73156ef8d1bda52",
+      "e6836ab2f45a873a3d5bd3de9f74c92424782bec",
       [
        "fledge/tentative/join-leave-ad-interest-group-in-fenced-frame.https.window.html?1-4",
        {
@@ -538063,6 +539534,13 @@
          {}
         ]
        ],
+       "2d.layer.opaque-canvas.worker.js": [
+        "df8bee548858a039b2a9183f32d9e50d31145081",
+        [
+         "html/canvas/offscreen/layers/2d.layer.opaque-canvas.worker.html",
+         {}
+        ]
+       ],
        "2d.layer.putImageData.html": [
         "b46b80c1f46e39b5078b0440a360fbcc7c93822b",
         [
@@ -560232,6 +561710,13 @@
          {}
         ]
        ],
+       "input-type-checkbox-switch.tentative.window.js": [
+        "6128a62a0fb0d592af5ab70a8e7f1163077f7360",
+        [
+         "html/semantics/forms/the-input-element/input-type-checkbox-switch.tentative.window.html",
+         {}
+        ]
+       ],
        "input-type-checkbox.html": [
         "7dd2f26b12c459405b8e6c59563f09cc1ec15c0c",
         [
@@ -561720,6 +563205,15 @@
          {}
         ]
        ],
+       "dialog-focusability.html": [
+        "afd02c7d9b286a4625f2c3a41c41d796780a68e1",
+        [
+         null,
+         {
+          "testdriver": true
+         }
+        ]
+       ],
        "dialog-focusing-steps-disconnected.html": [
         "bf621b640b7058d90542ed80dbe86d7c5cf99337",
         [
@@ -562101,7 +563595,7 @@
        ]
       ],
       "invoketarget-button-event-dispatch.tentative.html": [
-       "f3046a75866ae40187e5c5d68a0e3d2d9af49333",
+       "8d80cb445488124047f432652ca83a0d2a9995d3",
        [
         null,
         {
@@ -562380,28 +563874,28 @@
         }
        ]
       ],
-      "popover-anchor-display-none.html": [
+      "popover-anchor-display-none.tentative.html": [
        "55a11fafdb5901ad2f409595107d1d8c587d4979",
        [
         null,
         {}
        ]
       ],
-      "popover-anchor-idl-property.html": [
+      "popover-anchor-idl-property.tentative.html": [
        "1e255339f8107161a0ff105eae9f7f1547599f22",
        [
         null,
         {}
        ]
       ],
-      "popover-anchor-multicol-display.html": [
+      "popover-anchor-multicol-display.tentative.html": [
        "fe65ec5ba4ebac600e32990424ba4ef7a06cccf7",
        [
         null,
         {}
        ]
       ],
-      "popover-anchor-nesting.html": [
+      "popover-anchor-nesting.tentative.html": [
        "c3ea4f21658aec63af60819d4c22ab8af85d6985",
        [
         null,
@@ -562410,7 +563904,7 @@
         }
        ]
       ],
-      "popover-anchor-transition.tentative.html": [
+      "popover-anchor-transition.tentative.tentative.html": [
        "ae2a3a8e4159c63fe9213a96969ec7dc24d90325",
        [
         null,
@@ -562595,7 +564089,7 @@
         {}
        ]
       ],
-      "popover-light-dismiss-with-anchor.tentative.html": [
+      "popover-light-dismiss-with-anchor.tentative.tentative.html": [
        "c4e545c4fb97133cf6ad74ed73e2ade827c3721b",
        [
         null,
@@ -567283,7 +568777,7 @@
         ]
        ],
        "input-checkbox-switch.tentative.window.js": [
-        "eb54f2a1360cd8a692504c70729e01b954249254",
+        "b5d9898a640e9efe2a8a9b3c0dc3f25872c5fb3d",
         [
          "html/semantics/selectors/pseudo-classes/input-checkbox-switch.tentative.window.html",
          {}
@@ -572925,7 +574419,7 @@
      ]
     },
     "roles-contextual.html": [
-     "d2a09db453c04901acea4545f95348204aea871e",
+     "98ad07cd95f2566963c55e1fa7360f30c48ca0be",
      [
       null,
       {
@@ -574691,7 +576185,7 @@
      ]
     ],
     "input-events-get-target-ranges-backspace.tentative.html": [
-     "347ac61c3e0b11a9cd1bb10c824c7c1f50ec2cf7",
+     "90755042a67127649ab1eb5902f09ba72a16b1cd",
      [
       null,
       {
@@ -575327,6 +576821,62 @@
       {}
      ]
     ],
+    "svg-clipped-rect-target.html": [
+     "93ab4d9380b2b632ddc60847251a72e174a3be25",
+     [
+      null,
+      {}
+     ]
+    ],
+    "svg-container-element.html": [
+     "e2b6ab5cb0787b681647624eb696100dc6ccf2f2",
+     [
+      null,
+      {}
+     ]
+    ],
+    "svg-group-target.html": [
+     "9ebf2f4025f97709262dfcfca77a34a97c540627",
+     [
+      null,
+      {}
+     ]
+    ],
+    "svg-image.html": [
+     "d5c25428206e069f3806284080dee3716dd9c625",
+     [
+      null,
+      {}
+     ]
+    ],
+    "svg-rect-target.html": [
+     "e6e639577f333a093895a0653dcb8d265c6951ce",
+     [
+      null,
+      {}
+     ]
+    ],
+    "svg-stroke-change.html": [
+     "3f01a2a23d10bb38a2e1aac0d1413056ec76a478",
+     [
+      null,
+      {}
+     ]
+    ],
+    "svg-target-changes-position.html": [
+     "b15d7ca0d64528be96ebbfb189ad7c9695a04ae4",
+     [
+      null,
+      {}
+     ]
+    ],
+    "svg-transformed-rect-target.html": [
+     "c284d6507675e0ad5ee6e53819ea231fb87242c1",
+     [
+      null,
+      {}
+     ]
+    ],
     "target-in-detached-document.html": [
      "6a5cf1e8113d137c836522cd34f91d237210b18a",
      [
@@ -591126,7 +592676,7 @@
      ]
     },
     "pointerevent_after_target_appended.html": [
-     "08af43626b39b0be18c2054f133a480f1d673c31",
+     "6ac49a9497418875869dfdb253b820a2a1bcad04",
      [
       "pointerevents/pointerevent_after_target_appended.html?mouse",
       {
@@ -591146,8 +592696,29 @@
       }
      ]
     ],
+    "pointerevent_after_target_appended_interleaved.tentative.html": [
+     "7c404d8c6c710b5cbffcc237e31ec1dec1771885",
+     [
+      "pointerevents/pointerevent_after_target_appended_interleaved.tentative.html?mouse",
+      {
+       "testdriver": true
+      }
+     ],
+     [
+      "pointerevents/pointerevent_after_target_appended_interleaved.tentative.html?pen",
+      {
+       "testdriver": true
+      }
+     ],
+     [
+      "pointerevents/pointerevent_after_target_appended_interleaved.tentative.html?touch",
+      {
+       "testdriver": true
+      }
+     ]
+    ],
     "pointerevent_after_target_removed.html": [
-     "2dcc94c2b2321be2523d43e698d5c470373a24f6",
+     "f1970e72efdc7260f47586830208e91281e55ffa",
      [
       "pointerevents/pointerevent_after_target_removed.html?mouse",
       {
@@ -591167,6 +592738,27 @@
       }
      ]
     ],
+    "pointerevent_after_target_removed_interleaved.tentative.html": [
+     "ec6ffce9268e1636f5b878fd16361d2273212cb8",
+     [
+      "pointerevents/pointerevent_after_target_removed_interleaved.tentative.html?mouse",
+      {
+       "testdriver": true
+      }
+     ],
+     [
+      "pointerevents/pointerevent_after_target_removed_interleaved.tentative.html?pen",
+      {
+       "testdriver": true
+      }
+     ],
+     [
+      "pointerevents/pointerevent_after_target_removed_interleaved.tentative.html?touch",
+      {
+       "testdriver": true
+      }
+     ]
+    ],
     "pointerevent_attributes_hoverable_pointers.html": [
      "c8443d99ff31c2650aa10bbb079df72e4d866a71",
      [
@@ -619674,9 +621266,15 @@
       ]
      ],
      "restriction-screen-capture.https.html": [
-      "3ef5298403f45047de71b7242df618bae281d2a6",
+      "4390522b51e5d05ad9adfe09c7a5abf52e57fb6a",
       [
-       null,
+       "speculation-rules/prerender/restriction-screen-capture.https.html?target_hint=_blank",
+       {
+        "timeout": "long"
+       }
+      ],
+      [
+       "speculation-rules/prerender/restriction-screen-capture.https.html?target_hint=_self",
        {
         "timeout": "long"
        }
@@ -621028,6 +622626,42 @@
       {}
      ]
     ],
+    "storage-access-beyond-cookies.BroadcastChannel.tentative.sub.https.window.js": [
+     "d709cdcd10f807f2f2e879d560cd9f85fd4abc51",
+     [
+      "storage-access-api/storage-access-beyond-cookies.BroadcastChannel.tentative.sub.https.window.html",
+      {
+       "script_metadata": [
+        [
+         "script",
+         "/resources/testdriver.js"
+        ],
+        [
+         "script",
+         "/resources/testdriver-vendor.js"
+        ]
+       ]
+      }
+     ]
+    ],
+    "storage-access-beyond-cookies.blobStorage.tentative.sub.https.window.js": [
+     "6ef0bd08d4dc7175a1b241baa348776172b34d8c",
+     [
+      "storage-access-api/storage-access-beyond-cookies.blobStorage.tentative.sub.https.window.html",
+      {
+       "script_metadata": [
+        [
+         "script",
+         "/resources/testdriver.js"
+        ],
+        [
+         "script",
+         "/resources/testdriver-vendor.js"
+        ]
+       ]
+      }
+     ]
+    ],
     "storage-access-beyond-cookies.caches.tentative.sub.https.window.js": [
      "dda1e54565407ed438f9f23b6f0c84336e7b7748",
      [
@@ -621046,6 +622680,24 @@
       }
      ]
     ],
+    "storage-access-beyond-cookies.estimate.tentative.sub.https.window.js": [
+     "2e9f6eed127898a21c890b6f6dfe588db9197852",
+     [
+      "storage-access-api/storage-access-beyond-cookies.estimate.tentative.sub.https.window.html",
+      {
+       "script_metadata": [
+        [
+         "script",
+         "/resources/testdriver.js"
+        ],
+        [
+         "script",
+         "/resources/testdriver-vendor.js"
+        ]
+       ]
+      }
+     ]
+    ],
     "storage-access-beyond-cookies.getDirectory.tentative.sub.https.window.js": [
      "5038afc969afd8139b099a42ca0e2df65554b91a",
      [
@@ -621930,7 +623582,7 @@
       ]
      ],
      "general.any.js": [
-      "09e01536325ccaee1467b6330d0dff6105356003",
+      "f051d8102c2bed7611b76616ff895e9f69809202",
       [
        "streams/piping/general.any.html",
        {
@@ -621941,10 +623593,6 @@
          ],
          [
           "script",
-          "../resources/test-utils.js"
-         ],
-         [
-          "script",
           "../resources/recording-streams.js"
          ]
         ]
@@ -621960,10 +623608,6 @@
          ],
          [
           "script",
-          "../resources/test-utils.js"
-         ],
-         [
-          "script",
           "../resources/recording-streams.js"
          ]
         ]
@@ -621979,10 +623623,6 @@
          ],
          [
           "script",
-          "../resources/test-utils.js"
-         ],
-         [
-          "script",
           "../resources/recording-streams.js"
          ]
         ]
@@ -621998,10 +623638,6 @@
          ],
          [
           "script",
-          "../resources/test-utils.js"
-         ],
-         [
-          "script",
           "../resources/recording-streams.js"
          ]
         ]
@@ -622017,10 +623653,6 @@
          ],
          [
           "script",
-          "../resources/test-utils.js"
-         ],
-         [
-          "script",
           "../resources/recording-streams.js"
          ]
         ]
@@ -622817,7 +624449,7 @@
       ]
      ],
      "non-transferable-buffers.any.js": [
-      "47d7b2e653e5ec5379f1da4eb13740d3b5bb75d6",
+      "54cd8bffb2ccd2c0bdf8bb13fc5a34de20ae0d12",
       [
        "streams/readable-byte-streams/non-transferable-buffers.any.html",
        {
@@ -622874,6 +624506,104 @@
        }
       ]
      ],
+     "read-min.any.js": [
+      "4010e3750ce2a84afd1686db9ecd3b9f38543806",
+      [
+       "streams/readable-byte-streams/read-min.any.html",
+       {
+        "script_metadata": [
+         [
+          "global",
+          "window,worker,shadowrealm"
+         ],
+         [
+          "script",
+          "../resources/rs-utils.js"
+         ],
+         [
+          "script",
+          "../resources/test-utils.js"
+         ]
+        ]
+       }
+      ],
+      [
+       "streams/readable-byte-streams/read-min.any.serviceworker.html",
+       {
+        "script_metadata": [
+         [
+          "global",
+          "window,worker,shadowrealm"
+         ],
+         [
+          "script",
+          "../resources/rs-utils.js"
+         ],
+         [
+          "script",
+          "../resources/test-utils.js"
+         ]
+        ]
+       }
+      ],
+      [
+       "streams/readable-byte-streams/read-min.any.shadowrealm.html",
+       {
+        "script_metadata": [
+         [
+          "global",
+          "window,worker,shadowrealm"
+         ],
+         [
+          "script",
+          "../resources/rs-utils.js"
+         ],
+         [
+          "script",
+          "../resources/test-utils.js"
+         ]
+        ]
+       }
+      ],
+      [
+       "streams/readable-byte-streams/read-min.any.sharedworker.html",
+       {
+        "script_metadata": [
+         [
+          "global",
+          "window,worker,shadowrealm"
+         ],
+         [
+          "script",
+          "../resources/rs-utils.js"
+         ],
+         [
+          "script",
+          "../resources/test-utils.js"
+         ]
+        ]
+       }
+      ],
+      [
+       "streams/readable-byte-streams/read-min.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "global",
+          "window,worker,shadowrealm"
+         ],
+         [
+          "script",
+          "../resources/rs-utils.js"
+         ],
+         [
+          "script",
+          "../resources/test-utils.js"
+         ]
+        ]
+       }
+      ]
+     ],
      "respond-after-enqueue.any.js": [
       "e51efa061a6511b2c22a6df541b99209827c11be",
       [
@@ -644860,21 +646590,13 @@
      ]
     ],
     "public-key-credential-to-json.https.window.js": [
-     "8de3b8c3cd09ac92fc2f1ade93e3ab7888cddc72",
+     "1fbd4341cc597eb1f0a5140a5fd8f608056fb255",
      [
       "webauthn/public-key-credential-to-json.https.window.html",
       {
        "script_metadata": [
         [
          "script",
-         "/resources/testharness.js"
-        ],
-        [
-         "script",
-         "/resources/testharnessreport.js"
-        ],
-        [
-         "script",
          "/resources/testdriver.js"
         ],
         [
@@ -650147,6 +651869,33 @@
        }
       ]
      ],
+     "close-event": {
+      "close-event.tentative.any.js": [
+       "a793269ddee432f68fa304b5ade025b9641f4d3e",
+       [
+        "webmessaging/message-channels/close-event/close-event.tentative.any.html",
+        {
+         "script_metadata": [
+          [
+           "title",
+           "close event test"
+          ]
+         ]
+        }
+       ],
+       [
+        "webmessaging/message-channels/close-event/close-event.tentative.any.worker.html",
+        {
+         "script_metadata": [
+          [
+           "title",
+           "close event test"
+          ]
+         ]
+        }
+       ]
+      ]
+     },
      "close.any.js": [
       "8741d894b9632653721863eaf44988a27c933e43",
       [
@@ -650956,7 +652705,7 @@
    },
    "webnn": {
     "batch_normalization.https.any.js": [
-     "6644a921723a6e83b9a38e0c5b3e69f75816efcd",
+     "15e66a8bc06b2e73c19f910c765428b89b3f3b3d",
      [
       "webnn/batch_normalization.https.any.html",
       {
@@ -651058,7 +652807,7 @@
      ]
     ],
     "concat.https.any.js": [
-     "b91e99e289e8ec3dbb7ef37ef189f54316b351c2",
+     "cce43e492ff4c5347bf8fd1d8c558ae97ea4a65a",
      [
       "webnn/concat.https.any.html",
       {
@@ -651109,7 +652858,7 @@
      ]
     ],
     "conv2d.https.any.js": [
-     "52e267a6d3f437a4699976ca5f432ffde9111f91",
+     "b26b35ec676457d4d21c5f20fd0aff9eab3baf8e",
      [
       "webnn/conv2d.https.any.html",
       {
@@ -651160,7 +652909,7 @@
      ]
     ],
     "conv_transpose2d.https.any.js": [
-     "8a1f30d5272d44266d562d4db70ba71f1e3c4d52",
+     "99e76b825e55a59c590b86b2b7e1983d8e2b0650",
      [
       "webnn/conv_transpose2d.https.any.html",
       {
@@ -651364,7 +653113,7 @@
      ]
     ],
     "gemm.https.any.js": [
-     "179a1649b6e3077ba0cfd73bbce449d9683d461f",
+     "e5de9521fba767d5269b0829af3e55248e16f6fc",
      [
       "webnn/gemm.https.any.html",
       {
@@ -651414,6 +653163,1487 @@
       }
      ]
     ],
+    "gpu": {
+     "batch_normalization.https.any.js": [
+      "90b6def636d1090dc0fe19368fbb5ac38d0133cd",
+      [
+       "webnn/gpu/batch_normalization.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API batchNormalization operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/batch_normalization.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API batchNormalization operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "clamp.https.any.js": [
+      "98313868b6d6802cea00603caad49288dc4a7c99",
+      [
+       "webnn/gpu/clamp.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API clamp operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/clamp.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API clamp operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "concat.https.any.js": [
+      "07073724feeade9df491c566ef31f1141376c2c3",
+      [
+       "webnn/gpu/concat.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API concat operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/concat.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API concat operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "conv2d.https.any.js": [
+      "b3986b65551a087d51abff83d72e012cf8147a34",
+      [
+       "webnn/gpu/conv2d.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API conv2d operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/conv2d.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API conv2d operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "conv_transpose2d.https.any.js": [
+      "020bfa9c972d9d1fe50157601fe7a8bd35331a19",
+      [
+       "webnn/gpu/conv_transpose2d.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API convTranspose2d operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/conv_transpose2d.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API convTranspose2d operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "elementwise_binary.https.any.js": [
+      "035d0c77c0310a18f2fe45a707a170e670d70606",
+      [
+       "webnn/gpu/elementwise_binary.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API element-wise binary operations"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/elementwise_binary.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API element-wise binary operations"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "elementwise_unary.https.any.js": [
+      "bd4e927f78c78badec75a0814f5171e322a44230",
+      [
+       "webnn/gpu/elementwise_unary.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API element-wise unary operations"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/elementwise_unary.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API element-wise unary operations"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "elu.https.any.js": [
+      "965bb4d35f1eb5fcee530b4977b66f628a3e2469",
+      [
+       "webnn/gpu/elu.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API elu operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/elu.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API elu operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "gemm.https.any.js": [
+      "a19dc39bbc87e845eadbf74ea369780bd38e90dc",
+      [
+       "webnn/gpu/gemm.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API gemm operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/gemm.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API gemm operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "hard_sigmoid.https.any.js": [
+      "b6f2f53b320f61f62af5288cb25dfa97acce52df",
+      [
+       "webnn/gpu/hard_sigmoid.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API hardSigmoid operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/hard_sigmoid.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API hardSigmoid operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "hard_swish.https.any.js": [
+      "a1731490bd4f584596d410f9c3aad55864c00f1c",
+      [
+       "webnn/gpu/hard_swish.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API tanh operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/hard_swish.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API tanh operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "leaky_relu.https.any.js": [
+      "f3a7bd8ba536003f55715f1a0c6d5311fd62a6a4",
+      [
+       "webnn/gpu/leaky_relu.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API leakyRelu operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/leaky_relu.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API leakyRelu operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "linear.https.any.js": [
+      "48b8d82c1e5a00fa1b7be9443ae60935b0bdf871",
+      [
+       "webnn/gpu/linear.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API linear operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/linear.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API linear operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "matmul.https.any.js": [
+      "01fed04e3d3dbe8c6fd279e104b20fdb1ac5c1af",
+      [
+       "webnn/gpu/matmul.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API matmul operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/matmul.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API matmul operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "pad.https.any.js": [
+      "26d1bf0f3858b2bb18c85a88a352589afa430983",
+      [
+       "webnn/gpu/pad.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API pad operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/pad.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API pad operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "pooling.https.any.js": [
+      "ab12881881249537f7523d26efaed8eb6606a635",
+      [
+       "webnn/gpu/pooling.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API pooling operations"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/pooling.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API pooling operations"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "prelu.https.any.js": [
+      "5a1580e662ad819739097f9f15cdad51a881505e",
+      [
+       "webnn/gpu/prelu.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API prelu operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/prelu.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API prelu operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "reduction.https.any.js": [
+      "69f9b64df4eeef927fafaf4951a1eb0a9639f416",
+      [
+       "webnn/gpu/reduction.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API reduction  operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/reduction.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API reduction  operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "relu.https.any.js": [
+      "dc09846e3b36c4b5aaeab8f2e64de35763bfefc3",
+      [
+       "webnn/gpu/relu.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API relu operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/relu.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API relu operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "reshape.https.any.js": [
+      "e5145e2403e1c32ecbfab5caaec66ac2de835dd2",
+      [
+       "webnn/gpu/reshape.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API reshape operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/reshape.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API reshape operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "sigmoid.https.any.js": [
+      "6c85f5b3037fb33c75b1c38a68296d7fbc7c830d",
+      [
+       "webnn/gpu/sigmoid.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API sigmoid operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/sigmoid.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API sigmoid operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "slice.https.any.js": [
+      "98e5f422dad504cfe937b21be12a0d108305ae29",
+      [
+       "webnn/gpu/slice.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API slice operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/slice.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API slice operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "softmax.https.any.js": [
+      "9170dd0e145b5996c4922d355b37810430e71258",
+      [
+       "webnn/gpu/softmax.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API softmax operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/softmax.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API softmax operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "softplus.https.any.js": [
+      "a61e5beaefdfdbeeeca6b79798c6cf5a335ec0f8",
+      [
+       "webnn/gpu/softplus.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API softplus operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/softplus.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API softplus operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "softsign.https.any.js": [
+      "f598cbfcef486581d230a323c66c67cdce792cb7",
+      [
+       "webnn/gpu/softsign.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API softsign operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/softsign.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API softsign operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "split.https.any.js": [
+      "8eecd76fa1b58c28d6302932b975273b0d478c9f",
+      [
+       "webnn/gpu/split.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API split operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/split.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API split operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "squeeze.https.any.js": [
+      "29ce3e4f91beac10dea19170b68fb91863a3ca7e",
+      [
+       "webnn/gpu/squeeze.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API squeeze operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/squeeze.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API squeeze operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "tanh.https.any.js": [
+      "15a9eeb013c0559102292266c279685369ff1afe",
+      [
+       "webnn/gpu/tanh.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API tanh operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/tanh.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API tanh operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ],
+     "transpose.https.any.js": [
+      "074e18a488372f9534238bd3031fab52d4c62371",
+      [
+       "webnn/gpu/transpose.https.any.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API transpose operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ],
+      [
+       "webnn/gpu/transpose.https.any.worker.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "test WebNN API transpose operation"
+         ],
+         [
+          "global",
+          "window,dedicatedworker"
+         ],
+         [
+          "script",
+          "../resources/utils.js"
+         ],
+         [
+          "timeout",
+          "long"
+         ]
+        ],
+        "timeout": "long"
+       }
+      ]
+     ]
+    },
     "hard_sigmoid.https.any.js": [
      "81bd5124ce90f09da63b292def464701101e9b15",
      [
@@ -651729,7 +654959,7 @@
      ]
     ],
     "pad.https.any.js": [
-     "f9d13d495f95bc4e4970e94946a94fec50719c22",
+     "05eec653c6c64eb3a199be891870bf616cf993ae",
      [
       "webnn/pad.https.any.html",
       {
@@ -651984,7 +655214,7 @@
      ]
     ],
     "reshape.https.any.js": [
-     "a7126e63a1028c49036addb2c6e0449256cf2903",
+     "e0733635f8755bf1a1540e7f225754ab24d66003",
      [
       "webnn/reshape.https.any.html",
       {
@@ -652086,7 +655316,7 @@
      ]
     ],
     "slice.https.any.js": [
-     "5e188af5352fe1bef6c5a6260495df8a0cc0e124",
+     "cb7acefc0539a904d165a12ca5fdd9541206012e",
      [
       "webnn/slice.https.any.html",
       {
@@ -652290,7 +655520,7 @@
      ]
     ],
     "split.https.any.js": [
-     "bb1c99565879ccb922bb3f492803138767f6deff",
+     "b6fc5b4d98d53b05e0a39a10d00e1eef23f6b6ef",
      [
       "webnn/split.https.any.html",
       {
@@ -653622,7 +656852,7 @@
       ]
      ],
      "crypto-suite.https.html": [
-      "f13f221b88d71f087c1f706ed5951b9b4c6697f3",
+      "2c8b1f6491dbab3d9567ab1a3b667c574ed53b15",
       [
        null,
        {}
@@ -653803,6 +657033,13 @@
        {}
       ]
      ],
+     "transceiver-mline-recycling.html": [
+      "068c5acae3fd3ee7c088f8e6cab828d584deeb0c",
+      [
+       null,
+       {}
+      ]
+     ],
      "unknown-mediatypes.html": [
       "f5176d1c87b6a2a14281c603f4a491efd86c826d",
       [
@@ -667830,7 +671067,7 @@
      ]
     ],
     "sendorder.https.any.js": [
-     "40c6e9b17fc55ff64df2558e8d952ec86d165214",
+     "96944fb39b39d4d9e25b1c82a5b1b966fbb193ff",
      [
       "webtransport/sendorder.https.any.html",
       {
@@ -690912,7 +694149,7 @@
        },
        "navigation_started": {
         "navigation_started.py": [
-         "01e28b1ba03e277d02d01b8198249f8cb1ebce0e",
+         "069292b14fb0ca1675bcf25378b8e43f7be0d290",
          [
           null,
           {}
@@ -691047,7 +694284,7 @@
        },
        "user_prompt_closed": {
         "user_prompt_closed.py": [
-         "ffbdcec8597ec3173991c0f3fb37a066a6912f83",
+         "fabf511eb456152c99bf5643f8aa060f90eaa36c",
          [
           null,
           {}
@@ -691115,7 +694352,7 @@
          ]
         ],
         "pointer_mouse.py": [
-         "0d1902e784b82fc6cbeacc629d6b41318c8285ca",
+         "73c80af2639df66a2e592e4d74007be9f8847dff",
          [
           null,
           {}
@@ -691280,8 +694517,15 @@
           {}
          ]
         ],
+        "phase_auth_required.py": [
+         "d6ea0a28f75aaa4c8083cb289547dfd3bce6ce3e",
+         [
+          null,
+          {}
+         ]
+        ],
         "phases.py": [
-         "c6fba726c6d5bf4aec71147df016fbb4ab69b1a8",
+         "4b244c902a0132299fcffffbd3d1e5df8db34020",
          [
           null,
           {}
@@ -691295,6 +694539,15 @@
          ]
         ]
        },
+       "auth_required": {
+        "auth_required.py": [
+         "c785334cdce5e571df72e3aba46e9545d13b4e6e",
+         [
+          null,
+          {}
+         ]
+        ]
+       },
        "before_request_sent": {
         "before_request_sent.py": [
          "38ca2c31af5f9b3ded3bdcf9a4968478ff91d569",
@@ -691331,7 +694584,7 @@
          ]
         ],
         "remove_intercept.py": [
-         "1ac0e5cb3b96c8ff3f15b0879d7c957c931a6b6c",
+         "aaa4a9e79ed5ff8d0cfb9aff2306400412baab91",
          [
           null,
           {
@@ -691365,7 +694618,7 @@
        },
        "response_started": {
         "response_started.py": [
-         "ff011a6ecb0c3ff94d718feb2a5a29f8d3d750ee",
+         "41f4853fa1debafb784d472e260ad318ad7c0928",
          [
           null,
           {}
@@ -691562,6 +694815,13 @@
           null,
           {}
          ]
+        ],
+        "window_reference.py": [
+         "ef0b12c68141f68a5fc51eeaa22b46b8909c88d6",
+         [
+          null,
+          {}
+         ]
         ]
        },
        "disown": {
@@ -692165,7 +695425,7 @@
         ]
        ],
        "objects.py": [
-        "edcf06505aac243ac54ecf7195887fed387c892f",
+        "2957429b01deb208fd1102f2ce50bb1c0f4da6c8",
         [
          null,
          {}
@@ -692239,7 +695499,7 @@
         ]
        ],
        "objects.py": [
-        "e254fe275e26f1adda0cf6f4898616703302e2da",
+        "6447bce079e9253b0b5e5dc21a84bab9709d0d30",
         [
          null,
          {}
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/currentcolor-visited-fallback-ref.html b/third_party/blink/web_tests/external/wpt/css/css-color/currentcolor-visited-fallback-ref.html
new file mode 100644
index 0000000..8e6bf0d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/currentcolor-visited-fallback-ref.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>currentcolor and visited inherited parent color fallback</title>
+<style>
+a {
+    color: green;
+}
+</style>
+<div>
+    <a href="">This should be green</a>
+</div>
+<div>
+    <a href="">This should be green</a>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/currentcolor-visited-fallback.html b/third_party/blink/web_tests/external/wpt/css/css-color/currentcolor-visited-fallback.html
new file mode 100644
index 0000000..a83506b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/currentcolor-visited-fallback.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="match" href="currentcolor-visited-fallback-ref.html">
+<title>currentcolor and visited inherited parent color fallback</title>
+<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-other-colors">
+<link rel="author" title="Matthieu Dubet" href="https://github.com/mdubet">
+<style>
+body { color: red; }
+div { color: green; }
+a {
+    color: currentcolor;
+}
+</style>
+<div>
+    <a href="">This should be green</a>
+</div>
+<div>
+    <a href="unvisited">This should be green</a>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-094-ref.html b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-094-ref.html
new file mode 100644
index 0000000..a377fc6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-094-ref.html
@@ -0,0 +1,23 @@
+<!doctype HTML>
+<html>
+<meta charset="utf8">
+<title>Content Visibility: hidden effect on table types (reference)</title>
+<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com">
+
+<style>
+table {
+  width: 150px;
+  height: 150px;
+  background: lightblue;
+}
+</style>
+
+<table id=table>
+  <tr id=tr>
+    <td id=td>
+      <div>Test passes if this text is visible.</div>
+    </td>
+  </tr>
+</table>
+
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-094.html b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-094.html
new file mode 100644
index 0000000..0434530
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-094.html
@@ -0,0 +1,44 @@
+<!doctype HTML>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>Content Visibility: hidden effect on table types</title>
+<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+<link rel="match" href="content-visibility-094-ref.html">
+<meta name="assert" content="content-visibility: hidden effect on table types">
+
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+table {
+  width: 150px;
+  height: 150px;
+  background: lightblue;
+}
+.hidden {
+  content-visibility: hidden;
+}
+</style>
+
+<table id=table>
+  <caption id=caption>
+    <div>Test fails if this text is visible.</div>
+  </caption>
+  <tr id=tr>
+    <td id=td>
+      <div>Test passes if this text is visible.</div>
+    </td>
+  </tr>
+</table>
+
+<script>
+function runTest() {
+  document.getElementById("table").classList.add("hidden");
+  document.getElementById("tr").classList.add("hidden");
+  document.getElementById("caption").classList.add("hidden");
+  requestAnimationFrame(takeScreenshot);
+}
+
+window.onload = () => requestAnimationFrame(runTest);
+</script>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-095-ref.html b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-095-ref.html
new file mode 100644
index 0000000..844ca37e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-095-ref.html
@@ -0,0 +1,23 @@
+<!doctype HTML>
+<html>
+<meta charset="utf8">
+<title>Content Visibility: hidden table with positioned children (reference)</title>
+<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com">
+
+<style>
+#table {
+  width: 150px;
+  height: 150px;
+  background: lightblue;
+}
+#positioned {
+  position: absolute;
+}
+</style>
+
+<table id=table>
+  <td>
+    <div id=positioned>Test passes if this text is visible.</div>
+  </td>
+</table>
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-095.html b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-095.html
new file mode 100644
index 0000000..245a8dd8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-095.html
@@ -0,0 +1,47 @@
+<!doctype HTML>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>Content Visibility: hidden table with positioned children</title>
+<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+<link rel="match" href="content-visibility-095-ref.html">
+<meta name="assert" content="content-visibility: hidden table with positioned children">
+
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+table {
+  width: 150px;
+  height: 150px;
+  background: lightblue;
+}
+#positioned {
+  position: absolute;
+}
+.hidden {
+  content-visibility: hidden;
+}
+</style>
+
+<table id=table>
+  <caption id=caption>
+      <div id=positioned>Test fails if this text is visible.</div>
+  </caption>
+  <tr id=tr>
+    <td id=td>
+      <div id=positioned>Test passes if this text is visible.</div>
+    </td>
+  </tr>
+</table>
+
+<script>
+function runTest() {
+  document.getElementById("table").classList.add("hidden");
+  document.getElementById("tr").classList.add("hidden");
+  document.getElementById("caption").classList.add("hidden");
+  requestAnimationFrame(takeScreenshot);
+}
+
+window.onload = () => requestAnimationFrame(runTest);
+</script>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-svg-text-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-svg-text-expected.txt
index 2e926e0..eb706fde 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-svg-text-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-svg-text-expected.txt
@@ -3,9 +3,7 @@
 [FAIL] getCharNumAtPosition() should return nonzero values in a c-v:hidden subtree.
   Failed to execute 'getCharNumAtPosition' on 'SVGTextContentElement': parameter 1 is not of type 'SVGPoint'.
 [PASS] getNumberOfChars() should return nonzero values in a c-v:hidden subtree.
-[FAIL] getCTM() should return nonzero values in a c-v:hidden subtree.
-  assert_equals: a expected 2 but got 1
-[FAIL] getScreenCTM() should return nonzero values in a c-v:hidden subtree.
-  assert_equals: a expected 2 but got 1
+[PASS] getCTM() should return nonzero values in a c-v:hidden subtree.
+[PASS] getScreenCTM() should return nonzero values in a c-v:hidden subtree.
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-svg-text.html b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-svg-text.html
index 7f12a944..fd3e443 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-svg-text.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-svg-text.html
@@ -9,14 +9,14 @@
   margin: 0;
   padding: 0;
 }
-div {
+#container {
   content-visibility:hidden;
 }
 </style>
 
-<div>
+<div id="container">
   <svg xmlns="http://www.w3.org/2000/svg">
-    <text><tspan id="tspan1" x="50 150 100" y="100" transform="scale(2, 2)">abc</tspan></text>
+    <text transform="scale(2, 2)"><tspan id="tspan1" x="50 150 100" y="100">abc</tspan></text>
   </svg>
 </div>
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-template-invalid-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-template-invalid-expected.txt
new file mode 100644
index 0000000..74bb7dd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-template-invalid-expected.txt
@@ -0,0 +1,27 @@
+This is a testharness.js-based test.
+[PASS] e.style['grid-template-rows'] = "subgrid subgrid" should not set the property value
+[PASS] e.style['grid-template-rows'] = "subgrid none" should not set the property value
+[PASS] e.style['grid-template-rows'] = "subgrid 1px" should not set the property value
+[PASS] e.style['grid-template-rows'] = "subgrid [a] 1px" should not set the property value
+[PASS] e.style['grid-template-rows'] = "subgrid repeat(auto-fill, 1px)" should not set the property value
+[PASS] e.style['grid-template-rows'] = "subgrid repeat(auto-fill, line)" should not set the property value
+[FAIL] e.style['grid-template-rows'] = "subgrid repeat(auto-fit, [a])" should not set the property value
+  assert_equals: expected "" but got "subgrid repeat(auto-fit, [a])"
+[PASS] e.style['grid-template-rows'] = "subgrid repeat(2, 1px)" should not set the property value
+[PASS] e.style['grid-template-rows'] = "subgrid repeat(2, line)" should not set the property value
+[PASS] e.style['grid-template-rows'] = "subgrid repeat(2," should not set the property value
+[PASS] e.style['grid-template-rows'] = "subgrid repeat(auto-fill, [a]) repeat(auto-fill, [b]" should not set the property value
+[PASS] e.style['grid-template-columns'] = "subgrid subgrid" should not set the property value
+[PASS] e.style['grid-template-columns'] = "subgrid none" should not set the property value
+[PASS] e.style['grid-template-columns'] = "subgrid 1px" should not set the property value
+[PASS] e.style['grid-template-columns'] = "subgrid [a] 1px" should not set the property value
+[PASS] e.style['grid-template-columns'] = "subgrid repeat(auto-fill, 1px)" should not set the property value
+[PASS] e.style['grid-template-columns'] = "subgrid repeat(auto-fill, line)" should not set the property value
+[FAIL] e.style['grid-template-columns'] = "subgrid repeat(auto-fit, [a])" should not set the property value
+  assert_equals: expected "" but got "subgrid repeat(auto-fit, [a])"
+[PASS] e.style['grid-template-columns'] = "subgrid repeat(2, 1px)" should not set the property value
+[PASS] e.style['grid-template-columns'] = "subgrid repeat(2, line)" should not set the property value
+[PASS] e.style['grid-template-columns'] = "subgrid repeat(2," should not set the property value
+[PASS] e.style['grid-template-columns'] = "subgrid repeat(auto-fill, [a]) repeat(auto-fill, [b]" should not set the property value
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-template-invalid.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-template-invalid.html
index d7c12be3f..49d781e 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-template-invalid.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-template-invalid.html
@@ -19,6 +19,7 @@
 test_invalid_value("grid-template-rows", 'subgrid [a] 1px');
 test_invalid_value("grid-template-rows", 'subgrid repeat(auto-fill, 1px)');
 test_invalid_value("grid-template-rows", 'subgrid repeat(auto-fill, line)');
+test_invalid_value("grid-template-rows", 'subgrid repeat(auto-fit, [a])');
 test_invalid_value("grid-template-rows", 'subgrid repeat(2, 1px)');
 test_invalid_value("grid-template-rows", 'subgrid repeat(2, line)');
 test_invalid_value("grid-template-rows", 'subgrid repeat(2,');
@@ -30,6 +31,7 @@
 test_invalid_value("grid-template-columns", 'subgrid [a] 1px');
 test_invalid_value("grid-template-columns", 'subgrid repeat(auto-fill, 1px)');
 test_invalid_value("grid-template-columns", 'subgrid repeat(auto-fill, line)');
+test_invalid_value("grid-template-columns", 'subgrid repeat(auto-fit, [a])');
 test_invalid_value("grid-template-columns", 'subgrid repeat(2, 1px)');
 test_invalid_value("grid-template-columns", 'subgrid repeat(2, line)');
 test_invalid_value("grid-template-columns", 'subgrid repeat(2,');
diff --git a/third_party/blink/web_tests/external/wpt/css/css-images/gradient/css-color-4-colors-default-to-oklab-gradient.html b/third_party/blink/web_tests/external/wpt/css/css-images/gradient/css-color-4-colors-default-to-oklab-gradient.html
index 9ef20db2..2b1edca0 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-images/gradient/css-color-4-colors-default-to-oklab-gradient.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-images/gradient/css-color-4-colors-default-to-oklab-gradient.html
@@ -2,7 +2,7 @@
 <html>
  <head>
   <title>CSS color 4 colors default to OKLab gradient interpolation</title>
-  <meta name="fuzzy" content="maxDifference=1-8;totalPixels=0-24000">
+  <meta name="fuzzy" content="maxDifference=1-12;totalPixels=0-24000">
   <link rel="author" title="Aaron Krajeski" href="mailto:aaronhk@chromium.org">
   <link rel="help" href="https://www.w3.org/TR/css-color-4/#interpolation">
   <meta name="assert" content="Test that new color inputs default to OKLab for gradient interpolation when none is provided. Reference generated here: https://raphlinus.github.io/color/2021/01/18/oklab-critique.html">
diff --git a/third_party/blink/web_tests/external/wpt/css/css-images/gradient/oklab-gradient.html b/third_party/blink/web_tests/external/wpt/css/css-images/gradient/oklab-gradient.html
index 5291a4f..338a0c9d3 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-images/gradient/oklab-gradient.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-images/gradient/oklab-gradient.html
@@ -2,7 +2,7 @@
 <html>
  <head>
   <title>OKLab gradient interpolation</title>
-  <meta name="fuzzy" content="maxDifference=1-8;totalPixels=0-24000">
+  <meta name="fuzzy" content="maxDifference=1-12;totalPixels=0-24000">
   <link rel="author" title="Aaron Krajeski" href="mailto:aaronhk@chromium.org">
   <link rel="help" href="https://www.w3.org/TR/css-color-4/#interpolation">
   <meta name="assert" content="Test OKLab as a gradient interpolation space. Reference generated here: https://raphlinus.github.io/color/2021/01/18/oklab-critique.html">
diff --git a/third_party/blink/web_tests/external/wpt/css/css-images/gradient/srgb-linear-gradient.html b/third_party/blink/web_tests/external/wpt/css/css-images/gradient/srgb-linear-gradient.html
index 8d928e2..a921c62 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-images/gradient/srgb-linear-gradient.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-images/gradient/srgb-linear-gradient.html
@@ -2,7 +2,7 @@
 <html>
  <head>
   <title>sRGB-linear gradient interpolation</title>
-  <meta name="fuzzy" content="maxDifference=1-8;totalPixels=0-24000">
+  <meta name="fuzzy" content="maxDifference=1-10;totalPixels=0-24000">
   <link rel="author" title="Aaron Krajeski" href="mailto:aaronhk@chromium.org">
   <link rel="help" href="https://www.w3.org/TR/css-color-4/#interpolation">
   <meta name="assert" content="Test sRGB-linear as a gradient interpolation space. Reference generated here: https://raphlinus.github.io/color/2021/01/18/oklab-critique.html">
diff --git a/third_party/blink/web_tests/external/wpt/css/css-images/gradient/xyz-gradient.html b/third_party/blink/web_tests/external/wpt/css/css-images/gradient/xyz-gradient.html
index 74d6efe..6c6a30d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-images/gradient/xyz-gradient.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-images/gradient/xyz-gradient.html
@@ -2,7 +2,7 @@
 <html>
  <head>
   <title>XYZ gradient interpolation</title>
-  <meta name="fuzzy" content="maxDifference=1-8;totalPixels=0-24000">
+  <meta name="fuzzy" content="maxDifference=1-10;totalPixels=0-24000">
   <link rel="author" title="Aaron Krajeski" href="mailto:aaronhk@chromium.org">
   <link rel="help" href="https://www.w3.org/TR/css-color-4/#interpolation">
   <meta name="assert" content="Test XYZ as a gradient interpolation space. Reference generated here: https://raphlinus.github.io/color/2021/01/18/oklab-critique.html">
diff --git a/third_party/blink/web_tests/external/wpt/css/css-nesting/parsing-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-nesting/parsing-expected.txt
index 9a5f89d9..a977692 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-nesting/parsing-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/css-nesting/parsing-expected.txt
@@ -10,11 +10,14 @@
 [FAIL] .foo { + .bar & { color: green; }}
   assert_equals: Inner rule's selector should be "& + .bar &". expected "& + .bar &" but got "+ .bar &"
 [FAIL] .foo { + .bar, .foo, > .baz { color: green; }}
-  assert_equals: Inner rule's selector should be "& + .bar, .foo, & > .baz". expected "& + .bar, .foo, & > .baz" but got "+ .bar, .foo, > .baz"
-[PASS] .foo { .foo { color: green; }}
+  assert_equals: Inner rule's selector should be "& + .bar, & .foo, & > .baz". expected "& + .bar, & .foo, & > .baz" but got "+ .bar, .foo, > .baz"
+[FAIL] .foo { .foo { color: green; }}
+  assert_equals: Inner rule's selector should be "& .foo". expected "& .foo" but got ".foo"
 [PASS] .foo { .test > & .bar { color: green; }}
-[PASS] .foo { .foo, .foo & { color: green; }}
-[PASS] .foo { :is(.bar, .baz) { color: green; }}
+[FAIL] .foo { .foo, .foo & { color: green; }}
+  assert_equals: Inner rule's selector should be "& .foo, .foo &". expected "& .foo, .foo &" but got ".foo, .foo &"
+[FAIL] .foo { :is(.bar, .baz) { color: green; }}
+  assert_equals: Inner rule's selector should be "& :is(.bar, .baz)". expected "& :is(.bar, .baz)" but got ":is(.bar, .baz)"
 [PASS] .foo { &:is(.bar, .baz) { color: green; }}
 [PASS] .foo { :is(.bar, &.baz) { color: green; }}
 [PASS] .foo { &:is(.bar, &.baz) { color: green; }}
diff --git a/third_party/blink/web_tests/external/wpt/css/css-nesting/parsing.html b/third_party/blink/web_tests/external/wpt/css/css-nesting/parsing.html
index ee9f354..f29eff9 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-nesting/parsing.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-nesting/parsing.html
@@ -47,15 +47,15 @@
 
   // relative selector
   testNestedSelector("> .bar", {expected:"& > .bar"});
-  testNestedSelector("> & .bar", {expected: "& > & .bar"});
+  testNestedSelector("> & .bar", {expected:"& > & .bar"});
   testNestedSelector("+ .bar &", {expected:"& + .bar &"});
-  testNestedSelector("+ .bar, .foo, > .baz", {expected:"& + .bar, .foo, & > .baz"});
+  testNestedSelector("+ .bar, .foo, > .baz", {expected:"& + .bar, & .foo, & > .baz"});
 
   // implicit relative (and not)
-  testNestedSelector(".foo");
+  testNestedSelector(".foo", {expected:"& .foo"});
   testNestedSelector(".test > & .bar");
-  testNestedSelector(".foo, .foo &");
-  testNestedSelector(":is(.bar, .baz)");
+  testNestedSelector(".foo, .foo &", {expected:"& .foo, .foo &"});
+  testNestedSelector(":is(.bar, .baz)", {expected:"& :is(.bar, .baz)"});
   testNestedSelector("&:is(.bar, .baz)");
   testNestedSelector(":is(.bar, &.baz)");
   testNestedSelector("&:is(.bar, &.baz)");
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/2d-transform-inline-js.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/2d-transform-inline-js.html
new file mode 100644
index 0000000..0c842dd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/2d-transform-inline-js.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>JS test: Inline renderer must return the correct computed transform</title>
+    <link rel="author" title="Joone Hur" href="https://joone.github.io">
+    <link rel="help" href="https://drafts.csswg.org/css-transforms-1/#serialization-of-the-computed-value">
+    <link rel="help" href="https://drafts.csswg.org/css-transforms-1/#serialization-of-transform-functions">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <meta name="assert" content="Asserting that you can apply transform to an inline element and it show up in CSS computed values as a matrix">
+    <style>
+      .container {
+      height: 100px;
+      width: 200px;
+      margin: 30px;
+      outline: 1px solid black;
+    }
+    .box {
+      height: 100%;
+      width: 100%;
+      padding: 5px;
+      margin: 5px;
+      border: 5px solid gray;
+      transform-origin: 20% 50%;
+    }
+    #test-div {
+      background-color: blue;
+    }
+
+    #test-span {
+      background-color: red;
+    }
+    </style>
+
+  </head>
+  <body>
+    <h1>Transform values should be indentical between
+      the blue box(block element) and red box(inline element) </h1>
+    <div class="container">
+      <div id="test-div" class="box"></div>
+    </div>
+    <span id="test-span" class="box"></span>
+    <script>
+      const testCases = [
+        { 'transform' : 'translate(80px, 90px)',  'result' : 'matrix(1, 0, 0, 1, 80, 90)' },
+        { 'transform' : 'scale(1.2, 0.8)',        'result' : 'matrix(1.2, 0, 0, 0.8, 0, 0)' },
+        { 'transform' : 'skew(-0.7rad, 20deg)',   'result' : 'matrix(1, 0.36397, -0.842288, 1, 0, 0)' },
+        { 'transform' : 'rotate(45deg)',          'result' : 'matrix(0.707107, 0.707107, -0.707107, 0.707107, 0, 0)' },
+      ];
+
+      test(function() {
+        var testBox = document.getElementById('test-div');
+        var testSpan = document.getElementById('test-span');
+
+        testCases.forEach(function(curTest) {
+          // set one of our test transforms
+          testBox.style.transform = curTest.transform;
+          testSpan.style.transform = curTest.transform;
+
+          // read back computed style
+          var computedTransform = window.getComputedStyle(testBox).transform;
+          var computedSpanTransform = window.getComputedStyle(testSpan).transform;
+
+          assert_equals(computedTransform, curTest.result);
+          assert_equals(computedSpanTransform, curTest.result);
+        });
+      });
+    </script>
+  </body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/signs-abs-computed.html b/third_party/blink/web_tests/external/wpt/css/css-values/signs-abs-computed.html
index 32466dc..9b8ec89 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-values/signs-abs-computed.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-values/signs-abs-computed.html
@@ -57,7 +57,16 @@
 test_math_used('abs(-infinity)', 'calc(infinity)', {type:'number'});
 test_math_used('abs(NaN)', 'calc(NaN)', {type:'number'});
 
-//Type checking sign
+// Test abs/sign with negate
+test_math_used('calc(20 - abs(-10))', '10', {type:'number'});
+test_math_used('calc(20 - abs(10))', '10', {type:'number'});
+test_math_used('calc(10 - abs(10 - abs(-30))', '-10', {type:'number'});
+test_math_used('calc(2 - sign(1))', '1', {type:'number'});
+test_math_used('calc(2 - sign(-1))', '3', {type:'number'});
+test_math_used('calc(2 - sign(1 - sign(-1)))', '1', {type:'number'});
+test_math_used('calc(10 - abs(20 - sign(2 - abs(-20))))', '-11', {type:'number'});
+
+// Type checking sign
 test_math_used('sign(1px)', '1', {type:'integer'});
 test_math_used('sign(1cm)', '1', {type:'integer'});
 test_math_used('sign(1mm)', '1', {type:'integer'});
@@ -143,7 +152,7 @@
 test_zero('sign(-0rad)', {is_negative: true});
 test_zero('sign(-0turn)', {is_negative: true});
 
-//Type checking abs
+// Type checking abs
 test_math_used('abs(1px)', '1px');
 test_math_used('abs(1cm)', '1cm');
 test_math_used('abs(1mm)', '1mm');
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/checkbox-appearance-native-vertical-lr-baseline.optional-ref.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/checkbox-appearance-native-vertical-lr-baseline.optional-ref.html
new file mode 100644
index 0000000..c3f61075
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/checkbox-appearance-native-vertical-lr-baseline.optional-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<title>Test baseline alignment of checkboxes in vertical-lr writing mode.</title>
+<meta charset="utf-8">
+<style>
+
+label {
+    color: red;
+    background-color: red;
+    margin-top: -30px;
+}
+
+input {
+    visibility: hidden;
+}
+
+</style>
+<p>The checkbox should be center-aligned with the label text.</p>
+<div style="writing-mode: vertical-lr">
+    <input type="checkbox" id="checkbox" checked>
+    <label for="checkbox">こんにちわ</label>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/checkbox-appearance-native-vertical-lr-baseline.optional.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/checkbox-appearance-native-vertical-lr-baseline.optional.html
new file mode 100644
index 0000000..b19de13
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/checkbox-appearance-native-vertical-lr-baseline.optional.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder">
+<link rel="help" href="https://html.spec.whatwg.org/#checkbox-state-(type=checkbox)">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow">
+<title>Test baseline alignment of checkboxes in vertical-lr writing mode.</title>
+<meta charset="utf-8">
+<link rel="match" href="checkbox-appearance-native-vertical-lr-baseline.optional-ref.html">
+<style>
+
+label {
+    color: red;
+    background-color: red;
+    margin-top: -30px;
+}
+
+</style>
+<p>The checkbox should be center-aligned with the label text.</p>
+<div style="writing-mode: vertical-lr">
+    <input type="checkbox" id="checkbox" checked>
+    <label for="checkbox">こんにちわ</label>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/checkbox-appearance-native-vertical-rl-baseline.optional-ref.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/checkbox-appearance-native-vertical-rl-baseline.optional-ref.html
new file mode 100644
index 0000000..a253a71d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/checkbox-appearance-native-vertical-rl-baseline.optional-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<title>Test baseline alignment of checkboxes in vertical-rl writing mode.</title>
+<meta charset="utf-8">
+<style>
+
+label {
+    color: red;
+    background-color: red;
+    margin-top: -30px;
+}
+
+input {
+    visibility: hidden;
+}
+
+</style>
+<p>The checkbox should be center-aligned with the label text.</p>
+<div style="writing-mode: vertical-rl">
+    <input type="checkbox" id="checkbox" checked>
+    <label for="checkbox">こんにちわ</label>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/checkbox-appearance-native-vertical-rl-baseline.optional.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/checkbox-appearance-native-vertical-rl-baseline.optional.html
new file mode 100644
index 0000000..3efb211
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/checkbox-appearance-native-vertical-rl-baseline.optional.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder">
+<link rel="help" href="https://html.spec.whatwg.org/#checkbox-state-(type=checkbox)">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow">
+<title>Test baseline alignment of checkboxes in vertical-rl writing mode.</title>
+<meta charset="utf-8">
+<link rel="match" href="checkbox-appearance-native-vertical-rl-baseline.optional-ref.html">
+<style>
+
+label {
+    color: red;
+    background-color: red;
+    margin-top: -30px;
+}
+
+</style>
+<p>The checkbox should be center-aligned with the label text.</p>
+<div style="writing-mode: vertical-rl">
+    <input type="checkbox" id="checkbox" checked>
+    <label for="checkbox">こんにちわ</label>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/color-input-appearance-native-computed-style.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/color-input-appearance-native-computed-style.html
new file mode 100644
index 0000000..7ab0e0923
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/color-input-appearance-native-computed-style.html
@@ -0,0 +1,39 @@
+<!doctype html>
+<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder">
+<link rel="help" href="https://html.spec.whatwg.org/#color-state-(type=color)">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes/#block-flow">
+<title>Color input appearance native writing mode computed style</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<input type="color" style="writing-mode: horizontal-tb">
+<input type="color" style="writing-mode: vertical-lr">
+<input type="color" style="writing-mode: vertical-rl">
+
+<script>
+test(() => {
+  const input = document.querySelector(`input[type="color"][style="writing-mode: horizontal-tb"]`);
+  const style = getComputedStyle(input);
+  const blockSize = parseInt(style.blockSize, 10);
+  const inlineSize = parseInt(style.inlineSize, 10);
+  assert_not_equals(blockSize, 0);
+  assert_not_equals(inlineSize, 0);
+  assert_greater_than_equal(inlineSize, blockSize);
+  assert_equals(style.blockSize, style.height);
+  assert_equals(style.inlineSize, style.width);
+}, `input[type="color"][style="writing-mode: horizontal-tb"] block size should match height and inline size should match width`);
+
+for (const writingMode of ["vertical-lr", "vertical-rl"]) {
+  test(() => {
+    const input = document.querySelector(`input[type="color"][style="writing-mode: ${writingMode}"]`);
+    const style = getComputedStyle(input);
+    const blockSize = parseInt(style.blockSize, 10);
+    const inlineSize = parseInt(style.inlineSize, 10);
+    assert_not_equals(blockSize, 0);
+    assert_not_equals(inlineSize, 0);
+    assert_greater_than_equal(inlineSize, blockSize);
+    assert_equals(style.blockSize, style.width);
+    assert_equals(style.inlineSize, style.height);
+  }, `input[type="color"][style="writing-mode: ${writingMode}"] block size should match width and inline size should match height`);
+};
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/date-input-appearance-native-computed-style.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/date-input-appearance-native-computed-style.html
new file mode 100644
index 0000000..0e797667
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/date-input-appearance-native-computed-style.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<meta charset="utf-8">
+<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes/#block-flow">
+<title>Date input appearance native writing mode computed style</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<input type="date" id="horizontal-empty">
+<input type="date" id="horizontal-with-value" value="2023-11-10">
+<input type="date" id="vertical-lr-empty" style="writing-mode: vertical-lr">
+<input type="date" id="vertical-lr-with-value" value="2023-11-10" style="writing-mode: vertical-lr">
+<input type="date" id="vertical-rl-empty" style="writing-mode: vertical-rl">
+<input type="date" id="vertical-rl-with-value" value="2023-11-10" style="writing-mode: vertical-rl">
+
+<script>
+for (const element of document.querySelectorAll("[id^='horizontal-']")) {
+    test(() => {
+        const style = getComputedStyle(element);
+        const blockSize = parseInt(style.blockSize, 10);
+        const inlineSize = parseInt(style.inlineSize, 10);
+        assert_not_equals(blockSize, 0);
+        assert_not_equals(inlineSize, 0);
+        assert_greater_than(inlineSize, blockSize);
+        assert_equals(style.blockSize, style.height);
+        assert_equals(style.inlineSize, style.width);
+    }, `${element.id} block size should match height and inline size should match width`);
+}
+
+for (const element of document.querySelectorAll("[id^='vertical-']")) {
+    test(() => {
+        const style = getComputedStyle(element);
+        const blockSize = parseInt(style.blockSize, 10);
+        const inlineSize = parseInt(style.inlineSize, 10);
+        assert_not_equals(blockSize, 0);
+        assert_not_equals(inlineSize, 0);
+        assert_greater_than(inlineSize, blockSize);
+        assert_equals(style.blockSize, style.width);
+        assert_equals(style.inlineSize, style.height);
+    }, `${element.id} block size should match width and inline size should match height`);
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/radio-appearance-native-vertical-lr-baseline.optional-ref.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/radio-appearance-native-vertical-lr-baseline.optional-ref.html
new file mode 100644
index 0000000..9b09537c9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/radio-appearance-native-vertical-lr-baseline.optional-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<title>Test baseline alignment of radio buttons in vertical-lr writing mode.</title>
+<meta charset="utf-8">
+<style>
+
+label {
+    color: red;
+    background-color: red;
+    margin-top: -30px;
+}
+
+input {
+    visibility: hidden;
+}
+
+</style>
+<p>The radio button should be center-aligned with the label text.</p>
+<div style="writing-mode: vertical-lr">
+    <input type="radio" id="radio" checked>
+    <label for="radio">こんにちわ</label>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/radio-appearance-native-vertical-lr-baseline.optional.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/radio-appearance-native-vertical-lr-baseline.optional.html
new file mode 100644
index 0000000..8d5bf75f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/radio-appearance-native-vertical-lr-baseline.optional.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder">
+<link rel="help" href="https://html.spec.whatwg.org/#radio-button-state-(type=radio)">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow">
+<title>Test baseline alignment of radio buttons in vertical-lr writing mode.</title>
+<meta charset="utf-8">
+<link rel="match" href="radio-appearance-native-vertical-lr-baseline.optional-ref.html">
+<style>
+
+label {
+    color: red;
+    background-color: red;
+    margin-top: -30px;
+}
+
+</style>
+<p>The radio button should be center-aligned with the label text.</p>
+<div style="writing-mode: vertical-lr">
+    <input type="radio" id="radio" checked>
+    <label for="radio">こんにちわ</label>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/radio-appearance-native-vertical-rl-baseline.optional-ref.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/radio-appearance-native-vertical-rl-baseline.optional-ref.html
new file mode 100644
index 0000000..95871a51
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/radio-appearance-native-vertical-rl-baseline.optional-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<title>Test baseline alignment of radio buttons in vertical-rl writing mode.</title>
+<meta charset="utf-8">
+<style>
+
+label {
+    color: red;
+    background-color: red;
+    margin-top: -30px;
+}
+
+input {
+    visibility: hidden;
+}
+
+</style>
+<p>The radio button should be center-aligned with the label text.</p>
+<div style="writing-mode: vertical-rl">
+    <input type="radio" id="radio" checked>
+    <label for="radio">こんにちわ</label>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/radio-appearance-native-vertical-rl-baseline.optional.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/radio-appearance-native-vertical-rl-baseline.optional.html
new file mode 100644
index 0000000..4c5a59a0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/radio-appearance-native-vertical-rl-baseline.optional.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder">
+<link rel="help" href="https://html.spec.whatwg.org/#radio-button-state-(type=radio)">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow">
+<title>Test baseline alignment of radio buttons in vertical-rl writing mode.</title>
+<meta charset="utf-8">
+<link rel="match" href="radio-appearance-native-vertical-rl-baseline.optional-ref.html">
+<style>
+
+label {
+    color: red;
+    background-color: red;
+    margin-top: -30px;
+}
+
+</style>
+<p>The radio button should be center-aligned with the label text.</p>
+<div style="writing-mode: vertical-rl">
+    <input type="radio" id="radio" checked>
+    <label for="radio">こんにちわ</label>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-native-computed-style.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-native-computed-style.html
new file mode 100644
index 0000000..2cbe33f9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-native-computed-style.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder">
+<link rel="help" href="https://html.spec.whatwg.org/#the-select-element">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes/#block-flow">
+<title>Select appearance native writing mode computed style</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<select style="writing-mode: horizontal-tb">
+    <option>Option 1</option>
+    <option>Option 2</option>
+    <option>Option 3</option>
+    <option>Option 4</option>
+    <option>Option 5</option>
+</select>
+
+<select style="writing-mode: vertical-lr">
+    <option>Option 1</option>
+    <option>Option 2</option>
+    <option>Option 3</option>
+    <option>Option 4</option>
+    <option>Option 5</option>
+</select>
+
+<select style="writing-mode: vertical-rl">
+    <option>Option 1</option>
+    <option>Option 2</option>
+    <option>Option 3</option>
+    <option>Option 4</option>
+    <option>Option 5</option>
+</select>
+
+<script>
+test(() => {
+  const select = document.querySelector(`select[style="writing-mode: horizontal-tb"]`);
+  const style = getComputedStyle(select);
+  const blockSize = parseInt(style.blockSize, 10);
+  const inlineSize = parseInt(style.inlineSize, 10);
+  assert_not_equals(blockSize, 0);
+  assert_not_equals(inlineSize, 0);
+  assert_greater_than(inlineSize, blockSize);
+  assert_equals(style.blockSize, style.height);
+  assert_equals(style.inlineSize, style.width);
+}, `select[style="writing-mode: horizontal-tb"] block size should match height and inline size should match width`);
+
+for (const writingMode of ["vertical-lr", "vertical-rl"]) {
+  test(() => {
+    const select = document.querySelector(`select[style="writing-mode: ${writingMode}"]`);
+    const style = getComputedStyle(select);
+    const blockSize = parseInt(style.blockSize, 10);
+    const inlineSize = parseInt(style.inlineSize, 10);
+    assert_not_equals(blockSize, 0);
+    assert_not_equals(inlineSize, 0);
+    assert_greater_than(inlineSize, blockSize);
+    assert_equals(style.blockSize, style.width);
+    assert_equals(style.inlineSize, style.height);
+  }, `select[style="writing-mode: ${writingMode}"] block size should match width and inline size should match height`);
+};
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-native-horizontal.optional.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-native-horizontal.optional.html
new file mode 100644
index 0000000..669c2c8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-native-horizontal.optional.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder">
+<link rel="help" href="https://html.spec.whatwg.org/#the-select-element">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow">
+<title>Select appearance native writing mode horizontal</title>
+<meta charset="utf-8">
+<link rel="mismatch" href="select-appearance-none-horizontal.optional.html">
+<link rel="mismatch" href="select-appearance-native-vertical.optional.html">
+<link rel="mismatch" href="select-appearance-none-vertical-lr.optional.html">
+<link rel="mismatch" href="select-appearance-none-vertical-rl.optional.html">
+
+<!-- Note test description should be the same across all files to mismatch on. -->
+<p>The select element below should match the correct writing mode.</p>
+<select style="writing-mode: horizontal-tb">
+    <option>Option 1</option>
+    <option>Option 2</option>
+    <option>Option 3</option>
+    <option>Option 4</option>
+    <option>Option 5</option>
+</select>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-native-vertical.optional.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-native-vertical.optional.html
new file mode 100644
index 0000000..79eb364
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-native-vertical.optional.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder">
+<link rel="help" href="https://html.spec.whatwg.org/#the-select-element">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow">
+<title>Select appearance native writing mode vertical</title>
+<meta charset="utf-8">
+<link rel="mismatch" href="select-appearance-none-vertical-lr.optional.html">
+<link rel="mismatch" href="select-appearance-none-vertical-rl.optional.html">
+<link rel="mismatch" href="select-appearance-native-horizontal.optional.html">
+<link rel="mismatch" href="select-appearance-none-horizontal.optional.html">
+
+<!-- Note test description should be the same across all files to mismatch on. -->
+<p>The select element below should match the correct writing mode.</p>
+<select style="writing-mode: vertical-lr">
+    <option>Option 1</option>
+    <option>Option 2</option>
+    <option>Option 3</option>
+    <option>Option 4</option>
+    <option>Option 5</option>
+</select>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-none-horizontal.optional.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-none-horizontal.optional.html
new file mode 100644
index 0000000..a7bcd3a8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-none-horizontal.optional.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder">
+<link rel="help" href="https://html.spec.whatwg.org/#the-select-element">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow">
+<title>Select appearance none writing mode horizontal</title>
+<meta charset="utf-8">
+<link rel="mismatch" href="select-appearance-native-horizontal.optional.html">
+<link rel="mismatch" href="select-appearance-none-vertical-lr.optional.html">
+<link rel="mismatch" href="select-appearance-none-vertical-rl.optional.html">
+<link rel="mismatch" href="select-appearance-native-vertical.optional.html">
+
+<!-- Note test description should be the same across all files to mismatch on. -->
+<p>The select element below should match the correct writing mode.</p>
+<select style="writing-mode: horizontal-tb; appearance: none;">
+    <option>Option 1</option>
+    <option>Option 2</option>
+    <option>Option 3</option>
+    <option>Option 4</option>
+    <option>Option 5</option>
+</select>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-none-vertical-lr.optional.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-none-vertical-lr.optional.html
new file mode 100644
index 0000000..2b93db37
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-none-vertical-lr.optional.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder">
+<link rel="help" href="https://html.spec.whatwg.org/#the-select-element">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow">
+<title>Select appearance none writing mode vertical</title>
+<meta charset="utf-8">
+<link rel="mismatch" href="select-appearance-native-vertical.optional.html">
+<link rel="mismatch" href="select-appearance-none-horizontal.optional.html">
+<link rel="mismatch" href="select-appearance-native-horizontal.optional.html">
+<link rel="match" href="select-appearance-none-vertical-rl.optional.html">
+
+<!-- Note test description should be the same across all files to mismatch on. -->
+<p>The select element below should match the correct writing mode.</p>
+<select style="writing-mode: vertical-lr; appearance: none;">
+    <option>Option 1</option>
+    <option>Option 2</option>
+    <option>Option 3</option>
+    <option>Option 4</option>
+    <option>Option 5</option>
+</select>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-none-vertical-rl.optional.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-none-vertical-rl.optional.html
new file mode 100644
index 0000000..7a412d88
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/select-appearance-none-vertical-rl.optional.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder">
+<link rel="help" href="https://html.spec.whatwg.org/#the-select-element">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow">
+<title>Select appearance none writing mode vertical</title>
+<meta charset="utf-8">
+<link rel="match" href="select-appearance-none-vertical-lr.optional.html">
+<link rel="mismatch" href="select-appearance-native-vertical.optional.html">
+<link rel="mismatch" href="select-appearance-none-horizontal.optional.html">
+<link rel="mismatch" href="select-appearance-native-horizontal.optional.html">
+
+<!-- Note test description should be the same across all files to mismatch on. -->
+<p>The select element below should match the correct writing mode.</p>
+<select style="writing-mode: vertical-rl; appearance: none;">
+    <option>Option 1</option>
+    <option>Option 2</option>
+    <option>Option 3</option>
+    <option>Option 4</option>
+    <option>Option 5</option>
+</select>
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/screen-detached-frame-expected.txt b/third_party/blink/web_tests/external/wpt/css/cssom-view/screen-detached-frame-expected.txt
new file mode 100644
index 0000000..4964b7f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/screen-detached-frame-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+[FAIL] Window.screen on detached frame
+  assert_equals: colorDepth expected 24 but got 0
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/screen-detached-frame.html b/third_party/blink/web_tests/external/wpt/css/cssom-view/screen-detached-frame.html
new file mode 100644
index 0000000..1d566d1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/screen-detached-frame.html
@@ -0,0 +1,39 @@
+<!doctype html>
+<meta charset="utf-8">
+<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-window-screen">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1858977">
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="author" href="https://mozilla.org" title="Mozilla">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<iframe></iframe>
+<script>
+onload = function() {
+  test(() => {
+    let frame = document.querySelector("iframe");
+    let win = frame.contentWindow;
+    frame.remove();
+    assert_true(!!win.screen, "Window.screen should be available");
+    for (let prop of ["top", "left", "width", "height"]) {
+      let availProp = "avail" + prop[0].toUpperCase() + prop.substr(1);
+      if (prop == "width" || prop == "height") {
+        assert_true(prop in win.screen, prop + "must be implemented per spec")
+        assert_true(availProp in win.screen, availProp + "must be implemented per spec")
+      }
+      if (prop in win.screen) {
+        assert_equals(win.screen[prop], 0, prop);
+      }
+      if (availProp in win.screen) {
+        assert_equals(win.screen[availProp], 0, availProp);
+      }
+    }
+
+    // https://drafts.csswg.org/cssom-view/#dom-screen-colordepth
+    //   If the user agent does not know the color depth or does not want to
+    //   return it for privacy considerations, it should return 24.
+    for (let prop of ["colorDepth", "pixelDepth"]) {
+      assert_equals(win.screen[prop], 24, prop);
+    }
+  }, "Window.screen on detached frame");
+};
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/printing/monolithic-overflow-026-print-ref.html b/third_party/blink/web_tests/external/wpt/css/printing/monolithic-overflow-026-print-ref.html
new file mode 100644
index 0000000..b543a58
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/printing/monolithic-overflow-026-print-ref.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<style>
+  body { margin:0; }
+</style>
+<div style="height:410vh;">
+  There should be five pages.
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/printing/monolithic-overflow-026-print.html b/third_party/blink/web_tests/external/wpt/css/printing/monolithic-overflow-026-print.html
new file mode 100644
index 0000000..966391e4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/printing/monolithic-overflow-026-print.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/css-break-3/#possible-breaks">
+<link rel="match" href="monolithic-overflow-026-print-ref.html">
+<style>
+  body { margin:0; }
+</style>
+<div style="contain:size; height:210vh;">
+  <div style="height:410vh;">
+    There should be five pages.
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/target-pseudo-in-has.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/target-pseudo-in-has.html
index 629a6a8..a0bcc39 100644
--- a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/target-pseudo-in-has.html
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/target-pseudo-in-has.html
@@ -36,6 +36,19 @@
   const GREY = "rgb(128, 128, 128)";
   const BLUE = "rgb(0, 0, 255)";
 
+  async function navigateFragment(fragment) {
+    return new Promise(resolve => {
+      let hashChanged = (e) => {
+        if (location.hash.substring(1) === fragment) {
+          resolve();
+          window.removeEventListener("hashchange", hashChanged);
+        }
+      };
+      window.addEventListener("hashchange", hashChanged);
+      fragmentLink(fragment).click();
+    });
+  }
+
   function fragmentLink(fragment) {
     return document.querySelector(`a[href="#${fragment}"]`);
   }
@@ -51,14 +64,14 @@
     assert_equals(getComputedStyle(parent2).color, GREY, "parent2 should be grey without :target");
     assert_equals(getComputedStyle(parent3).color, GREY, "parent3 should be grey without :target");
 
-    fragmentLink("fragment").click();
+    await navigateFragment("fragment");
 
     assert_true(fragment.matches(":target"));
     assert_equals(getComputedStyle(parent1).color, GREEN, "parent1 should be green on fragment click");
     assert_equals(getComputedStyle(parent2).color, GREY, "parent2 should be grey without :target");
     assert_equals(getComputedStyle(parent3).color, GREY, "parent3 should be grey without :target");
 
-    fragmentLink("fragment2").click();
+    await navigateFragment("fragment2");
 
     assert_true(fragment2.matches(":target"));
     assert_equals(getComputedStyle(parent1).color, GREY, "parent1 should be grey without :target");
@@ -73,14 +86,14 @@
     // Skip to check parent2 color since there is nothing in the spec mentioning DOM mutations affecting the target element.
     // - https://html.spec.whatwg.org/multipage/browsing-the-web.html#scroll-to-fragid
 
-    fragmentLink("fragment3").click();
+    await navigateFragment("fragment3");
 
     assert_true(fragment3.matches(":target"));
     assert_equals(getComputedStyle(parent1).color, GREY, "parent1 should be grey without :target");
     assert_equals(getComputedStyle(parent2).color, GREY, "parent2 should be grey without :target");
     assert_equals(getComputedStyle(parent3).color, GREEN, "parent3 should be green on fragment click");
 
-    fragmentLink("").click();
+    await navigateFragment("");
 
     assert_equals(location.hash, "");
     assert_equals(getComputedStyle(parent1).color, GREY, "parent1 should be grey without :target");
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-state-expected.txt b/third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-state-expected.txt
new file mode 100644
index 0000000..6ac68f56
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-state-expected.txt
@@ -0,0 +1,25 @@
+This is a testharness.js-based test.
+[FAIL] ":state(--foo)" should be a valid selector
+  Failed to execute 'querySelector' on 'Document': ':state(--foo)' is not a valid selector.
+[FAIL] ":state(bar)" should be a valid selector
+  Failed to execute 'querySelector' on 'Document': ':state(bar)' is not a valid selector.
+[FAIL] ":state(--)" should be a valid selector
+  Failed to execute 'querySelector' on 'Document': ':state(--)' is not a valid selector.
+[FAIL] ":state(--0)" should be a valid selector
+  Failed to execute 'querySelector' on 'Document': ':state(--0)' is not a valid selector.
+[FAIL] ":host(:state(--foo))" should be a valid selector
+  Failed to execute 'querySelector' on 'Document': ':host(:state(--foo))' is not a valid selector.
+[FAIL] "my-input[type=\\"foo\\"]:state(checked)" should be a valid selector
+  Failed to execute 'querySelector' on 'Document': 'my-input[type="foo"]:state(checked)' is not a valid selector.
+[FAIL] "my-input[type=\\"foo\\"]:state(--0)::before" should be a valid selector
+  Failed to execute 'querySelector' on 'Document': 'my-input[type="foo"]:state(--0)::before' is not a valid selector.
+[PASS] ":state" should be an invalid selector
+[PASS] ":state(" should be an invalid selector
+[PASS] ":state()" should be an invalid selector
+[PASS] ":state(0)" should be an invalid selector
+[PASS] ":state(0rem)" should be an invalid selector
+[PASS] ":state(url())" should be an invalid selector
+[PASS] ":state(foo(1))" should be an invalid selector
+[PASS] ":state(:host)" should be an invalid selector
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-state.html b/third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-state.html
new file mode 100644
index 0000000..35a83641
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/parsing/parse-state.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<meta charset="utf-8" />
+<title>CSS Selectors: custom state pseudo selectors</title>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/pull/8213" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<script>
+  test_valid_selector(":state(--foo)");
+  test_valid_selector(":state(bar)");
+  test_valid_selector(":state(--)");
+  test_valid_selector(":state(--0)");
+  test_valid_selector(":host(:state(--foo))");
+  test_valid_selector('my-input[type="foo"]:state(checked)');
+  test_valid_selector('my-input[type="foo"]:state(--0)::before');
+  test_invalid_selector(":state");
+  test_invalid_selector(":state(");
+  test_invalid_selector(":state()");
+  test_invalid_selector(":state(0)");
+  test_invalid_selector(":state(0rem)");
+  test_invalid_selector(":state(url())");
+  test_invalid_selector(":state(foo(1))");
+  test_invalid_selector(":state(:host)");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/custom-state-pseudo-class/custom-state-set-strong-ref.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/custom-state-pseudo-class/custom-state-set-strong-ref.tentative-expected.txt
new file mode 100644
index 0000000..2780a11
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/custom-state-pseudo-class/custom-state-set-strong-ref.tentative-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+[FAIL] customstateset doesn't crash after GC on detached node
+  promise_test: Unhandled rejection with value: object "SyntaxError: Failed to execute 'add' on 'CustomStateSet': The specified value 'still-works' must start with '--'."
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/custom-state-pseudo-class/custom-state-set-strong-ref.tentative.html b/third_party/blink/web_tests/external/wpt/custom-state-pseudo-class/custom-state-set-strong-ref.tentative.html
new file mode 100644
index 0000000..8b31f83c7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/custom-state-pseudo-class/custom-state-set-strong-ref.tentative.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta name="timeout" content="long">
+    <meta name="author" title="Keith Cirkel" href="mailto:wpt@keithcirkel.co.uk" />
+    <link rel="help" href="https://wicg.github.io/custom-state-pseudo-class/" />
+    <title>CustomStateSet doesn't crash after GC on detached node</title>
+
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src="/common/gc.js"></script>
+  </head>
+  <body>
+    <custom-state id="myCE"></custom-state>
+    <script>
+    customElements.define('custom-state', class extends HTMLElement {
+      connectedCallback() {
+        this.elementInternals = this.attachInternals();
+      }
+    });
+
+    promise_test(async function() {
+      const states = myCE.elementInternals.states;
+      myCE.remove();
+      await garbageCollect();
+      states.add('still-works');
+      assert_equals(states.size, 1);
+      assert_true(states.delete('still-works'));
+      assert_equals(states.size, 0);
+    }, "customstateset doesn't crash after GC on detached node");
+    </script>
+  </body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/custom-state-pseudo-class/state-css-selector.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/custom-state-pseudo-class/state-css-selector.tentative-expected.txt
new file mode 100644
index 0000000..040ce34
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/custom-state-pseudo-class/state-css-selector.tentative-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+[PASS] state selector has no influence when state is not applied
+[PASS] state selector has no influence on sibling selectors when not applied
+[PASS] state selector has influence when state is applied
+[PASS] state selector influences siblings when state is applied
+[FAIL] state selector influences has() when state is applied
+  assert_equals: expected "rgb(0, 0, 255)" but got "rgb(0, 0, 0)"
+[PASS] state selector only applies on given ident
+[PASS] state selector only applies to siblings on given ident
+[PASS] state selector only applies to has() on given ident
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/custom-state-pseudo-class/state-css-selector.tentative.html b/third_party/blink/web_tests/external/wpt/custom-state-pseudo-class/state-css-selector.tentative.html
new file mode 100644
index 0000000..a13cf41
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/custom-state-pseudo-class/state-css-selector.tentative.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta name="timeout" content="long">
+    <meta name="author" title="Keith Cirkel" href="mailto:wpt@keithcirkel.co.uk" />
+    <link rel="help" href="https://wicg.github.io/custom-state-pseudo-class/" />
+    <title>:state() css selector applies</title>
+
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <custom-state id="myCE">I should be green</custom-state>
+    <p id="mySibling">I should be blue</p>
+    <p id="myHas">I should be blue</p>
+    <style>
+      custom-state {
+        color: #f00;
+      }
+      custom-state + p {
+        color: #f00;
+      }
+      custom-state:state(--green) {
+        color: #0f0;
+      }
+      custom-state:--green {
+        color: #0f0;
+      }
+      body:has(custom-state:state(--green)) p {
+        color: #f00;
+      }
+      custom-state:state(--green) + p {
+        color: #00f;
+      }
+      custom-state:--green + p {
+        color: #00f;
+      }
+    </style>
+    <script>
+    customElements.define('custom-state', class extends HTMLElement {
+      connectedCallback() {
+        this.elementInternals = this.attachInternals();
+      }
+    });
+
+    test(function() {
+        assert_false(myCE.elementInternals.states.has('--green'));
+        assert_equals(getComputedStyle(myCE).getPropertyValue('color'), 'rgb(255, 0, 0)');
+    }, "state selector has no influence when state is not applied");
+
+    test(function() {
+        assert_false(myCE.elementInternals.states.has('--green'));
+        assert_equals(getComputedStyle(mySibling).getPropertyValue('color'), 'rgb(255, 0, 0)');
+    }, "state selector has no influence on sibling selectors when not applied");
+
+    test(function(t) {
+        myCE.elementInternals.states.add('--green');
+        t.add_cleanup(() => { myCE.elementInternals.states.delete('--green') });
+        assert_true(myCE.elementInternals.states.has('--green'));
+        assert_equals(getComputedStyle(myCE).getPropertyValue('color'), 'rgb(0, 255, 0)');
+    }, "state selector has influence when state is applied");
+
+    test(function(t) {
+        myCE.elementInternals.states.add('--green');
+        t.add_cleanup(() => { myCE.elementInternals.states.delete('--green') });
+        assert_true(myCE.elementInternals.states.has('--green'));
+        assert_equals(getComputedStyle(mySibling).getPropertyValue('color'), 'rgb(0, 0, 255)');
+    }, "state selector influences siblings when state is applied");
+
+    test(function(t) {
+        myCE.elementInternals.states.add('--green');
+        t.add_cleanup(() => { myCE.elementInternals.states.delete('--green') });
+        assert_true(myCE.elementInternals.states.has('--green'));
+        assert_equals(getComputedStyle(myHas).getPropertyValue('color'), 'rgb(0, 0, 255)');
+    }, "state selector influences has() when state is applied");
+
+    test(function(t) {
+        myCE.elementInternals.states.add('--foo');
+        t.add_cleanup(() => { myCE.elementInternals.states.delete('--foo') });
+        assert_false(myCE.elementInternals.states.has('--green'));
+        assert_true(myCE.elementInternals.states.has('--foo'));
+        assert_equals(getComputedStyle(myCE).getPropertyValue('color'), 'rgb(255, 0, 0)');
+    }, "state selector only applies on given ident");
+
+    test(function(t) {
+        myCE.elementInternals.states.add('--foo');
+        t.add_cleanup(() => { myCE.elementInternals.states.delete('--foo') });
+        assert_false(myCE.elementInternals.states.has('--green'));
+        assert_true(myCE.elementInternals.states.has('--foo'));
+        assert_equals(getComputedStyle(mySibling).getPropertyValue('color'), 'rgb(255, 0, 0)');
+    }, "state selector only applies to siblings on given ident");
+
+    test(function(t) {
+        myCE.elementInternals.states.add('--foo');
+        t.add_cleanup(() => { myCE.elementInternals.states.delete('--foo') });
+        assert_false(myCE.elementInternals.states.has('--green'));
+        assert_true(myCE.elementInternals.states.has('--foo'));
+        assert_equals(getComputedStyle(mySibling).getPropertyValue('color'), 'rgb(255, 0, 0)');
+    }, "state selector only applies to has() on given ident");
+
+    </script>
+  </body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/dom/observable/tentative/observable-constructor.any-expected.txt b/third_party/blink/web_tests/external/wpt/dom/observable/tentative/observable-constructor.any-expected.txt
index 18ed5da..b62ca85b 100644
--- a/third_party/blink/web_tests/external/wpt/dom/observable/tentative/observable-constructor.any-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/dom/observable/tentative/observable-constructor.any-expected.txt
@@ -22,5 +22,8 @@
 [PASS] Subscriber#complete() cannot re-entrantly invoke itself
 [PASS] Subscriber#error() cannot re-entrantly invoke itself
 [PASS] Unsubscription lifecycle
+[PASS] Aborting a subscription should stop emitting values
+[PASS] Calling subscribe should never throw an error synchronously, initializer throws error
+[PASS] Calling subscribe should never throw an error synchronously, subscriber pushes error
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/dom/observable/tentative/observable-constructor.any.js b/third_party/blink/web_tests/external/wpt/dom/observable/tentative/observable-constructor.any.js
index 2499531..f2360e2 100644
--- a/third_party/blink/web_tests/external/wpt/dom/observable/tentative/observable-constructor.any.js
+++ b/third_party/blink/web_tests/external/wpt/dom/observable/tentative/observable-constructor.any.js
@@ -562,3 +562,86 @@
   assert_array_equals(results, ['subscribe() callback',
       'outer abort handler', 'inner abort handler']);
 }, "Unsubscription lifecycle");
+
+// TODO(domfarolino): If we add `subscriber.closed`, assert that its value is
+// `true` in this test. See https://github.com/WICG/observable/issues/76.
+test(t => {
+  const source = new Observable((subscriber) => {
+    let n = 0;
+    while (!subscriber.signal.aborted) {
+      subscriber.next(n++);
+      if (n > 3) {
+        assert_unreached("The subscriber should be closed by now");
+      }
+    }
+  });
+
+  const ac = new AbortController();
+  const results = [];
+
+  source.subscribe({
+    next: (x) => {
+      results.push(x);
+      if (x === 2) {
+        ac.abort();
+      }
+    },
+    error: () => results.push('error'),
+    complete: () => results.push('complete'),
+    signal: ac.signal,
+  });
+
+  assert_array_equals(
+    results,
+    [0, 1, 2],
+    "should emit values synchronously before abort"
+  );
+}, "Aborting a subscription should stop emitting values");
+
+test(() => {
+  const error = new Error("custom error");
+  let errorReported = null;
+
+  self.addEventListener("error", e => errorReported = e, { once: true });
+
+  const source = new Observable(() => {
+    throw error;
+  });
+
+  try {
+    source.subscribe();
+  } catch {
+    assert_unreached("subscriber() never throws an error");
+  }
+
+  assert_true(errorReported !== null, "Exception was reported to global");
+  assert_true(errorReported.message.includes("custom error"), "Error message matches");
+  assert_greater_than(errorReported.lineno, 0, "Error lineno is greater than 0");
+  assert_greater_than(errorReported.colno, 0, "Error lineno is greater than 0");
+  assert_equals(errorReported.error, error, "Error object is equivalent");
+}, "Calling subscribe should never throw an error synchronously, initializer throws error");
+
+test(() => {
+  const error = new Error("custom error");
+  let errorReported = null;
+
+  self.addEventListener("error", e => errorReported = e, { once: true });
+
+  const source = new Observable((subscriber) => {
+    subscriber.error(error);
+  });
+
+  try {
+    source.subscribe();
+  } catch {
+    assert_unreached("subscriber() never throws an error");
+  }
+
+  assert_true(errorReported !== null, "Exception was reported to global");
+  assert_true(errorReported.message.includes("custom error"), "Error message matches");
+  assert_greater_than(errorReported.lineno, 0, "Error lineno is greater than 0");
+  assert_greater_than(errorReported.colno, 0, "Error lineno is greater than 0");
+  assert_equals(errorReported.error, error, "Error object is equivalent");
+}, "Calling subscribe should never throw an error synchronously, subscriber pushes error");
+
+// TODO(domfarolino): Add back the teardown tests that Ben wrote.
diff --git a/third_party/blink/web_tests/external/wpt/dom/observable/tentative/observable-constructor.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/dom/observable/tentative/observable-constructor.any.worker-expected.txt
index 18ed5da..b62ca85b 100644
--- a/third_party/blink/web_tests/external/wpt/dom/observable/tentative/observable-constructor.any.worker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/dom/observable/tentative/observable-constructor.any.worker-expected.txt
@@ -22,5 +22,8 @@
 [PASS] Subscriber#complete() cannot re-entrantly invoke itself
 [PASS] Subscriber#error() cannot re-entrantly invoke itself
 [PASS] Unsubscription lifecycle
+[PASS] Aborting a subscription should stop emitting values
+[PASS] Calling subscribe should never throw an error synchronously, initializer throws error
+[PASS] Calling subscribe should never throw an error synchronously, subscriber pushes error
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/editing/data/delete.js b/third_party/blink/web_tests/external/wpt/editing/data/delete.js
index 7e63c518..5fad8c2 100644
--- a/third_party/blink/web_tests/external/wpt/editing/data/delete.js
+++ b/third_party/blink/web_tests/external/wpt/editing/data/delete.js
@@ -3019,4 +3019,27 @@
    "<ul><li>{}<br></li></ul>",
    [true],
    {}],
+
+// inlined elements shouldn't be joined as <span>, etc
+["<div style=\"display:inline\">abc</div><div style=\"display:inline\">[]def</div>",
+   [["delete",""]],
+   "<div style=\"display:inline\">ab</div><div style=\"display:inline\">def</div>",
+   [true],
+   {}],
+["<ul><li style=\"display:inline\">abc</li><li style=\"display:inline\">[]def</li></ul>",
+   [["delete",""]],
+   "<ul><li style=\"display:inline\">ab</li><li style=\"display:inline\">def</li></ul>",
+   [true],
+   {}],
+["<dl><dt style=\"display:inline\">abc</dt><dd style=\"display:inline\">[]def</dd></dl>",
+   [["delete",""]],
+   "<dl><dt style=\"display:inline\">ab</dt><dd style=\"display:inline\">def</dd></dl>",
+   [true],
+   {}],
+// list-styled elements should work as list item elements
+["<div><span style=\"display:list-item\">abc</span><span style=\"display:list-item\">[]def</span></div>",
+   [["delete",""]],
+   "<div><span style=\"display:list-item\">abcdef</span></div>",
+   [true],
+   {}],
 ]
diff --git a/third_party/blink/web_tests/external/wpt/editing/data/forwarddelete.js b/third_party/blink/web_tests/external/wpt/editing/data/forwarddelete.js
index 661b62a..5119d6f50 100644
--- a/third_party/blink/web_tests/external/wpt/editing/data/forwarddelete.js
+++ b/third_party/blink/web_tests/external/wpt/editing/data/forwarddelete.js
@@ -2895,8 +2895,31 @@
 
 // Select all list item children when list items have multiple nodes.
 ["{<ul><li>abc<span>def</span>ghi</li><li>jkl<span>opq</span>rst</li></ul>}",
-   [["delete",""]],
+   [["forwarddelete",""]],
    "<ul><li>{}<br></li></ul>",
    [true],
    {}],
+
+// inlined elements shouldn't be joined as <span>, etc
+["<div style=\"display:inline\">abc[]</div><div style=\"display:inline\">def</div>",
+   [["forwarddelete",""]],
+   "<div style=\"display:inline\">abc</div><div style=\"display:inline\">ef</div>",
+   [true],
+   {}],
+["<ul><li style=\"display:inline\">abc[]</li><li style=\"display:inline\">def</li></ul>",
+   [["forwarddelete",""]],
+   "<ul><li style=\"display:inline\">abc</li><li style=\"display:inline\">ef</li></ul>",
+   [true],
+   {}],
+["<dl><dt style=\"display:inline\">abc[]</dt><dd style=\"display:inline\">def</dd></dl>",
+   [["forwarddelete",""]],
+   "<dl><dt style=\"display:inline\">abc</dt><dd style=\"display:inline\">ef</dd></dl>",
+   [true],
+   {}],
+// list-styled elements should work as list item elements
+["<div><span style=\"display:list-item\">abc[]</span><span style=\"display:list-item\">def</span></div>",
+   [["forwarddelete",""]],
+   "<div><span style=\"display:list-item\">abcdef</span></div>",
+   [true],
+   {}],
 ]
diff --git a/third_party/blink/web_tests/external/wpt/editing/run/delete_7001-last-expected.txt b/third_party/blink/web_tests/external/wpt/editing/run/delete_7001-last-expected.txt
index 5c0586a..563ee36 100644
--- a/third_party/blink/web_tests/external/wpt/editing/run/delete_7001-last-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/editing/run/delete_7001-last-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 593 tests; 580 PASS, 13 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 605 tests; 591 PASS, 14 FAIL, 0 TIMEOUT, 0 NOTRUN.
 [PASS] [["delete",""]] "<p contenteditable=false><span contenteditable=true>[abc]</span></p>" queryCommandIndeterm("delete") after
 [PASS] [["delete",""]] "<p contenteditable=false><span contenteditable=true>[abc]</span></p>" queryCommandState("delete") after
 [PASS] [["delete",""]] "<p contenteditable=false><span contenteditable=true>[abc]</span></p>" queryCommandValue("delete") after
@@ -606,5 +606,18 @@
 [PASS] [["delete",""]] "{<ul><li>abc<span>def</span>ghi</li><li>jkl<span>opq</span>rst</li></ul>}": execCommand("delete", false, "") return value
 [PASS] [["delete",""]] "{<ul><li>abc<span>def</span>ghi</li><li>jkl<span>opq</span>rst</li></ul>}" checks for modifications to non-editable content
 [PASS] [["delete",""]] "{<ul><li>abc<span>def</span>ghi</li><li>jkl<span>opq</span>rst</li></ul>}" compare innerHTML
+[PASS] [["delete",""]] "<div style=\\"display:inline\\">abc</div><div style=\\"display:inline\\">[]def</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=\\"display:inline\\">abc</div><div style=\\"display:inline\\">[]def</div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div style=\\"display:inline\\">abc</div><div style=\\"display:inline\\">[]def</div>" compare innerHTML
+[PASS] [["delete",""]] "<ul><li style=\\"display:inline\\">abc</li><li style=\\"display:inline\\">[]def</li></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul><li style=\\"display:inline\\">abc</li><li style=\\"display:inline\\">[]def</li></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul><li style=\\"display:inline\\">abc</li><li style=\\"display:inline\\">[]def</li></ul>" compare innerHTML
+[PASS] [["delete",""]] "<dl><dt style=\\"display:inline\\">abc</dt><dd style=\\"display:inline\\">[]def</dd></dl>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<dl><dt style=\\"display:inline\\">abc</dt><dd style=\\"display:inline\\">[]def</dd></dl>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<dl><dt style=\\"display:inline\\">abc</dt><dd style=\\"display:inline\\">[]def</dd></dl>" compare innerHTML
+[PASS] [["delete",""]] "<div><span style=\\"display:list-item\\">abc</span><span style=\\"display:list-item\\">[]def</span></div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div><span style=\\"display:list-item\\">abc</span><span style=\\"display:list-item\\">[]def</span></div>" checks for modifications to non-editable content
+[FAIL] [["delete",""]] "<div><span style=\\"display:list-item\\">abc</span><span style=\\"display:list-item\\">[]def</span></div>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<div><span style=\\"display:list-item\\">abcdef</span></div>" but got "<span style=\\"display:list-item\\">abcdef</span>"
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/editing/run/forwarddelete_7001-last-expected.txt b/third_party/blink/web_tests/external/wpt/editing/run/forwarddelete_7001-last-expected.txt
index ce88a37..ea7bc895 100644
--- a/third_party/blink/web_tests/external/wpt/editing/run/forwarddelete_7001-last-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/editing/run/forwarddelete_7001-last-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 260 tests; 251 PASS, 9 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 272 tests; 262 PASS, 10 FAIL, 0 TIMEOUT, 0 NOTRUN.
 [PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=3>foo[]</font><p><font size=5>bar</font>": execCommand("styleWithCSS", false, "false") return value
 [PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=3>foo[]</font><p><font size=5>bar</font>": execCommand("defaultparagraphseparator", false, "p") return value
 [PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=3>foo[]</font><p><font size=5>bar</font>": execCommand("forwarddelete", false, "") return value
@@ -266,8 +266,21 @@
 [PASS] [["forwarddelete",""]] "<ol>\\n<li>[abc</li></ol><ul><li>def]</li></ul>": execCommand("forwarddelete", false, "") return value
 [PASS] [["forwarddelete",""]] "<ol>\\n<li>[abc</li></ol><ul><li>def]</li></ul>" checks for modifications to non-editable content
 [PASS] [["forwarddelete",""]] "<ol>\\n<li>[abc</li></ol><ul><li>def]</li></ul>" compare innerHTML
-[PASS] [["delete",""]] "{<ul><li>abc<span>def</span>ghi</li><li>jkl<span>opq</span>rst</li></ul>}": execCommand("delete", false, "") return value
-[PASS] [["delete",""]] "{<ul><li>abc<span>def</span>ghi</li><li>jkl<span>opq</span>rst</li></ul>}" checks for modifications to non-editable content
-[PASS] [["delete",""]] "{<ul><li>abc<span>def</span>ghi</li><li>jkl<span>opq</span>rst</li></ul>}" compare innerHTML
+[PASS] [["forwarddelete",""]] "{<ul><li>abc<span>def</span>ghi</li><li>jkl<span>opq</span>rst</li></ul>}": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "{<ul><li>abc<span>def</span>ghi</li><li>jkl<span>opq</span>rst</li></ul>}" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "{<ul><li>abc<span>def</span>ghi</li><li>jkl<span>opq</span>rst</li></ul>}" compare innerHTML
+[PASS] [["forwarddelete",""]] "<div style=\\"display:inline\\">abc[]</div><div style=\\"display:inline\\">def</div>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<div style=\\"display:inline\\">abc[]</div><div style=\\"display:inline\\">def</div>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<div style=\\"display:inline\\">abc[]</div><div style=\\"display:inline\\">def</div>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ul><li style=\\"display:inline\\">abc[]</li><li style=\\"display:inline\\">def</li></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ul><li style=\\"display:inline\\">abc[]</li><li style=\\"display:inline\\">def</li></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ul><li style=\\"display:inline\\">abc[]</li><li style=\\"display:inline\\">def</li></ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<dl><dt style=\\"display:inline\\">abc[]</dt><dd style=\\"display:inline\\">def</dd></dl>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<dl><dt style=\\"display:inline\\">abc[]</dt><dd style=\\"display:inline\\">def</dd></dl>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<dl><dt style=\\"display:inline\\">abc[]</dt><dd style=\\"display:inline\\">def</dd></dl>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<div><span style=\\"display:list-item\\">abc[]</span><span style=\\"display:list-item\\">def</span></div>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<div><span style=\\"display:list-item\\">abc[]</span><span style=\\"display:list-item\\">def</span></div>" checks for modifications to non-editable content
+[FAIL] [["forwarddelete",""]] "<div><span style=\\"display:list-item\\">abc[]</span><span style=\\"display:list-item\\">def</span></div>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<div><span style=\\"display:list-item\\">abcdef</span></div>" but got "<span style=\\"display:list-item\\">abcdef</span>"
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/fenced-frame-no-preflight-required.tentative.https.window-expected.txt b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/fenced-frame-no-preflight-required.tentative.https.window-expected.txt
index 6147aa02..6d23b2ad 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/fenced-frame-no-preflight-required.tentative.https.window-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/fenced-frame-no-preflight-required.tentative.https.window-expected.txt
@@ -1,19 +1,19 @@
 This is a testharness.js-based test.
 [FAIL] local to local: no preflight required.
-  Illegal constructor
+  promise_test: Unhandled rejection with value: object "TypeError: Illegal constructor"
 [FAIL] local to private: no preflight required.
-  Illegal constructor
+  promise_test: Unhandled rejection with value: object "TypeError: Illegal constructor"
 [FAIL] local to public: no preflight required.
-  Illegal constructor
+  promise_test: Unhandled rejection with value: object "TypeError: Illegal constructor"
 [FAIL] private to private: no preflight required.
-  Illegal constructor
+  promise_test: Unhandled rejection with value: object "TypeError: Illegal constructor"
 [FAIL] private to public: no preflight required.
-  Illegal constructor
+  promise_test: Unhandled rejection with value: object "TypeError: Illegal constructor"
 [FAIL] public to public: no preflight required.
-  Illegal constructor
+  promise_test: Unhandled rejection with value: object "TypeError: Illegal constructor"
 [FAIL] treat-as-public-address to public: no preflight required.
-  Illegal constructor
+  promise_test: Unhandled rejection with value: object "TypeError: Illegal constructor"
 [FAIL] treat-as-public-address to local: optional preflight
-  Illegal constructor
+  promise_test: Unhandled rejection with value: object "TypeError: Illegal constructor"
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/fenced-frame-no-preflight-required.tentative.https.window.js b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/fenced-frame-no-preflight-required.tentative.https.window.js
index 21233f61..33e94d57 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/fenced-frame-no-preflight-required.tentative.https.window.js
+++ b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/fenced-frame-no-preflight-required.tentative.https.window.js
@@ -17,7 +17,7 @@
 //
 // All fetches unaffected by Private Network Access.
 
-promise_test_parallel(
+promise_test(
     t => fencedFrameTest(t, {
       source: {server: Server.HTTPS_LOCAL},
       target: {server: Server.HTTPS_LOCAL},
@@ -25,7 +25,7 @@
     }),
     'local to local: no preflight required.');
 
-promise_test_parallel(
+promise_test(
     t => fencedFrameTest(t, {
       source: {server: Server.HTTPS_LOCAL},
       target: {server: Server.HTTPS_PRIVATE},
@@ -33,7 +33,7 @@
     }),
     'local to private: no preflight required.');
 
-promise_test_parallel(
+promise_test(
     t => fencedFrameTest(t, {
       source: {server: Server.HTTPS_LOCAL},
       target: {server: Server.HTTPS_PUBLIC},
@@ -41,7 +41,7 @@
     }),
     'local to public: no preflight required.');
 
-promise_test_parallel(
+promise_test(
     t => fencedFrameTest(t, {
       source: {server: Server.HTTPS_PRIVATE},
       target: {server: Server.HTTPS_PRIVATE},
@@ -49,7 +49,7 @@
     }),
     'private to private: no preflight required.');
 
-promise_test_parallel(
+promise_test(
     t => fencedFrameTest(t, {
       source: {server: Server.HTTPS_PRIVATE},
       target: {server: Server.HTTPS_PUBLIC},
@@ -57,7 +57,7 @@
     }),
     'private to public: no preflight required.');
 
-promise_test_parallel(
+promise_test(
     t => fencedFrameTest(t, {
       source: {server: Server.HTTPS_PUBLIC},
       target: {server: Server.HTTPS_PUBLIC},
@@ -65,7 +65,7 @@
     }),
     'public to public: no preflight required.');
 
-promise_test_parallel(
+promise_test(
     t => fencedFrameTest(t, {
       source: {
         server: Server.HTTPS_LOCAL,
@@ -76,7 +76,7 @@
     }),
     'treat-as-public-address to public: no preflight required.');
 
-promise_test_parallel(
+promise_test(
     t => fencedFrameTest(t, {
       source: {
         server: Server.HTTPS_LOCAL,
diff --git a/third_party/blink/web_tests/external/wpt/html-aam/roles-contextual.html b/third_party/blink/web_tests/external/wpt/html-aam/roles-contextual.html
index d2a09db4..98ad07c 100644
--- a/third_party/blink/web_tests/external/wpt/html-aam/roles-contextual.html
+++ b/third_party/blink/web_tests/external/wpt/html-aam/roles-contextual.html
@@ -25,6 +25,7 @@
 <nav>
   <aside data-testname="el-aside-in-section-with-name" data-expectedrole="complementary" aria-label="x" class="ex">x</aside>
   <aside data-testname="el-aside-in-section-without-name" class="ex-generic">x</aside>
+  <aside data-testname="el-aside-in-section-with-role" data-expectedrole="complementary" class="ex" role="complementary">x</aside>
 </nav>
 <aside data-testname="el-aside-ancestorbodymain" data-expectedrole="complementary" class="ex">x</aside>
 
@@ -51,4 +52,4 @@
 </script>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/rendering/widgets/input-checkbox-switch-rtl-notref.html b/third_party/blink/web_tests/external/wpt/html/rendering/widgets/input-checkbox-switch-rtl-notref.html
new file mode 100644
index 0000000..02d57baf
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/rendering/widgets/input-checkbox-switch-rtl-notref.html
@@ -0,0 +1 @@
+<input type=checkbox switch>
diff --git a/third_party/blink/web_tests/external/wpt/html/rendering/widgets/input-checkbox-switch-rtl.tentative.html b/third_party/blink/web_tests/external/wpt/html/rendering/widgets/input-checkbox-switch-rtl.tentative.html
new file mode 100644
index 0000000..3e0c5d4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/rendering/widgets/input-checkbox-switch-rtl.tentative.html
@@ -0,0 +1,3 @@
+<!doctype html>
+<link rel=mismatch href=input-checkbox-switch-rtl-notref.html>
+<input type=checkbox switch dir=rtl>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-input-element/input-type-checkbox-switch.tentative.window.js b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-input-element/input-type-checkbox-switch.tentative.window.js
new file mode 100644
index 0000000..6128a62a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-input-element/input-type-checkbox-switch.tentative.window.js
@@ -0,0 +1,19 @@
+test(t => {
+  const input = document.createElement("input");
+  input.switch = true;
+
+  assert_true(input.hasAttribute("switch"));
+  assert_equals(input.getAttribute("switch"), "");
+  assert_equals(input.type, "text");
+}, "switch IDL attribute, setter");
+
+test(t => {
+  const container = document.createElement("div");
+  container.innerHTML = "<input type=checkbox switch>";
+  const input = container.firstChild;
+
+  assert_true(input.hasAttribute("switch"));
+  assert_equals(input.getAttribute("switch"), "");
+  assert_equals(input.type, "checkbox");
+  assert_true(input.switch);
+}, "switch IDL attribute, getter");
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/invokers/invoketarget-button-event-dispatch.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/invokers/invoketarget-button-event-dispatch.tentative-expected.txt
new file mode 100644
index 0000000..0d4b1b95
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/invokers/invoketarget-button-event-dispatch.tentative-expected.txt
@@ -0,0 +1,10 @@
+This is a testharness.js-based test.
+[PASS] event dispatches on click
+[PASS] event action is set to invokeAction
+[PASS] event action is set to invokeaction attribute
+[PASS] event does not dispatch if click:preventDefault is called
+[PASS] event does not dispatch if invoker is disabled
+[FAIL] event dispatches if invoker is non-HTML Element
+  assert_true: event was called expected true got false
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/invokers/invoketarget-button-event-dispatch.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/invokers/invoketarget-button-event-dispatch.tentative.html
index f3046a75..8d80cb44 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/invokers/invoketarget-button-event-dispatch.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/invokers/invoketarget-button-event-dispatch.tentative.html
@@ -78,6 +78,7 @@
   }, "event does not dispatch if click:preventDefault is called");
 
   promise_test(async function (t) {
+    t.add_cleanup(() => invokerbutton.removeAttribute('disabled'));
     let called = false;
     invokee.addEventListener(
       "invoke",
@@ -90,4 +91,26 @@
     await clickOn(invokerbutton);
     assert_false(called, "event was not called");
   }, "event does not dispatch if invoker is disabled");
+
+  promise_test(async function (t) {
+    svgInvokee = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
+    t.add_cleanup(() => {
+      invokerbutton.invokeTargetElement = invokee;
+      svgInvokee.remove();
+    });
+    document.body.append(svgInvokee);
+    let called = false;
+    assert_false(svgInvokee instanceof HTMLElement);
+    assert_true(svgInvokee instanceof Element);
+    svgInvokee.addEventListener(
+      "invoke",
+      (event) => {
+        called = true;
+      },
+      { once: true },
+    );
+    invokerbutton.invokeTargetElement = svgInvokee;
+    await clickOn(invokerbutton);
+    assert_true(called, "event was called");
+  }, "event dispatches if invoker is non-HTML Element");
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/selectors/pseudo-classes/input-checkbox-switch.tentative.window.js b/third_party/blink/web_tests/external/wpt/html/semantics/selectors/pseudo-classes/input-checkbox-switch.tentative.window.js
index eb54f2a..b5d9898a 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/selectors/pseudo-classes/input-checkbox-switch.tentative.window.js
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/selectors/pseudo-classes/input-checkbox-switch.tentative.window.js
@@ -60,3 +60,16 @@
   input.checked = false;
   assert_false(document.body.matches(":has(:checked)"));
 }, "Parent of a switch control that becomes a checkbox continues to match :has(:checked)");
+
+test(t => {
+  const input = document.body.appendChild(document.createElement("input"));
+  t.add_cleanup(() => input.remove());
+  input.type = "checkbox";
+  input.switch = true;
+  input.indeterminate = true;
+  assert_false(input.matches(":indeterminate"));
+  input.type = "text";
+  input.removeAttribute("switch");
+  input.type = "checkbox";
+  assert_true(input.matches(":indeterminate"));
+}, "A switch control that becomes a checkbox in a roundabout way");
diff --git a/third_party/blink/web_tests/external/wpt/input-events/input-events-get-target-ranges-backspace.tentative.html b/third_party/blink/web_tests/external/wpt/input-events/input-events-get-target-ranges-backspace.tentative.html
index 347ac61..9075504 100644
--- a/third_party/blink/web_tests/external/wpt/input-events/input-events-get-target-ranges-backspace.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/input-events/input-events-get-target-ranges-backspace.tentative.html
@@ -2062,4 +2062,70 @@
   checkGetTargetRangesOfInputOnDeleteSomething();
 }, 'Meta + Backspace at "<p>   abc[] def</p>"');
 
+// If editing host is nested, editing in the nested one shouldn't cause
+// target ranges extended to outside of it.
+promise_test(async t => {
+  const innerHTML = "<div contenteditable=\"false\"><div contenteditable=\"\"><p><br></p></div></div>";
+  initializeTest(innerHTML);
+  const p = gEditor.querySelector("p");
+  const innerEditingHost = p.parentNode;
+  document.activeElement?.blur();
+  p.parentNode.focus();
+  gSelection.collapse(p, 0);
+  await sendBackspaceKey();
+  if (gEditor.innerHTML == innerHTML) {
+    checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+      startContainer: p,
+      startOffset: 0,
+      endContainer: p,
+      endOffset: 0,
+    });
+    checkGetTargetRangesOfInputOnDoNothing();
+  } else {
+    checkEditorContentResultAsSubTest(
+      "<div contenteditable=\"false\"><div contenteditable=\"\"><br></div></div>",
+      t.name
+    );
+    checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+      startContainer: innerEditingHost,
+      startOffset: 0,
+      endContainer: p,
+      endOffset: 1,
+    });
+    checkGetTargetRangesOfInputOnDeleteSomething();
+  }
+}, 'Backspace at "<div contenteditable="false"><div contenteditable=""><p>{}<br></p></div></div>');
+
+promise_test(async t => {
+  const innerHTML = "<div contenteditable=\"false\">\n  <div contenteditable=\"\"><p><br></p></div></div>";
+  initializeTest(innerHTML);
+  const p = gEditor.querySelector("p");
+  const innerEditingHost = p.parentNode;
+  document.activeElement?.blur();
+  p.parentNode.focus();
+  gSelection.collapse(p, 0);
+  await sendBackspaceKey();
+  if (gEditor.innerHTML == innerHTML) {
+    checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+      startContainer: p,
+      startOffset: 0,
+      endContainer: p,
+      endOffset: 0,
+    });
+    checkGetTargetRangesOfInputOnDoNothing();
+  } else {
+    checkEditorContentResultAsSubTest(
+      "<div contenteditable=\"false\">\n  <div contenteditable=\"\"><br></div></div>",
+      t.name
+    );
+    checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+      startContainer: innerEditingHost,
+      startOffset: 0,
+      endContainer: p,
+      endOffset: 1,
+    });
+    checkGetTargetRangesOfInputOnDeleteSomething();
+  }
+}, 'Backspace at "<div contenteditable="false">\n  <div contenteditable=""><p>{}<br></p></div></div>');
+
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/streams/piping/general.any.js b/third_party/blink/web_tests/external/wpt/streams/piping/general.any.js
index 09e0153..f051d81 100644
--- a/third_party/blink/web_tests/external/wpt/streams/piping/general.any.js
+++ b/third_party/blink/web_tests/external/wpt/streams/piping/general.any.js
@@ -1,5 +1,4 @@
 // META: global=window,worker,shadowrealm
-// META: script=../resources/test-utils.js
 // META: script=../resources/recording-streams.js
 'use strict';
 
@@ -39,7 +38,8 @@
   const fakeRS = Object.create(ReadableStream.prototype);
   const ws = new WritableStream();
 
-  return methodRejects(t, ReadableStream.prototype, 'pipeTo', fakeRS, [ws]);
+  return promise_rejects_js(t, TypeError, ReadableStream.prototype.pipeTo.apply(fakeRS, [ws]),
+    'pipeTo should reject with a TypeError');
 
 }, 'pipeTo must check the brand of its ReadableStream this value');
 
@@ -48,7 +48,8 @@
   const rs = new ReadableStream();
   const fakeWS = Object.create(WritableStream.prototype);
 
-  return methodRejects(t, ReadableStream.prototype, 'pipeTo', rs, [fakeWS]);
+  return promise_rejects_js(t, TypeError, ReadableStream.prototype.pipeTo.apply(rs, [fakeWS]),
+    'pipeTo should reject with a TypeError');
 
 }, 'pipeTo must check the brand of its WritableStream argument');
 
diff --git a/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/non-transferable-buffers.any-expected.txt b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/non-transferable-buffers.any-expected.txt
new file mode 100644
index 0000000..f322d04b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/non-transferable-buffers.any-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+[PASS] ReadableStream with byte source: read() with a non-transferable buffer
+[FAIL] ReadableStream with byte source: fill() with a non-transferable buffer
+  promise_test: Unhandled rejection with value: object "TypeError: reader.fill is not a function"
+[PASS] ReadableStream with byte source: enqueue() with a non-transferable buffer
+[PASS] ReadableStream with byte source: respondWithNewView() with a non-transferable buffer
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.js b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.js
index 47d7b2e..54cd8bf 100644
--- a/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.js
+++ b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.js
@@ -13,6 +13,18 @@
   await promise_rejects_js(t, TypeError, reader.read(view));
 }, 'ReadableStream with byte source: read() with a non-transferable buffer');
 
+promise_test(async t => {
+  const rs = new ReadableStream({
+    pull: t.unreached_func('pull() should not be called'),
+    type: 'bytes'
+  });
+
+  const reader = rs.getReader({ mode: 'byob' });
+  const memory = new WebAssembly.Memory({ initial: 1 });
+  const view = new Uint8Array(memory.buffer, 0, 1);
+  await promise_rejects_js(t, TypeError, reader.fill(view));
+}, 'ReadableStream with byte source: fill() with a non-transferable buffer');
+
 test(t => {
   let controller;
   const rs = new ReadableStream({
diff --git a/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.serviceworker-expected.txt b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.serviceworker-expected.txt
new file mode 100644
index 0000000..f322d04b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.serviceworker-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+[PASS] ReadableStream with byte source: read() with a non-transferable buffer
+[FAIL] ReadableStream with byte source: fill() with a non-transferable buffer
+  promise_test: Unhandled rejection with value: object "TypeError: reader.fill is not a function"
+[PASS] ReadableStream with byte source: enqueue() with a non-transferable buffer
+[PASS] ReadableStream with byte source: respondWithNewView() with a non-transferable buffer
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.sharedworker-expected.txt b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.sharedworker-expected.txt
new file mode 100644
index 0000000..f322d04b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.sharedworker-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+[PASS] ReadableStream with byte source: read() with a non-transferable buffer
+[FAIL] ReadableStream with byte source: fill() with a non-transferable buffer
+  promise_test: Unhandled rejection with value: object "TypeError: reader.fill is not a function"
+[PASS] ReadableStream with byte source: enqueue() with a non-transferable buffer
+[PASS] ReadableStream with byte source: respondWithNewView() with a non-transferable buffer
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.worker-expected.txt
new file mode 100644
index 0000000..f322d04b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/non-transferable-buffers.any.worker-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+[PASS] ReadableStream with byte source: read() with a non-transferable buffer
+[FAIL] ReadableStream with byte source: fill() with a non-transferable buffer
+  promise_test: Unhandled rejection with value: object "TypeError: reader.fill is not a function"
+[PASS] ReadableStream with byte source: enqueue() with a non-transferable buffer
+[PASS] ReadableStream with byte source: respondWithNewView() with a non-transferable buffer
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any-expected.txt b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any-expected.txt
new file mode 100644
index 0000000..e065818
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any-expected.txt
@@ -0,0 +1,44 @@
+This is a testharness.js-based test.
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is 0
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is negative
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is larger than view's length (Uint8Array)
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is larger than view's length (Uint16Array)
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is larger than view's length (DataView)
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }), then read()
+  assert_equals: first result value byteLength expected 3 but got 2
+[FAIL] ReadableStream with byte source: read({ min }) with a DataView
+  assert_equals: result.value.byteLength expected 3 but got 2
+[FAIL] ReadableStream with byte source: enqueue(), then read({ min })
+  assert_equals: first result value byteLength expected 3 but got 1
+[FAIL] ReadableStream with byte source: read({ min: 3 }) on a 3-byte Uint8Array, then multiple enqueue() up to 3 bytes
+  assert_equals: first result value byteLength expected 3 but got 2
+[FAIL] ReadableStream with byte source: read({ min: 3 }) on a 5-byte Uint8Array, then multiple enqueue() up to 3 bytes
+  assert_equals: first result value byteLength expected 3 but got 2
+[FAIL] ReadableStream with byte source: read({ min: 3 }) on a 5-byte Uint8Array, then multiple enqueue() up to 4 bytes
+  assert_equals: first result value byteLength expected 4 but got 2
+[PASS] ReadableStream with byte source: enqueue(), read({ min }) partially, then read()
+[PASS] ReadableStream with byte source: read({ min }), then respondWithNewView() with a transferred ArrayBuffer
+[PASS] ReadableStream with byte source: read({ min }) on a closed stream
+[FAIL] ReadableStream with byte source: read({ min }) when closed before view is filled
+  assert_true: result.done expected true got false
+[FAIL] ReadableStream with byte source: read({ min }) when closed immediately after view is filled
+  assert_equals: result.value byteLength expected 3 but got 2
+[PASS] ReadableStream with byte source: read({ min }) on an errored stream
+[PASS] ReadableStream with byte source: read({ min }), then error()
+[PASS] ReadableStream with byte source: getReader(), read({ min }), then cancel()
+[FAIL] ReadableStream with byte source: cancel() with partially filled pending read({ min }) request
+  Cannot read properties of null (reading 'view')
+[PASS] ReadableStream with byte source: enqueue(), then read({ min }) with smaller views
+[FAIL] ReadableStream with byte source: 3 byte enqueue(), then close(), then read({ min }) with 2-element Uint16Array must fail
+  assert_unreached: Should have rejected: read() must fail Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) with 2-element Uint16Array, then 3 byte enqueue(), then close() must fail
+  assert_throws_js: controller.close() must throw function "() => controller.close()" did not throw
+[FAIL] ReadableStream with byte source: tee() with read({ min }) from branch1 and read() from branch2
+  assert_equals: pull() must have been called 2 times expected 2 but got 1
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any.js b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any.js
new file mode 100644
index 0000000..4010e37
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any.js
@@ -0,0 +1,774 @@
+// META: global=window,worker,shadowrealm
+// META: script=../resources/rs-utils.js
+// META: script=../resources/test-utils.js
+'use strict';
+
+// View buffers are detached after pull() returns, so record the information at the time that pull() was called.
+function extractViewInfo(view) {
+  return {
+    constructor: view.constructor,
+    bufferByteLength: view.buffer.byteLength,
+    byteOffset: view.byteOffset,
+    byteLength: view.byteLength
+  };
+}
+
+promise_test(async t => {
+  const rs = new ReadableStream({
+    type: 'bytes',
+    pull: t.unreached_func('pull() should not be called'),
+  });
+  const reader = rs.getReader({ mode: 'byob' });
+  await promise_rejects_js(t, TypeError, reader.read(new Uint8Array(1), { min: 0 }));
+}, 'ReadableStream with byte source: read({ min }) rejects if min is 0');
+
+promise_test(async t => {
+  const rs = new ReadableStream({
+    type: 'bytes',
+    pull: t.unreached_func('pull() should not be called'),
+  });
+  const reader = rs.getReader({ mode: 'byob' });
+  await promise_rejects_js(t, TypeError, reader.read(new Uint8Array(1), { min: -1 }));
+}, 'ReadableStream with byte source: read({ min }) rejects if min is negative');
+
+promise_test(async t => {
+  const rs = new ReadableStream({
+    type: 'bytes',
+    pull: t.unreached_func('pull() should not be called'),
+  });
+  const reader = rs.getReader({ mode: 'byob' });
+  await promise_rejects_js(t, RangeError, reader.read(new Uint8Array(1), { min: 2 }));
+}, 'ReadableStream with byte source: read({ min }) rejects if min is larger than view\'s length (Uint8Array)');
+
+promise_test(async t => {
+  const rs = new ReadableStream({
+    type: 'bytes',
+    pull: t.unreached_func('pull() should not be called'),
+  });
+  const reader = rs.getReader({ mode: 'byob' });
+  await promise_rejects_js(t, RangeError, reader.read(new Uint16Array(1), { min: 2 }));
+}, 'ReadableStream with byte source: read({ min }) rejects if min is larger than view\'s length (Uint16Array)');
+
+promise_test(async t => {
+  const rs = new ReadableStream({
+    type: 'bytes',
+    pull: t.unreached_func('pull() should not be called'),
+  });
+  const reader = rs.getReader({ mode: 'byob' });
+  await promise_rejects_js(t, RangeError, reader.read(new DataView(new ArrayBuffer(1)), { min: 2 }));
+}, 'ReadableStream with byte source: read({ min }) rejects if min is larger than view\'s length (DataView)');
+
+promise_test(async t => {
+  let pullCount = 0;
+  const byobRequests = [];
+  const rs = new ReadableStream({
+    type: 'bytes',
+    pull: t.step_func((c) => {
+      const byobRequest = c.byobRequest;
+      const view = byobRequest.view;
+      byobRequests[pullCount] = {
+        nonNull: byobRequest !== null,
+        viewNonNull: view !== null,
+        viewInfo: extractViewInfo(view)
+      };
+      if (pullCount === 0) {
+        view[0] = 0x01;
+        view[1] = 0x02;
+        byobRequest.respond(2);
+      } else if (pullCount === 1) {
+        view[0] = 0x03;
+        byobRequest.respond(1);
+      } else if (pullCount === 2) {
+        view[0] = 0x04;
+        byobRequest.respond(1);
+      }
+      ++pullCount;
+    })
+  });
+  const reader = rs.getReader({ mode: 'byob' });
+  const read1 = reader.read(new Uint8Array(3), { min: 3 });
+  const read2 = reader.read(new Uint8Array(1));
+
+  const result1 = await read1;
+  assert_false(result1.done, 'first result should not be done');
+  assert_typed_array_equals(result1.value, new Uint8Array([0x01, 0x02, 0x03]), 'first result value');
+
+  const result2 = await read2;
+  assert_false(result2.done, 'second result should not be done');
+  assert_typed_array_equals(result2.value, new Uint8Array([0x04]), 'second result value');
+
+  assert_equals(pullCount, 3, 'pull() must have been called 3 times');
+
+  {
+    const byobRequest = byobRequests[0];
+    assert_true(byobRequest.nonNull, 'first byobRequest must not be null');
+    assert_true(byobRequest.viewNonNull, 'first byobRequest.view must not be null');
+    const viewInfo = byobRequest.viewInfo;
+    assert_equals(viewInfo.constructor, Uint8Array, 'first view.constructor should be Uint8Array');
+    assert_equals(viewInfo.bufferByteLength, 3, 'first view.buffer.byteLength should be 3');
+    assert_equals(viewInfo.byteOffset, 0, 'first view.byteOffset should be 0');
+    assert_equals(viewInfo.byteLength, 3, 'first view.byteLength should be 3');
+  }
+
+  {
+    const byobRequest = byobRequests[1];
+    assert_true(byobRequest.nonNull, 'second byobRequest must not be null');
+    assert_true(byobRequest.viewNonNull, 'second byobRequest.view must not be null');
+    const viewInfo = byobRequest.viewInfo;
+    assert_equals(viewInfo.constructor, Uint8Array, 'second view.constructor should be Uint8Array');
+    assert_equals(viewInfo.bufferByteLength, 3, 'second view.buffer.byteLength should be 3');
+    assert_equals(viewInfo.byteOffset, 2, 'second view.byteOffset should be 2');
+    assert_equals(viewInfo.byteLength, 1, 'second view.byteLength should be 1');
+  }
+
+  {
+    const byobRequest = byobRequests[2];
+    assert_true(byobRequest.nonNull, 'third byobRequest must not be null');
+    assert_true(byobRequest.viewNonNull, 'third byobRequest.view must not be null');
+    const viewInfo = byobRequest.viewInfo;
+    assert_equals(viewInfo.constructor, Uint8Array, 'third view.constructor should be Uint8Array');
+    assert_equals(viewInfo.bufferByteLength, 1, 'third view.buffer.byteLength should be 1');
+    assert_equals(viewInfo.byteOffset, 0, 'third view.byteOffset should be 0');
+    assert_equals(viewInfo.byteLength, 1, 'third view.byteLength should be 1');
+  }
+
+}, 'ReadableStream with byte source: read({ min }), then read()');
+
+promise_test(async t => {
+  let pullCount = 0;
+  const byobRequests = [];
+  const rs = new ReadableStream({
+    type: 'bytes',
+    pull: t.step_func((c) => {
+      const byobRequest = c.byobRequest;
+      const view = byobRequest.view;
+      byobRequests[pullCount] = {
+        nonNull: byobRequest !== null,
+        viewNonNull: view !== null,
+        viewInfo: extractViewInfo(view)
+      };
+      if (pullCount === 0) {
+        view[0] = 0x01;
+        view[1] = 0x02;
+        byobRequest.respond(2);
+      } else if (pullCount === 1) {
+        view[0] = 0x03;
+        byobRequest.respond(1);
+      }
+      ++pullCount;
+    })
+  });
+  const reader = rs.getReader({ mode: 'byob' });
+
+  const result = await reader.read(new DataView(new ArrayBuffer(3)), { min: 3 });
+  assert_false(result.done, 'result should not be done');
+  assert_equals(result.value.constructor, DataView, 'result.value must be a DataView');
+  assert_equals(result.value.byteOffset, 0, 'result.value.byteOffset');
+  assert_equals(result.value.byteLength, 3, 'result.value.byteLength');
+  assert_equals(result.value.buffer.byteLength, 3, 'result.value.buffer.byteLength');
+  assert_array_equals([...new Uint8Array(result.value.buffer)], [0x01, 0x02, 0x03], `result.value.buffer contents`);
+
+  assert_equals(pullCount, 2, 'pull() must have been called 2 times');
+
+  {
+    const byobRequest = byobRequests[0];
+    assert_true(byobRequest.nonNull, 'first byobRequest must not be null');
+    assert_true(byobRequest.viewNonNull, 'first byobRequest.view must not be null');
+    const viewInfo = byobRequest.viewInfo;
+    assert_equals(viewInfo.constructor, Uint8Array, 'first view.constructor should be Uint8Array');
+    assert_equals(viewInfo.bufferByteLength, 3, 'first view.buffer.byteLength should be 3');
+    assert_equals(viewInfo.byteOffset, 0, 'first view.byteOffset should be 0');
+    assert_equals(viewInfo.byteLength, 3, 'first view.byteLength should be 3');
+  }
+
+  {
+    const byobRequest = byobRequests[1];
+    assert_true(byobRequest.nonNull, 'second byobRequest must not be null');
+    assert_true(byobRequest.viewNonNull, 'second byobRequest.view must not be null');
+    const viewInfo = byobRequest.viewInfo;
+    assert_equals(viewInfo.constructor, Uint8Array, 'second view.constructor should be Uint8Array');
+    assert_equals(viewInfo.bufferByteLength, 3, 'second view.buffer.byteLength should be 3');
+    assert_equals(viewInfo.byteOffset, 2, 'second view.byteOffset should be 2');
+    assert_equals(viewInfo.byteLength, 1, 'second view.byteLength should be 1');
+  }
+
+}, 'ReadableStream with byte source: read({ min }) with a DataView');
+
+promise_test(async t => {
+  let pullCount = 0;
+  const byobRequests = [];
+  const rs = new ReadableStream({
+    type: 'bytes',
+    start: t.step_func((c) => {
+      c.enqueue(new Uint8Array([0x01]));
+    }),
+    pull: t.step_func((c) => {
+      const byobRequest = c.byobRequest;
+      const view = byobRequest.view;
+      byobRequests[pullCount] = {
+        nonNull: byobRequest !== null,
+        viewNonNull: view !== null,
+        viewInfo: extractViewInfo(view)
+      };
+      if (pullCount === 0) {
+        view[0] = 0x02;
+        view[1] = 0x03;
+        byobRequest.respond(2);
+      }
+      ++pullCount;
+    })
+  });
+  const reader = rs.getReader({ mode: 'byob' });
+
+  const result = await reader.read(new Uint8Array(3), { min: 3 });
+  assert_false(result.done, 'first result should not be done');
+  assert_typed_array_equals(result.value, new Uint8Array([0x01, 0x02, 0x03]), 'first result value');
+
+  assert_equals(pullCount, 1, 'pull() must have only been called once');
+
+  const byobRequest = byobRequests[0];
+  assert_true(byobRequest.nonNull, 'first byobRequest must not be null');
+  assert_true(byobRequest.viewNonNull, 'first byobRequest.view must not be null');
+  const viewInfo = byobRequest.viewInfo;
+  assert_equals(viewInfo.constructor, Uint8Array, 'first view.constructor should be Uint8Array');
+  assert_equals(viewInfo.bufferByteLength, 3, 'first view.buffer.byteLength should be 3');
+  assert_equals(viewInfo.byteOffset, 1, 'first view.byteOffset should be 1');
+  assert_equals(viewInfo.byteLength, 2, 'first view.byteLength should be 2');
+
+}, 'ReadableStream with byte source: enqueue(), then read({ min })');
+
+promise_test(async t => {
+  let pullCount = 0;
+  const byobRequests = [];
+  const rs = new ReadableStream({
+    type: 'bytes',
+    pull: t.step_func((c) => {
+      const byobRequest = c.byobRequest;
+      const view = byobRequest.view;
+      byobRequests[pullCount] = {
+        nonNull: byobRequest !== null,
+        viewNonNull: view !== null,
+        viewInfo: extractViewInfo(view)
+      };
+      if (pullCount === 0) {
+        c.enqueue(new Uint8Array([0x01, 0x02]));
+      } else if (pullCount === 1) {
+        c.enqueue(new Uint8Array([0x03]));
+      }
+      ++pullCount;
+    })
+  });
+  const reader = rs.getReader({ mode: 'byob' });
+
+  const result = await reader.read(new Uint8Array(3), { min: 3 });
+  assert_false(result.done, 'first result should not be done');
+  assert_typed_array_equals(result.value, new Uint8Array([0x01, 0x02, 0x03]), 'first result value');
+
+  assert_equals(pullCount, 2, 'pull() must have been called 2 times');
+
+  {
+    const byobRequest = byobRequests[0];
+    assert_true(byobRequest.nonNull, 'first byobRequest must not be null');
+    assert_true(byobRequest.viewNonNull, 'first byobRequest.view must not be null');
+    const viewInfo = byobRequest.viewInfo;
+    assert_equals(viewInfo.constructor, Uint8Array, 'first view.constructor should be Uint8Array');
+    assert_equals(viewInfo.bufferByteLength, 3, 'first view.buffer.byteLength should be 3');
+    assert_equals(viewInfo.byteOffset, 0, 'first view.byteOffset should be 0');
+    assert_equals(viewInfo.byteLength, 3, 'first view.byteLength should be 3');
+  }
+
+  {
+    const byobRequest = byobRequests[1];
+    assert_true(byobRequest.nonNull, 'second byobRequest must not be null');
+    assert_true(byobRequest.viewNonNull, 'second byobRequest.view must not be null');
+    const viewInfo = byobRequest.viewInfo;
+    assert_equals(viewInfo.constructor, Uint8Array, 'second view.constructor should be Uint8Array');
+    assert_equals(viewInfo.bufferByteLength, 3, 'second view.buffer.byteLength should be 3');
+    assert_equals(viewInfo.byteOffset, 2, 'second view.byteOffset should be 2');
+    assert_equals(viewInfo.byteLength, 1, 'second view.byteLength should be 1');
+  }
+
+}, 'ReadableStream with byte source: read({ min: 3 }) on a 3-byte Uint8Array, then multiple enqueue() up to 3 bytes');
+
+promise_test(async t => {
+  let pullCount = 0;
+  const byobRequests = [];
+  const rs = new ReadableStream({
+    type: 'bytes',
+    pull: t.step_func((c) => {
+      const byobRequest = c.byobRequest;
+      const view = byobRequest.view;
+      byobRequests[pullCount] = {
+        nonNull: byobRequest !== null,
+        viewNonNull: view !== null,
+        viewInfo: extractViewInfo(view)
+      };
+      if (pullCount === 0) {
+        c.enqueue(new Uint8Array([0x01, 0x02]));
+      } else if (pullCount === 1) {
+        c.enqueue(new Uint8Array([0x03]));
+      }
+      ++pullCount;
+    })
+  });
+  const reader = rs.getReader({ mode: 'byob' });
+
+  const result = await reader.read(new Uint8Array(5), { min: 3 });
+  assert_false(result.done, 'first result should not be done');
+  assert_typed_array_equals(result.value, new Uint8Array([0x01, 0x02, 0x03, 0, 0]).subarray(0, 3), 'first result value');
+
+  assert_equals(pullCount, 2, 'pull() must have been called 2 times');
+
+  {
+    const byobRequest = byobRequests[0];
+    assert_true(byobRequest.nonNull, 'first byobRequest must not be null');
+    assert_true(byobRequest.viewNonNull, 'first byobRequest.view must not be null');
+    const viewInfo = byobRequest.viewInfo;
+    assert_equals(viewInfo.constructor, Uint8Array, 'first view.constructor should be Uint8Array');
+    assert_equals(viewInfo.bufferByteLength, 5, 'first view.buffer.byteLength should be 5');
+    assert_equals(viewInfo.byteOffset, 0, 'first view.byteOffset should be 0');
+    assert_equals(viewInfo.byteLength, 5, 'first view.byteLength should be 5');
+  }
+
+  {
+    const byobRequest = byobRequests[1];
+    assert_true(byobRequest.nonNull, 'second byobRequest must not be null');
+    assert_true(byobRequest.viewNonNull, 'second byobRequest.view must not be null');
+    const viewInfo = byobRequest.viewInfo;
+    assert_equals(viewInfo.constructor, Uint8Array, 'second view.constructor should be Uint8Array');
+    assert_equals(viewInfo.bufferByteLength, 5, 'second view.buffer.byteLength should be 5');
+    assert_equals(viewInfo.byteOffset, 2, 'second view.byteOffset should be 2');
+    assert_equals(viewInfo.byteLength, 3, 'second view.byteLength should be 3');
+  }
+
+}, 'ReadableStream with byte source: read({ min: 3 }) on a 5-byte Uint8Array, then multiple enqueue() up to 3 bytes');
+
+promise_test(async t => {
+  let pullCount = 0;
+  const byobRequests = [];
+  const rs = new ReadableStream({
+    type: 'bytes',
+    pull: t.step_func((c) => {
+      const byobRequest = c.byobRequest;
+      const view = byobRequest.view;
+      byobRequests[pullCount] = {
+        nonNull: byobRequest !== null,
+        viewNonNull: view !== null,
+        viewInfo: extractViewInfo(view)
+      };
+      if (pullCount === 0) {
+        c.enqueue(new Uint8Array([0x01, 0x02]));
+      } else if (pullCount === 1) {
+        c.enqueue(new Uint8Array([0x03, 0x04]));
+      }
+      ++pullCount;
+    })
+  });
+  const reader = rs.getReader({ mode: 'byob' });
+
+  const result = await reader.read(new Uint8Array(5), { min: 3 });
+  assert_false(result.done, 'first result should not be done');
+  assert_typed_array_equals(result.value, new Uint8Array([0x01, 0x02, 0x03, 0x04, 0]).subarray(0, 4), 'first result value');
+
+  assert_equals(pullCount, 2, 'pull() must have been called 2 times');
+
+  {
+    const byobRequest = byobRequests[0];
+    assert_true(byobRequest.nonNull, 'first byobRequest must not be null');
+    assert_true(byobRequest.viewNonNull, 'first byobRequest.view must not be null');
+    const viewInfo = byobRequest.viewInfo;
+    assert_equals(viewInfo.constructor, Uint8Array, 'first view.constructor should be Uint8Array');
+    assert_equals(viewInfo.bufferByteLength, 5, 'first view.buffer.byteLength should be 5');
+    assert_equals(viewInfo.byteOffset, 0, 'first view.byteOffset should be 0');
+    assert_equals(viewInfo.byteLength, 5, 'first view.byteLength should be 5');
+  }
+
+  {
+    const byobRequest = byobRequests[1];
+    assert_true(byobRequest.nonNull, 'second byobRequest must not be null');
+    assert_true(byobRequest.viewNonNull, 'second byobRequest.view must not be null');
+    const viewInfo = byobRequest.viewInfo;
+    assert_equals(viewInfo.constructor, Uint8Array, 'second view.constructor should be Uint8Array');
+    assert_equals(viewInfo.bufferByteLength, 5, 'second view.buffer.byteLength should be 5');
+    assert_equals(viewInfo.byteOffset, 2, 'second view.byteOffset should be 2');
+    assert_equals(viewInfo.byteLength, 3, 'second view.byteLength should be 3');
+  }
+
+}, 'ReadableStream with byte source: read({ min: 3 }) on a 5-byte Uint8Array, then multiple enqueue() up to 4 bytes');
+
+promise_test(async t => {
+  const stream = new ReadableStream({
+    start(c) {
+      const view = new Uint8Array(16);
+      view[0] = 0x01;
+      view[8] = 0x02;
+      c.enqueue(view);
+    },
+    pull: t.unreached_func('pull() should not be called'),
+    type: 'bytes'
+  });
+
+  const byobReader = stream.getReader({ mode: 'byob' });
+  const result1 = await byobReader.read(new Uint8Array(8), { min: 8 });
+  assert_false(result1.done, 'result1.done');
+
+  const view1 = result1.value;
+  assert_equals(view1.constructor, Uint8Array, 'result1.value.constructor');
+  assert_equals(view1.buffer.byteLength, 8, 'result1.value.buffer.byteLength');
+  assert_equals(view1.byteOffset, 0, 'result1.value.byteOffset');
+  assert_equals(view1.byteLength, 8, 'result1.value.byteLength');
+  assert_equals(view1[0], 0x01, 'result1.value[0]');
+
+  byobReader.releaseLock();
+
+  const reader = stream.getReader();
+  const result2 = await reader.read();
+  assert_false(result2.done, 'result2.done');
+
+  const view2 = result2.value;
+  assert_equals(view2.constructor, Uint8Array, 'result2.value.constructor');
+  assert_equals(view2.buffer.byteLength, 16, 'result2.value.buffer.byteLength');
+  assert_equals(view2.byteOffset, 8, 'result2.value.byteOffset');
+  assert_equals(view2.byteLength, 8, 'result2.value.byteLength');
+  assert_equals(view2[0], 0x02, 'result2.value[0]');
+}, 'ReadableStream with byte source: enqueue(), read({ min }) partially, then read()');
+
+promise_test(async () => {
+  let pullCount = 0;
+  const byobRequestDefined = [];
+  let byobRequestViewDefined;
+
+  const stream = new ReadableStream({
+    async pull(c) {
+      byobRequestDefined.push(c.byobRequest !== null);
+      const initialByobRequest = c.byobRequest;
+
+      const transferredView = await transferArrayBufferView(c.byobRequest.view);
+      transferredView[0] = 0x01;
+      c.byobRequest.respondWithNewView(transferredView);
+
+      byobRequestDefined.push(c.byobRequest !== null);
+      byobRequestViewDefined = initialByobRequest.view !== null;
+
+      ++pullCount;
+    },
+    type: 'bytes'
+  });
+
+  const reader = stream.getReader({ mode: 'byob' });
+  const result = await reader.read(new Uint8Array(1), { min: 1 });
+  assert_false(result.done, 'result.done');
+  assert_equals(result.value.byteLength, 1, 'result.value.byteLength');
+  assert_equals(result.value[0], 0x01, 'result.value[0]');
+  assert_equals(pullCount, 1, 'pull() should be called only once');
+  assert_true(byobRequestDefined[0], 'byobRequest must not be null before respondWithNewView()');
+  assert_false(byobRequestDefined[1], 'byobRequest must be null after respondWithNewView()');
+  assert_false(byobRequestViewDefined, 'view of initial byobRequest must be null after respondWithNewView()');
+}, 'ReadableStream with byte source: read({ min }), then respondWithNewView() with a transferred ArrayBuffer');
+
+promise_test(async t => {
+  const stream = new ReadableStream({
+    start(c) {
+      c.close();
+    },
+    pull: t.unreached_func('pull() should not be called'),
+    type: 'bytes'
+  });
+
+  const reader = stream.getReader({ mode: 'byob' });
+
+  const result = await reader.read(new Uint8Array([0x01]), { min: 1 });
+  assert_true(result.done, 'result.done');
+  assert_typed_array_equals(result.value, new Uint8Array([0x01]).subarray(0, 0), 'result.value');
+
+  await reader.closed;
+}, 'ReadableStream with byte source: read({ min }) on a closed stream');
+
+promise_test(async t => {
+  let pullCount = 0;
+  const rs = new ReadableStream({
+    type: 'bytes',
+    pull: t.step_func((c) => {
+      if (pullCount === 0) {
+        c.byobRequest.view[0] = 0x01;
+        c.byobRequest.respond(1);
+      } else if (pullCount === 1) {
+        c.close();
+        c.byobRequest.respond(0);
+      }
+      ++pullCount;
+    })
+  });
+  const reader = rs.getReader({ mode: 'byob' });
+
+  const result = await reader.read(new Uint8Array(3), { min: 3 });
+  assert_true(result.done, 'result.done');
+  assert_typed_array_equals(result.value, new Uint8Array([0x01, 0, 0]).subarray(0, 1), 'result.value');
+
+  assert_equals(pullCount, 2, 'pull() must have been called 2 times');
+
+  await reader.closed;
+}, 'ReadableStream with byte source: read({ min }) when closed before view is filled');
+
+promise_test(async t => {
+  let pullCount = 0;
+  const rs = new ReadableStream({
+    type: 'bytes',
+    pull: t.step_func((c) => {
+      if (pullCount === 0) {
+        c.byobRequest.view[0] = 0x01;
+        c.byobRequest.view[1] = 0x02;
+        c.byobRequest.respond(2);
+      } else if (pullCount === 1) {
+        c.byobRequest.view[0] = 0x03;
+        c.byobRequest.respond(1);
+        c.close();
+      }
+      ++pullCount;
+    })
+  });
+  const reader = rs.getReader({ mode: 'byob' });
+
+  const result = await reader.read(new Uint8Array(3), { min: 3 });
+  assert_false(result.done, 'result.done');
+  assert_typed_array_equals(result.value, new Uint8Array([0x01, 0x02, 0x03]), 'result.value');
+
+  assert_equals(pullCount, 2, 'pull() must have been called 2 times');
+
+  await reader.closed;
+}, 'ReadableStream with byte source: read({ min }) when closed immediately after view is filled');
+
+promise_test(async t => {
+  const error1 = new Error('error1');
+  const stream = new ReadableStream({
+    start(c) {
+      c.error(error1);
+    },
+    pull: t.unreached_func('pull() should not be called'),
+    type: 'bytes'
+  });
+
+  const reader = stream.getReader({ mode: 'byob' });
+  const read = reader.read(new Uint8Array(1), { min: 1 });
+
+  await Promise.all([
+    promise_rejects_exactly(t, error1, read, 'read() must fail'),
+    promise_rejects_exactly(t, error1, reader.closed, 'closed must fail')
+  ]);
+}, 'ReadableStream with byte source: read({ min }) on an errored stream');
+
+promise_test(async t => {
+  const error1 = new Error('error1');
+  let controller;
+  const stream = new ReadableStream({
+    start(c) {
+      controller = c;
+    },
+    type: 'bytes'
+  });
+
+  const reader = stream.getReader({ mode: 'byob' });
+  const read = reader.read(new Uint8Array(1), { min: 1 });
+
+  controller.error(error1);
+
+  await Promise.all([
+    promise_rejects_exactly(t, error1, read, 'read() must fail'),
+    promise_rejects_exactly(t, error1, reader.closed, 'closed must fail')
+  ]);
+}, 'ReadableStream with byte source: read({ min }), then error()');
+
+promise_test(t => {
+  let cancelCount = 0;
+  let reason;
+
+  const passedReason = new TypeError('foo');
+
+  const stream = new ReadableStream({
+    pull: t.unreached_func('pull() should not be called'),
+    cancel(r) {
+      if (cancelCount === 0) {
+        reason = r;
+      }
+
+      ++cancelCount;
+
+      return 'bar';
+    },
+    type: 'bytes'
+  });
+
+  const reader = stream.getReader({ mode: 'byob' });
+
+  const readPromise = reader.read(new Uint8Array(1), { min: 1 }).then(result => {
+    assert_true(result.done, 'result.done');
+    assert_equals(result.value, undefined, 'result.value');
+  });
+
+  const cancelPromise = reader.cancel(passedReason).then(result => {
+    assert_equals(result, undefined, 'cancel() return value should be fulfilled with undefined');
+    assert_equals(cancelCount, 1, 'cancel() should be called only once');
+    assert_equals(reason, passedReason, 'reason should equal the passed reason');
+  });
+
+  return Promise.all([readPromise, cancelPromise]);
+}, 'ReadableStream with byte source: getReader(), read({ min }), then cancel()');
+
+promise_test(async t => {
+  let pullCount = 0;
+  let byobRequest;
+  const viewInfos = [];
+  const rs = new ReadableStream({
+    type: 'bytes',
+    pull: t.step_func((c) => {
+      byobRequest = c.byobRequest;
+
+      viewInfos.push(extractViewInfo(c.byobRequest.view));
+      c.byobRequest.view[0] = 0x01;
+      c.byobRequest.respond(1);
+      viewInfos.push(extractViewInfo(c.byobRequest.view));
+
+      ++pullCount;
+    })
+  });
+
+  await Promise.resolve();
+  assert_equals(pullCount, 0, 'pull() must not have been called yet');
+
+  const reader = rs.getReader({ mode: 'byob' });
+  const read = reader.read(new Uint8Array(3), { min: 3 });
+  assert_equals(pullCount, 1, 'pull() must have been called once');
+  assert_not_equals(byobRequest, null, 'byobRequest should not be null');
+  assert_equals(viewInfos[0].byteLength, 3, 'byteLength before respond() should be 3');
+  assert_equals(viewInfos[1].byteLength, 2, 'byteLength after respond() should be 2');
+
+  reader.cancel().catch(t.unreached_func('cancel() should not reject'));
+
+  const result = await read;
+  assert_true(result.done, 'result.done');
+  assert_equals(result.value, undefined, 'result.value');
+
+  assert_equals(pullCount, 1, 'pull() must only be called once');
+
+  await reader.closed;
+}, 'ReadableStream with byte source: cancel() with partially filled pending read({ min }) request');
+
+promise_test(async () => {
+  let pullCalled = false;
+
+  const stream = new ReadableStream({
+    start(c) {
+      const view = new Uint8Array(16);
+      view[7] = 0x01;
+      view[15] = 0x02;
+      c.enqueue(view);
+    },
+    pull() {
+      pullCalled = true;
+    },
+    type: 'bytes'
+  });
+
+  const reader = stream.getReader({ mode: 'byob' });
+
+  const result1 = await reader.read(new Uint8Array(8), { min: 8 });
+  assert_false(result1.done, 'result1.done');
+
+  const view1 = result1.value;
+  assert_equals(view1.byteOffset, 0, 'result1.value.byteOffset');
+  assert_equals(view1.byteLength, 8, 'result1.value.byteLength');
+  assert_equals(view1[7], 0x01, 'result1.value[7]');
+
+  const result2 = await reader.read(new Uint8Array(8), { min: 8 });
+  assert_false(pullCalled, 'pull() must not have been called');
+  assert_false(result2.done, 'result2.done');
+
+  const view2 = result2.value;
+  assert_equals(view2.byteOffset, 0, 'result2.value.byteOffset');
+  assert_equals(view2.byteLength, 8, 'result2.value.byteLength');
+  assert_equals(view2[7], 0x02, 'result2.value[7]');
+}, 'ReadableStream with byte source: enqueue(), then read({ min }) with smaller views');
+
+promise_test(async t => {
+  const stream = new ReadableStream({
+    start(c) {
+      c.enqueue(new Uint8Array([0xaa, 0xbb, 0xcc]));
+      c.close();
+    },
+    pull: t.unreached_func('pull() should not be called'),
+    type: 'bytes'
+  });
+
+  const reader = stream.getReader({ mode: 'byob' });
+
+  await promise_rejects_js(t, TypeError, reader.read(new Uint16Array(2), { min: 2 }), 'read() must fail');
+  await promise_rejects_js(t, TypeError, reader.closed, 'reader.closed should reject');
+}, 'ReadableStream with byte source: 3 byte enqueue(), then close(), then read({ min }) with 2-element Uint16Array must fail');
+
+promise_test(async t => {
+  let controller;
+  const stream = new ReadableStream({
+    start(c) {
+      controller = c;
+    },
+    pull: t.unreached_func('pull() should not be called'),
+    type: 'bytes'
+  });
+
+  const reader = stream.getReader({ mode: 'byob' });
+  const readPromise = reader.read(new Uint16Array(2), { min: 2 });
+
+  controller.enqueue(new Uint8Array([0xaa, 0xbb, 0xcc]));
+  assert_throws_js(TypeError, () => controller.close(), 'controller.close() must throw');
+
+  await promise_rejects_js(t, TypeError, readPromise, 'read() must fail');
+  await promise_rejects_js(t, TypeError, reader.closed, 'reader.closed must reject');
+}, 'ReadableStream with byte source: read({ min }) with 2-element Uint16Array, then 3 byte enqueue(), then close() must fail');
+
+promise_test(async t => {
+  let pullCount = 0;
+  let controller;
+  const rs = new ReadableStream({
+    type: 'bytes',
+    start: t.step_func((c) => {
+      controller = c;
+    }),
+    pull: t.step_func((c) => {
+      ++pullCount;
+    })
+  });
+
+  const [reader1, reader2] = rs.tee().map(branch => branch.getReader({ mode: 'byob' }));
+
+  await Promise.resolve();
+  assert_equals(pullCount, 0, 'pull() must not have been called yet');
+
+  const read1 = reader1.read(new Uint8Array(3), { min: 3 });
+  const read2 = reader2.read(new Uint8Array(1));
+
+  assert_equals(pullCount, 1, 'pull() must have been called once');
+  const byobRequest1 = controller.byobRequest;
+  assert_equals(byobRequest1.view.byteLength, 3, 'first byobRequest.view.byteLength should be 3');
+  byobRequest1.view[0] = 0x01;
+  byobRequest1.respond(1);
+
+  const result2 = await read2;
+  assert_false(result2.done, 'branch2 first read() should not be done');
+  assert_typed_array_equals(result2.value, new Uint8Array([0x01]), 'branch2 first read() value');
+
+  assert_equals(pullCount, 2, 'pull() must have been called 2 times');
+  const byobRequest2 = controller.byobRequest;
+  assert_equals(byobRequest2.view.byteLength, 2, 'second byobRequest.view.byteLength should be 2');
+  byobRequest2.view[0] = 0x02;
+  byobRequest2.view[1] = 0x03;
+  byobRequest2.respond(2);
+
+  const result1 = await read1;
+  assert_false(result1.done, 'branch1 read() should not be done');
+  assert_typed_array_equals(result1.value, new Uint8Array([0x01, 0x02, 0x03]), 'branch1 read() value');
+
+  const result3 = await reader2.read(new Uint8Array(2));
+  assert_equals(pullCount, 2, 'pull() must only be called 2 times');
+  assert_false(result3.done, 'branch2 second read() should not be done');
+  assert_typed_array_equals(result3.value, new Uint8Array([0x02, 0x03]), 'branch2 second read() value');
+}, 'ReadableStream with byte source: tee() with read({ min }) from branch1 and read() from branch2');
diff --git a/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any.serviceworker-expected.txt b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any.serviceworker-expected.txt
new file mode 100644
index 0000000..e065818
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any.serviceworker-expected.txt
@@ -0,0 +1,44 @@
+This is a testharness.js-based test.
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is 0
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is negative
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is larger than view's length (Uint8Array)
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is larger than view's length (Uint16Array)
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is larger than view's length (DataView)
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }), then read()
+  assert_equals: first result value byteLength expected 3 but got 2
+[FAIL] ReadableStream with byte source: read({ min }) with a DataView
+  assert_equals: result.value.byteLength expected 3 but got 2
+[FAIL] ReadableStream with byte source: enqueue(), then read({ min })
+  assert_equals: first result value byteLength expected 3 but got 1
+[FAIL] ReadableStream with byte source: read({ min: 3 }) on a 3-byte Uint8Array, then multiple enqueue() up to 3 bytes
+  assert_equals: first result value byteLength expected 3 but got 2
+[FAIL] ReadableStream with byte source: read({ min: 3 }) on a 5-byte Uint8Array, then multiple enqueue() up to 3 bytes
+  assert_equals: first result value byteLength expected 3 but got 2
+[FAIL] ReadableStream with byte source: read({ min: 3 }) on a 5-byte Uint8Array, then multiple enqueue() up to 4 bytes
+  assert_equals: first result value byteLength expected 4 but got 2
+[PASS] ReadableStream with byte source: enqueue(), read({ min }) partially, then read()
+[PASS] ReadableStream with byte source: read({ min }), then respondWithNewView() with a transferred ArrayBuffer
+[PASS] ReadableStream with byte source: read({ min }) on a closed stream
+[FAIL] ReadableStream with byte source: read({ min }) when closed before view is filled
+  assert_true: result.done expected true got false
+[FAIL] ReadableStream with byte source: read({ min }) when closed immediately after view is filled
+  assert_equals: result.value byteLength expected 3 but got 2
+[PASS] ReadableStream with byte source: read({ min }) on an errored stream
+[PASS] ReadableStream with byte source: read({ min }), then error()
+[PASS] ReadableStream with byte source: getReader(), read({ min }), then cancel()
+[FAIL] ReadableStream with byte source: cancel() with partially filled pending read({ min }) request
+  Cannot read properties of null (reading 'view')
+[PASS] ReadableStream with byte source: enqueue(), then read({ min }) with smaller views
+[FAIL] ReadableStream with byte source: 3 byte enqueue(), then close(), then read({ min }) with 2-element Uint16Array must fail
+  assert_unreached: Should have rejected: read() must fail Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) with 2-element Uint16Array, then 3 byte enqueue(), then close() must fail
+  assert_throws_js: controller.close() must throw function "() => controller.close()" did not throw
+[FAIL] ReadableStream with byte source: tee() with read({ min }) from branch1 and read() from branch2
+  assert_equals: pull() must have been called 2 times expected 2 but got 1
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any.shadowrealm-expected.txt b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any.shadowrealm-expected.txt
new file mode 100644
index 0000000..f1c2a17
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any.shadowrealm-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+Harness Error. harness_status.status = 1 , harness_status.message = Unhandled rejection: ShadowRealm is not defined
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any.sharedworker-expected.txt b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any.sharedworker-expected.txt
new file mode 100644
index 0000000..e065818
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any.sharedworker-expected.txt
@@ -0,0 +1,44 @@
+This is a testharness.js-based test.
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is 0
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is negative
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is larger than view's length (Uint8Array)
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is larger than view's length (Uint16Array)
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is larger than view's length (DataView)
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }), then read()
+  assert_equals: first result value byteLength expected 3 but got 2
+[FAIL] ReadableStream with byte source: read({ min }) with a DataView
+  assert_equals: result.value.byteLength expected 3 but got 2
+[FAIL] ReadableStream with byte source: enqueue(), then read({ min })
+  assert_equals: first result value byteLength expected 3 but got 1
+[FAIL] ReadableStream with byte source: read({ min: 3 }) on a 3-byte Uint8Array, then multiple enqueue() up to 3 bytes
+  assert_equals: first result value byteLength expected 3 but got 2
+[FAIL] ReadableStream with byte source: read({ min: 3 }) on a 5-byte Uint8Array, then multiple enqueue() up to 3 bytes
+  assert_equals: first result value byteLength expected 3 but got 2
+[FAIL] ReadableStream with byte source: read({ min: 3 }) on a 5-byte Uint8Array, then multiple enqueue() up to 4 bytes
+  assert_equals: first result value byteLength expected 4 but got 2
+[PASS] ReadableStream with byte source: enqueue(), read({ min }) partially, then read()
+[PASS] ReadableStream with byte source: read({ min }), then respondWithNewView() with a transferred ArrayBuffer
+[PASS] ReadableStream with byte source: read({ min }) on a closed stream
+[FAIL] ReadableStream with byte source: read({ min }) when closed before view is filled
+  assert_true: result.done expected true got false
+[FAIL] ReadableStream with byte source: read({ min }) when closed immediately after view is filled
+  assert_equals: result.value byteLength expected 3 but got 2
+[PASS] ReadableStream with byte source: read({ min }) on an errored stream
+[PASS] ReadableStream with byte source: read({ min }), then error()
+[PASS] ReadableStream with byte source: getReader(), read({ min }), then cancel()
+[FAIL] ReadableStream with byte source: cancel() with partially filled pending read({ min }) request
+  Cannot read properties of null (reading 'view')
+[PASS] ReadableStream with byte source: enqueue(), then read({ min }) with smaller views
+[FAIL] ReadableStream with byte source: 3 byte enqueue(), then close(), then read({ min }) with 2-element Uint16Array must fail
+  assert_unreached: Should have rejected: read() must fail Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) with 2-element Uint16Array, then 3 byte enqueue(), then close() must fail
+  assert_throws_js: controller.close() must throw function "() => controller.close()" did not throw
+[FAIL] ReadableStream with byte source: tee() with read({ min }) from branch1 and read() from branch2
+  assert_equals: pull() must have been called 2 times expected 2 but got 1
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any.worker-expected.txt
new file mode 100644
index 0000000..e065818
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/streams/readable-byte-streams/read-min.any.worker-expected.txt
@@ -0,0 +1,44 @@
+This is a testharness.js-based test.
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is 0
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is negative
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is larger than view's length (Uint8Array)
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is larger than view's length (Uint16Array)
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) rejects if min is larger than view's length (DataView)
+  assert_unreached: pull() should not be called Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }), then read()
+  assert_equals: first result value byteLength expected 3 but got 2
+[FAIL] ReadableStream with byte source: read({ min }) with a DataView
+  assert_equals: result.value.byteLength expected 3 but got 2
+[FAIL] ReadableStream with byte source: enqueue(), then read({ min })
+  assert_equals: first result value byteLength expected 3 but got 1
+[FAIL] ReadableStream with byte source: read({ min: 3 }) on a 3-byte Uint8Array, then multiple enqueue() up to 3 bytes
+  assert_equals: first result value byteLength expected 3 but got 2
+[FAIL] ReadableStream with byte source: read({ min: 3 }) on a 5-byte Uint8Array, then multiple enqueue() up to 3 bytes
+  assert_equals: first result value byteLength expected 3 but got 2
+[FAIL] ReadableStream with byte source: read({ min: 3 }) on a 5-byte Uint8Array, then multiple enqueue() up to 4 bytes
+  assert_equals: first result value byteLength expected 4 but got 2
+[PASS] ReadableStream with byte source: enqueue(), read({ min }) partially, then read()
+[PASS] ReadableStream with byte source: read({ min }), then respondWithNewView() with a transferred ArrayBuffer
+[PASS] ReadableStream with byte source: read({ min }) on a closed stream
+[FAIL] ReadableStream with byte source: read({ min }) when closed before view is filled
+  assert_true: result.done expected true got false
+[FAIL] ReadableStream with byte source: read({ min }) when closed immediately after view is filled
+  assert_equals: result.value byteLength expected 3 but got 2
+[PASS] ReadableStream with byte source: read({ min }) on an errored stream
+[PASS] ReadableStream with byte source: read({ min }), then error()
+[PASS] ReadableStream with byte source: getReader(), read({ min }), then cancel()
+[FAIL] ReadableStream with byte source: cancel() with partially filled pending read({ min }) request
+  Cannot read properties of null (reading 'view')
+[PASS] ReadableStream with byte source: enqueue(), then read({ min }) with smaller views
+[FAIL] ReadableStream with byte source: 3 byte enqueue(), then close(), then read({ min }) with 2-element Uint16Array must fail
+  assert_unreached: Should have rejected: read() must fail Reached unreachable code
+[FAIL] ReadableStream with byte source: read({ min }) with 2-element Uint16Array, then 3 byte enqueue(), then close() must fail
+  assert_throws_js: controller.close() must throw function "() => controller.close()" did not throw
+[FAIL] ReadableStream with byte source: tee() with read({ min }) from branch1 and read() from branch2
+  assert_equals: pull() must have been called 2 times expected 2 but got 1
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/streams/resources/test-utils.js b/third_party/blink/web_tests/external/wpt/streams/resources/test-utils.js
index 5ff8fc8cec..a38f7802 100644
--- a/third_party/blink/web_tests/external/wpt/streams/resources/test-utils.js
+++ b/third_party/blink/web_tests/external/wpt/streams/resources/test-utils.js
@@ -1,52 +1,5 @@
 'use strict';
 
-self.getterRejects = (t, obj, getterName, target) => {
-  const getter = Object.getOwnPropertyDescriptor(obj, getterName).get;
-
-  return promise_rejects_js(t, TypeError, getter.call(target), getterName + ' should reject with a TypeError');
-};
-
-self.getterRejectsForAll = (t, obj, getterName, targets) => {
-  return Promise.all(targets.map(target => self.getterRejects(t, obj, getterName, target)));
-};
-
-self.methodRejects = (t, obj, methodName, target, args) => {
-  const method = obj[methodName];
-
-  return promise_rejects_js(t, TypeError, method.apply(target, args),
-                         methodName + ' should reject with a TypeError');
-};
-
-self.methodRejectsForAll = (t, obj, methodName, targets, args) => {
-  return Promise.all(targets.map(target => self.methodRejects(t, obj, methodName, target, args)));
-};
-
-self.getterThrows = (obj, getterName, target) => {
-  const getter = Object.getOwnPropertyDescriptor(obj, getterName).get;
-
-  assert_throws_js(TypeError, () => getter.call(target), getterName + ' should throw a TypeError');
-};
-
-self.getterThrowsForAll = (obj, getterName, targets) => {
-  targets.forEach(target => self.getterThrows(obj, getterName, target));
-};
-
-self.methodThrows = (obj, methodName, target, args) => {
-  const method = obj[methodName];
-  assert_equals(typeof method, 'function', methodName + ' should exist');
-
-  assert_throws_js(TypeError, () => method.apply(target, args), methodName + ' should throw a TypeError');
-};
-
-self.methodThrowsForAll = (obj, methodName, targets, args) => {
-  targets.forEach(target => self.methodThrows(obj, methodName, target, args));
-};
-
-self.constructorThrowsForAll = (constructor, firstArgs) => {
-  firstArgs.forEach(firstArg => assert_throws_js(TypeError, () => new constructor(firstArg),
-                                                 'constructor should throw a TypeError'));
-};
-
 self.delay = ms => new Promise(resolve => step_timeout(resolve, ms));
 
 // For tests which verify that the implementation doesn't do something it shouldn't, it's better not to use a
diff --git a/third_party/blink/web_tests/external/wpt/svg/color-inherit-link-visited-ref.svg b/third_party/blink/web_tests/external/wpt/svg/color-inherit-link-visited-ref.svg
new file mode 100644
index 0000000..3342e93
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/color-inherit-link-visited-ref.svg
@@ -0,0 +1,3 @@
+<svg width="100" height="100" fill="green" xmlns="http://www.w3.org/2000/svg">
+  <rect width="100" height="100"></rect>
+</svg>
diff --git a/third_party/blink/web_tests/external/wpt/svg/color-inherit-link-visited.svg b/third_party/blink/web_tests/external/wpt/svg/color-inherit-link-visited.svg
new file mode 100644
index 0000000..9324f11
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/color-inherit-link-visited.svg
@@ -0,0 +1,8 @@
+<svg width="100" height="100" fill="green" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:html="http://www.w3.org/1999/xhtml">
+  <html:link rel="help" href="https://developer.mozilla.org/en-US/docs/Web/CSS/Privacy_and_the_:visited_selector"/>
+  <html:link rel="match" href="color-inherit-link-visited-ref.svg"/>
+  <html:meta name="assert" content="Tests that color is correctly inherited in the presence of visited link"/>
+  <a xlink:href="">
+    <rect width="100" height="100"></rect>
+  </a>
+</svg>
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/animation-model/animation-types/accumulation-per-property-001-expected.txt b/third_party/blink/web_tests/external/wpt/web-animations/animation-model/animation-types/accumulation-per-property-001-expected.txt
index f89b59f..87232a82 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/animation-model/animation-types/accumulation-per-property-001-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/web-animations/animation-model/animation-types/accumulation-per-property-001-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 313 tests; 311 PASS, 2 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 313 tests; 312 PASS, 1 FAIL, 0 TIMEOUT, 0 NOTRUN.
 [PASS] Setup
 [PASS] align-content (type: discrete) has testAccumulation function
 [PASS] align-content: "flex-end" onto "flex-start"
@@ -303,9 +303,8 @@
 [PASS] grid-row-start: "5" onto "1"
 [PASS] grid-row-start: "1" onto "5"
 [PASS] grid-template-areas (type: discrete) has testAccumulation function
-[PASS] grid-template-areas: "none" onto "". . a b" ". .a b""
-[FAIL] grid-template-areas: "". . a b" ". .a b"" onto "none"
-  assert_equals: The value should be ". . a b" ". .a b" at 0ms expected "\\". . a b\\" \\". .a b\\"" but got "\\". . a b\\" \\". . a b\\""
+[PASS] grid-template-areas: "none" onto "". . a b" ". . a b""
+[PASS] grid-template-areas: "". . a b" ". . a b"" onto "none"
 [PASS] hyphens (type: discrete) has testAccumulation function
 [PASS] hyphens: "none" onto "manual"
 [PASS] hyphens: "manual" onto "none"
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/animation-model/animation-types/addition-per-property-001-expected.txt b/third_party/blink/web_tests/external/wpt/web-animations/animation-model/animation-types/addition-per-property-001-expected.txt
index c88df621..ecb634c 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/animation-model/animation-types/addition-per-property-001-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/web-animations/animation-model/animation-types/addition-per-property-001-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 313 tests; 311 PASS, 2 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 313 tests; 312 PASS, 1 FAIL, 0 TIMEOUT, 0 NOTRUN.
 [PASS] Setup
 [PASS] align-content (type: discrete) has testAddition function
 [PASS] align-content: "flex-end" onto "flex-start"
@@ -303,9 +303,8 @@
 [PASS] grid-row-start: "5" onto "1"
 [PASS] grid-row-start: "1" onto "5"
 [PASS] grid-template-areas (type: discrete) has testAddition function
-[PASS] grid-template-areas: "none" onto "". . a b" ". .a b""
-[FAIL] grid-template-areas: "". . a b" ". .a b"" onto "none"
-  assert_equals: The value should be ". . a b" ". .a b" at 0ms expected "\\". . a b\\" \\". .a b\\"" but got "\\". . a b\\" \\". . a b\\""
+[PASS] grid-template-areas: "none" onto "". . a b" ". . a b""
+[PASS] grid-template-areas: "". . a b" ". . a b"" onto "none"
 [PASS] hyphens (type: discrete) has testAddition function
 [PASS] hyphens: "none" onto "manual"
 [PASS] hyphens: "manual" onto "none"
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/animation-model/animation-types/interpolation-per-property-001-expected.txt b/third_party/blink/web_tests/external/wpt/web-animations/animation-model/animation-types/interpolation-per-property-001-expected.txt
index 5edf710..a7d86fe 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/animation-model/animation-types/interpolation-per-property-001-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/web-animations/animation-model/animation-types/interpolation-per-property-001-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 389 tests; 377 PASS, 12 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 389 tests; 380 PASS, 9 FAIL, 0 TIMEOUT, 0 NOTRUN.
 [PASS] Setup
 [PASS] align-content (type: discrete) has testInterpolation function
 [PASS] align-content uses discrete animation when animating between "flex-start" and "flex-end" with linear easing
@@ -383,12 +383,9 @@
 [PASS] grid-row-start uses discrete animation when animating between "1" and "5" with effect easing
 [PASS] grid-row-start uses discrete animation when animating between "1" and "5" with keyframe easing
 [PASS] grid-template-areas (type: discrete) has testInterpolation function
-[FAIL] grid-template-areas uses discrete animation when animating between "". . a b" ". .a b"" and "none" with linear easing
-  assert_equals: The value should be ". . a b" ". .a b" at 0ms expected "\\". . a b\\" \\". .a b\\"" but got "\\". . a b\\" \\". . a b\\""
-[FAIL] grid-template-areas uses discrete animation when animating between "". . a b" ". .a b"" and "none" with effect easing
-  assert_equals: The value should be ". . a b" ". .a b" at 0ms expected "\\". . a b\\" \\". .a b\\"" but got "\\". . a b\\" \\". . a b\\""
-[FAIL] grid-template-areas uses discrete animation when animating between "". . a b" ". .a b"" and "none" with keyframe easing
-  assert_equals: The value should be ". . a b" ". .a b" at 0ms expected "\\". . a b\\" \\". .a b\\"" but got "\\". . a b\\" \\". . a b\\""
+[PASS] grid-template-areas uses discrete animation when animating between "". . a b" ". . a b"" and "none" with linear easing
+[PASS] grid-template-areas uses discrete animation when animating between "". . a b" ". . a b"" and "none" with effect easing
+[PASS] grid-template-areas uses discrete animation when animating between "". . a b" ". . a b"" and "none" with keyframe easing
 [PASS] hyphens (type: discrete) has testInterpolation function
 [PASS] hyphens uses discrete animation when animating between "manual" and "none" with linear easing
 [PASS] hyphens uses discrete animation when animating between "manual" and "none" with effect easing
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/animation-model/animation-types/property-list.js b/third_party/blink/web_tests/external/wpt/web-animations/animation-model/animation-types/property-list.js
index 14a175d..32b857c3 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/animation-model/animation-types/property-list.js
+++ b/third_party/blink/web_tests/external/wpt/web-animations/animation-model/animation-types/property-list.js
@@ -670,7 +670,7 @@
   'grid-template-areas': {
     // https://drafts.csswg.org/css-template/#grid-template-areas
     types: [
-      { type: 'discrete', options: [ [ '". . a b" ". .a b"', 'none' ] ] }
+      { type: 'discrete', options: [ [ '". . a b" ". . a b"', 'none' ] ] }
     ]
   },
   'height': {
diff --git a/third_party/blink/web_tests/external/wpt/webauthn/public-key-credential-to-json.https.window.js b/third_party/blink/web_tests/external/wpt/webauthn/public-key-credential-to-json.https.window.js
index 8de3b8c..1fbd4341 100644
--- a/third_party/blink/web_tests/external/wpt/webauthn/public-key-credential-to-json.https.window.js
+++ b/third_party/blink/web_tests/external/wpt/webauthn/public-key-credential-to-json.https.window.js
@@ -1,5 +1,3 @@
-// META: script=/resources/testharness.js
-// META: script=/resources/testharnessreport.js
 // META: script=/resources/testdriver.js
 // META: script=/resources/testdriver-vendor.js
 // META: script=/resources/utils.js
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/navigation_started/navigation_started.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/navigation_started/navigation_started.py
index 01e28b1b..069292b 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/navigation_started/navigation_started.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/navigation_started/navigation_started.py
@@ -1,4 +1,3 @@
-import asyncio
 
 import pytest
 from tests.support.sync import AsyncPoll
@@ -439,3 +438,23 @@
             "url": redirect_url,
         },
     )
+
+
+async def test_navigate_history_pushstate(
+    bidi_session, inline, new_tab, subscribe_events, wait_for_event
+):
+    await subscribe_events([NAVIGATION_STARTED_EVENT])
+
+    on_entry = wait_for_event(NAVIGATION_STARTED_EVENT)
+    url = inline("""
+        <script>
+            window.addEventListener('DOMContentLoaded', () => {
+                history.pushState({}, '', '#1');
+            });
+        </script>""")
+    result = await bidi_session.browsing_context.navigate(
+        context=new_tab["context"], url=url, wait="complete"
+    )
+    event = await on_entry
+
+    assert event["navigation"] == result["navigation"]
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/user_prompt_closed/user_prompt_closed.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/user_prompt_closed/user_prompt_closed.py
index ffbdcec..fabf511 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/user_prompt_closed/user_prompt_closed.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/user_prompt_closed/user_prompt_closed.py
@@ -1,4 +1,3 @@
-import asyncio
 import pytest
 from tests.support.sync import AsyncPoll
 from webdriver.error import TimeoutException
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/input/perform_actions/pointer_mouse.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/input/perform_actions/pointer_mouse.py
index 0d1902e7..73c80af 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/input/perform_actions/pointer_mouse.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/input/perform_actions/pointer_mouse.py
@@ -283,3 +283,35 @@
         await click_link()
         event = await on_entry
         assert event["url"] == destination
+
+
+@pytest.mark.parametrize("x, y, event_count", [
+    (0, 0, 0),
+    (1, 0, 1),
+    (0, 1, 1),
+], ids=["default value", "x", "y"])
+async def test_move_to_position_in_viewport(
+    bidi_session, load_static_test_page, top_context, x, y, event_count
+):
+    await load_static_test_page(page="test_actions.html")
+
+    actions = Actions()
+    actions.add_pointer().pointer_move(x=x, y=y)
+
+    await bidi_session.input.perform_actions(
+        actions=actions, context=top_context["context"]
+    )
+
+    events = await get_events(bidi_session, top_context["context"])
+    assert len(events) == event_count
+
+    # Move again to check that no further mouse move event is emitted.
+    actions = Actions()
+    actions.add_pointer().pointer_move(x=x, y=y)
+
+    await bidi_session.input.perform_actions(
+        actions=actions, context=top_context["context"]
+    )
+
+    events = await get_events(bidi_session, top_context["context"])
+    assert len(events) == event_count
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/add_intercept/phase_auth_required.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/add_intercept/phase_auth_required.py
new file mode 100644
index 0000000..d6ea0a28
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/add_intercept/phase_auth_required.py
@@ -0,0 +1,140 @@
+
+import pytest
+from webdriver.bidi.modules.script import ScriptEvaluateResultException
+
+from .. import (
+    assert_before_request_sent_event,
+    assert_response_event,
+)
+
+PAGE_EMPTY_TEXT = "/webdriver/tests/bidi/network/support/empty.txt"
+
+AUTH_REQUIRED_EVENT = "network.authRequired"
+
+pytestmark = pytest.mark.asyncio
+
+
+async def test_basic_authentication(
+    bidi_session,
+    new_tab,
+    wait_for_event,
+    url,
+    setup_network_test,
+    add_intercept,
+):
+    network_events = await setup_network_test(
+        events=[
+            "network.beforeRequestSent",
+            "network.responseStarted",
+            "network.authRequired",
+            "network.responseCompleted",
+        ]
+    )
+    before_request_sent_events = network_events["network.beforeRequestSent"]
+    response_started_events = network_events["network.responseStarted"]
+    auth_required_events = network_events["network.authRequired"]
+    response_completed_events = network_events["network.responseCompleted"]
+
+    auth_url = url("/webdriver/tests/support/http_handlers/authentication.py")
+    intercept = await add_intercept(
+        phases=["authRequired"],
+        url_patterns=[{"type": "string", "pattern": auth_url}],
+    )
+
+    assert isinstance(intercept, str)
+
+    on_auth_required = wait_for_event(AUTH_REQUIRED_EVENT)
+    await bidi_session.browsing_context.navigate(
+        context=new_tab["context"],
+        url=auth_url,
+        wait="none",
+    )
+
+    await on_auth_required
+    expected_request = {"method": "GET", "url": auth_url}
+
+    assert len(before_request_sent_events) == 1
+    assert len(response_started_events) == 1
+    assert len(auth_required_events) == 1
+
+    assert_before_request_sent_event(
+        before_request_sent_events[0],
+        expected_request=expected_request,
+        is_blocked=False,
+    )
+    assert_response_event(
+        response_started_events[0],
+        expected_request=expected_request,
+        is_blocked=False,
+    )
+    assert_response_event(
+        auth_required_events[0],
+        expected_request=expected_request,
+        is_blocked=True,
+        intercepts=[intercept],
+    )
+
+    # The request should remain blocked at the authRequired phase.
+    assert len(response_completed_events) == 0
+
+
+async def test_no_authentication(
+    bidi_session,
+    wait_for_event,
+    url,
+    setup_network_test,
+    add_intercept,
+    fetch,
+):
+    network_events = await setup_network_test(
+        events=[
+            "network.beforeRequestSent",
+            "network.responseStarted",
+            "network.authRequired",
+            "network.responseCompleted",
+        ]
+    )
+    before_request_sent_events = network_events["network.beforeRequestSent"]
+    response_started_events = network_events["network.responseStarted"]
+    auth_required_events = network_events["network.authRequired"]
+    response_completed_events = network_events["network.responseCompleted"]
+
+    text_url = url(PAGE_EMPTY_TEXT)
+    intercept = await add_intercept(
+        phases=["authRequired"],
+        url_patterns=[{"type": "string", "pattern": text_url}],
+    )
+
+    assert isinstance(intercept, str)
+
+    on_network_event = wait_for_event("network.responseCompleted")
+
+    await fetch(text_url)
+    await on_network_event
+
+    expected_request = {"method": "GET", "url": text_url}
+
+    assert len(before_request_sent_events) == 1
+    assert len(response_started_events) == 1
+    assert len(response_completed_events) == 1
+
+    # Check that no network event was blocked because of the authRequired
+    # intercept since the URL does not trigger an auth prompt.
+    assert_before_request_sent_event(
+        before_request_sent_events[0],
+        expected_request=expected_request,
+        is_blocked=False,
+    )
+    assert_response_event(
+        response_started_events[0],
+        expected_request=expected_request,
+        is_blocked=False,
+    )
+    assert_response_event(
+        response_completed_events[0],
+        expected_request=expected_request,
+        is_blocked=False,
+    )
+
+    # No authRequired event should have been received.
+    assert len(auth_required_events) == 0
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/add_intercept/phases.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/add_intercept/phases.py
index c6fba726..4b244c9 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/add_intercept/phases.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/add_intercept/phases.py
@@ -1,4 +1,3 @@
-import asyncio
 
 import pytest
 from webdriver.bidi.modules.script import ScriptEvaluateResultException
diff --git a/third_party/rust/cxx/v1/crate/.buckroot b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/auth_required/__init__.py
similarity index 100%
copy from third_party/rust/cxx/v1/crate/.buckroot
copy to third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/auth_required/__init__.py
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/auth_required/auth_required.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/auth_required/auth_required.py
new file mode 100644
index 0000000..c785334cd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/auth_required/auth_required.py
@@ -0,0 +1,95 @@
+import asyncio
+
+import pytest
+
+from tests.support.sync import AsyncPoll
+
+from .. import assert_response_event
+
+PAGE_EMPTY_HTML = "/webdriver/tests/bidi/network/support/empty.html"
+
+AUTH_REQUIRED_EVENT = "network.authRequired"
+
+
+@pytest.mark.asyncio
+async def test_subscribe_status(
+    bidi_session, new_tab, subscribe_events, wait_for_event, url
+):
+    await subscribe_events(events=[AUTH_REQUIRED_EVENT])
+
+    # Track all received network.authRequired events in the events array.
+    events = []
+
+    async def on_event(method, data):
+        events.append(data)
+
+    remove_listener = bidi_session.add_event_listener(AUTH_REQUIRED_EVENT, on_event)
+
+    auth_url = url(
+        "/webdriver/tests/support/http_handlers/authentication.py?realm=testrealm"
+    )
+
+    on_auth_required = wait_for_event(AUTH_REQUIRED_EVENT)
+
+    # navigate using wait="none" as other wait conditions would hang because of
+    # the authentication prompt.
+    await bidi_session.browsing_context.navigate(
+        context=new_tab["context"],
+        url=auth_url,
+        wait="none",
+    )
+
+    await on_auth_required
+
+    assert len(events) == 1
+    expected_request = {"method": "GET", "url": auth_url}
+    expected_response = {
+        "url": auth_url,
+        "authChallenges": [
+            ({"scheme": "Basic", "realm": "testrealm"}),
+        ],
+    }
+    assert_response_event(
+        events[0],
+        expected_request=expected_request,
+        expected_response=expected_response,
+        redirect_count=0,
+    )
+
+    await bidi_session.session.unsubscribe(events=[AUTH_REQUIRED_EVENT])
+
+    # Navigate to authentication.py again and check no new event is received.
+    await bidi_session.browsing_context.navigate(
+        context=new_tab["context"],
+        url=auth_url,
+        wait="none",
+    )
+    await asyncio.sleep(0.5)
+    assert len(events) == 1
+
+    remove_listener()
+
+
+@pytest.mark.asyncio
+async def test_no_authentication(
+    bidi_session, new_tab, subscribe_events, wait_for_event, url
+):
+    await subscribe_events(events=[AUTH_REQUIRED_EVENT])
+
+    # Track all received network.authRequired events in the events array.
+    events = []
+
+    async def on_event(method, data):
+        events.append(data)
+
+    remove_listener = bidi_session.add_event_listener(AUTH_REQUIRED_EVENT, on_event)
+
+    # Navigate to a page which should not trigger any authentication.
+    await bidi_session.browsing_context.navigate(
+        context=new_tab["context"],
+        url=url(PAGE_EMPTY_HTML),
+        wait="complete",
+    )
+
+    assert len(events) == 0
+    remove_listener()
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/remove_intercept/remove_intercept.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/remove_intercept/remove_intercept.py
index 1ac0e5cb..aaa4a9e 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/remove_intercept/remove_intercept.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/remove_intercept/remove_intercept.py
@@ -1,9 +1,6 @@
 # META: timeout=long
 
-import asyncio
-
 import pytest
-from webdriver.bidi.modules.script import ScriptEvaluateResultException
 
 from .. import (
     assert_before_request_sent_event,
@@ -16,9 +13,12 @@
 
 
 @pytest.mark.asyncio
-@pytest.mark.parametrize("phase", ["beforeRequestSent", "responseStarted"])
+@pytest.mark.parametrize("phase", [
+    "beforeRequestSent",
+    "responseStarted",
+])
 async def test_remove_intercept(
-    bidi_session, wait_for_event, url, setup_network_test, add_intercept, fetch, phase
+    bidi_session, wait_for_event, url, setup_network_test, add_intercept, subscribe_events, top_context, wait_for_future_safe, phase
 ):
     network_events = await setup_network_test(
         events=[
@@ -39,12 +39,20 @@
 
     on_network_event = wait_for_event(f"network.{phase}")
 
-    # Request to top_context should be blocked and throw a ScriptEvaluateResultException
-    # from the AbortController.
-    with pytest.raises(ScriptEvaluateResultException):
-        await fetch(text_url)
+    await subscribe_events(events=["browsingContext.load"], contexts=[top_context["context"]])
 
-    await on_network_event
+    browsing_context_load_events = []
+
+    async def on_browsing_context_load_event(method, data):
+        browsing_context_load_events.append(data)
+
+    remove_listener = bidi_session.add_event_listener("browsingContext.load", on_browsing_context_load_event)
+
+    # Request to top_context should be blocked.
+    # TODO(https://github.com/w3c/webdriver-bidi/issues/188): Use a timeout argument when available.
+    await bidi_session.browsing_context.navigate(context=top_context["context"], url=text_url, wait="complete")
+
+    await wait_for_future_safe(on_network_event)
 
     assert len(before_request_sent_events) == 1
 
@@ -70,7 +78,7 @@
 
     # The next request should not be blocked
     on_response_completed = wait_for_event("network.responseCompleted")
-    await fetch(text_url)
+    await bidi_session.browsing_context.navigate(context=top_context["context"], url=text_url, wait="complete")
     await on_response_completed
 
     # Assert the network events have the expected interception properties
@@ -87,6 +95,9 @@
     assert len(response_completed_events) == 1
     assert_response_event(response_completed_events[0], is_blocked=False)
 
+    assert len(browsing_context_load_events) == 0
+    remove_listener()
+
 
 @pytest.mark.asyncio
 async def test_return_value(bidi_session, add_intercept):
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/response_started/response_started.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/response_started/response_started.py
index ff011a6..41f4853 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/response_started/response_started.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/response_started/response_started.py
@@ -209,7 +209,7 @@
 
 @pytest.mark.asyncio
 async def test_www_authenticate(
-    bidi_session, new_tab, url, wait_for_event, setup_network_test
+    bidi_session, url, fetch, new_tab, wait_for_event, setup_network_test
 ):
     auth_url = url(
         f"/webdriver/tests/support/http_handlers/authentication.py?realm=testrealm"
@@ -219,11 +219,11 @@
     events = network_events[RESPONSE_STARTED_EVENT]
 
     on_response_started = wait_for_event(RESPONSE_STARTED_EVENT)
-    await bidi_session.browsing_context.navigate(
-        context=new_tab["context"],
-        url=auth_url,
-        wait="none",
-    )
+
+    # Note that here we explicitly do not navigate to the auth_url and instead
+    # simply do a fetch, because otherwise Firefox fails to cleanly cancel the
+    # authentication prompt on test teardown.
+    asyncio.ensure_future(fetch(auth_url, context=new_tab, method="GET"))
 
     await on_response_started
 
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/script/__init__.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/script/__init__.py
index 603abc8..0f62fe4 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/script/__init__.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/script/__init__.py
@@ -213,7 +213,14 @@
             }
         },
     ),
-    ("window", {"type": "window", },),
+    (
+        "window", {
+            "type": "window",
+            "value": {
+                "context": any_string,
+            }
+        },
+    ),
     ("new URL('https://example.com')", {"type": "object", },),
 ]
 
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/script/classic_interop/window_reference-expected.txt b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/script/classic_interop/window_reference-expected.txt
new file mode 100644
index 0000000..3de746d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/script/classic_interop/window_reference-expected.txt
@@ -0,0 +1,10 @@
+This is a wdspec test.
+[FAIL] test_web_window_reference_created_in_classic
+  webdriver.error.JavascriptErrorException: javascript error (500): javascript error: circular reference
+[FAIL] test_web_frame_reference_created_in_classic
+  webdriver.error.JavascriptErrorException: javascript error (500): javascript error: circular reference
+[FAIL] test_web_window_reference_created_in_bidi
+  AssertionError: assert None == 'bar'
+[FAIL] test_web_frame_reference_created_in_bidi
+  AssertionError: assert None == 'foo'
+Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/script/classic_interop/window_reference.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/script/classic_interop/window_reference.py
new file mode 100644
index 0000000..ef0b12c6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/script/classic_interop/window_reference.py
@@ -0,0 +1,124 @@
+import pytest
+
+from webdriver import WebFrame, WebWindow
+from webdriver.bidi.modules.script import ContextTarget
+
+pytestmark = pytest.mark.asyncio
+
+
+async def test_web_window_reference_created_in_classic(
+    bidi_session,
+    current_session,
+    get_test_page,
+):
+    handle = current_session.new_window(type_hint="tab")
+    current_session.window_handle = handle
+    current_session.url = get_test_page()
+
+    expected_test_value = "bar"
+    window = current_session.execute_script(
+        f"window.foo = '{expected_test_value}'; return window;"
+    )
+
+    contexts = await bidi_session.browsing_context.get_tree()
+    assert len(contexts) == 2
+
+    assert window.id == contexts[1]["context"]
+
+    result = await bidi_session.script.evaluate(
+        expression=f"window.foo",
+        target=ContextTarget(window.id),
+        await_promise=False,
+    )
+
+    assert result["value"] == expected_test_value
+
+
+async def test_web_frame_reference_created_in_classic(
+    bidi_session,
+    current_session,
+    get_test_page,
+):
+    handle = current_session.new_window(type_hint="tab")
+    current_session.window_handle = handle
+    current_session.url = get_test_page()
+
+    expected_test_value = "foo"
+    frame = current_session.execute_script(
+        f"window.frames[0].bar='{expected_test_value}'; return window.frames[0]"
+    )
+
+    contexts = await bidi_session.browsing_context.get_tree()
+    assert len(contexts) == 2
+
+    assert frame.id == contexts[1]["children"][0]["context"]
+
+    result = await bidi_session.script.evaluate(
+        expression=f"window.bar",
+        target=ContextTarget(frame.id),
+        await_promise=False,
+    )
+
+    assert result["value"] == expected_test_value
+
+
+async def test_web_window_reference_created_in_bidi(
+    bidi_session,
+    current_session,
+    get_test_page,
+    new_tab
+):
+    await bidi_session.browsing_context.navigate(
+        context=new_tab["context"],
+        url=get_test_page(),
+        wait="complete"
+    )
+
+    expected_test_value = "bar"
+    result = await bidi_session.script.evaluate(
+        expression=f"window.xyz = '{expected_test_value}'; window;",
+        target=ContextTarget(new_tab["context"]),
+        await_promise=False,
+    )
+
+    context_id = result["value"]["context"]
+
+    # Use window reference from WebDriver BiDi in WebDriver classic
+    current_session.window_handle = new_tab["context"]
+    window = WebWindow(current_session, context_id)
+    test_value = current_session.execute_script(
+        """return arguments[0].xyz""", args=(window,)
+    )
+
+    assert test_value == expected_test_value
+
+
+async def test_web_frame_reference_created_in_bidi(
+    bidi_session,
+    current_session,
+    get_test_page,
+    new_tab
+):
+    await bidi_session.browsing_context.navigate(
+        context=new_tab["context"],
+        url=get_test_page(),
+        wait="complete"
+    )
+
+    expected_test_value = "foo"
+    result = await bidi_session.script.evaluate(
+        expression=f"window.frames[0].baz='{expected_test_value}'; window.frames[0];",
+        target=ContextTarget(new_tab["context"]),
+        await_promise=False,
+    )
+
+    context_id = result["value"]["context"]
+
+    # Use window reference from WebDriver BiDi in WebDriver classic
+    current_session.window_handle = new_tab["context"]
+    window = WebFrame(current_session, context_id)
+    test_value = current_session.execute_script(
+        """return arguments[0].baz""", args=(window,)
+    )
+
+    assert test_value == expected_test_value
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/execute_async_script/objects.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/execute_async_script/objects.py
index edcf0650..2957429b 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/execute_async_script/objects.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/execute_async_script/objects.py
@@ -46,4 +46,4 @@
             }
         });
         """)
-    value = assert_error(response, "javascript error")
+    assert_error(response, "javascript error")
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/execute_script/objects.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/execute_script/objects.py
index e254fe27..6447bce 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/execute_script/objects.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/execute_script/objects.py
@@ -46,4 +46,4 @@
             }
         };
         """)
-    value = assert_error(response, "javascript error")
+    assert_error(response, "javascript error")
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures_bidi.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures_bidi.py
index a4eab79f..b42c125 100644
--- a/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures_bidi.py
+++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/support/fixtures_bidi.py
@@ -2,8 +2,9 @@
 
 from tests.support.asserts import assert_pdf
 from tests.support.image import cm_to_px, png_dimensions, ImageDifference
-from typing import Any, Mapping
+from typing import Any, Coroutine, Mapping
 
+import asyncio
 import pytest
 import pytest_asyncio
 from webdriver.bidi.error import (
@@ -12,6 +13,7 @@
     NoSuchScriptException,
 )
 from webdriver.bidi.modules.script import ContextTarget
+from webdriver.error import TimeoutException
 
 
 @pytest_asyncio.fixture
@@ -102,20 +104,37 @@
 
 
 @pytest.fixture
+def wait_for_future_safe(configuration):
+    """Wait for the given future for a given amount of time.
+    Fails gracefully if the future does not resolve within the given timeout."""
+
+    async def wait_for_future_safe(future: Coroutine, timeout: float = 2.0):
+        try:
+            await asyncio.wait_for(
+                asyncio.shield(future),
+                timeout=timeout * configuration["timeout_multiplier"],
+            )
+        except asyncio.exceptions.TimeoutError:
+            raise TimeoutException("Future did not resolve within the given timeout")
+
+    return wait_for_future_safe
+
+
+@pytest.fixture
 def current_time(bidi_session, top_context):
     """Get the current time stamp in ms from the remote end.
 
     This is required especially when tests are run on different devices like
     for Android, where it's not guaranteed that both machines are in sync.
     """
-    async def _():
+    async def current_time():
         result = await bidi_session.script.evaluate(
             expression="Date.now()",
             target=ContextTarget(top_context["context"]),
             await_promise=True)
         return result["value"]
 
-    return _
+    return current_time
 
 
 @pytest.fixture
diff --git a/third_party/blink/web_tests/external/wpt/webnn/resources/test_data/reduce_log_sum_exp.json b/third_party/blink/web_tests/external/wpt/webnn/resources/test_data/reduce_log_sum_exp.json
index 00c55ded..e5ebb2a 100644
--- a/third_party/blink/web_tests/external/wpt/webnn/resources/test_data/reduce_log_sum_exp.json
+++ b/third_party/blink/web_tests/external/wpt/webnn/resources/test_data/reduce_log_sum_exp.json
@@ -6,37 +6,37 @@
         "input": {
           "shape": [24],
           "data": [
-            66.1870735698,
-            68.69164623929768,
-            15.529598361334717,
-            65.62419160755422,
-            86.18090584091544,
-            7.382064010955736,
-            1.6365860724411263,
-            90.55726458445135,
-            86.69934561770543,
-            75.7165191675748,
-            67.0074429215978,
-            9.943717120210827,
-            25.779723516449636,
-            60.15386290165083,
-            73.63322249161153,
-            81.53375339603328,
-            64.85643136289283,
-            54.04977784193004,
-            33.380943217138224,
-            32.50357565109678,
-            61.30902295453489,
-            56.95015629977242,
-            35.37182024244998,
-            82.32090594141081
+            0.7974132976078829,
+            5.046889970229296,
+            8.520371090961714,
+            1.4063042363728728,
+            0.11882661415275164,
+            0.285854490277071,
+            1.9325640291685864,
+            3.7939957856803797,
+            2.6040233063490925,
+            4.937509735746763,
+            4.571482286709769,
+            0.7865120436262685,
+            0.21018670996660216,
+            9.063042370844672,
+            4.099809553408898,
+            4.596248815627706,
+            0.2549232349678032,
+            1.1594801326588255,
+            6.802876838759606,
+            5.23432518570901,
+            8.914905562420849,
+            9.166799240859705,
+            5.71750713886038,
+            0.3255050658627967
           ],
           "type": "float32"
         }
       },
       "expected": {
         "name": "output",
-        "data": 90.59076690673828,
+        "data": 10.39477825164795,
         "type": "float32"
       }
     },
@@ -46,37 +46,37 @@
         "input": {
           "shape": [24],
           "data": [
-            -38.42346567796924,
-            -16.384904409140333,
-            -46.629634356968474,
-            -45.81843819006337,
-            -95.61458783306942,
-            -90.64578309257007,
-            -6.279945972307587,
-            -24.546370226192565,
-            -82.15882762280646,
-            -76.8746037170462,
-            -44.181029848800904,
-            -97.35032678020788,
-            -75.52388056554437,
-            -97.984203822517,
-            -97.46591756173142,
-            -85.89237745468532,
-            -27.34196668605746,
-            -76.80293743058324,
-            -93.91905595799426,
-            -25.62251637659385,
-            -36.49762778486478,
-            -96.2163796024006,
-            -33.56049055386055,
-            -94.06451375473459
+            -4.025670276125137,
+            -9.44434807349057,
+            -3.1193981742372,
+            -5.943697868896303,
+            -0.37018045102283637,
+            -4.3971262954406605,
+            -6.6059682563332744,
+            -5.534277354031625,
+            -7.361471172291552,
+            -1.9987547534811796,
+            -9.093968158437377,
+            -8.693618799659165,
+            -8.416788434713155,
+            -1.010741070662755,
+            -9.814584506221344,
+            -9.725259665431539,
+            -9.157071010493805,
+            -0.0016988189527857855,
+            -9.963414768875285,
+            -5.991659641614526,
+            -6.180599892028498,
+            -1.2336505614624649,
+            -0.44234340543470196,
+            -6.990072309054243
           ],
           "type": "float32"
         }
       },
       "expected": {
         "name": "output",
-        "data": -6.279904842376709,
+        "data": 1.1666961908340454,
         "type": "float32"
       }
     },
@@ -86,37 +86,37 @@
         "input": {
           "shape": [24],
           "data": [
-            34,
-            45,
+            1,
             5,
-            45,
-            97,
-            11,
-            83,
-            84,
-            17,
-            17,
-            11,
-            20,
-            59,
-            97,
-            44,
-            90,
-            80,
-            59,
-            86,
-            91,
-            33,
-            84,
-            27,
-            27
+            7,
+            5,
+            7,
+            5,
+            4,
+            2,
+            1,
+            5,
+            8,
+            2,
+            4,
+            1,
+            4,
+            5,
+            4,
+            8,
+            6,
+            2,
+            7,
+            7,
+            8,
+            5
           ],
           "type": "float32"
         }
       },
       "expected": {
         "name": "output",
-        "data": 97.69485473632812,
+        "data": 9.607237815856934,
         "type": "float32"
       }
     },
@@ -126,37 +126,37 @@
         "input": {
           "shape": [24],
           "data": [
-            -91,
-            -77,
+            -6,
+            -3,
+            -5,
+            -1,
+            -9,
+            -5,
+            -1,
             -2,
-            -34,
-            -77,
-            -38,
-            -92,
-            -45,
-            -54,
-            -11,
-            -64,
-            -76,
-            -53,
-            -19,
-            -41,
-            -83,
-            -21,
-            -34,
-            -73,
-            -33,
             -10,
-            -71,
-            -82,
-            -26
+            -1,
+            -5,
+            -7,
+            -7,
+            -3,
+            -10,
+            -10,
+            -8,
+            -6,
+            -2,
+            -6,
+            -1,
+            -9,
+            -5,
+            -2
           ],
           "type": "float32"
         }
       },
       "expected": {
         "name": "output",
-        "data": -1.999541163444519,
+        "data": 0.7001367211341858,
         "type": "float32"
       }
     },
@@ -166,37 +166,37 @@
         "input": {
           "shape": [4, 6],
           "data": [
-            66.1870735698,
-            68.69164623929768,
-            15.529598361334717,
-            65.62419160755422,
-            86.18090584091544,
-            7.382064010955736,
-            1.6365860724411263,
-            90.55726458445135,
-            86.69934561770543,
-            75.7165191675748,
-            67.0074429215978,
-            9.943717120210827,
-            25.779723516449636,
-            60.15386290165083,
-            73.63322249161153,
-            81.53375339603328,
-            64.85643136289283,
-            54.04977784193004,
-            33.380943217138224,
-            32.50357565109678,
-            61.30902295453489,
-            56.95015629977242,
-            35.37182024244998,
-            82.32090594141081
+            0.7974132976078829,
+            5.046889970229296,
+            8.520371090961714,
+            1.4063042363728728,
+            0.11882661415275164,
+            0.285854490277071,
+            1.9325640291685864,
+            3.7939957856803797,
+            2.6040233063490925,
+            4.937509735746763,
+            4.571482286709769,
+            0.7865120436262685,
+            0.21018670996660216,
+            9.063042370844672,
+            4.099809553408898,
+            4.596248815627706,
+            0.2549232349678032,
+            1.1594801326588255,
+            6.802876838759606,
+            5.23432518570901,
+            8.914905562420849,
+            9.166799240859705,
+            5.71750713886038,
+            0.3255050658627967
           ],
           "type": "float32"
         }
       },
       "expected": {
         "name": "output",
-        "data": 90.59076690673828,
+        "data": 10.39477825164795,
         "type": "float32"
       }
     },
@@ -206,37 +206,37 @@
         "input": {
           "shape": [2, 3, 4],
           "data": [
-            66.1870735698,
-            68.69164623929768,
-            15.529598361334717,
-            65.62419160755422,
-            86.18090584091544,
-            7.382064010955736,
-            1.6365860724411263,
-            90.55726458445135,
-            86.69934561770543,
-            75.7165191675748,
-            67.0074429215978,
-            9.943717120210827,
-            25.779723516449636,
-            60.15386290165083,
-            73.63322249161153,
-            81.53375339603328,
-            64.85643136289283,
-            54.04977784193004,
-            33.380943217138224,
-            32.50357565109678,
-            61.30902295453489,
-            56.95015629977242,
-            35.37182024244998,
-            82.32090594141081
+            0.7974132976078829,
+            5.046889970229296,
+            8.520371090961714,
+            1.4063042363728728,
+            0.11882661415275164,
+            0.285854490277071,
+            1.9325640291685864,
+            3.7939957856803797,
+            2.6040233063490925,
+            4.937509735746763,
+            4.571482286709769,
+            0.7865120436262685,
+            0.21018670996660216,
+            9.063042370844672,
+            4.099809553408898,
+            4.596248815627706,
+            0.2549232349678032,
+            1.1594801326588255,
+            6.802876838759606,
+            5.23432518570901,
+            8.914905562420849,
+            9.166799240859705,
+            5.71750713886038,
+            0.3255050658627967
           ],
           "type": "float32"
         }
       },
       "expected": {
         "name": "output",
-        "data": 90.59076690673828,
+        "data": 10.39477825164795,
         "type": "float32"
       }
     },
@@ -246,37 +246,37 @@
         "input": {
           "shape": [2, 2, 2, 3],
           "data": [
-            66.1870735698,
-            68.69164623929768,
-            15.529598361334717,
-            65.62419160755422,
-            86.18090584091544,
-            7.382064010955736,
-            1.6365860724411263,
-            90.55726458445135,
-            86.69934561770543,
-            75.7165191675748,
-            67.0074429215978,
-            9.943717120210827,
-            25.779723516449636,
-            60.15386290165083,
-            73.63322249161153,
-            81.53375339603328,
-            64.85643136289283,
-            54.04977784193004,
-            33.380943217138224,
-            32.50357565109678,
-            61.30902295453489,
-            56.95015629977242,
-            35.37182024244998,
-            82.32090594141081
+            0.7974132976078829,
+            5.046889970229296,
+            8.520371090961714,
+            1.4063042363728728,
+            0.11882661415275164,
+            0.285854490277071,
+            1.9325640291685864,
+            3.7939957856803797,
+            2.6040233063490925,
+            4.937509735746763,
+            4.571482286709769,
+            0.7865120436262685,
+            0.21018670996660216,
+            9.063042370844672,
+            4.099809553408898,
+            4.596248815627706,
+            0.2549232349678032,
+            1.1594801326588255,
+            6.802876838759606,
+            5.23432518570901,
+            8.914905562420849,
+            9.166799240859705,
+            5.71750713886038,
+            0.3255050658627967
           ],
           "type": "float32"
         }
       },
       "expected": {
         "name": "output",
-        "data": 90.59076690673828,
+        "data": 10.39477825164795,
         "type": "float32"
       }
     },
@@ -286,37 +286,37 @@
         "input": {
           "shape": [2, 1, 4, 1, 3],
           "data": [
-            66.1870735698,
-            68.69164623929768,
-            15.529598361334717,
-            65.62419160755422,
-            86.18090584091544,
-            7.382064010955736,
-            1.6365860724411263,
-            90.55726458445135,
-            86.69934561770543,
-            75.7165191675748,
-            67.0074429215978,
-            9.943717120210827,
-            25.779723516449636,
-            60.15386290165083,
-            73.63322249161153,
-            81.53375339603328,
-            64.85643136289283,
-            54.04977784193004,
-            33.380943217138224,
-            32.50357565109678,
-            61.30902295453489,
-            56.95015629977242,
-            35.37182024244998,
-            82.32090594141081
+            0.7974132976078829,
+            5.046889970229296,
+            8.520371090961714,
+            1.4063042363728728,
+            0.11882661415275164,
+            0.285854490277071,
+            1.9325640291685864,
+            3.7939957856803797,
+            2.6040233063490925,
+            4.937509735746763,
+            4.571482286709769,
+            0.7865120436262685,
+            0.21018670996660216,
+            9.063042370844672,
+            4.099809553408898,
+            4.596248815627706,
+            0.2549232349678032,
+            1.1594801326588255,
+            6.802876838759606,
+            5.23432518570901,
+            8.914905562420849,
+            9.166799240859705,
+            5.71750713886038,
+            0.3255050658627967
           ],
           "type": "float32"
         }
       },
       "expected": {
         "name": "output",
-        "data": 90.59076690673828,
+        "data": 10.39477825164795,
         "type": "float32"
       }
     },
@@ -326,30 +326,30 @@
         "input": {
           "shape": [2, 3, 4],
           "data": [
-            66.1870735698,
-            68.69164623929768,
-            15.529598361334717,
-            65.62419160755422,
-            86.18090584091544,
-            7.382064010955736,
-            1.6365860724411263,
-            90.55726458445135,
-            86.69934561770543,
-            75.7165191675748,
-            67.0074429215978,
-            9.943717120210827,
-            25.779723516449636,
-            60.15386290165083,
-            73.63322249161153,
-            81.53375339603328,
-            64.85643136289283,
-            54.04977784193004,
-            33.380943217138224,
-            32.50357565109678,
-            61.30902295453489,
-            56.95015629977242,
-            35.37182024244998,
-            82.32090594141081
+            0.7974132976078829,
+            5.046889970229296,
+            8.520371090961714,
+            1.4063042363728728,
+            0.11882661415275164,
+            0.285854490277071,
+            1.9325640291685864,
+            3.7939957856803797,
+            2.6040233063490925,
+            4.937509735746763,
+            4.571482286709769,
+            0.7865120436262685,
+            0.21018670996660216,
+            9.063042370844672,
+            4.099809553408898,
+            4.596248815627706,
+            0.2549232349678032,
+            1.1594801326588255,
+            6.802876838759606,
+            5.23432518570901,
+            8.914905562420849,
+            9.166799240859705,
+            5.71750713886038,
+            0.3255050658627967
           ],
           "type": "float32"
         }
@@ -361,12 +361,12 @@
         "name": "output",
         "shape": [2, 3],
         "data": [
-          68.81230926513672,
-          90.56975555419922,
-          86.6993637084961,
-          81.53412628173828,
-          64.85645294189453,
-          82.32090759277344
+          8.55212688446045,
+          3.985233783721924,
+          5.52872896194458,
+          9.081488609313965,
+          6.996237754821777,
+          9.759706497192383
         ],
         "type": "float32"
       }
@@ -377,30 +377,30 @@
         "input": {
           "shape": [2, 2, 2, 3],
           "data": [
-            66.1870735698,
-            68.69164623929768,
-            15.529598361334717,
-            65.62419160755422,
-            86.18090584091544,
-            7.382064010955736,
-            1.6365860724411263,
-            90.55726458445135,
-            86.69934561770543,
-            75.7165191675748,
-            67.0074429215978,
-            9.943717120210827,
-            25.779723516449636,
-            60.15386290165083,
-            73.63322249161153,
-            81.53375339603328,
-            64.85643136289283,
-            54.04977784193004,
-            33.380943217138224,
-            32.50357565109678,
-            61.30902295453489,
-            56.95015629977242,
-            35.37182024244998,
-            82.32090594141081
+            0.7974132976078829,
+            5.046889970229296,
+            8.520371090961714,
+            1.4063042363728728,
+            0.11882661415275164,
+            0.285854490277071,
+            1.9325640291685864,
+            3.7939957856803797,
+            2.6040233063490925,
+            4.937509735746763,
+            4.571482286709769,
+            0.7865120436262685,
+            0.21018670996660216,
+            9.063042370844672,
+            4.099809553408898,
+            4.596248815627706,
+            0.2549232349678032,
+            1.1594801326588255,
+            6.802876838759606,
+            5.23432518570901,
+            8.914905562420849,
+            9.166799240859705,
+            5.71750713886038,
+            0.3255050658627967
           ],
           "type": "float32"
         }
@@ -412,12 +412,12 @@
         "name": "output",
         "shape": [2, 3],
         "data": [
-          81.53375244140625,
-          86.180908203125,
-          73.63322448730469,
-          75.71652221679688,
-          90.55726623535156,
-          86.7118148803711
+          4.66951847076416,
+          9.08117961883545,
+          8.533217430114746,
+          9.270560264587402,
+          6.450263977050781,
+          8.917200088500977
         ],
         "type": "float32"
       }
@@ -428,30 +428,30 @@
         "input": {
           "shape": [2, 3, 4],
           "data": [
-            66.1870735698,
-            68.69164623929768,
-            15.529598361334717,
-            65.62419160755422,
-            86.18090584091544,
-            7.382064010955736,
-            1.6365860724411263,
-            90.55726458445135,
-            86.69934561770543,
-            75.7165191675748,
-            67.0074429215978,
-            9.943717120210827,
-            25.779723516449636,
-            60.15386290165083,
-            73.63322249161153,
-            81.53375339603328,
-            64.85643136289283,
-            54.04977784193004,
-            33.380943217138224,
-            32.50357565109678,
-            61.30902295453489,
-            56.95015629977242,
-            35.37182024244998,
-            82.32090594141081
+            0.7974132976078829,
+            5.046889970229296,
+            8.520371090961714,
+            1.4063042363728728,
+            0.11882661415275164,
+            0.285854490277071,
+            1.9325640291685864,
+            3.7939957856803797,
+            2.6040233063490925,
+            4.937509735746763,
+            4.571482286709769,
+            0.7865120436262685,
+            0.21018670996660216,
+            9.063042370844672,
+            4.099809553408898,
+            4.596248815627706,
+            0.2549232349678032,
+            1.1594801326588255,
+            6.802876838759606,
+            5.23432518570901,
+            8.914905562420849,
+            9.166799240859705,
+            5.71750713886038,
+            0.3255050658627967
           ],
           "type": "float32"
         }
@@ -461,7 +461,7 @@
       },
       "expected": {
         "name": "output",
-        "data": 90.59076690673828,
+        "data": 10.39477825164795,
         "type": "float32"
       }
     },
@@ -471,30 +471,30 @@
         "input": {
           "shape": [2, 3, 4],
           "data": [
-            66.1870735698,
-            68.69164623929768,
-            15.529598361334717,
-            65.62419160755422,
-            86.18090584091544,
-            7.382064010955736,
-            1.6365860724411263,
-            90.55726458445135,
-            86.69934561770543,
-            75.7165191675748,
-            67.0074429215978,
-            9.943717120210827,
-            25.779723516449636,
-            60.15386290165083,
-            73.63322249161153,
-            81.53375339603328,
-            64.85643136289283,
-            54.04977784193004,
-            33.380943217138224,
-            32.50357565109678,
-            61.30902295453489,
-            56.95015629977242,
-            35.37182024244998,
-            82.32090594141081
+            0.7974132976078829,
+            5.046889970229296,
+            8.520371090961714,
+            1.4063042363728728,
+            0.11882661415275164,
+            0.285854490277071,
+            1.9325640291685864,
+            3.7939957856803797,
+            2.6040233063490925,
+            4.937509735746763,
+            4.571482286709769,
+            0.7865120436262685,
+            0.21018670996660216,
+            9.063042370844672,
+            4.099809553408898,
+            4.596248815627706,
+            0.2549232349678032,
+            1.1594801326588255,
+            6.802876838759606,
+            5.23432518570901,
+            8.914905562420849,
+            9.166799240859705,
+            5.71750713886038,
+            0.3255050658627967
           ],
           "type": "float32"
         }
@@ -506,7 +506,7 @@
         "name": "output",
         "shape": [1, 1, 1],
         "data": [
-          90.59076690673828
+          10.39477825164795
         ],
         "type": "float32"
       }
@@ -517,30 +517,30 @@
         "input": {
           "shape": [2, 2, 2, 3],
           "data": [
-            66.1870735698,
-            68.69164623929768,
-            15.529598361334717,
-            65.62419160755422,
-            86.18090584091544,
-            7.382064010955736,
-            1.6365860724411263,
-            90.55726458445135,
-            86.69934561770543,
-            75.7165191675748,
-            67.0074429215978,
-            9.943717120210827,
-            25.779723516449636,
-            60.15386290165083,
-            73.63322249161153,
-            81.53375339603328,
-            64.85643136289283,
-            54.04977784193004,
-            33.380943217138224,
-            32.50357565109678,
-            61.30902295453489,
-            56.95015629977242,
-            35.37182024244998,
-            82.32090594141081
+            0.7974132976078829,
+            5.046889970229296,
+            8.520371090961714,
+            1.4063042363728728,
+            0.11882661415275164,
+            0.285854490277071,
+            1.9325640291685864,
+            3.7939957856803797,
+            2.6040233063490925,
+            4.937509735746763,
+            4.571482286709769,
+            0.7865120436262685,
+            0.21018670996660216,
+            9.063042370844672,
+            4.099809553408898,
+            4.596248815627706,
+            0.2549232349678032,
+            1.1594801326588255,
+            6.802876838759606,
+            5.23432518570901,
+            8.914905562420849,
+            9.166799240859705,
+            5.71750713886038,
+            0.3255050658627967
           ],
           "type": "float32"
         }
@@ -550,7 +550,7 @@
       },
       "expected": {
         "name": "output",
-        "data": 90.59076690673828,
+        "data": 10.39477825164795,
         "type": "float32"
       }
     },
@@ -560,30 +560,30 @@
         "input": {
           "shape": [2, 2, 2, 3],
           "data": [
-            66.1870735698,
-            68.69164623929768,
-            15.529598361334717,
-            65.62419160755422,
-            86.18090584091544,
-            7.382064010955736,
-            1.6365860724411263,
-            90.55726458445135,
-            86.69934561770543,
-            75.7165191675748,
-            67.0074429215978,
-            9.943717120210827,
-            25.779723516449636,
-            60.15386290165083,
-            73.63322249161153,
-            81.53375339603328,
-            64.85643136289283,
-            54.04977784193004,
-            33.380943217138224,
-            32.50357565109678,
-            61.30902295453489,
-            56.95015629977242,
-            35.37182024244998,
-            82.32090594141081
+            0.7974132976078829,
+            5.046889970229296,
+            8.520371090961714,
+            1.4063042363728728,
+            0.11882661415275164,
+            0.285854490277071,
+            1.9325640291685864,
+            3.7939957856803797,
+            2.6040233063490925,
+            4.937509735746763,
+            4.571482286709769,
+            0.7865120436262685,
+            0.21018670996660216,
+            9.063042370844672,
+            4.099809553408898,
+            4.596248815627706,
+            0.2549232349678032,
+            1.1594801326588255,
+            6.802876838759606,
+            5.23432518570901,
+            8.914905562420849,
+            9.166799240859705,
+            5.71750713886038,
+            0.3255050658627967
           ],
           "type": "float32"
         }
@@ -595,7 +595,7 @@
         "name": "output",
         "shape": [1, 1, 1, 1],
         "data": [
-          90.59076690673828
+          10.39477825164795
         ],
         "type": "float32"
       }
@@ -606,30 +606,30 @@
         "input": {
           "shape": [2, 2, 2, 3],
           "data": [
-            66.1870735698,
-            68.69164623929768,
-            15.529598361334717,
-            65.62419160755422,
-            86.18090584091544,
-            7.382064010955736,
-            1.6365860724411263,
-            90.55726458445135,
-            86.69934561770543,
-            75.7165191675748,
-            67.0074429215978,
-            9.943717120210827,
-            25.779723516449636,
-            60.15386290165083,
-            73.63322249161153,
-            81.53375339603328,
-            64.85643136289283,
-            54.04977784193004,
-            33.380943217138224,
-            32.50357565109678,
-            61.30902295453489,
-            56.95015629977242,
-            35.37182024244998,
-            82.32090594141081
+            0.7974132976078829,
+            5.046889970229296,
+            8.520371090961714,
+            1.4063042363728728,
+            0.11882661415275164,
+            0.285854490277071,
+            1.9325640291685864,
+            3.7939957856803797,
+            2.6040233063490925,
+            4.937509735746763,
+            4.571482286709769,
+            0.7865120436262685,
+            0.21018670996660216,
+            9.063042370844672,
+            4.099809553408898,
+            4.596248815627706,
+            0.2549232349678032,
+            1.1594801326588255,
+            6.802876838759606,
+            5.23432518570901,
+            8.914905562420849,
+            9.166799240859705,
+            5.71750713886038,
+            0.3255050658627967
           ],
           "type": "float32"
         }
@@ -641,10 +641,10 @@
         "name": "output",
         "shape": [2, 2],
         "data": [
-          90.57815551757812,
-          86.18093872070312,
-          73.63323211669922,
-          82.69600677490234
+          8.563796997070312,
+          5.500619411468506,
+          9.753945350646973,
+          9.20864486694336
         ],
         "type": "float32"
       }
@@ -655,30 +655,30 @@
         "input": {
           "shape": [2, 2, 2, 3],
           "data": [
-            66.1870735698,
-            68.69164623929768,
-            15.529598361334717,
-            65.62419160755422,
-            86.18090584091544,
-            7.382064010955736,
-            1.6365860724411263,
-            90.55726458445135,
-            86.69934561770543,
-            75.7165191675748,
-            67.0074429215978,
-            9.943717120210827,
-            25.779723516449636,
-            60.15386290165083,
-            73.63322249161153,
-            81.53375339603328,
-            64.85643136289283,
-            54.04977784193004,
-            33.380943217138224,
-            32.50357565109678,
-            61.30902295453489,
-            56.95015629977242,
-            35.37182024244998,
-            82.32090594141081
+            0.7974132976078829,
+            5.046889970229296,
+            8.520371090961714,
+            1.4063042363728728,
+            0.11882661415275164,
+            0.285854490277071,
+            1.9325640291685864,
+            3.7939957856803797,
+            2.6040233063490925,
+            4.937509735746763,
+            4.571482286709769,
+            0.7865120436262685,
+            0.21018670996660216,
+            9.063042370844672,
+            4.099809553408898,
+            4.596248815627706,
+            0.2549232349678032,
+            1.1594801326588255,
+            6.802876838759606,
+            5.23432518570901,
+            8.914905562420849,
+            9.166799240859705,
+            5.71750713886038,
+            0.3255050658627967
           ],
           "type": "float32"
         }
@@ -690,10 +690,10 @@
         "name": "output",
         "shape": [1, 2, 2, 1],
         "data": [
-          90.57815551757812,
-          86.18093872070312,
-          73.63323211669922,
-          82.69600677490234
+          8.563796997070312,
+          5.500619411468506,
+          9.753945350646973,
+          9.20864486694336
         ],
         "type": "float32"
       }
diff --git a/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any-expected.txt b/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any-expected.txt
index 399b157..d131353 100644
--- a/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any-expected.txt
@@ -5,11 +5,5 @@
   assert_equals: expected (object) null but got (undefined) undefined
 [FAIL] WebTransport client should be able to modify existing sendOrder after stream creation
   assert_equals: expected (number) 3 but got (undefined) undefined
-[FAIL] WebTransport sendorder should not starve a stream without sendorder
-  assert_equals: expected (number) 1 but got (undefined) undefined
-[FAIL] WebTransport sendorder should starve a lower priority stream
-  assert_equals: expected (number) 1 but got (undefined) undefined
-[FAIL] WebTransport sendorder should starve a lower priority stream, variant 2
-  assert_equals: expected (number) 1 but got (undefined) undefined
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any.js b/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any.js
index 40c6e9b..96944fb 100644
--- a/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any.js
+++ b/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any.js
@@ -55,197 +55,3 @@
   // Note: this doesn't verify the underlying stack actually changes priority, just the API
   // for controlling sendOrder
 }, 'WebTransport client should be able to modify existing sendOrder after stream creation');
-
-promise_test(async t => {
-  // Establish a WebTransport session.
-  const id = token();
-  const wt = new WebTransport(webtransport_url(`sendorder.py?token=${id}`));
-  await wt.ready;
-  const bytes_low = new Uint8Array(65536).fill('1');
-  const bytes_unordered = new Uint8Array(65536).fill('0');
-
-  // Create a bidirectional stream without sendOrder
-  const {writable: unordered_writable} = await wt.createBidirectionalStream();
-
-  // Create a bidirectional stream with sendOrder
-  const {writable: low_writable} = await wt.createBidirectionalStream({sendOrder: 1});
-
-  // Write a large block to the lower-priority stream, async
-  const low_writer = low_writable.getWriter();
-  assert_equals(low_writable.sendOrder, 1);
-
-  // Write a large block to the lower-priority stream, async
-  const unordered_writer = unordered_writable.getWriter();
-
-  // enough bytes written to ensure we'll fill the congestion window even
-  // on a local server
-  // this should be enough to require queuing
-  for (let i = 0; i < 30; i++) {
-    low_writer.write(bytes_low).catch(() => {});
-  }
-  for (let i = 0; i < 30; i++) {
-    unordered_writer.write(bytes_unordered).catch(() => {});
-  }
-
-  await Promise.all([low_writer.close(), unordered_writer.close()]);
-
-  // Read the data - first byte for each data reception
-  const reply = await query(id);
-
-  // If unordered data avoids starvation, some of it will come in before the end
-  // of the sendordered data.
-  // first packet normally will be '1', since that would likely
-  // start being sent before unordered data starts queuing, but that's
-  // not required by the spec, just that the unordered stream isn't starved
-  //assert_equals(reply[0], 1);
-  // Scan for the first 0 after we get a 1, then verify that more 1's come in after the first 0
-  let ok = false;
-  for (i = 0; i < reply.length; i++) {
-    if (reply[i] == 1) {
-      // scan for a 0
-      for (; i < reply.length; i++) {
-        if (reply[i] == 0) {
-          for (; i < reply.length; i++) {
-            if (reply[i] == 1) {
-              // some unordered data came in before sendordered data, we're good
-              ok = true;
-              break;
-            }
-          }
-          break;
-        }
-      }
-      break;
-    }
-  }
-  assert_true(ok);
-}, 'WebTransport sendorder should not starve a stream without sendorder');
-
-promise_test(async t => {
-  // Establish a WebTransport session.
-  const id = token();
-  const wt = new WebTransport(webtransport_url(`sendorder.py?token=${id}`));
-  await wt.ready;
-  const bytes_low = new Uint8Array(65536).fill('1');
-  const bytes_unordered = new Uint8Array(65536).fill('0');
-  const bytes_high = new Uint8Array(65536).fill('2');
-
-  // Create a bidirectional stream without sendOrder
-  const {writable: unordered_writable} = await wt.createBidirectionalStream();
-
-  // Create a bidirectional stream with sendOrder
-  const {writable: low_writable} = await wt.createBidirectionalStream({sendOrder: 1});
-
-  // Create a second bidirectional stream with higher sendOrder
-  const {writable: high_writable} = await wt.createBidirectionalStream({sendOrder: 2});
-
-  // Write a large block to the lower-priority stream, async
-  const unordered_writer = unordered_writable.getWriter();
-
-  // Write a large block to the lower-priority stream, async
-  const low_writer = low_writable.getWriter();
-  assert_equals(low_writable.sendOrder, 1);
-  const high_writer = high_writable.getWriter();
-  assert_equals(high_writable.sendOrder, 2);
-
-  // enough bytes written to ensure we'll fill the congestion window even
-  // on a local server
-  // this should be enough to require queuing
-  for (let i = 0; i < 30; i++) {
-    unordered_writer.write(bytes_unordered).catch(() => {});
-  }
-  for (let i = 0; i < 30; i++) {
-    low_writer.write(bytes_low).catch(() => {});
-  }
-  // these should jump the queue and get sent before the low-priority data finishes
-  for (let i = 0; i < 30; i++) {
-    high_writer.write(bytes_high).catch(() => {});
-  }
-
-  await Promise.all([low_writer.close(), unordered_writer.close(), high_writer.close()]);
-
-  // Read the data - first byte for each data reception
-  const reply = await query(id);
-
-  // If high priority data gets prioritized, it won't be last received.  If
-  // it isn't prioritized, it will likely come in after all the
-  // low-priority data.  The first packet normally will be '0' (unordered),
-  // since that would likely start being sent before low_priority data
-  // shows up in the queue (and then they'll round-robin until
-  // high-priority data gets queued). Some low-priority data will likely
-  // start coming in before the high priority data gets queued; after high
-  // priority data is queued it should jump ahead of the low-priority data
-  // (and interleave with unordered).  Some low-priority data may
-  // interleave with high-priority data, since it doesn't get queued all at
-  // once.
-  assert_true(reply[reply.length-1] != 2);
-}, 'WebTransport sendorder should starve a lower priority stream');
-
-promise_test(async t => {
-  // Establish a WebTransport session.
-  const id = token();
-  const wt = new WebTransport(webtransport_url(`sendorder.py?token=${id}`));
-  await wt.ready;
-  const bytes_low = new Uint8Array(65536).fill('1');
-  const bytes_unordered = new Uint8Array(65536).fill('0');
-  const bytes_high = new Uint8Array(65536).fill('2');
-
-  // Create a bidirectional stream without sendOrder
-  const {writable: unordered_writable} = await wt.createBidirectionalStream();
-
-  // Create a bidirectional stream with sendOrder
-  const {writable: low_writable} = await wt.createBidirectionalStream({sendOrder: 1});
-
-  // Create a second bidirectional stream with higher sendOrder
-  const {writable: high_writable} = await wt.createBidirectionalStream({sendOrder: 2});
-
-  // Write a large block to the lower-priority stream, async
-  const unordered_writer = unordered_writable.getWriter();
-
-  // Write a large block to the lower-priority stream, async
-  const low_writer = low_writable.getWriter();
-  assert_equals(low_writable.sendOrder, 1);
-  const high_writer = high_writable.getWriter();
-  assert_equals(high_writable.sendOrder, 2);
-
-  // enough bytes written to ensure we'll fill the congestion window even
-  // on a local server
-  // this should be enough to require queuing
-  for (let i = 0; i < 30; i++) {
-    unordered_writer.write(bytes_unordered).catch(() => {});
-  }
-  // Alternate version where high-priority data should always come in
-  // before low-priority, assuming we've saturated the output queue and can
-  // feed data in faster than it goes through.
-  for (let i = 0; i < 30; i++) {
-    high_writer.write(bytes_high).catch(() => {});
-  }
-  for (let i = 0; i < 30; i++) {
-    low_writer.write(bytes_low).catch(() => {});
-  }
-
-  await Promise.all([low_writer.close(), unordered_writer.close(), high_writer.close()]);
-
-  // Read the data - first byte for each data reception
-  const reply = await query(id);
-
-  // Scan for the last 2, and verify there are no 1's before it
-  let ok = true;
-  for (i = 0; i < reply.length; i++) {
-    if (reply[i] == 1) {
-      // scan for a 2
-      for (; i < reply.length; i++) {
-        if (reply[i] == 2) {
-          // priority 1 data should never jump in front of priority 2
-          ok = false;
-          break;
-        }
-      }
-      break;
-    }
-  }
-  assert_true(ok);
-}, 'WebTransport sendorder should starve a lower priority stream, variant 2');
-
-
-// XXX add tests for unordered vs ordered
diff --git a/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any.serviceworker-expected.txt b/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any.serviceworker-expected.txt
index 399b157..d131353 100644
--- a/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any.serviceworker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any.serviceworker-expected.txt
@@ -5,11 +5,5 @@
   assert_equals: expected (object) null but got (undefined) undefined
 [FAIL] WebTransport client should be able to modify existing sendOrder after stream creation
   assert_equals: expected (number) 3 but got (undefined) undefined
-[FAIL] WebTransport sendorder should not starve a stream without sendorder
-  assert_equals: expected (number) 1 but got (undefined) undefined
-[FAIL] WebTransport sendorder should starve a lower priority stream
-  assert_equals: expected (number) 1 but got (undefined) undefined
-[FAIL] WebTransport sendorder should starve a lower priority stream, variant 2
-  assert_equals: expected (number) 1 but got (undefined) undefined
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any.sharedworker-expected.txt b/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any.sharedworker-expected.txt
index 399b157..d131353 100644
--- a/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any.sharedworker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any.sharedworker-expected.txt
@@ -5,11 +5,5 @@
   assert_equals: expected (object) null but got (undefined) undefined
 [FAIL] WebTransport client should be able to modify existing sendOrder after stream creation
   assert_equals: expected (number) 3 but got (undefined) undefined
-[FAIL] WebTransport sendorder should not starve a stream without sendorder
-  assert_equals: expected (number) 1 but got (undefined) undefined
-[FAIL] WebTransport sendorder should starve a lower priority stream
-  assert_equals: expected (number) 1 but got (undefined) undefined
-[FAIL] WebTransport sendorder should starve a lower priority stream, variant 2
-  assert_equals: expected (number) 1 but got (undefined) undefined
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any.worker-expected.txt
index 399b157..d131353 100644
--- a/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any.worker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/webtransport/sendorder.https.any.worker-expected.txt
@@ -5,11 +5,5 @@
   assert_equals: expected (object) null but got (undefined) undefined
 [FAIL] WebTransport client should be able to modify existing sendOrder after stream creation
   assert_equals: expected (number) 3 but got (undefined) undefined
-[FAIL] WebTransport sendorder should not starve a stream without sendorder
-  assert_equals: expected (number) 1 but got (undefined) undefined
-[FAIL] WebTransport sendorder should starve a lower priority stream
-  assert_equals: expected (number) 1 but got (undefined) undefined
-[FAIL] WebTransport sendorder should starve a lower priority stream, variant 2
-  assert_equals: expected (number) 1 but got (undefined) undefined
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/http/tests/devtools/elements/elements-tab-stops-expected.txt b/third_party/blink/web_tests/http/tests/devtools/elements/elements-tab-stops-expected.txt
index 27e02de..295126533 100644
--- a/third_party/blink/web_tests/http/tests/devtools/elements/elements-tab-stops-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/elements/elements-tab-stops-expected.txt
@@ -2,7 +2,7 @@
 
 DIV#tab-Styles:Styles
 DIV:More tabs
-INPUT:Filter Styles
+DIV:Filter Styles
 BUTTON:Toggle Element State
 BUTTON:Element Classes
 BUTTON:New Style Rule
@@ -33,6 +33,6 @@
 BUTTON:New Style Rule
 BUTTON:Element Classes
 BUTTON:Toggle Element State
-INPUT:Filter Styles
+DIV:Filter Styles
 DIV:More tabs
 
diff --git a/third_party/blink/web_tests/images/resources/avif/small-with-gainmap-iso.avif b/third_party/blink/web_tests/images/resources/avif/small-with-gainmap-iso.avif
index 98aeca3..ccd2b63 100644
--- a/third_party/blink/web_tests/images/resources/avif/small-with-gainmap-iso.avif
+++ b/third_party/blink/web_tests/images/resources/avif/small-with-gainmap-iso.avif
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/css/css-contain/content-visibility/content-visibility-svg-text-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/css/css-contain/content-visibility/content-visibility-svg-text-expected.txt
new file mode 100644
index 0000000..2e926e0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/css/css-contain/content-visibility/content-visibility-svg-text-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+[PASS] getComputedTextLength() should return nonzero values in a c-v:hidden subtree.
+[FAIL] getCharNumAtPosition() should return nonzero values in a c-v:hidden subtree.
+  Failed to execute 'getCharNumAtPosition' on 'SVGTextContentElement': parameter 1 is not of type 'SVGPoint'.
+[PASS] getNumberOfChars() should return nonzero values in a c-v:hidden subtree.
+[FAIL] getCTM() should return nonzero values in a c-v:hidden subtree.
+  assert_equals: a expected 2 but got 1
+[FAIL] getScreenCTM() should return nonzero values in a c-v:hidden subtree.
+  assert_equals: a expected 2 but got 1
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/editing/run/delete_7001-last-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/editing/run/delete_7001-last-expected.txt
new file mode 100644
index 0000000..5c0586a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/editing/run/delete_7001-last-expected.txt
@@ -0,0 +1,610 @@
+This is a testharness.js-based test.
+Found 593 tests; 580 PASS, 13 FAIL, 0 TIMEOUT, 0 NOTRUN.
+[PASS] [["delete",""]] "<p contenteditable=false><span contenteditable=true>[abc]</span></p>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<p contenteditable=false><span contenteditable=true>[abc]</span></p>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<p contenteditable=false><span contenteditable=true>[abc]</span></p>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div><div>{}<br></div></div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div><div>{}<br></div></div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div><div>{}<br></div></div>" compare innerHTML
+[PASS] [["delete",""]] "<div><div>{}<br></div></div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div><div>{}<br></div></div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div><div>{}<br></div></div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div><div>{}<br></div></div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div><div>{}<br></div></div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div><div>{}<br></div></div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div><div contenteditable=false><div contenteditable><div>{}<br></div></div></div></div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div><div contenteditable=false><div contenteditable><div>{}<br></div></div></div></div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div><div contenteditable=false><div contenteditable><div>{}<br></div></div></div></div>" compare innerHTML
+[PASS] [["delete",""]] "<div><div contenteditable=false><div contenteditable><div>{}<br></div></div></div></div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div><div contenteditable=false><div contenteditable><div>{}<br></div></div></div></div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div><div contenteditable=false><div contenteditable><div>{}<br></div></div></div></div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div><div contenteditable=false><div contenteditable><div>{}<br></div></div></div></div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div><div contenteditable=false><div contenteditable><div>{}<br></div></div></div></div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div><div contenteditable=false><div contenteditable><div>{}<br></div></div></div></div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div><div contenteditable=false><span contenteditable>{}<br></span></div></div></div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div><div contenteditable=false><span contenteditable>{}<br></span></div></div></div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div><div contenteditable=false><span contenteditable>{}<br></span></div></div></div>" compare innerHTML
+[PASS] [["delete",""]] "<div><div contenteditable=false><span contenteditable>{}<br></span></div></div></div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div><div contenteditable=false><span contenteditable>{}<br></span></div></div></div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div><div contenteditable=false><span contenteditable>{}<br></span></div></div></div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div><div contenteditable=false><span contenteditable>{}<br></span></div></div></div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div><div contenteditable=false><span contenteditable>{}<br></span></div></div></div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div><div contenteditable=false><span contenteditable>{}<br></span></div></div></div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre>foo \\n[]bar</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=white-space:pre>foo \\n[]bar</div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div style=white-space:pre>foo \\n[]bar</div>" compare innerHTML
+[PASS] [["delete",""]] "<div style=white-space:pre>foo \\n[]bar</div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre>foo \\n[]bar</div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre>foo \\n[]bar</div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre>foo \\n[]bar</div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre>foo \\n[]bar</div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre>foo \\n[]bar</div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n []bar</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n []bar</div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n []bar</div>" compare innerHTML
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n []bar</div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n []bar</div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n []bar</div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n []bar</div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n []bar</div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n []bar</div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n\\n[]bar</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n\\n[]bar</div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n\\n[]bar</div>" compare innerHTML
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n\\n[]bar</div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n\\n[]bar</div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n\\n[]bar</div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n\\n[]bar</div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n\\n[]bar</div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\n\\n[]bar</div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\nb[]</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\nb[]</div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\nb[]</div>" compare innerHTML
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\nb[]</div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\nb[]</div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\nb[]</div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\nb[]</div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\nb[]</div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre>foo\\nb[]</div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo \\n[]bar</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo \\n[]bar</div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo \\n[]bar</div>" compare innerHTML
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo \\n[]bar</div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo \\n[]bar</div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo \\n[]bar</div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo \\n[]bar</div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo \\n[]bar</div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo \\n[]bar</div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n []bar</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n []bar</div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n []bar</div>" compare innerHTML
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n []bar</div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n []bar</div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n []bar</div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n []bar</div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n []bar</div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n []bar</div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n\\n[]bar</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n\\n[]bar</div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n\\n[]bar</div>" compare innerHTML
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n\\n[]bar</div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n\\n[]bar</div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n\\n[]bar</div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n\\n[]bar</div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n\\n[]bar</div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\n\\n[]bar</div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\nb[]</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\nb[]</div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\nb[]</div>" compare innerHTML
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\nb[]</div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\nb[]</div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\nb[]</div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\nb[]</div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\nb[]</div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-wrap>foo\\nb[]</div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo \\n[]bar</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo \\n[]bar</div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo \\n[]bar</div>" compare innerHTML
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo \\n[]bar</div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo \\n[]bar</div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo \\n[]bar</div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo \\n[]bar</div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo \\n[]bar</div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo \\n[]bar</div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n []bar</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n []bar</div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n []bar</div>" compare innerHTML
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n []bar</div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n []bar</div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n []bar</div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n []bar</div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n []bar</div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n []bar</div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n\\n[]bar</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n\\n[]bar</div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n\\n[]bar</div>" compare innerHTML
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n\\n[]bar</div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n\\n[]bar</div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n\\n[]bar</div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n\\n[]bar</div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n\\n[]bar</div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\n\\n[]bar</div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\nb[]</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\nb[]</div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\nb[]</div>" compare innerHTML
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\nb[]</div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\nb[]</div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\nb[]</div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\nb[]</div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\nb[]</div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div style=white-space:pre-line>foo\\nb[]</div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo \\n[]bar</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo \\n[]bar</div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo \\n[]bar</div>" compare innerHTML
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo \\n[]bar</div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo \\n[]bar</div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo \\n[]bar</div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo \\n[]bar</div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo \\n[]bar</div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo \\n[]bar</div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n []bar</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n []bar</div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n []bar</div>" compare innerHTML
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n []bar</div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n []bar</div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n []bar</div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n []bar</div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n []bar</div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n []bar</div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n\\n[]bar</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n\\n[]bar</div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n\\n[]bar</div>" compare innerHTML
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n\\n[]bar</div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n\\n[]bar</div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n\\n[]bar</div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n\\n[]bar</div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n\\n[]bar</div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\n\\n[]bar</div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\nb[]</div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\nb[]</div>" checks for modifications to non-editable content
+[FAIL] [["delete",""]] "<div style=white-space:nowrap>foo\\nb[]</div>" compare innerHTML
+  assert_in_array: Unexpected innerHTML (after normalizing inline style) value "<div style=\\"white-space:nowrap\\">foo&nbsp;</div>" not in array ["<div style=\\"white-space:nowrap\\">foo\\n</div>", "<div style=\\"white-space:nowrap\\">foo<br></div>"]
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\nb[]</div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\nb[]</div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\nb[]</div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\nb[]</div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\nb[]</div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div style=white-space:nowrap>foo\\nb[]</div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[b]c</span></p>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[b]c</span></p>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[b]c</span></p>" compare innerHTML
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[b]c</span></p>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[b]c</span></p>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[b]c</span></p>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[b]c</span></p>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[b]c</span></p>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[b]c</span></p>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>a[b]c</unknown-element></p>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>a[b]c</unknown-element></p>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>a[b]c</unknown-element></p>" compare innerHTML
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>a[b]c</unknown-element></p>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>a[b]c</unknown-element></p>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>a[b]c</unknown-element></p>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>a[b]c</unknown-element></p>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>a[b]c</unknown-element></p>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>a[b]c</unknown-element></p>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>[abc]</span></p>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>[abc]</span></p>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>[abc]</span></p>" compare innerHTML
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>[abc]</span></p>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>[abc]</span></p>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>[abc]</span></p>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>[abc]</span></p>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>[abc]</span></p>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>[abc]</span></p>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[bc<br>de]f</span></p>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[bc<br>de]f</span></p>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[bc<br>de]f</span></p>" compare innerHTML
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[bc<br>de]f</span></p>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[bc<br>de]f</span></p>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[bc<br>de]f</span></p>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[bc<br>de]f</span></p>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[bc<br>de]f</span></p>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><span contenteditable>a[bc<br>de]f</span></p>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>[abc]</unknown-element></p>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>[abc]</unknown-element></p>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>[abc]</unknown-element></p>" compare innerHTML
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>[abc]</unknown-element></p>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>[abc]</unknown-element></p>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>[abc]</unknown-element></p>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>[abc]</unknown-element></p>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>[abc]</unknown-element></p>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<p contenteditable=\\"false\\"><unknown-element contenteditable>[abc]</unknown-element></p>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>[ab</p><p>c]d</p></custom-element></div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>[ab</p><p>c]d</p></custom-element></div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>[ab</p><p>c]d</p></custom-element></div>" compare innerHTML
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>[ab</p><p>c]d</p></custom-element></div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>[ab</p><p>c]d</p></custom-element></div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>[ab</p><p>c]d</p></custom-element></div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>[ab</p><p>c]d</p></custom-element></div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>[ab</p><p>c]d</p></custom-element></div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>[ab</p><p>c]d</p></custom-element></div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>a[b</p><p>cd]</p></custom-element></div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>a[b</p><p>cd]</p></custom-element></div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>a[b</p><p>cd]</p></custom-element></div>" compare innerHTML
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>a[b</p><p>cd]</p></custom-element></div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>a[b</p><p>cd]</p></custom-element></div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>a[b</p><p>cd]</p></custom-element></div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>a[b</p><p>cd]</p></custom-element></div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>a[b</p><p>cd]</p></custom-element></div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p>a[b</p><p>cd]</p></custom-element></div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>[ab</b></p><p><i>c]d</i></p></custom-element></div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>[ab</b></p><p><i>c]d</i></p></custom-element></div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>[ab</b></p><p><i>c]d</i></p></custom-element></div>" compare innerHTML
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>[ab</b></p><p><i>c]d</i></p></custom-element></div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>[ab</b></p><p><i>c]d</i></p></custom-element></div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>[ab</b></p><p><i>c]d</i></p></custom-element></div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>[ab</b></p><p><i>c]d</i></p></custom-element></div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>[ab</b></p><p><i>c]d</i></p></custom-element></div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>[ab</b></p><p><i>c]d</i></p></custom-element></div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>a[b</b></p><p><i>cd]</i></p></custom-element></div>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>a[b</b></p><p><i>cd]</i></p></custom-element></div>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>a[b</b></p><p><i>cd]</i></p></custom-element></div>" compare innerHTML
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>a[b</b></p><p><i>cd]</i></p></custom-element></div>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>a[b</b></p><p><i>cd]</i></p></custom-element></div>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>a[b</b></p><p><i>cd]</i></p></custom-element></div>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>a[b</b></p><p><i>cd]</i></p></custom-element></div>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>a[b</b></p><p><i>cd]</i></p></custom-element></div>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<div contenteditable=\\"false\\"><custom-element contenteditable=\\"\\"><p><b>a[b</b></p><p><i>cd]</i></p></custom-element></div>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<p>abc</p><ul contenteditable=\\"false\\"><li>def</li></ul><p>[]ghi</p>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<p>abc</p><ul contenteditable=\\"false\\"><li>def</li></ul><p>[]ghi</p>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<p>abc</p><ul contenteditable=\\"false\\"><li>def</li></ul><p>[]ghi</p>" compare innerHTML
+[PASS] [["delete",""]] "<p>abc</p><ul contenteditable=\\"false\\"><li>def</li></ul><p>[]ghi</p>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<p>abc</p><ul contenteditable=\\"false\\"><li>def</li></ul><p>[]ghi</p>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<p>abc</p><ul contenteditable=\\"false\\"><li>def</li></ul><p>[]ghi</p>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<p>abc</p><ul contenteditable=\\"false\\"><li>def</li></ul><p>[]ghi</p>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<p>abc</p><ul contenteditable=\\"false\\"><li>def</li></ul><p>[]ghi</p>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<p>abc</p><ul contenteditable=\\"false\\"><li>def</li></ul><p>[]ghi</p>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>" compare innerHTML
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>" compare innerHTML
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<p>abc</p><ul><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>" compare innerHTML
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li><li>[]ghi</li></ul>" queryCommandValue("delete") after
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>" compare innerHTML
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>" queryCommandIndeterm("delete") before
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>" queryCommandState("delete") before
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>" queryCommandValue("delete") before
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>" queryCommandIndeterm("delete") after
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>" queryCommandState("delete") after
+[PASS] [["delete",""]] "<ul><li>abc</li><li contenteditable=\\"false\\">def</li></ul><p>[]ghi</p>" queryCommandValue("delete") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>": execCommand("defaultparagraphseparator", false, "div") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font color=\\"blue\\">foo</font><font color=\\"brown\\">bar</font></p>" but got "<p><font color=\\"blue\\">foo</font><span style=\\"color:rgb(165, 42, 42)\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>": execCommand("defaultparagraphseparator", false, "p") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font color=\\"blue\\">foo</font><font color=\\"brown\\">bar</font></p>" but got "<p><font color=\\"blue\\">foo</font><span style=\\"color:rgb(165, 42, 42)\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font color=brown>[]bar</font>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>": execCommand("defaultparagraphseparator", false, "div") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font size=\\"3\\">foo</font><font size=\\"5\\">bar</font></p>" but got "<p><font size=\\"3\\">foo</font><span style=\\"font-size:x-large\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>" queryCommandIndeterm("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>" queryCommandState("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>" queryCommandValue("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>" queryCommandIndeterm("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>" queryCommandState("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>" queryCommandValue("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>": execCommand("defaultparagraphseparator", false, "p") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font size=\\"3\\">foo</font><font size=\\"5\\">bar</font></p>" but got "<p><font size=\\"3\\">foo</font><span style=\\"font-size:x-large\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>" queryCommandIndeterm("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>" queryCommandState("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>" queryCommandValue("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>" queryCommandIndeterm("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>" queryCommandState("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=3>foo</font><p><font size=5>[]bar</font>" queryCommandValue("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>": execCommand("defaultparagraphseparator", false, "div") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font size=\\"4\\">foo</font><font size=\\"5\\">bar</font></p>" but got "<p><font size=\\"4\\">foo</font><span style=\\"font-size:x-large\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>" queryCommandIndeterm("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>" queryCommandState("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>" queryCommandValue("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>" queryCommandIndeterm("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>" queryCommandState("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>" queryCommandValue("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>": execCommand("defaultparagraphseparator", false, "p") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font size=\\"4\\">foo</font><font size=\\"5\\">bar</font></p>" but got "<p><font size=\\"4\\">foo</font><span style=\\"font-size:x-large\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>" queryCommandIndeterm("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>" queryCommandState("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>" queryCommandValue("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>" queryCommandIndeterm("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>" queryCommandState("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=4>foo</font><p><font size=5>[]bar</font>" queryCommandValue("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>": execCommand("defaultparagraphseparator", false, "div") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font color=\\"blue\\">foo</font><font size=\\"5\\">bar</font></p>" but got "<p><font color=\\"blue\\">foo</font><span style=\\"font-size:x-large\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandIndeterm("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandState("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandValue("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandIndeterm("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandState("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandValue("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>": execCommand("defaultparagraphseparator", false, "p") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font color=\\"blue\\">foo</font><font size=\\"5\\">bar</font></p>" but got "<p><font color=\\"blue\\">foo</font><span style=\\"font-size:x-large\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandIndeterm("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandState("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandValue("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandIndeterm("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandState("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandValue("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font color=blue>foo</font><p><font size=5>[]bar</font>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>": execCommand("defaultparagraphseparator", false, "div") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font size=\\"5\\">foo</font><font color=\\"blue\\">bar</font></p>" but got "<p><font size=\\"5\\">foo</font><span style=\\"color:rgb(0, 0, 255)\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandIndeterm("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandState("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandValue("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandIndeterm("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandState("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandValue("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>": execCommand("defaultparagraphseparator", false, "p") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font size=\\"5\\">foo</font><font color=\\"blue\\">bar</font></p>" but got "<p><font size=\\"5\\">foo</font><span style=\\"color:rgb(0, 0, 255)\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandIndeterm("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandState("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandValue("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandIndeterm("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandState("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandValue("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font size=5>foo</font><p><font color=blue>[]bar</font>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>": execCommand("defaultparagraphseparator", false, "div") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font face=\\"monospace\\">foo</font><font face=\\"sans-serif\\">bar</font></p>" but got "<p><font face=\\"monospace\\">foo</font><span style=\\"font-family:sans-serif\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>" queryCommandIndeterm("fontName") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>" queryCommandState("fontName") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>" queryCommandValue("fontName") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>" queryCommandIndeterm("fontName") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>" queryCommandState("fontName") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>" queryCommandValue("fontName") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>": execCommand("defaultparagraphseparator", false, "p") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font face=\\"monospace\\">foo</font><font face=\\"sans-serif\\">bar</font></p>" but got "<p><font face=\\"monospace\\">foo</font><span style=\\"font-family:sans-serif\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>" queryCommandIndeterm("fontName") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>" queryCommandState("fontName") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>" queryCommandValue("fontName") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>" queryCommandIndeterm("fontName") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>" queryCommandState("fontName") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["delete",""]] "<p><font face=monospace>foo</font><p><font face=sans-serif>[]bar</font>" queryCommandValue("fontName") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" checks for modifications to non-editable content
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" compare innerHTML
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" checks for modifications to non-editable content
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" compare innerHTML
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" checks for modifications to non-editable content
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" compare innerHTML
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" checks for modifications to non-editable content
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" compare innerHTML
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" checks for modifications to non-editable content
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" compare innerHTML
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" checks for modifications to non-editable content
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" compare innerHTML
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" checks for modifications to non-editable content
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" compare innerHTML
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>": execCommand("delete", false, "") return value
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" checks for modifications to non-editable content
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" compare innerHTML
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["delete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">[]bar</span></p>" queryCommandValue("foreColor") after
+[PASS] [["delete",""]] "<ul><li>[abc</li><li>def]</li></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul><li>[abc</li><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul><li>[abc</li><li>def]</li></ul>" compare innerHTML
+[PASS] [["delete",""]] "<ul><ol><li>[abc</li></ol><li>def]</li></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul><ol><li>[abc</li></ol><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul><ol><li>[abc</li></ol><li>def]</li></ul>" compare innerHTML
+[PASS] [["delete",""]] "<ul><ul><li>[abc</li></ul><li>def]</li></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul><ul><li>[abc</li></ul><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul><ul><li>[abc</li></ul><li>def]</li></ul>" compare innerHTML
+[PASS] [["delete",""]] "<ul><li>[abc</li><ul><li>def]</li></ul></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul><li>[abc</li><ul><li>def]</li></ul></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul><li>[abc</li><ul><li>def]</li></ul></ul>" compare innerHTML
+[PASS] [["delete",""]] "<ul><ul><li>[abc</li></ul><ul><li>def]</li></ul></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul><ul><li>[abc</li></ul><ul><li>def]</li></ul></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul><ul><li>[abc</li></ul><ul><li>def]</li></ul></ul>" compare innerHTML
+[PASS] [["delete",""]] "<ul><ol><li>[abc</li></ol><ul><li>def]</li></ul></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul><ol><li>[abc</li></ol><ul><li>def]</li></ul></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul><ol><li>[abc</li></ol><ul><li>def]</li></ul></ul>" compare innerHTML
+[PASS] [["delete",""]] "<ul><li><span>[abc</span></li><li>def]</li></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul><li><span>[abc</span></li><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul><li><span>[abc</span></li><li>def]</li></ul>" compare innerHTML
+[PASS] [["delete",""]] "<ul><li>[abc</li><li><span>def]</span></li></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul><li>[abc</li><li><span>def]</span></li></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul><li>[abc</li><li><span>def]</span></li></ul>" compare innerHTML
+[PASS] [["delete",""]] "<ul><li><span>[abc</span></li><li><span>def]</span></li></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul><li><span>[abc</span></li><li><span>def]</span></li></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul><li><span>[abc</span></li><li><span>def]</span></li></ul>" compare innerHTML
+[PASS] [["delete",""]] "<ul><li> [abc</li><li>def]</li></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul><li> [abc</li><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul><li> [abc</li><li>def]</li></ul>" compare innerHTML
+[PASS] [["delete",""]] "<ul><li>[abc</li><li>def] </li></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul><li>[abc</li><li>def] </li></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul><li>[abc</li><li>def] </li></ul>" compare innerHTML
+[PASS] [["delete",""]] "<ul><li> [abc</li><li>def] </li></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul><li> [abc</li><li>def] </li></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul><li> [abc</li><li>def] </li></ul>" compare innerHTML
+[PASS] [["delete",""]] "<ul>\\n<li>[abc</li><li>def]</li></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul>\\n<li>[abc</li><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul>\\n<li>[abc</li><li>def]</li></ul>" compare innerHTML
+[PASS] [["delete",""]] "<ul><li>[abc</li><li>def]</li>\\n</ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul><li>[abc</li><li>def]</li>\\n</ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul><li>[abc</li><li>def]</li>\\n</ul>" compare innerHTML
+[PASS] [["delete",""]] "<ul>\\n<li>[abc</li><li>def]</li>\\n</ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ul>\\n<li>[abc</li><li>def]</li>\\n</ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ul>\\n<li>[abc</li><li>def]</li>\\n</ul>" compare innerHTML
+[PASS] [["delete",""]] "<ol><li>[abc</li></ol><ul><li>def]</li></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ol><li>[abc</li></ol><ul><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ol><li>[abc</li></ol><ul><li>def]</li></ul>" compare innerHTML
+[PASS] [["delete",""]] "<ol><li> [abc</li></ol><ul><li>def]</li></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ol><li> [abc</li></ol><ul><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ol><li> [abc</li></ol><ul><li>def]</li></ul>" compare innerHTML
+[PASS] [["delete",""]] "<ol>\\n<li>[abc</li></ol><ul><li>def]</li></ul>": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "<ol>\\n<li>[abc</li></ol><ul><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["delete",""]] "<ol>\\n<li>[abc</li></ol><ul><li>def]</li></ul>" compare innerHTML
+[PASS] [["delete",""]] "{<ul><li>abc<span>def</span>ghi</li><li>jkl<span>opq</span>rst</li></ul>}": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "{<ul><li>abc<span>def</span>ghi</li><li>jkl<span>opq</span>rst</li></ul>}" checks for modifications to non-editable content
+[PASS] [["delete",""]] "{<ul><li>abc<span>def</span>ghi</li><li>jkl<span>opq</span>rst</li></ul>}" compare innerHTML
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/editing/run/forwarddelete_7001-last-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/editing/run/forwarddelete_7001-last-expected.txt
new file mode 100644
index 0000000..ce88a37
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/editing/run/forwarddelete_7001-last-expected.txt
@@ -0,0 +1,273 @@
+This is a testharness.js-based test.
+Found 260 tests; 251 PASS, 9 FAIL, 0 TIMEOUT, 0 NOTRUN.
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=3>foo[]</font><p><font size=5>bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=3>foo[]</font><p><font size=5>bar</font>": execCommand("defaultparagraphseparator", false, "p") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=3>foo[]</font><p><font size=5>bar</font>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=3>foo[]</font><p><font size=5>bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=3>foo[]</font><p><font size=5>bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font size=\\"3\\">foo</font><font size=\\"5\\">bar</font></p>" but got "<p><font size=\\"3\\">foo</font><span style=\\"font-size:x-large\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=3>foo[]</font><p><font size=5>bar</font>" queryCommandIndeterm("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=3>foo[]</font><p><font size=5>bar</font>" queryCommandState("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=3>foo[]</font><p><font size=5>bar</font>" queryCommandValue("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=3>foo[]</font><p><font size=5>bar</font>" queryCommandIndeterm("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=3>foo[]</font><p><font size=5>bar</font>" queryCommandState("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=3>foo[]</font><p><font size=5>bar</font>" queryCommandValue("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>": execCommand("defaultparagraphseparator", false, "div") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font size=\\"4\\">foo</font><font size=\\"5\\">bar</font></p>" but got "<p><font size=\\"4\\">foo</font><span style=\\"font-size:x-large\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>" queryCommandIndeterm("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>" queryCommandState("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>" queryCommandValue("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>" queryCommandIndeterm("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>" queryCommandState("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>" queryCommandValue("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>": execCommand("defaultparagraphseparator", false, "p") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font size=\\"4\\">foo</font><font size=\\"5\\">bar</font></p>" but got "<p><font size=\\"4\\">foo</font><span style=\\"font-size:x-large\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>" queryCommandIndeterm("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>" queryCommandState("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>" queryCommandValue("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>" queryCommandIndeterm("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>" queryCommandState("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=4>foo[]</font><p><font size=5>bar</font>" queryCommandValue("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>": execCommand("defaultparagraphseparator", false, "div") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font color=\\"blue\\">foo</font><font size=\\"5\\">bar</font></p>" but got "<p><font color=\\"blue\\">foo</font><span style=\\"font-size:x-large\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandIndeterm("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandState("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandValue("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandIndeterm("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandState("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandValue("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>": execCommand("defaultparagraphseparator", false, "p") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font color=\\"blue\\">foo</font><font size=\\"5\\">bar</font></p>" but got "<p><font color=\\"blue\\">foo</font><span style=\\"font-size:x-large\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandIndeterm("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandState("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandValue("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandIndeterm("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandState("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandValue("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font color=blue>foo[]</font><p><font size=5>bar</font>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>": execCommand("defaultparagraphseparator", false, "div") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font size=\\"5\\">foo</font><font color=\\"blue\\">bar</font></p>" but got "<p><font size=\\"5\\">foo</font><span style=\\"color:rgb(0, 0, 255)\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandIndeterm("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandState("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandValue("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandIndeterm("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandState("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandValue("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>": execCommand("defaultparagraphseparator", false, "p") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font size=\\"5\\">foo</font><font color=\\"blue\\">bar</font></p>" but got "<p><font size=\\"5\\">foo</font><span style=\\"color:rgb(0, 0, 255)\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandIndeterm("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandState("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandValue("fontSize") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandIndeterm("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandState("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandValue("fontSize") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font size=5>foo[]</font><p><font color=blue>bar</font>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>": execCommand("defaultparagraphseparator", false, "div") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font face=\\"monospace\\">foo</font><font face=\\"sans-serif\\">bar</font></p>" but got "<p><font face=\\"monospace\\">foo</font><span style=\\"font-family:sans-serif\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>" queryCommandIndeterm("fontName") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>" queryCommandState("fontName") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>" queryCommandValue("fontName") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>" queryCommandIndeterm("fontName") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>" queryCommandState("fontName") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","div"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>" queryCommandValue("fontName") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>": execCommand("defaultparagraphseparator", false, "p") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>" checks for modifications to non-editable content
+[FAIL] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>" compare innerHTML
+  assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<p><font face=\\"monospace\\">foo</font><font face=\\"sans-serif\\">bar</font></p>" but got "<p><font face=\\"monospace\\">foo</font><span style=\\"font-family:sans-serif\\">bar</span></p>"
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>" queryCommandIndeterm("fontName") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>" queryCommandState("fontName") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>" queryCommandValue("fontName") before
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>" queryCommandIndeterm("fontName") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>" queryCommandState("fontName") after
+[PASS] [["styleWithCSS","false"],["defaultparagraphseparator","p"],["forwarddelete",""]] "<p><font face=monospace>foo[]</font><p><font face=sans-serif>bar</font>" queryCommandValue("fontName") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" checks for modifications to non-editable content
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" compare innerHTML
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" checks for modifications to non-editable content
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" compare innerHTML
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" checks for modifications to non-editable content
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" compare innerHTML
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" checks for modifications to non-editable content
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" compare innerHTML
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" checks for modifications to non-editable content
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" compare innerHTML
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" checks for modifications to non-editable content
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" compare innerHTML
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<p><span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span></p><span style=\\"color:rgb(255, 0, 0)\\">bar</span>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" checks for modifications to non-editable content
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" compare innerHTML
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]</span><br><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandValue("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>": execCommand("styleWithCSS", false, "false") return value
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>": execCommand("forwarddelete", false, "") return value
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" checks for modifications to non-editable content
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" compare innerHTML
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandIndeterm("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandState("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandValue("foreColor") before
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandIndeterm("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandState("foreColor") after
+[PASS] [["styleWithCSS","false"],["forwarddelete",""]] "<span style=\\"color:rgb(0, 0, 255)\\">foo[]<br></span><p><span style=\\"color:rgb(255, 0, 0)\\">bar</span></p>" queryCommandValue("foreColor") after
+[PASS] [["forwarddelete",""]] "<ul><li>[abc</li><li>def]</li></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ul><li>[abc</li><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ul><li>[abc</li><li>def]</li></ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ul><ol><li>[abc</li></ol><li>def]</li></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ul><ol><li>[abc</li></ol><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ul><ol><li>[abc</li></ol><li>def]</li></ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ul><ul><li>[abc</li></ul><li>def]</li></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ul><ul><li>[abc</li></ul><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ul><ul><li>[abc</li></ul><li>def]</li></ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ul><li>[abc</li><ul><li>def]</li></ul></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ul><li>[abc</li><ul><li>def]</li></ul></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ul><li>[abc</li><ul><li>def]</li></ul></ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ul><ul><li>[abc</li></ul><ul><li>def]</li></ul></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ul><ul><li>[abc</li></ul><ul><li>def]</li></ul></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ul><ul><li>[abc</li></ul><ul><li>def]</li></ul></ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ul><ol><li>[abc</li></ol><ul><li>def]</li></ul></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ul><ol><li>[abc</li></ol><ul><li>def]</li></ul></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ul><ol><li>[abc</li></ol><ul><li>def]</li></ul></ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ul><li><span>[abc</span></li><li>def]</li></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ul><li><span>[abc</span></li><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ul><li><span>[abc</span></li><li>def]</li></ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ul><li>[abc</li><li><span>def]</span></li></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ul><li>[abc</li><li><span>def]</span></li></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ul><li>[abc</li><li><span>def]</span></li></ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ul><li><span>[abc</span></li><li><span>def]</span></li></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ul><li><span>[abc</span></li><li><span>def]</span></li></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ul><li><span>[abc</span></li><li><span>def]</span></li></ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ul><li> [abc</li><li>def]</li></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ul><li> [abc</li><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ul><li> [abc</li><li>def]</li></ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ul><li>[abc</li><li>def] </li></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ul><li>[abc</li><li>def] </li></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ul><li>[abc</li><li>def] </li></ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ul><li> [abc</li><li>def] </li></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ul><li> [abc</li><li>def] </li></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ul><li> [abc</li><li>def] </li></ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ul>\\n<li>[abc</li><li>def]</li></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ul>\\n<li>[abc</li><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ul>\\n<li>[abc</li><li>def]</li></ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ul><li>[abc</li><li>def]</li>\\n</ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ul><li>[abc</li><li>def]</li>\\n</ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ul><li>[abc</li><li>def]</li>\\n</ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ul>\\n<li>[abc</li><li>def]</li>\\n</ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ul>\\n<li>[abc</li><li>def]</li>\\n</ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ul>\\n<li>[abc</li><li>def]</li>\\n</ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ol><li>[abc</li></ol><ul><li>def]</li></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ol><li>[abc</li></ol><ul><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ol><li>[abc</li></ol><ul><li>def]</li></ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ol><li> [abc</li></ol><ul><li>def]</li></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ol><li> [abc</li></ol><ul><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ol><li> [abc</li></ol><ul><li>def]</li></ul>" compare innerHTML
+[PASS] [["forwarddelete",""]] "<ol>\\n<li>[abc</li></ol><ul><li>def]</li></ul>": execCommand("forwarddelete", false, "") return value
+[PASS] [["forwarddelete",""]] "<ol>\\n<li>[abc</li></ol><ul><li>def]</li></ul>" checks for modifications to non-editable content
+[PASS] [["forwarddelete",""]] "<ol>\\n<li>[abc</li></ol><ul><li>def]</li></ul>" compare innerHTML
+[PASS] [["delete",""]] "{<ul><li>abc<span>def</span>ghi</li><li>jkl<span>opq</span>rst</li></ul>}": execCommand("delete", false, "") return value
+[PASS] [["delete",""]] "{<ul><li>abc<span>def</span>ghi</li><li>jkl<span>opq</span>rst</li></ul>}" checks for modifications to non-editable content
+[PASS] [["delete",""]] "{<ul><li>abc<span>def</span>ghi</li><li>jkl<span>opq</span>rst</li></ul>}" compare innerHTML
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/web-animations/animation-model/animation-types/accumulation-per-property-001-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/web-animations/animation-model/animation-types/accumulation-per-property-001-expected.txt
new file mode 100644
index 0000000..f89b59f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/web-animations/animation-model/animation-types/accumulation-per-property-001-expected.txt
@@ -0,0 +1,319 @@
+This is a testharness.js-based test.
+Found 313 tests; 311 PASS, 2 FAIL, 0 TIMEOUT, 0 NOTRUN.
+[PASS] Setup
+[PASS] align-content (type: discrete) has testAccumulation function
+[PASS] align-content: "flex-end" onto "flex-start"
+[PASS] align-content: "flex-start" onto "flex-end"
+[PASS] align-items (type: discrete) has testAccumulation function
+[PASS] align-items: "flex-end" onto "flex-start"
+[PASS] align-items: "flex-start" onto "flex-end"
+[PASS] align-self (type: discrete) has testAccumulation function
+[PASS] align-self: "flex-end" onto "flex-start"
+[PASS] align-self: "flex-start" onto "flex-end"
+[PASS] backface-visibility (type: discrete) has testAccumulation function
+[PASS] backface-visibility: "hidden" onto "visible"
+[PASS] backface-visibility: "visible" onto "hidden"
+[PASS] background-attachment (type: discrete) has testAccumulation function
+[PASS] background-attachment: "local" onto "fixed"
+[PASS] background-attachment: "fixed" onto "local"
+[PASS] background-color (type: color) has testAccumulation function
+[PASS] background-color supports animating as color of rgb() with overflowed  from and to values
+[PASS] background-color supports animating as color of #RGB
+[PASS] background-color supports animating as color of hsl()
+[PASS] background-color supports animating as color of #RGBa
+[PASS] background-color supports animating as color of rgba()
+[PASS] background-color supports animating as color of hsla()
+[PASS] background-blend-mode (type: discrete) has testAccumulation function
+[PASS] background-blend-mode: "screen" onto "multiply"
+[PASS] background-blend-mode: "multiply" onto "screen"
+[PASS] background-clip (type: discrete) has testAccumulation function
+[PASS] background-clip: "content-box" onto "padding-box"
+[PASS] background-clip: "padding-box" onto "content-box"
+[PASS] background-image (type: discrete) has testAccumulation function
+[PASS] background-image: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")"
+[PASS] background-image: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")"
+[PASS] background-origin (type: discrete) has testAccumulation function
+[PASS] background-origin: "content-box" onto "padding-box"
+[PASS] background-origin: "padding-box" onto "content-box"
+[PASS] background-repeat (type: discrete) has testAccumulation function
+[PASS] background-repeat: "round" onto "space"
+[PASS] background-repeat: "space" onto "round"
+[PASS] border-bottom-color (type: color) has testAccumulation function
+[PASS] border-bottom-color supports animating as color of rgb() with overflowed  from and to values
+[PASS] border-bottom-color supports animating as color of #RGB
+[PASS] border-bottom-color supports animating as color of hsl()
+[PASS] border-bottom-color supports animating as color of #RGBa
+[PASS] border-bottom-color supports animating as color of rgba()
+[PASS] border-bottom-color supports animating as color of hsla()
+[PASS] border-bottom-style (type: discrete) has testAccumulation function
+[PASS] border-bottom-style: "solid" onto "dotted"
+[PASS] border-bottom-style: "dotted" onto "solid"
+[PASS] border-bottom-width (type: length) has testAccumulation function
+[PASS] border-bottom-width: length
+[PASS] border-bottom-width: length of rem
+[PASS] border-collapse (type: discrete) has testAccumulation function
+[PASS] border-collapse: "separate" onto "collapse"
+[PASS] border-collapse: "collapse" onto "separate"
+[PASS] border-image-repeat (type: discrete) has testAccumulation function
+[PASS] border-image-repeat: "round space" onto "stretch repeat"
+[PASS] border-image-repeat: "stretch repeat" onto "round space"
+[PASS] border-image-source (type: discrete) has testAccumulation function
+[PASS] border-image-source: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")"
+[PASS] border-image-source: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")"
+[PASS] border-left-color (type: color) has testAccumulation function
+[PASS] border-left-color supports animating as color of rgb() with overflowed  from and to values
+[PASS] border-left-color supports animating as color of #RGB
+[PASS] border-left-color supports animating as color of hsl()
+[PASS] border-left-color supports animating as color of #RGBa
+[PASS] border-left-color supports animating as color of rgba()
+[PASS] border-left-color supports animating as color of hsla()
+[PASS] border-left-style (type: discrete) has testAccumulation function
+[PASS] border-left-style: "solid" onto "dotted"
+[PASS] border-left-style: "dotted" onto "solid"
+[PASS] border-left-width (type: length) has testAccumulation function
+[PASS] border-left-width: length
+[PASS] border-left-width: length of rem
+[PASS] border-right-color (type: color) has testAccumulation function
+[PASS] border-right-color supports animating as color of rgb() with overflowed  from and to values
+[PASS] border-right-color supports animating as color of #RGB
+[PASS] border-right-color supports animating as color of hsl()
+[PASS] border-right-color supports animating as color of #RGBa
+[PASS] border-right-color supports animating as color of rgba()
+[PASS] border-right-color supports animating as color of hsla()
+[PASS] border-right-style (type: discrete) has testAccumulation function
+[PASS] border-right-style: "solid" onto "dotted"
+[PASS] border-right-style: "dotted" onto "solid"
+[PASS] border-right-width (type: length) has testAccumulation function
+[PASS] border-right-width: length
+[PASS] border-right-width: length of rem
+[PASS] border-spacing (type: lengthPair) has testAccumulation function
+[PASS] border-spacing: length pair
+[PASS] border-spacing: length pair of rem
+[PASS] border-top-color (type: color) has testAccumulation function
+[PASS] border-top-color supports animating as color of rgb() with overflowed  from and to values
+[PASS] border-top-color supports animating as color of #RGB
+[PASS] border-top-color supports animating as color of hsl()
+[PASS] border-top-color supports animating as color of #RGBa
+[PASS] border-top-color supports animating as color of rgba()
+[PASS] border-top-color supports animating as color of hsla()
+[PASS] border-top-style (type: discrete) has testAccumulation function
+[PASS] border-top-style: "solid" onto "dotted"
+[PASS] border-top-style: "dotted" onto "solid"
+[PASS] border-top-width (type: length) has testAccumulation function
+[PASS] border-top-width: length
+[PASS] border-top-width: length of rem
+[PASS] box-shadow (type: boxShadowList) has testAccumulation function
+[PASS] box-shadow: shadow
+[PASS] box-sizing (type: discrete) has testAccumulation function
+[PASS] box-sizing: "border-box" onto "content-box"
+[PASS] box-sizing: "content-box" onto "border-box"
+[PASS] caption-side (type: discrete) has testAccumulation function
+[PASS] caption-side: "bottom" onto "top"
+[PASS] caption-side: "top" onto "bottom"
+[PASS] caret-color (type: color) has testAccumulation function
+[PASS] caret-color supports animating as color of rgb() with overflowed  from and to values
+[PASS] caret-color supports animating as color of #RGB
+[PASS] caret-color supports animating as color of hsl()
+[PASS] caret-color supports animating as color of #RGBa
+[PASS] caret-color supports animating as color of rgba()
+[PASS] caret-color supports animating as color of hsla()
+[PASS] clear (type: discrete) has testAccumulation function
+[PASS] clear: "right" onto "left"
+[PASS] clear: "left" onto "right"
+[PASS] clip (type: rect) has testAccumulation function
+[PASS] clip: rect
+[PASS] clip (type: discrete) has testAccumulation function
+[PASS] clip: "auto" onto "rect(10px, 10px, 10px, 10px)"
+[PASS] clip: "rect(10px, 10px, 10px, 10px)" onto "auto"
+[PASS] clip: "rect(10px, 10px, 10px, auto)" onto "rect(10px, 10px, 10px, 10px)"
+[PASS] clip: "rect(10px, 10px, 10px, 10px)" onto "rect(10px, 10px, 10px, auto)"
+[PASS] clip-rule (type: discrete) has testAccumulation function
+[PASS] clip-rule: "nonzero" onto "evenodd"
+[PASS] clip-rule: "evenodd" onto "nonzero"
+[PASS] color (type: color) has testAccumulation function
+[PASS] color supports animating as color of rgb() with overflowed  from and to values
+[PASS] color supports animating as color of #RGB
+[PASS] color supports animating as color of hsl()
+[PASS] color supports animating as color of #RGBa
+[PASS] color supports animating as color of rgba()
+[PASS] color supports animating as color of hsla()
+[PASS] color-interpolation (type: discrete) has testAccumulation function
+[PASS] color-interpolation: "auto" onto "linearrgb"
+[PASS] color-interpolation: "linearrgb" onto "auto"
+[PASS] color-interpolation-filters (type: discrete) has testAccumulation function
+[PASS] color-interpolation-filters: "linearrgb" onto "srgb"
+[PASS] color-interpolation-filters: "srgb" onto "linearrgb"
+[PASS] column-count (type: positiveInteger) has testAccumulation function
+[PASS] column-count: positive integer
+[PASS] column-count (type: discrete) has testAccumulation function
+[PASS] column-count: "10" onto "auto"
+[PASS] column-count: "auto" onto "10"
+[PASS] column-gap (type: length) has testAccumulation function
+[PASS] column-gap: length
+[PASS] column-gap: length of rem
+[PASS] column-gap (type: discrete) has testAccumulation function
+[PASS] column-gap: "200px" onto "normal"
+[PASS] column-gap: "normal" onto "200px"
+[PASS] column-rule-color (type: color) has testAccumulation function
+[PASS] column-rule-color supports animating as color of rgb() with overflowed  from and to values
+[PASS] column-rule-color supports animating as color of #RGB
+[PASS] column-rule-color supports animating as color of hsl()
+[PASS] column-rule-color supports animating as color of #RGBa
+[PASS] column-rule-color supports animating as color of rgba()
+[PASS] column-rule-color supports animating as color of hsla()
+[PASS] column-fill (type: discrete) has testAccumulation function
+[PASS] column-fill: "balance" onto "auto"
+[PASS] column-fill: "auto" onto "balance"
+[PASS] column-rule-style (type: discrete) has testAccumulation function
+[PASS] column-rule-style: "dotted" onto "none"
+[PASS] column-rule-style: "none" onto "dotted"
+[PASS] column-rule-width (type: length) has testAccumulation function
+[PASS] column-rule-width: length
+[PASS] column-rule-width: length of rem
+[PASS] column-width (type: length) has testAccumulation function
+[PASS] column-width: length
+[PASS] column-width: length of rem
+[PASS] column-width (type: discrete) has testAccumulation function
+[PASS] column-width: "1px" onto "auto"
+[PASS] column-width: "auto" onto "1px"
+[PASS] counter-increment (type: discrete) has testAccumulation function
+[PASS] counter-increment: "ident-2 2" onto "ident-1 1"
+[PASS] counter-increment: "ident-1 1" onto "ident-2 2"
+[PASS] counter-reset (type: discrete) has testAccumulation function
+[PASS] counter-reset: "ident-2 2" onto "ident-1 1"
+[PASS] counter-reset: "ident-1 1" onto "ident-2 2"
+[PASS] cursor (type: discrete) has testAccumulation function
+[PASS] cursor: "wait" onto "pointer"
+[PASS] cursor: "pointer" onto "wait"
+[PASS] dominant-baseline (type: discrete) has testAccumulation function
+[PASS] dominant-baseline: "alphabetic" onto "ideographic"
+[PASS] dominant-baseline: "ideographic" onto "alphabetic"
+[PASS] empty-cells (type: discrete) has testAccumulation function
+[PASS] empty-cells: "hide" onto "show"
+[PASS] empty-cells: "show" onto "hide"
+[PASS] fill-opacity (type: opacity) has testAccumulation function
+[PASS] fill-opacity: [0, 1] number
+[PASS] fill-opacity: [0, 1] number (clamped)
+[PASS] fill-rule (type: discrete) has testAccumulation function
+[PASS] fill-rule: "nonzero" onto "evenodd"
+[PASS] fill-rule: "evenodd" onto "nonzero"
+[PASS] filter (type: filterList) has testAccumulation function
+[PASS] filter: same ordered filter functions
+[PASS] filter: mismatched ordered filter functions
+[PASS] flex-basis (type: lengthPercentageOrCalc) has testAccumulation function
+[PASS] flex-basis: length
+[PASS] flex-basis: length of rem
+[PASS] flex-basis: percentage
+[PASS] flex-basis: units "%" onto "px"
+[PASS] flex-basis: units "px" onto "%"
+[PASS] flex-basis: units "rem" onto "%"
+[PASS] flex-basis: units "%" onto "rem"
+[PASS] flex-basis: units "rem" onto "em"
+[PASS] flex-basis: units "em" onto "rem"
+[PASS] flex-basis: units "calc" onto "px"
+[PASS] flex-basis: calc
+[PASS] flex-basis (type: discrete) has testAccumulation function
+[PASS] flex-basis: "10px" onto "auto"
+[PASS] flex-basis: "auto" onto "10px"
+[PASS] flex-direction (type: discrete) has testAccumulation function
+[PASS] flex-direction: "row-reverse" onto "row"
+[PASS] flex-direction: "row" onto "row-reverse"
+[PASS] flex-grow (type: positiveNumber) has testAccumulation function
+[PASS] flex-grow: positive number
+[PASS] flex-shrink (type: positiveNumber) has testAccumulation function
+[PASS] flex-shrink: positive number
+[PASS] flex-wrap (type: discrete) has testAccumulation function
+[PASS] flex-wrap: "wrap" onto "nowrap"
+[PASS] flex-wrap: "nowrap" onto "wrap"
+[PASS] flood-color (type: color) has testAccumulation function
+[PASS] flood-color supports animating as color of rgb() with overflowed  from and to values
+[PASS] flood-color supports animating as color of #RGB
+[PASS] flood-color supports animating as color of hsl()
+[PASS] flood-color supports animating as color of #RGBa
+[PASS] flood-color supports animating as color of rgba()
+[PASS] flood-color supports animating as color of hsla()
+[PASS] flood-opacity (type: opacity) has testAccumulation function
+[PASS] flood-opacity: [0, 1] number
+[PASS] flood-opacity: [0, 1] number (clamped)
+[PASS] font-stretch (type: percentage) has testAccumulation function
+[PASS] font-stretch: percentage
+[PASS] font-style (type: discrete) has testAccumulation function
+[FAIL] font-style: "oblique" onto "italic"
+  assert_equals: The value should be oblique at 0ms expected "oblique" but got "italic"
+[PASS] font-style: "italic" onto "oblique"
+[PASS] float (type: discrete) has testAccumulation function
+[PASS] float: "right" onto "left"
+[PASS] float: "left" onto "right"
+[PASS] font-family (type: discrete) has testAccumulation function
+[PASS] font-family: "verdana" onto "helvetica"
+[PASS] font-family: "helvetica" onto "verdana"
+[PASS] font-feature-settings (type: discrete) has testAccumulation function
+[PASS] font-feature-settings: "normal" onto ""liga" 5"
+[PASS] font-feature-settings: ""liga" 5" onto "normal"
+[PASS] font-kerning (type: discrete) has testAccumulation function
+[PASS] font-kerning: "normal" onto "auto"
+[PASS] font-kerning: "auto" onto "normal"
+[PASS] font-synthesis (type: discrete) has testAccumulation function
+[PASS] font-synthesis: "weight style" onto "none"
+[PASS] font-synthesis: "none" onto "weight style"
+[PASS] font-variant-alternates (type: discrete) has testAccumulation function
+[PASS] font-variant-alternates: "stylistic(unknown)" onto "swash(unknown)"
+[PASS] font-variant-alternates: "swash(unknown)" onto "stylistic(unknown)"
+[PASS] font-variant-caps (type: discrete) has testAccumulation function
+[PASS] font-variant-caps: "unicase" onto "small-caps"
+[PASS] font-variant-caps: "small-caps" onto "unicase"
+[PASS] font-variant-east-asian (type: discrete) has testAccumulation function
+[PASS] font-variant-east-asian: "proportional-width" onto "full-width"
+[PASS] font-variant-east-asian: "full-width" onto "proportional-width"
+[PASS] font-variant-ligatures (type: discrete) has testAccumulation function
+[PASS] font-variant-ligatures: "no-common-ligatures" onto "common-ligatures"
+[PASS] font-variant-ligatures: "common-ligatures" onto "no-common-ligatures"
+[PASS] font-variant-numeric (type: discrete) has testAccumulation function
+[PASS] font-variant-numeric: "oldstyle-nums" onto "lining-nums"
+[PASS] font-variant-numeric: "lining-nums" onto "oldstyle-nums"
+[PASS] font-variant-position (type: discrete) has testAccumulation function
+[PASS] font-variant-position: "super" onto "sub"
+[PASS] font-variant-position: "sub" onto "super"
+[PASS] font-variation-settings (type: fontVariationSettings) has testAccumulation function
+[PASS] font-variation-settings with composite type accumulate
+[PASS] font-variation-settings (type: discrete) has testAccumulation function
+[PASS] font-variation-settings: ""wdth" 5" onto ""wdth" 1, "wght" 1.1"
+[PASS] font-variation-settings: ""wdth" 1, "wght" 1.1" onto ""wdth" 5"
+[PASS] font-variation-settings: "normal" onto ""wdth" 5"
+[PASS] font-variation-settings: ""wdth" 5" onto "normal"
+[PASS] grid-auto-columns (type: discrete) has testAccumulation function
+[PASS] grid-auto-columns: "5px" onto "1px"
+[PASS] grid-auto-columns: "1px" onto "5px"
+[PASS] grid-auto-flow (type: discrete) has testAccumulation function
+[PASS] grid-auto-flow: "column" onto "row"
+[PASS] grid-auto-flow: "row" onto "column"
+[PASS] grid-auto-rows (type: discrete) has testAccumulation function
+[PASS] grid-auto-rows: "5px" onto "1px"
+[PASS] grid-auto-rows: "1px" onto "5px"
+[PASS] grid-column-end (type: discrete) has testAccumulation function
+[PASS] grid-column-end: "5" onto "1"
+[PASS] grid-column-end: "1" onto "5"
+[PASS] grid-column-start (type: discrete) has testAccumulation function
+[PASS] grid-column-start: "5" onto "1"
+[PASS] grid-column-start: "1" onto "5"
+[PASS] grid-row-end (type: discrete) has testAccumulation function
+[PASS] grid-row-end: "5" onto "1"
+[PASS] grid-row-end: "1" onto "5"
+[PASS] grid-row-start (type: discrete) has testAccumulation function
+[PASS] grid-row-start: "5" onto "1"
+[PASS] grid-row-start: "1" onto "5"
+[PASS] grid-template-areas (type: discrete) has testAccumulation function
+[PASS] grid-template-areas: "none" onto "". . a b" ". .a b""
+[FAIL] grid-template-areas: "". . a b" ". .a b"" onto "none"
+  assert_equals: The value should be ". . a b" ". .a b" at 0ms expected "\\". . a b\\" \\". .a b\\"" but got "\\". . a b\\" \\". . a b\\""
+[PASS] hyphens (type: discrete) has testAccumulation function
+[PASS] hyphens: "none" onto "manual"
+[PASS] hyphens: "manual" onto "none"
+[PASS] image-orientation (type: discrete) has testAccumulation function
+[PASS] image-orientation: "from-image" onto "none"
+[PASS] image-orientation: "none" onto "from-image"
+[PASS] initial-letter (type: discrete) has testAccumulation function
+[PASS] initial-letter: "3 4" onto "1 2"
+[PASS] initial-letter: "1 2" onto "3 4"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/web-animations/animation-model/animation-types/addition-per-property-001-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/web-animations/animation-model/animation-types/addition-per-property-001-expected.txt
new file mode 100644
index 0000000..c88df621
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/web-animations/animation-model/animation-types/addition-per-property-001-expected.txt
@@ -0,0 +1,319 @@
+This is a testharness.js-based test.
+Found 313 tests; 311 PASS, 2 FAIL, 0 TIMEOUT, 0 NOTRUN.
+[PASS] Setup
+[PASS] align-content (type: discrete) has testAddition function
+[PASS] align-content: "flex-end" onto "flex-start"
+[PASS] align-content: "flex-start" onto "flex-end"
+[PASS] align-items (type: discrete) has testAddition function
+[PASS] align-items: "flex-end" onto "flex-start"
+[PASS] align-items: "flex-start" onto "flex-end"
+[PASS] align-self (type: discrete) has testAddition function
+[PASS] align-self: "flex-end" onto "flex-start"
+[PASS] align-self: "flex-start" onto "flex-end"
+[PASS] backface-visibility (type: discrete) has testAddition function
+[PASS] backface-visibility: "hidden" onto "visible"
+[PASS] backface-visibility: "visible" onto "hidden"
+[PASS] background-attachment (type: discrete) has testAddition function
+[PASS] background-attachment: "local" onto "fixed"
+[PASS] background-attachment: "fixed" onto "local"
+[PASS] background-color (type: color) has testAddition function
+[PASS] background-color supports animating as color of rgb() with overflowed  from and to values
+[PASS] background-color supports animating as color of #RGB
+[PASS] background-color supports animating as color of hsl()
+[PASS] background-color supports animating as color of #RGBa
+[PASS] background-color supports animating as color of rgba()
+[PASS] background-color supports animating as color of hsla()
+[PASS] background-blend-mode (type: discrete) has testAddition function
+[PASS] background-blend-mode: "screen" onto "multiply"
+[PASS] background-blend-mode: "multiply" onto "screen"
+[PASS] background-clip (type: discrete) has testAddition function
+[PASS] background-clip: "content-box" onto "padding-box"
+[PASS] background-clip: "padding-box" onto "content-box"
+[PASS] background-image (type: discrete) has testAddition function
+[PASS] background-image: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")"
+[PASS] background-image: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")"
+[PASS] background-origin (type: discrete) has testAddition function
+[PASS] background-origin: "content-box" onto "padding-box"
+[PASS] background-origin: "padding-box" onto "content-box"
+[PASS] background-repeat (type: discrete) has testAddition function
+[PASS] background-repeat: "round" onto "space"
+[PASS] background-repeat: "space" onto "round"
+[PASS] border-bottom-color (type: color) has testAddition function
+[PASS] border-bottom-color supports animating as color of rgb() with overflowed  from and to values
+[PASS] border-bottom-color supports animating as color of #RGB
+[PASS] border-bottom-color supports animating as color of hsl()
+[PASS] border-bottom-color supports animating as color of #RGBa
+[PASS] border-bottom-color supports animating as color of rgba()
+[PASS] border-bottom-color supports animating as color of hsla()
+[PASS] border-bottom-style (type: discrete) has testAddition function
+[PASS] border-bottom-style: "solid" onto "dotted"
+[PASS] border-bottom-style: "dotted" onto "solid"
+[PASS] border-bottom-width (type: length) has testAddition function
+[PASS] border-bottom-width: length
+[PASS] border-bottom-width: length of rem
+[PASS] border-collapse (type: discrete) has testAddition function
+[PASS] border-collapse: "separate" onto "collapse"
+[PASS] border-collapse: "collapse" onto "separate"
+[PASS] border-image-repeat (type: discrete) has testAddition function
+[PASS] border-image-repeat: "round space" onto "stretch repeat"
+[PASS] border-image-repeat: "stretch repeat" onto "round space"
+[PASS] border-image-source (type: discrete) has testAddition function
+[PASS] border-image-source: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")"
+[PASS] border-image-source: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")"
+[PASS] border-left-color (type: color) has testAddition function
+[PASS] border-left-color supports animating as color of rgb() with overflowed  from and to values
+[PASS] border-left-color supports animating as color of #RGB
+[PASS] border-left-color supports animating as color of hsl()
+[PASS] border-left-color supports animating as color of #RGBa
+[PASS] border-left-color supports animating as color of rgba()
+[PASS] border-left-color supports animating as color of hsla()
+[PASS] border-left-style (type: discrete) has testAddition function
+[PASS] border-left-style: "solid" onto "dotted"
+[PASS] border-left-style: "dotted" onto "solid"
+[PASS] border-left-width (type: length) has testAddition function
+[PASS] border-left-width: length
+[PASS] border-left-width: length of rem
+[PASS] border-right-color (type: color) has testAddition function
+[PASS] border-right-color supports animating as color of rgb() with overflowed  from and to values
+[PASS] border-right-color supports animating as color of #RGB
+[PASS] border-right-color supports animating as color of hsl()
+[PASS] border-right-color supports animating as color of #RGBa
+[PASS] border-right-color supports animating as color of rgba()
+[PASS] border-right-color supports animating as color of hsla()
+[PASS] border-right-style (type: discrete) has testAddition function
+[PASS] border-right-style: "solid" onto "dotted"
+[PASS] border-right-style: "dotted" onto "solid"
+[PASS] border-right-width (type: length) has testAddition function
+[PASS] border-right-width: length
+[PASS] border-right-width: length of rem
+[PASS] border-spacing (type: lengthPair) has testAddition function
+[PASS] border-spacing: length pair
+[PASS] border-spacing: length pair of rem
+[PASS] border-top-color (type: color) has testAddition function
+[PASS] border-top-color supports animating as color of rgb() with overflowed  from and to values
+[PASS] border-top-color supports animating as color of #RGB
+[PASS] border-top-color supports animating as color of hsl()
+[PASS] border-top-color supports animating as color of #RGBa
+[PASS] border-top-color supports animating as color of rgba()
+[PASS] border-top-color supports animating as color of hsla()
+[PASS] border-top-style (type: discrete) has testAddition function
+[PASS] border-top-style: "solid" onto "dotted"
+[PASS] border-top-style: "dotted" onto "solid"
+[PASS] border-top-width (type: length) has testAddition function
+[PASS] border-top-width: length
+[PASS] border-top-width: length of rem
+[PASS] box-shadow (type: boxShadowList) has testAddition function
+[PASS] box-shadow: shadow
+[PASS] box-sizing (type: discrete) has testAddition function
+[PASS] box-sizing: "border-box" onto "content-box"
+[PASS] box-sizing: "content-box" onto "border-box"
+[PASS] caption-side (type: discrete) has testAddition function
+[PASS] caption-side: "bottom" onto "top"
+[PASS] caption-side: "top" onto "bottom"
+[PASS] caret-color (type: color) has testAddition function
+[PASS] caret-color supports animating as color of rgb() with overflowed  from and to values
+[PASS] caret-color supports animating as color of #RGB
+[PASS] caret-color supports animating as color of hsl()
+[PASS] caret-color supports animating as color of #RGBa
+[PASS] caret-color supports animating as color of rgba()
+[PASS] caret-color supports animating as color of hsla()
+[PASS] clear (type: discrete) has testAddition function
+[PASS] clear: "right" onto "left"
+[PASS] clear: "left" onto "right"
+[PASS] clip (type: rect) has testAddition function
+[PASS] clip: rect
+[PASS] clip (type: discrete) has testAddition function
+[PASS] clip: "auto" onto "rect(10px, 10px, 10px, 10px)"
+[PASS] clip: "rect(10px, 10px, 10px, 10px)" onto "auto"
+[PASS] clip: "rect(10px, 10px, 10px, auto)" onto "rect(10px, 10px, 10px, 10px)"
+[PASS] clip: "rect(10px, 10px, 10px, 10px)" onto "rect(10px, 10px, 10px, auto)"
+[PASS] clip-rule (type: discrete) has testAddition function
+[PASS] clip-rule: "nonzero" onto "evenodd"
+[PASS] clip-rule: "evenodd" onto "nonzero"
+[PASS] color (type: color) has testAddition function
+[PASS] color supports animating as color of rgb() with overflowed  from and to values
+[PASS] color supports animating as color of #RGB
+[PASS] color supports animating as color of hsl()
+[PASS] color supports animating as color of #RGBa
+[PASS] color supports animating as color of rgba()
+[PASS] color supports animating as color of hsla()
+[PASS] color-interpolation (type: discrete) has testAddition function
+[PASS] color-interpolation: "auto" onto "linearrgb"
+[PASS] color-interpolation: "linearrgb" onto "auto"
+[PASS] color-interpolation-filters (type: discrete) has testAddition function
+[PASS] color-interpolation-filters: "linearrgb" onto "srgb"
+[PASS] color-interpolation-filters: "srgb" onto "linearrgb"
+[PASS] column-count (type: positiveInteger) has testAddition function
+[PASS] column-count: positive integer
+[PASS] column-count (type: discrete) has testAddition function
+[PASS] column-count: "10" onto "auto"
+[PASS] column-count: "auto" onto "10"
+[PASS] column-gap (type: length) has testAddition function
+[PASS] column-gap: length
+[PASS] column-gap: length of rem
+[PASS] column-gap (type: discrete) has testAddition function
+[PASS] column-gap: "200px" onto "normal"
+[PASS] column-gap: "normal" onto "200px"
+[PASS] column-rule-color (type: color) has testAddition function
+[PASS] column-rule-color supports animating as color of rgb() with overflowed  from and to values
+[PASS] column-rule-color supports animating as color of #RGB
+[PASS] column-rule-color supports animating as color of hsl()
+[PASS] column-rule-color supports animating as color of #RGBa
+[PASS] column-rule-color supports animating as color of rgba()
+[PASS] column-rule-color supports animating as color of hsla()
+[PASS] column-fill (type: discrete) has testAddition function
+[PASS] column-fill: "balance" onto "auto"
+[PASS] column-fill: "auto" onto "balance"
+[PASS] column-rule-style (type: discrete) has testAddition function
+[PASS] column-rule-style: "dotted" onto "none"
+[PASS] column-rule-style: "none" onto "dotted"
+[PASS] column-rule-width (type: length) has testAddition function
+[PASS] column-rule-width: length
+[PASS] column-rule-width: length of rem
+[PASS] column-width (type: length) has testAddition function
+[PASS] column-width: length
+[PASS] column-width: length of rem
+[PASS] column-width (type: discrete) has testAddition function
+[PASS] column-width: "1px" onto "auto"
+[PASS] column-width: "auto" onto "1px"
+[PASS] counter-increment (type: discrete) has testAddition function
+[PASS] counter-increment: "ident-2 2" onto "ident-1 1"
+[PASS] counter-increment: "ident-1 1" onto "ident-2 2"
+[PASS] counter-reset (type: discrete) has testAddition function
+[PASS] counter-reset: "ident-2 2" onto "ident-1 1"
+[PASS] counter-reset: "ident-1 1" onto "ident-2 2"
+[PASS] cursor (type: discrete) has testAddition function
+[PASS] cursor: "wait" onto "pointer"
+[PASS] cursor: "pointer" onto "wait"
+[PASS] dominant-baseline (type: discrete) has testAddition function
+[PASS] dominant-baseline: "alphabetic" onto "ideographic"
+[PASS] dominant-baseline: "ideographic" onto "alphabetic"
+[PASS] empty-cells (type: discrete) has testAddition function
+[PASS] empty-cells: "hide" onto "show"
+[PASS] empty-cells: "show" onto "hide"
+[PASS] fill-opacity (type: opacity) has testAddition function
+[PASS] fill-opacity: [0, 1] number
+[PASS] fill-opacity: [0, 1] number (clamped)
+[PASS] fill-rule (type: discrete) has testAddition function
+[PASS] fill-rule: "nonzero" onto "evenodd"
+[PASS] fill-rule: "evenodd" onto "nonzero"
+[PASS] filter (type: filterList) has testAddition function
+[PASS] filter: blur on blur
+[PASS] filter: different filter functions
+[PASS] flex-basis (type: lengthPercentageOrCalc) has testAddition function
+[PASS] flex-basis: length
+[PASS] flex-basis: length of rem
+[PASS] flex-basis: percentage
+[PASS] flex-basis: units "%" onto "px"
+[PASS] flex-basis: units "px" onto "%"
+[PASS] flex-basis: units "rem" onto "%"
+[PASS] flex-basis: units "%" onto "rem"
+[PASS] flex-basis: units "rem" onto "em"
+[PASS] flex-basis: units "em" onto "rem"
+[PASS] flex-basis: units "calc" onto "px"
+[PASS] flex-basis: calc
+[PASS] flex-basis (type: discrete) has testAddition function
+[PASS] flex-basis: "10px" onto "auto"
+[PASS] flex-basis: "auto" onto "10px"
+[PASS] flex-direction (type: discrete) has testAddition function
+[PASS] flex-direction: "row-reverse" onto "row"
+[PASS] flex-direction: "row" onto "row-reverse"
+[PASS] flex-grow (type: positiveNumber) has testAddition function
+[PASS] flex-grow: positive number
+[PASS] flex-shrink (type: positiveNumber) has testAddition function
+[PASS] flex-shrink: positive number
+[PASS] flex-wrap (type: discrete) has testAddition function
+[PASS] flex-wrap: "wrap" onto "nowrap"
+[PASS] flex-wrap: "nowrap" onto "wrap"
+[PASS] flood-color (type: color) has testAddition function
+[PASS] flood-color supports animating as color of rgb() with overflowed  from and to values
+[PASS] flood-color supports animating as color of #RGB
+[PASS] flood-color supports animating as color of hsl()
+[PASS] flood-color supports animating as color of #RGBa
+[PASS] flood-color supports animating as color of rgba()
+[PASS] flood-color supports animating as color of hsla()
+[PASS] flood-opacity (type: opacity) has testAddition function
+[PASS] flood-opacity: [0, 1] number
+[PASS] flood-opacity: [0, 1] number (clamped)
+[PASS] font-stretch (type: percentage) has testAddition function
+[PASS] font-stretch: percentage
+[PASS] font-style (type: discrete) has testAddition function
+[FAIL] font-style: "oblique" onto "italic"
+  assert_equals: The value should be oblique at 0ms expected "oblique" but got "italic"
+[PASS] font-style: "italic" onto "oblique"
+[PASS] float (type: discrete) has testAddition function
+[PASS] float: "right" onto "left"
+[PASS] float: "left" onto "right"
+[PASS] font-family (type: discrete) has testAddition function
+[PASS] font-family: "verdana" onto "helvetica"
+[PASS] font-family: "helvetica" onto "verdana"
+[PASS] font-feature-settings (type: discrete) has testAddition function
+[PASS] font-feature-settings: "normal" onto ""liga" 5"
+[PASS] font-feature-settings: ""liga" 5" onto "normal"
+[PASS] font-kerning (type: discrete) has testAddition function
+[PASS] font-kerning: "normal" onto "auto"
+[PASS] font-kerning: "auto" onto "normal"
+[PASS] font-synthesis (type: discrete) has testAddition function
+[PASS] font-synthesis: "weight style" onto "none"
+[PASS] font-synthesis: "none" onto "weight style"
+[PASS] font-variant-alternates (type: discrete) has testAddition function
+[PASS] font-variant-alternates: "stylistic(unknown)" onto "swash(unknown)"
+[PASS] font-variant-alternates: "swash(unknown)" onto "stylistic(unknown)"
+[PASS] font-variant-caps (type: discrete) has testAddition function
+[PASS] font-variant-caps: "unicase" onto "small-caps"
+[PASS] font-variant-caps: "small-caps" onto "unicase"
+[PASS] font-variant-east-asian (type: discrete) has testAddition function
+[PASS] font-variant-east-asian: "proportional-width" onto "full-width"
+[PASS] font-variant-east-asian: "full-width" onto "proportional-width"
+[PASS] font-variant-ligatures (type: discrete) has testAddition function
+[PASS] font-variant-ligatures: "no-common-ligatures" onto "common-ligatures"
+[PASS] font-variant-ligatures: "common-ligatures" onto "no-common-ligatures"
+[PASS] font-variant-numeric (type: discrete) has testAddition function
+[PASS] font-variant-numeric: "oldstyle-nums" onto "lining-nums"
+[PASS] font-variant-numeric: "lining-nums" onto "oldstyle-nums"
+[PASS] font-variant-position (type: discrete) has testAddition function
+[PASS] font-variant-position: "super" onto "sub"
+[PASS] font-variant-position: "sub" onto "super"
+[PASS] font-variation-settings (type: fontVariationSettings) has testAddition function
+[PASS] font-variation-settings with composite type add
+[PASS] font-variation-settings (type: discrete) has testAddition function
+[PASS] font-variation-settings: ""wdth" 5" onto ""wdth" 1, "wght" 1.1"
+[PASS] font-variation-settings: ""wdth" 1, "wght" 1.1" onto ""wdth" 5"
+[PASS] font-variation-settings: "normal" onto ""wdth" 5"
+[PASS] font-variation-settings: ""wdth" 5" onto "normal"
+[PASS] grid-auto-columns (type: discrete) has testAddition function
+[PASS] grid-auto-columns: "5px" onto "1px"
+[PASS] grid-auto-columns: "1px" onto "5px"
+[PASS] grid-auto-flow (type: discrete) has testAddition function
+[PASS] grid-auto-flow: "column" onto "row"
+[PASS] grid-auto-flow: "row" onto "column"
+[PASS] grid-auto-rows (type: discrete) has testAddition function
+[PASS] grid-auto-rows: "5px" onto "1px"
+[PASS] grid-auto-rows: "1px" onto "5px"
+[PASS] grid-column-end (type: discrete) has testAddition function
+[PASS] grid-column-end: "5" onto "1"
+[PASS] grid-column-end: "1" onto "5"
+[PASS] grid-column-start (type: discrete) has testAddition function
+[PASS] grid-column-start: "5" onto "1"
+[PASS] grid-column-start: "1" onto "5"
+[PASS] grid-row-end (type: discrete) has testAddition function
+[PASS] grid-row-end: "5" onto "1"
+[PASS] grid-row-end: "1" onto "5"
+[PASS] grid-row-start (type: discrete) has testAddition function
+[PASS] grid-row-start: "5" onto "1"
+[PASS] grid-row-start: "1" onto "5"
+[PASS] grid-template-areas (type: discrete) has testAddition function
+[PASS] grid-template-areas: "none" onto "". . a b" ". .a b""
+[FAIL] grid-template-areas: "". . a b" ". .a b"" onto "none"
+  assert_equals: The value should be ". . a b" ". .a b" at 0ms expected "\\". . a b\\" \\". .a b\\"" but got "\\". . a b\\" \\". . a b\\""
+[PASS] hyphens (type: discrete) has testAddition function
+[PASS] hyphens: "none" onto "manual"
+[PASS] hyphens: "manual" onto "none"
+[PASS] image-orientation (type: discrete) has testAddition function
+[PASS] image-orientation: "from-image" onto "none"
+[PASS] image-orientation: "none" onto "from-image"
+[PASS] initial-letter (type: discrete) has testAddition function
+[PASS] initial-letter: "3 4" onto "1 2"
+[PASS] initial-letter: "1 2" onto "3 4"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/web-animations/animation-model/animation-types/interpolation-per-property-001-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/web-animations/animation-model/animation-types/interpolation-per-property-001-expected.txt
new file mode 100644
index 0000000..5edf710
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/web-animations/animation-model/animation-types/interpolation-per-property-001-expected.txt
@@ -0,0 +1,405 @@
+This is a testharness.js-based test.
+Found 389 tests; 377 PASS, 12 FAIL, 0 TIMEOUT, 0 NOTRUN.
+[PASS] Setup
+[PASS] align-content (type: discrete) has testInterpolation function
+[PASS] align-content uses discrete animation when animating between "flex-start" and "flex-end" with linear easing
+[PASS] align-content uses discrete animation when animating between "flex-start" and "flex-end" with effect easing
+[PASS] align-content uses discrete animation when animating between "flex-start" and "flex-end" with keyframe easing
+[PASS] align-items (type: discrete) has testInterpolation function
+[PASS] align-items uses discrete animation when animating between "flex-start" and "flex-end" with linear easing
+[PASS] align-items uses discrete animation when animating between "flex-start" and "flex-end" with effect easing
+[PASS] align-items uses discrete animation when animating between "flex-start" and "flex-end" with keyframe easing
+[PASS] align-self (type: discrete) has testInterpolation function
+[PASS] align-self uses discrete animation when animating between "flex-start" and "flex-end" with linear easing
+[PASS] align-self uses discrete animation when animating between "flex-start" and "flex-end" with effect easing
+[PASS] align-self uses discrete animation when animating between "flex-start" and "flex-end" with keyframe easing
+[PASS] backface-visibility (type: discrete) has testInterpolation function
+[PASS] backface-visibility uses discrete animation when animating between "visible" and "hidden" with linear easing
+[PASS] backface-visibility uses discrete animation when animating between "visible" and "hidden" with effect easing
+[PASS] backface-visibility uses discrete animation when animating between "visible" and "hidden" with keyframe easing
+[PASS] background-attachment (type: discrete) has testInterpolation function
+[PASS] background-attachment uses discrete animation when animating between "fixed" and "local" with linear easing
+[PASS] background-attachment uses discrete animation when animating between "fixed" and "local" with effect easing
+[PASS] background-attachment uses discrete animation when animating between "fixed" and "local" with keyframe easing
+[PASS] background-color (type: color) has testInterpolation function
+[PASS] background-color supports animating as color of rgb()
+[PASS] background-color supports animating as color of #RGB
+[PASS] background-color supports animating as color of hsl()
+[PASS] background-color supports animating as color of #RGBa
+[PASS] background-color supports animating as color of rgba()
+[PASS] background-color supports animating as color of hsla()
+[PASS] background-blend-mode (type: discrete) has testInterpolation function
+[PASS] background-blend-mode uses discrete animation when animating between "multiply" and "screen" with linear easing
+[PASS] background-blend-mode uses discrete animation when animating between "multiply" and "screen" with effect easing
+[PASS] background-blend-mode uses discrete animation when animating between "multiply" and "screen" with keyframe easing
+[PASS] background-clip (type: discrete) has testInterpolation function
+[PASS] background-clip uses discrete animation when animating between "padding-box" and "content-box" with linear easing
+[PASS] background-clip uses discrete animation when animating between "padding-box" and "content-box" with effect easing
+[PASS] background-clip uses discrete animation when animating between "padding-box" and "content-box" with keyframe easing
+[PASS] background-image (type: discrete) has testInterpolation function
+[FAIL] background-image uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with linear easing
+  assert_equals: The value should be url("http://localhost/test-1") at 499ms expected "url(\\"http://localhost/test-1\\")" but got "-webkit-cross-fade(url(\\"http://localhost/test-1\\"), url(\\"http://localhost/test-2\\"), 0.499)"
+[FAIL] background-image uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with effect easing
+  assert_equals: The value should be url("http://localhost/test-1") at 940ms expected "url(\\"http://localhost/test-1\\")" but got "-webkit-cross-fade(url(\\"http://localhost/test-1\\"), url(\\"http://localhost/test-2\\"), 0.428259)"
+[FAIL] background-image uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with keyframe easing
+  assert_equals: The value should be url("http://localhost/test-1") at 940ms expected "url(\\"http://localhost/test-1\\")" but got "-webkit-cross-fade(url(\\"http://localhost/test-1\\"), url(\\"http://localhost/test-2\\"), 0.428259)"
+[PASS] background-origin (type: discrete) has testInterpolation function
+[PASS] background-origin uses discrete animation when animating between "padding-box" and "content-box" with linear easing
+[PASS] background-origin uses discrete animation when animating between "padding-box" and "content-box" with effect easing
+[PASS] background-origin uses discrete animation when animating between "padding-box" and "content-box" with keyframe easing
+[PASS] background-repeat (type: discrete) has testInterpolation function
+[PASS] background-repeat uses discrete animation when animating between "space" and "round" with linear easing
+[PASS] background-repeat uses discrete animation when animating between "space" and "round" with effect easing
+[PASS] background-repeat uses discrete animation when animating between "space" and "round" with keyframe easing
+[PASS] border-bottom-color (type: color) has testInterpolation function
+[PASS] border-bottom-color supports animating as color of rgb()
+[PASS] border-bottom-color supports animating as color of #RGB
+[PASS] border-bottom-color supports animating as color of hsl()
+[PASS] border-bottom-color supports animating as color of #RGBa
+[PASS] border-bottom-color supports animating as color of rgba()
+[PASS] border-bottom-color supports animating as color of hsla()
+[PASS] border-bottom-style (type: discrete) has testInterpolation function
+[PASS] border-bottom-style uses discrete animation when animating between "dotted" and "solid" with linear easing
+[PASS] border-bottom-style uses discrete animation when animating between "dotted" and "solid" with effect easing
+[PASS] border-bottom-style uses discrete animation when animating between "dotted" and "solid" with keyframe easing
+[PASS] border-bottom-width (type: length) has testInterpolation function
+[PASS] border-bottom-width supports animating as a length
+[PASS] border-bottom-width supports animating as a length of rem
+[PASS] border-collapse (type: discrete) has testInterpolation function
+[PASS] border-collapse uses discrete animation when animating between "collapse" and "separate" with linear easing
+[PASS] border-collapse uses discrete animation when animating between "collapse" and "separate" with effect easing
+[PASS] border-collapse uses discrete animation when animating between "collapse" and "separate" with keyframe easing
+[PASS] border-image-repeat (type: discrete) has testInterpolation function
+[PASS] border-image-repeat uses discrete animation when animating between "stretch repeat" and "round space" with linear easing
+[PASS] border-image-repeat uses discrete animation when animating between "stretch repeat" and "round space" with effect easing
+[PASS] border-image-repeat uses discrete animation when animating between "stretch repeat" and "round space" with keyframe easing
+[PASS] border-image-source (type: discrete) has testInterpolation function
+[FAIL] border-image-source uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with linear easing
+  assert_equals: The value should be url("http://localhost/test-1") at 499ms expected "url(\\"http://localhost/test-1\\")" but got "-webkit-cross-fade(url(\\"http://localhost/test-1\\"), url(\\"http://localhost/test-2\\"), 0.499)"
+[FAIL] border-image-source uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with effect easing
+  assert_equals: The value should be url("http://localhost/test-1") at 940ms expected "url(\\"http://localhost/test-1\\")" but got "-webkit-cross-fade(url(\\"http://localhost/test-1\\"), url(\\"http://localhost/test-2\\"), 0.428259)"
+[FAIL] border-image-source uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with keyframe easing
+  assert_equals: The value should be url("http://localhost/test-1") at 940ms expected "url(\\"http://localhost/test-1\\")" but got "-webkit-cross-fade(url(\\"http://localhost/test-1\\"), url(\\"http://localhost/test-2\\"), 0.428259)"
+[PASS] border-left-color (type: color) has testInterpolation function
+[PASS] border-left-color supports animating as color of rgb()
+[PASS] border-left-color supports animating as color of #RGB
+[PASS] border-left-color supports animating as color of hsl()
+[PASS] border-left-color supports animating as color of #RGBa
+[PASS] border-left-color supports animating as color of rgba()
+[PASS] border-left-color supports animating as color of hsla()
+[PASS] border-left-style (type: discrete) has testInterpolation function
+[PASS] border-left-style uses discrete animation when animating between "dotted" and "solid" with linear easing
+[PASS] border-left-style uses discrete animation when animating between "dotted" and "solid" with effect easing
+[PASS] border-left-style uses discrete animation when animating between "dotted" and "solid" with keyframe easing
+[PASS] border-left-width (type: length) has testInterpolation function
+[PASS] border-left-width supports animating as a length
+[PASS] border-left-width supports animating as a length of rem
+[PASS] border-right-color (type: color) has testInterpolation function
+[PASS] border-right-color supports animating as color of rgb()
+[PASS] border-right-color supports animating as color of #RGB
+[PASS] border-right-color supports animating as color of hsl()
+[PASS] border-right-color supports animating as color of #RGBa
+[PASS] border-right-color supports animating as color of rgba()
+[PASS] border-right-color supports animating as color of hsla()
+[PASS] border-right-style (type: discrete) has testInterpolation function
+[PASS] border-right-style uses discrete animation when animating between "dotted" and "solid" with linear easing
+[PASS] border-right-style uses discrete animation when animating between "dotted" and "solid" with effect easing
+[PASS] border-right-style uses discrete animation when animating between "dotted" and "solid" with keyframe easing
+[PASS] border-right-width (type: length) has testInterpolation function
+[PASS] border-right-width supports animating as a length
+[PASS] border-right-width supports animating as a length of rem
+[PASS] border-spacing (type: lengthPair) has testInterpolation function
+[PASS] border-spacing supports animating as a length pair
+[PASS] border-spacing supports animating as a length pair of rem
+[PASS] border-top-color (type: color) has testInterpolation function
+[PASS] border-top-color supports animating as color of rgb()
+[PASS] border-top-color supports animating as color of #RGB
+[PASS] border-top-color supports animating as color of hsl()
+[PASS] border-top-color supports animating as color of #RGBa
+[PASS] border-top-color supports animating as color of rgba()
+[PASS] border-top-color supports animating as color of hsla()
+[PASS] border-top-style (type: discrete) has testInterpolation function
+[PASS] border-top-style uses discrete animation when animating between "dotted" and "solid" with linear easing
+[PASS] border-top-style uses discrete animation when animating between "dotted" and "solid" with effect easing
+[PASS] border-top-style uses discrete animation when animating between "dotted" and "solid" with keyframe easing
+[PASS] border-top-width (type: length) has testInterpolation function
+[PASS] border-top-width supports animating as a length
+[PASS] border-top-width supports animating as a length of rem
+[PASS] box-shadow (type: boxShadowList) has testInterpolation function
+[PASS] box-shadow: from none to other
+[PASS] box-shadow: from other to none
+[PASS] box-shadow: single shadow
+[PASS] box-shadow: shadow list
+[PASS] box-shadow: mismatched list length (from shorter to longer)
+[PASS] box-shadow: mismatched list length (from longer to shorter)
+[PASS] box-shadow: with currentcolor
+[PASS] box-sizing (type: discrete) has testInterpolation function
+[PASS] box-sizing uses discrete animation when animating between "content-box" and "border-box" with linear easing
+[PASS] box-sizing uses discrete animation when animating between "content-box" and "border-box" with effect easing
+[PASS] box-sizing uses discrete animation when animating between "content-box" and "border-box" with keyframe easing
+[PASS] caption-side (type: discrete) has testInterpolation function
+[PASS] caption-side uses discrete animation when animating between "top" and "bottom" with linear easing
+[PASS] caption-side uses discrete animation when animating between "top" and "bottom" with effect easing
+[PASS] caption-side uses discrete animation when animating between "top" and "bottom" with keyframe easing
+[PASS] caret-color (type: color) has testInterpolation function
+[PASS] caret-color supports animating as color of rgb()
+[PASS] caret-color supports animating as color of #RGB
+[PASS] caret-color supports animating as color of hsl()
+[PASS] caret-color supports animating as color of #RGBa
+[PASS] caret-color supports animating as color of rgba()
+[PASS] caret-color supports animating as color of hsla()
+[PASS] clear (type: discrete) has testInterpolation function
+[PASS] clear uses discrete animation when animating between "left" and "right" with linear easing
+[PASS] clear uses discrete animation when animating between "left" and "right" with effect easing
+[PASS] clear uses discrete animation when animating between "left" and "right" with keyframe easing
+[PASS] clip (type: rect) has testInterpolation function
+[PASS] clip supports animating as a rect
+[PASS] clip (type: discrete) has testInterpolation function
+[PASS] clip uses discrete animation when animating between "rect(10px, 10px, 10px, 10px)" and "auto" with linear easing
+[PASS] clip uses discrete animation when animating between "rect(10px, 10px, 10px, 10px)" and "auto" with effect easing
+[PASS] clip uses discrete animation when animating between "rect(10px, 10px, 10px, 10px)" and "auto" with keyframe easing
+[PASS] clip uses discrete animation when animating between "rect(10px, 10px, 10px, 10px)" and "rect(10px, 10px, 10px, auto)" with linear easing
+[PASS] clip uses discrete animation when animating between "rect(10px, 10px, 10px, 10px)" and "rect(10px, 10px, 10px, auto)" with effect easing
+[PASS] clip uses discrete animation when animating between "rect(10px, 10px, 10px, 10px)" and "rect(10px, 10px, 10px, auto)" with keyframe easing
+[PASS] clip-rule (type: discrete) has testInterpolation function
+[PASS] clip-rule uses discrete animation when animating between "evenodd" and "nonzero" with linear easing
+[PASS] clip-rule uses discrete animation when animating between "evenodd" and "nonzero" with effect easing
+[PASS] clip-rule uses discrete animation when animating between "evenodd" and "nonzero" with keyframe easing
+[PASS] color (type: color) has testInterpolation function
+[PASS] color supports animating as color of rgb()
+[PASS] color supports animating as color of #RGB
+[PASS] color supports animating as color of hsl()
+[PASS] color supports animating as color of #RGBa
+[PASS] color supports animating as color of rgba()
+[PASS] color supports animating as color of hsla()
+[PASS] color-interpolation (type: discrete) has testInterpolation function
+[PASS] color-interpolation uses discrete animation when animating between "linearrgb" and "auto" with linear easing
+[PASS] color-interpolation uses discrete animation when animating between "linearrgb" and "auto" with effect easing
+[PASS] color-interpolation uses discrete animation when animating between "linearrgb" and "auto" with keyframe easing
+[PASS] color-interpolation-filters (type: discrete) has testInterpolation function
+[PASS] color-interpolation-filters uses discrete animation when animating between "srgb" and "linearrgb" with linear easing
+[PASS] color-interpolation-filters uses discrete animation when animating between "srgb" and "linearrgb" with effect easing
+[PASS] color-interpolation-filters uses discrete animation when animating between "srgb" and "linearrgb" with keyframe easing
+[PASS] column-count (type: positiveInteger) has testInterpolation function
+[PASS] column-count supports animating as a positive integer
+[PASS] column-count (type: discrete) has testInterpolation function
+[PASS] column-count uses discrete animation when animating between "auto" and "10" with linear easing
+[PASS] column-count uses discrete animation when animating between "auto" and "10" with effect easing
+[PASS] column-count uses discrete animation when animating between "auto" and "10" with keyframe easing
+[PASS] column-gap (type: length) has testInterpolation function
+[PASS] column-gap supports animating as a length
+[PASS] column-gap supports animating as a length of rem
+[PASS] column-gap (type: discrete) has testInterpolation function
+[PASS] column-gap uses discrete animation when animating between "normal" and "200px" with linear easing
+[PASS] column-gap uses discrete animation when animating between "normal" and "200px" with effect easing
+[PASS] column-gap uses discrete animation when animating between "normal" and "200px" with keyframe easing
+[PASS] column-rule-color (type: color) has testInterpolation function
+[PASS] column-rule-color supports animating as color of rgb()
+[PASS] column-rule-color supports animating as color of #RGB
+[PASS] column-rule-color supports animating as color of hsl()
+[PASS] column-rule-color supports animating as color of #RGBa
+[PASS] column-rule-color supports animating as color of rgba()
+[PASS] column-rule-color supports animating as color of hsla()
+[PASS] column-fill (type: discrete) has testInterpolation function
+[PASS] column-fill uses discrete animation when animating between "auto" and "balance" with linear easing
+[PASS] column-fill uses discrete animation when animating between "auto" and "balance" with effect easing
+[PASS] column-fill uses discrete animation when animating between "auto" and "balance" with keyframe easing
+[PASS] column-rule-style (type: discrete) has testInterpolation function
+[PASS] column-rule-style uses discrete animation when animating between "none" and "dotted" with linear easing
+[PASS] column-rule-style uses discrete animation when animating between "none" and "dotted" with effect easing
+[PASS] column-rule-style uses discrete animation when animating between "none" and "dotted" with keyframe easing
+[PASS] column-rule-width (type: length) has testInterpolation function
+[PASS] column-rule-width supports animating as a length
+[PASS] column-rule-width supports animating as a length of rem
+[PASS] column-width (type: length) has testInterpolation function
+[PASS] column-width supports animating as a length
+[PASS] column-width supports animating as a length of rem
+[PASS] column-width (type: discrete) has testInterpolation function
+[PASS] column-width uses discrete animation when animating between "auto" and "1px" with linear easing
+[PASS] column-width uses discrete animation when animating between "auto" and "1px" with effect easing
+[PASS] column-width uses discrete animation when animating between "auto" and "1px" with keyframe easing
+[PASS] counter-increment (type: discrete) has testInterpolation function
+[PASS] counter-increment uses discrete animation when animating between "ident-1 1" and "ident-2 2" with linear easing
+[PASS] counter-increment uses discrete animation when animating between "ident-1 1" and "ident-2 2" with effect easing
+[PASS] counter-increment uses discrete animation when animating between "ident-1 1" and "ident-2 2" with keyframe easing
+[PASS] counter-reset (type: discrete) has testInterpolation function
+[PASS] counter-reset uses discrete animation when animating between "ident-1 1" and "ident-2 2" with linear easing
+[PASS] counter-reset uses discrete animation when animating between "ident-1 1" and "ident-2 2" with effect easing
+[PASS] counter-reset uses discrete animation when animating between "ident-1 1" and "ident-2 2" with keyframe easing
+[PASS] cursor (type: discrete) has testInterpolation function
+[PASS] cursor uses discrete animation when animating between "pointer" and "wait" with linear easing
+[PASS] cursor uses discrete animation when animating between "pointer" and "wait" with effect easing
+[PASS] cursor uses discrete animation when animating between "pointer" and "wait" with keyframe easing
+[PASS] dominant-baseline (type: discrete) has testInterpolation function
+[PASS] dominant-baseline uses discrete animation when animating between "ideographic" and "alphabetic" with linear easing
+[PASS] dominant-baseline uses discrete animation when animating between "ideographic" and "alphabetic" with effect easing
+[PASS] dominant-baseline uses discrete animation when animating between "ideographic" and "alphabetic" with keyframe easing
+[PASS] empty-cells (type: discrete) has testInterpolation function
+[PASS] empty-cells uses discrete animation when animating between "show" and "hide" with linear easing
+[PASS] empty-cells uses discrete animation when animating between "show" and "hide" with effect easing
+[PASS] empty-cells uses discrete animation when animating between "show" and "hide" with keyframe easing
+[PASS] fill-opacity (type: opacity) has testInterpolation function
+[PASS] fill-opacity supports animating as a [0, 1] number
+[PASS] fill-rule (type: discrete) has testInterpolation function
+[PASS] fill-rule uses discrete animation when animating between "evenodd" and "nonzero" with linear easing
+[PASS] fill-rule uses discrete animation when animating between "evenodd" and "nonzero" with effect easing
+[PASS] fill-rule uses discrete animation when animating between "evenodd" and "nonzero" with keyframe easing
+[PASS] filter (type: filterList) has testInterpolation function
+[PASS] filter: blur function
+[PASS] filter: hue-rotate function with same unit(deg)
+[PASS] filter: hue-rotate function with different unit(deg -> rad)
+[PASS] filter: drop-shadow function
+[PASS] filter: percentage or numeric-specifiable functions (number value)
+[PASS] filter: percentage or numeric-specifiable functions (percentage value)
+[PASS] filter: interpolate different length of filter-function-list with function which lacuna value is 1
+[PASS] filter: interpolate different length of filter-function-list with function which lacuna value is 0
+[PASS] filter: interpolate different length of filter-function-list with drop-shadow function
+[PASS] filter: interpolate from none
+[PASS] filter: url function (interpoalte as discrete)
+[PASS] flex-basis (type: lengthPercentageOrCalc) has testInterpolation function
+[PASS] flex-basis supports animating as a length
+[PASS] flex-basis supports animating as a length of rem
+[PASS] flex-basis supports animating as a percentage
+[PASS] flex-basis supports animating as combination units "px" and "%"
+[PASS] flex-basis supports animating as combination units "%" and "em"
+[PASS] flex-basis supports animating as combination units "em" and "rem"
+[PASS] flex-basis supports animating as combination units "px" and "calc"
+[PASS] flex-basis supports animating as a calc
+[PASS] flex-basis (type: discrete) has testInterpolation function
+[PASS] flex-basis uses discrete animation when animating between "auto" and "10px" with linear easing
+[PASS] flex-basis uses discrete animation when animating between "auto" and "10px" with effect easing
+[PASS] flex-basis uses discrete animation when animating between "auto" and "10px" with keyframe easing
+[PASS] flex-direction (type: discrete) has testInterpolation function
+[PASS] flex-direction uses discrete animation when animating between "row" and "row-reverse" with linear easing
+[PASS] flex-direction uses discrete animation when animating between "row" and "row-reverse" with effect easing
+[PASS] flex-direction uses discrete animation when animating between "row" and "row-reverse" with keyframe easing
+[PASS] flex-grow (type: positiveNumber) has testInterpolation function
+[PASS] flex-grow supports animating as a positive number
+[PASS] flex-shrink (type: positiveNumber) has testInterpolation function
+[PASS] flex-shrink supports animating as a positive number
+[PASS] flex-wrap (type: discrete) has testInterpolation function
+[PASS] flex-wrap uses discrete animation when animating between "nowrap" and "wrap" with linear easing
+[PASS] flex-wrap uses discrete animation when animating between "nowrap" and "wrap" with effect easing
+[PASS] flex-wrap uses discrete animation when animating between "nowrap" and "wrap" with keyframe easing
+[PASS] flood-color (type: color) has testInterpolation function
+[PASS] flood-color supports animating as color of rgb()
+[PASS] flood-color supports animating as color of #RGB
+[PASS] flood-color supports animating as color of hsl()
+[PASS] flood-color supports animating as color of #RGBa
+[PASS] flood-color supports animating as color of rgba()
+[PASS] flood-color supports animating as color of hsla()
+[PASS] flood-opacity (type: opacity) has testInterpolation function
+[PASS] flood-opacity supports animating as a [0, 1] number
+[PASS] font-stretch (type: percentage) has testInterpolation function
+[PASS] font-stretch supports animating as a percentage
+[PASS] font-style (type: discrete) has testInterpolation function
+[FAIL] font-style uses discrete animation when animating between "italic" and "oblique" with linear easing
+  assert_equals: The value should be oblique at 500ms expected "oblique" but got "italic"
+[FAIL] font-style uses discrete animation when animating between "italic" and "oblique" with effect easing
+  assert_equals: The value should be oblique at 960ms expected "oblique" but got "italic"
+[FAIL] font-style uses discrete animation when animating between "italic" and "oblique" with keyframe easing
+  assert_equals: The value should be oblique at 960ms expected "oblique" but got "italic"
+[PASS] float (type: discrete) has testInterpolation function
+[PASS] float uses discrete animation when animating between "left" and "right" with linear easing
+[PASS] float uses discrete animation when animating between "left" and "right" with effect easing
+[PASS] float uses discrete animation when animating between "left" and "right" with keyframe easing
+[PASS] font-family (type: discrete) has testInterpolation function
+[PASS] font-family uses discrete animation when animating between "helvetica" and "verdana" with linear easing
+[PASS] font-family uses discrete animation when animating between "helvetica" and "verdana" with effect easing
+[PASS] font-family uses discrete animation when animating between "helvetica" and "verdana" with keyframe easing
+[PASS] font-feature-settings (type: discrete) has testInterpolation function
+[PASS] font-feature-settings uses discrete animation when animating between ""liga" 5" and "normal" with linear easing
+[PASS] font-feature-settings uses discrete animation when animating between ""liga" 5" and "normal" with effect easing
+[PASS] font-feature-settings uses discrete animation when animating between ""liga" 5" and "normal" with keyframe easing
+[PASS] font-kerning (type: discrete) has testInterpolation function
+[PASS] font-kerning uses discrete animation when animating between "auto" and "normal" with linear easing
+[PASS] font-kerning uses discrete animation when animating between "auto" and "normal" with effect easing
+[PASS] font-kerning uses discrete animation when animating between "auto" and "normal" with keyframe easing
+[PASS] font-synthesis (type: discrete) has testInterpolation function
+[PASS] font-synthesis uses discrete animation when animating between "none" and "weight style" with linear easing
+[PASS] font-synthesis uses discrete animation when animating between "none" and "weight style" with effect easing
+[PASS] font-synthesis uses discrete animation when animating between "none" and "weight style" with keyframe easing
+[PASS] font-variant-alternates (type: discrete) has testInterpolation function
+[PASS] font-variant-alternates uses discrete animation when animating between "swash(unknown)" and "stylistic(unknown)" with linear easing
+[PASS] font-variant-alternates uses discrete animation when animating between "swash(unknown)" and "stylistic(unknown)" with effect easing
+[PASS] font-variant-alternates uses discrete animation when animating between "swash(unknown)" and "stylistic(unknown)" with keyframe easing
+[PASS] font-variant-caps (type: discrete) has testInterpolation function
+[PASS] font-variant-caps uses discrete animation when animating between "small-caps" and "unicase" with linear easing
+[PASS] font-variant-caps uses discrete animation when animating between "small-caps" and "unicase" with effect easing
+[PASS] font-variant-caps uses discrete animation when animating between "small-caps" and "unicase" with keyframe easing
+[PASS] font-variant-east-asian (type: discrete) has testInterpolation function
+[PASS] font-variant-east-asian uses discrete animation when animating between "full-width" and "proportional-width" with linear easing
+[PASS] font-variant-east-asian uses discrete animation when animating between "full-width" and "proportional-width" with effect easing
+[PASS] font-variant-east-asian uses discrete animation when animating between "full-width" and "proportional-width" with keyframe easing
+[PASS] font-variant-ligatures (type: discrete) has testInterpolation function
+[PASS] font-variant-ligatures uses discrete animation when animating between "common-ligatures" and "no-common-ligatures" with linear easing
+[PASS] font-variant-ligatures uses discrete animation when animating between "common-ligatures" and "no-common-ligatures" with effect easing
+[PASS] font-variant-ligatures uses discrete animation when animating between "common-ligatures" and "no-common-ligatures" with keyframe easing
+[PASS] font-variant-numeric (type: discrete) has testInterpolation function
+[PASS] font-variant-numeric uses discrete animation when animating between "lining-nums" and "oldstyle-nums" with linear easing
+[PASS] font-variant-numeric uses discrete animation when animating between "lining-nums" and "oldstyle-nums" with effect easing
+[PASS] font-variant-numeric uses discrete animation when animating between "lining-nums" and "oldstyle-nums" with keyframe easing
+[PASS] font-variant-position (type: discrete) has testInterpolation function
+[PASS] font-variant-position uses discrete animation when animating between "sub" and "super" with linear easing
+[PASS] font-variant-position uses discrete animation when animating between "sub" and "super" with effect easing
+[PASS] font-variant-position uses discrete animation when animating between "sub" and "super" with keyframe easing
+[PASS] font-variation-settings (type: fontVariationSettings) has testInterpolation function
+[PASS] font-variation-settings supports animation as float
+[PASS] font-variation-settings supports animation as float with multiple tags
+[PASS] font-variation-settings supports animation as float with multiple duplicate tags
+[PASS] font-variation-settings (type: discrete) has testInterpolation function
+[PASS] font-variation-settings uses discrete animation when animating between ""wdth" 1, "wght" 1.1" and ""wdth" 5" with linear easing
+[PASS] font-variation-settings uses discrete animation when animating between ""wdth" 1, "wght" 1.1" and ""wdth" 5" with effect easing
+[PASS] font-variation-settings uses discrete animation when animating between ""wdth" 1, "wght" 1.1" and ""wdth" 5" with keyframe easing
+[PASS] font-variation-settings uses discrete animation when animating between ""wdth" 5" and "normal" with linear easing
+[PASS] font-variation-settings uses discrete animation when animating between ""wdth" 5" and "normal" with effect easing
+[PASS] font-variation-settings uses discrete animation when animating between ""wdth" 5" and "normal" with keyframe easing
+[PASS] grid-auto-columns (type: discrete) has testInterpolation function
+[PASS] grid-auto-columns uses discrete animation when animating between "1px" and "5px" with linear easing
+[PASS] grid-auto-columns uses discrete animation when animating between "1px" and "5px" with effect easing
+[PASS] grid-auto-columns uses discrete animation when animating between "1px" and "5px" with keyframe easing
+[PASS] grid-auto-flow (type: discrete) has testInterpolation function
+[PASS] grid-auto-flow uses discrete animation when animating between "row" and "column" with linear easing
+[PASS] grid-auto-flow uses discrete animation when animating between "row" and "column" with effect easing
+[PASS] grid-auto-flow uses discrete animation when animating between "row" and "column" with keyframe easing
+[PASS] grid-auto-rows (type: discrete) has testInterpolation function
+[PASS] grid-auto-rows uses discrete animation when animating between "1px" and "5px" with linear easing
+[PASS] grid-auto-rows uses discrete animation when animating between "1px" and "5px" with effect easing
+[PASS] grid-auto-rows uses discrete animation when animating between "1px" and "5px" with keyframe easing
+[PASS] grid-column-end (type: discrete) has testInterpolation function
+[PASS] grid-column-end uses discrete animation when animating between "1" and "5" with linear easing
+[PASS] grid-column-end uses discrete animation when animating between "1" and "5" with effect easing
+[PASS] grid-column-end uses discrete animation when animating between "1" and "5" with keyframe easing
+[PASS] grid-column-start (type: discrete) has testInterpolation function
+[PASS] grid-column-start uses discrete animation when animating between "1" and "5" with linear easing
+[PASS] grid-column-start uses discrete animation when animating between "1" and "5" with effect easing
+[PASS] grid-column-start uses discrete animation when animating between "1" and "5" with keyframe easing
+[PASS] grid-row-end (type: discrete) has testInterpolation function
+[PASS] grid-row-end uses discrete animation when animating between "1" and "5" with linear easing
+[PASS] grid-row-end uses discrete animation when animating between "1" and "5" with effect easing
+[PASS] grid-row-end uses discrete animation when animating between "1" and "5" with keyframe easing
+[PASS] grid-row-start (type: discrete) has testInterpolation function
+[PASS] grid-row-start uses discrete animation when animating between "1" and "5" with linear easing
+[PASS] grid-row-start uses discrete animation when animating between "1" and "5" with effect easing
+[PASS] grid-row-start uses discrete animation when animating between "1" and "5" with keyframe easing
+[PASS] grid-template-areas (type: discrete) has testInterpolation function
+[FAIL] grid-template-areas uses discrete animation when animating between "". . a b" ". .a b"" and "none" with linear easing
+  assert_equals: The value should be ". . a b" ". .a b" at 0ms expected "\\". . a b\\" \\". .a b\\"" but got "\\". . a b\\" \\". . a b\\""
+[FAIL] grid-template-areas uses discrete animation when animating between "". . a b" ". .a b"" and "none" with effect easing
+  assert_equals: The value should be ". . a b" ". .a b" at 0ms expected "\\". . a b\\" \\". .a b\\"" but got "\\". . a b\\" \\". . a b\\""
+[FAIL] grid-template-areas uses discrete animation when animating between "". . a b" ". .a b"" and "none" with keyframe easing
+  assert_equals: The value should be ". . a b" ". .a b" at 0ms expected "\\". . a b\\" \\". .a b\\"" but got "\\". . a b\\" \\". . a b\\""
+[PASS] hyphens (type: discrete) has testInterpolation function
+[PASS] hyphens uses discrete animation when animating between "manual" and "none" with linear easing
+[PASS] hyphens uses discrete animation when animating between "manual" and "none" with effect easing
+[PASS] hyphens uses discrete animation when animating between "manual" and "none" with keyframe easing
+[PASS] image-orientation (type: discrete) has testInterpolation function
+[PASS] image-orientation uses discrete animation when animating between "none" and "from-image" with linear easing
+[PASS] image-orientation uses discrete animation when animating between "none" and "from-image" with effect easing
+[PASS] image-orientation uses discrete animation when animating between "none" and "from-image" with keyframe easing
+[PASS] initial-letter (type: discrete) has testInterpolation function
+[PASS] initial-letter uses discrete animation when animating between "1 2" and "3 4" with linear easing
+[PASS] initial-letter uses discrete animation when animating between "1 2" and "3 4" with effect easing
+[PASS] initial-letter uses discrete animation when animating between "1 2" and "3 4" with keyframe easing
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webtransport/sendorder.https.any-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webtransport/sendorder.https.any-expected.txt
new file mode 100644
index 0000000..399b157
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webtransport/sendorder.https.any-expected.txt
@@ -0,0 +1,15 @@
+This is a testharness.js-based test.
+[FAIL] WebTransport client should be able to create and handle a bidirectional stream with sendOrder
+  assert_equals: expected (number) 3 but got (undefined) undefined
+[FAIL] WebTransport client should be able to modify unset sendOrder after stream creation
+  assert_equals: expected (object) null but got (undefined) undefined
+[FAIL] WebTransport client should be able to modify existing sendOrder after stream creation
+  assert_equals: expected (number) 3 but got (undefined) undefined
+[FAIL] WebTransport sendorder should not starve a stream without sendorder
+  assert_equals: expected (number) 1 but got (undefined) undefined
+[FAIL] WebTransport sendorder should starve a lower priority stream
+  assert_equals: expected (number) 1 but got (undefined) undefined
+[FAIL] WebTransport sendorder should starve a lower priority stream, variant 2
+  assert_equals: expected (number) 1 but got (undefined) undefined
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webtransport/sendorder.https.any.serviceworker-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webtransport/sendorder.https.any.serviceworker-expected.txt
new file mode 100644
index 0000000..399b157
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webtransport/sendorder.https.any.serviceworker-expected.txt
@@ -0,0 +1,15 @@
+This is a testharness.js-based test.
+[FAIL] WebTransport client should be able to create and handle a bidirectional stream with sendOrder
+  assert_equals: expected (number) 3 but got (undefined) undefined
+[FAIL] WebTransport client should be able to modify unset sendOrder after stream creation
+  assert_equals: expected (object) null but got (undefined) undefined
+[FAIL] WebTransport client should be able to modify existing sendOrder after stream creation
+  assert_equals: expected (number) 3 but got (undefined) undefined
+[FAIL] WebTransport sendorder should not starve a stream without sendorder
+  assert_equals: expected (number) 1 but got (undefined) undefined
+[FAIL] WebTransport sendorder should starve a lower priority stream
+  assert_equals: expected (number) 1 but got (undefined) undefined
+[FAIL] WebTransport sendorder should starve a lower priority stream, variant 2
+  assert_equals: expected (number) 1 but got (undefined) undefined
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webtransport/sendorder.https.any.sharedworker-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webtransport/sendorder.https.any.sharedworker-expected.txt
new file mode 100644
index 0000000..399b157
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webtransport/sendorder.https.any.sharedworker-expected.txt
@@ -0,0 +1,15 @@
+This is a testharness.js-based test.
+[FAIL] WebTransport client should be able to create and handle a bidirectional stream with sendOrder
+  assert_equals: expected (number) 3 but got (undefined) undefined
+[FAIL] WebTransport client should be able to modify unset sendOrder after stream creation
+  assert_equals: expected (object) null but got (undefined) undefined
+[FAIL] WebTransport client should be able to modify existing sendOrder after stream creation
+  assert_equals: expected (number) 3 but got (undefined) undefined
+[FAIL] WebTransport sendorder should not starve a stream without sendorder
+  assert_equals: expected (number) 1 but got (undefined) undefined
+[FAIL] WebTransport sendorder should starve a lower priority stream
+  assert_equals: expected (number) 1 but got (undefined) undefined
+[FAIL] WebTransport sendorder should starve a lower priority stream, variant 2
+  assert_equals: expected (number) 1 but got (undefined) undefined
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webtransport/sendorder.https.any.worker-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webtransport/sendorder.https.any.worker-expected.txt
new file mode 100644
index 0000000..399b157
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webtransport/sendorder.https.any.worker-expected.txt
@@ -0,0 +1,15 @@
+This is a testharness.js-based test.
+[FAIL] WebTransport client should be able to create and handle a bidirectional stream with sendOrder
+  assert_equals: expected (number) 3 but got (undefined) undefined
+[FAIL] WebTransport client should be able to modify unset sendOrder after stream creation
+  assert_equals: expected (object) null but got (undefined) undefined
+[FAIL] WebTransport client should be able to modify existing sendOrder after stream creation
+  assert_equals: expected (number) 3 but got (undefined) undefined
+[FAIL] WebTransport sendorder should not starve a stream without sendorder
+  assert_equals: expected (number) 1 but got (undefined) undefined
+[FAIL] WebTransport sendorder should starve a lower priority stream
+  assert_equals: expected (number) 1 but got (undefined) undefined
+[FAIL] WebTransport sendorder should starve a lower priority stream, variant 2
+  assert_equals: expected (number) 1 but got (undefined) undefined
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux/virtual/plz-dedicated-worker/external/wpt/html/cross-origin-embedder-policy/credentialless/cache-storage.https.window_dedicated_worker-expected.txt b/third_party/blink/web_tests/platform/linux/virtual/plz-dedicated-worker/external/wpt/html/cross-origin-embedder-policy/credentialless/cache-storage.https.window_dedicated_worker-expected.txt
deleted file mode 100644
index b5de28a8..0000000
--- a/third_party/blink/web_tests/platform/linux/virtual/plz-dedicated-worker/external/wpt/html/cross-origin-embedder-policy/credentialless/cache-storage.https.window_dedicated_worker-expected.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-This is a testharness.js-based test.
-[PASS] [dedicated_worker] unsafe-none => unsafe-none
-[PASS] [dedicated_worker] unsafe-none => credentialless
-[PASS] [dedicated_worker] unsafe-none => credentialless (omit)
-[PASS] [dedicated_worker] unsafe-none => credentialless + CORP
-[PASS] [dedicated_worker] unsafe-none => require-corp
-[PASS] [dedicated_worker] unsafe-none => require-corp (omit)
-[PASS] [dedicated_worker] unsafe-none => require-corp + CORP
-[PASS] [dedicated_worker] credentialless => unsafe-none
-[PASS] [dedicated_worker] credentialless => credentialless
-[PASS] [dedicated_worker] credentialless => require-corp
-[PASS] [dedicated_worker] credentialless => require-corp + CORP
-[PASS] [dedicated_worker] require_corp => unsafe-none
-[PASS] [dedicated_worker] require_corp => credentialless
-[PASS] [dedicated_worker] require_corp => require-corp
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac/virtual/plz-dedicated-worker/http/tests/devtools/service-workers/sw-navigate-useragent-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/plz-dedicated-worker/http/tests/devtools/service-workers/sw-navigate-useragent-expected.txt
deleted file mode 100644
index 05957cfc..0000000
--- a/third_party/blink/web_tests/platform/mac/virtual/plz-dedicated-worker/http/tests/devtools/service-workers/sw-navigate-useragent-expected.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Tests that User-Agent override works for requests from Service Workers.
-
-navigated to http://localhost:8000/devtools/service-workers/resources/sw-return-useragent.php
-user-agent: Mozilla/5.0 (Overridden User Agent)
-awaited service worker target created
-navigated to http://127.0.0.1:8000
-
-Stopped worker and awaited target removal
-Error: exception from evaluateInPageAnonymously.
-
diff --git a/third_party/blink/web_tests/platform/win/virtual/webnn-service-enabled/external/wpt/webnn/gpu/reduction.https.any-expected.txt b/third_party/blink/web_tests/platform/win/virtual/webnn-service-enabled/external/wpt/webnn/gpu/reduction.https.any-expected.txt
index 8b54dfe..ba638805 100644
--- a/third_party/blink/web_tests/platform/win/virtual/webnn-service-enabled/external/wpt/webnn/gpu/reduction.https.any-expected.txt
+++ b/third_party/blink/web_tests/platform/win/virtual/webnn-service-enabled/external/wpt/webnn/gpu/reduction.https.any-expected.txt
@@ -1,5 +1,4 @@
 This is a testharness.js-based test.
-Found 149 tests; 135 PASS, 14 FAIL, 0 TIMEOUT, 0 NOTRUN.
 [PASS] reduceL1 float32 1D tensor all positive default options / async
 [PASS] reduceL1 float32 1D tensor all negative default options / async
 [PASS] reduceL1 float32 1D tensor all positive integers default options / async
@@ -46,36 +45,22 @@
 [PASS] reduceLogSum float32 4D tensor options.keepDimensions=true / async
 [PASS] reduceLogSum float32 4D tensor options.axes with options.keepDimensions=false / async
 [PASS] reduceLogSum float32 4D tensor options.axes with options.keepDimensions=true / async
-[FAIL] reduceLogSumExp float32 1D tensor all positive default options / async
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
+[PASS] reduceLogSumExp float32 1D tensor all positive default options / async
 [PASS] reduceLogSumExp float32 1D tensor all negative default options / async
-[FAIL] reduceLogSumExp float32 1D tensor all positive integers default options / async
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 97.69485473632812 by the acceptable 66 ULP distance, but they have 1018993724 ULP distance expected true got false
+[PASS] reduceLogSumExp float32 1D tensor all positive integers default options / async
 [PASS] reduceLogSumExp float32 1D tensor all negative integers default options / async
-[FAIL] reduceLogSumExp float32 2D tensor default options / async
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 3D tensor default options / async
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 4D tensor default options / async
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 5D tensor default options / async
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 3D tensor options.axes / async
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.56975555419922 by the acceptable 26 ULP distance, but they have 1019927625 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 4D tensor options.axes / async
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.55726623535156 by the acceptable 26 ULP distance, but they have 1019929262 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 3D tensor options.keepDimensions=false / async
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 3D tensor options.keepDimensions=true / async
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 4D tensor options.keepDimensions=false / async
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 4D tensor options.keepDimensions=true / async
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 4D tensor options.axes with options.keepDimensions=false / async
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.57815551757812 by the acceptable 30 ULP distance, but they have 1019926524 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 4D tensor options.axes with options.keepDimensions=true / async
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.57815551757812 by the acceptable 30 ULP distance, but they have 1019926524 ULP distance expected true got false
+[PASS] reduceLogSumExp float32 2D tensor default options / async
+[PASS] reduceLogSumExp float32 3D tensor default options / async
+[PASS] reduceLogSumExp float32 4D tensor default options / async
+[PASS] reduceLogSumExp float32 5D tensor default options / async
+[PASS] reduceLogSumExp float32 3D tensor options.axes / async
+[PASS] reduceLogSumExp float32 4D tensor options.axes / async
+[PASS] reduceLogSumExp float32 3D tensor options.keepDimensions=false / async
+[PASS] reduceLogSumExp float32 3D tensor options.keepDimensions=true / async
+[PASS] reduceLogSumExp float32 4D tensor options.keepDimensions=false / async
+[PASS] reduceLogSumExp float32 4D tensor options.keepDimensions=true / async
+[PASS] reduceLogSumExp float32 4D tensor options.axes with options.keepDimensions=false / async
+[PASS] reduceLogSumExp float32 4D tensor options.axes with options.keepDimensions=true / async
 [PASS] reduceMax float32 1D tensor default options / async
 [PASS] reduceMax float32 2D tensor default options / async
 [PASS] reduceMax float32 3D tensor default options / async
diff --git a/third_party/blink/web_tests/platform/win/virtual/webnn-service-enabled/external/wpt/webnn/gpu/reduction.https.any.worker-expected.txt b/third_party/blink/web_tests/platform/win/virtual/webnn-service-enabled/external/wpt/webnn/gpu/reduction.https.any.worker-expected.txt
index 5b6ea79a..5827221 100644
--- a/third_party/blink/web_tests/platform/win/virtual/webnn-service-enabled/external/wpt/webnn/gpu/reduction.https.any.worker-expected.txt
+++ b/third_party/blink/web_tests/platform/win/virtual/webnn-service-enabled/external/wpt/webnn/gpu/reduction.https.any.worker-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 298 tests; 135 PASS, 163 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 298 tests; 149 PASS, 149 FAIL, 0 TIMEOUT, 0 NOTRUN.
 [PASS] reduceL1 float32 1D tensor all positive default options / sync
 [PASS] reduceL1 float32 1D tensor all negative default options / sync
 [PASS] reduceL1 float32 1D tensor all positive integers default options / sync
@@ -46,36 +46,22 @@
 [PASS] reduceLogSum float32 4D tensor options.keepDimensions=true / sync
 [PASS] reduceLogSum float32 4D tensor options.axes with options.keepDimensions=false / sync
 [PASS] reduceLogSum float32 4D tensor options.axes with options.keepDimensions=true / sync
-[FAIL] reduceLogSumExp float32 1D tensor all positive default options / sync
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
+[PASS] reduceLogSumExp float32 1D tensor all positive default options / sync
 [PASS] reduceLogSumExp float32 1D tensor all negative default options / sync
-[FAIL] reduceLogSumExp float32 1D tensor all positive integers default options / sync
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 97.69485473632812 by the acceptable 66 ULP distance, but they have 1018993724 ULP distance expected true got false
+[PASS] reduceLogSumExp float32 1D tensor all positive integers default options / sync
 [PASS] reduceLogSumExp float32 1D tensor all negative integers default options / sync
-[FAIL] reduceLogSumExp float32 2D tensor default options / sync
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 3D tensor default options / sync
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 4D tensor default options / sync
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 5D tensor default options / sync
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 3D tensor options.axes / sync
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.56975555419922 by the acceptable 26 ULP distance, but they have 1019927625 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 4D tensor options.axes / sync
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.55726623535156 by the acceptable 26 ULP distance, but they have 1019929262 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 3D tensor options.keepDimensions=false / sync
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 3D tensor options.keepDimensions=true / sync
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 4D tensor options.keepDimensions=false / sync
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 4D tensor options.keepDimensions=true / sync
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.59076690673828 by the acceptable 66 ULP distance, but they have 1019924871 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 4D tensor options.axes with options.keepDimensions=false / sync
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.57815551757812 by the acceptable 30 ULP distance, but they have 1019926524 ULP distance expected true got false
-[FAIL] reduceLogSumExp float32 4D tensor options.axes with options.keepDimensions=true / sync
-  assert_true: assert_array_approx_equals_ulp: test reduceLogSumExp float32 actual Infinity should be close enough to expected 90.57815551757812 by the acceptable 30 ULP distance, but they have 1019926524 ULP distance expected true got false
+[PASS] reduceLogSumExp float32 2D tensor default options / sync
+[PASS] reduceLogSumExp float32 3D tensor default options / sync
+[PASS] reduceLogSumExp float32 4D tensor default options / sync
+[PASS] reduceLogSumExp float32 5D tensor default options / sync
+[PASS] reduceLogSumExp float32 3D tensor options.axes / sync
+[PASS] reduceLogSumExp float32 4D tensor options.axes / sync
+[PASS] reduceLogSumExp float32 3D tensor options.keepDimensions=false / sync
+[PASS] reduceLogSumExp float32 3D tensor options.keepDimensions=true / sync
+[PASS] reduceLogSumExp float32 4D tensor options.keepDimensions=false / sync
+[PASS] reduceLogSumExp float32 4D tensor options.keepDimensions=true / sync
+[PASS] reduceLogSumExp float32 4D tensor options.axes with options.keepDimensions=false / sync
+[PASS] reduceLogSumExp float32 4D tensor options.axes with options.keepDimensions=true / sync
 [PASS] reduceMax float32 1D tensor default options / sync
 [PASS] reduceMax float32 2D tensor default options / sync
 [PASS] reduceMax float32 3D tensor default options / sync
diff --git a/third_party/blink/web_tests/virtual/css-sign-related-functions-disabled/external/wpt/css/css-values/signs-abs-computed-expected.txt b/third_party/blink/web_tests/virtual/css-sign-related-functions-disabled/external/wpt/css/css-values/signs-abs-computed-expected.txt
index 5a2cd08..0115bcb6 100644
--- a/third_party/blink/web_tests/virtual/css-sign-related-functions-disabled/external/wpt/css/css-values/signs-abs-computed-expected.txt
+++ b/third_party/blink/web_tests/virtual/css-sign-related-functions-disabled/external/wpt/css/css-values/signs-abs-computed-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 197 tests; 0 PASS, 197 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 204 tests; 0 PASS, 204 FAIL, 0 TIMEOUT, 0 NOTRUN.
 [FAIL] abs(1) should be used-value-equivalent to 1
   assert_not_equals: abs(1) isn't valid in 'z-index'; got the default value instead. got disallowed value "auto"
 [FAIL] sign(1) should be used-value-equivalent to 1
@@ -54,6 +54,20 @@
   assert_not_equals: abs(-infinity) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
 [FAIL] abs(NaN) should be used-value-equivalent to calc(NaN)
   assert_not_equals: abs(NaN) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
+[FAIL] calc(20 - abs(-10)) should be used-value-equivalent to 10
+  assert_not_equals: calc(20 - abs(-10)) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
+[FAIL] calc(20 - abs(10)) should be used-value-equivalent to 10
+  assert_not_equals: calc(20 - abs(10)) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
+[FAIL] calc(10 - abs(10 - abs(-30)) should be used-value-equivalent to -10
+  assert_not_equals: calc(10 - abs(10 - abs(-30)) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
+[FAIL] calc(2 - sign(1)) should be used-value-equivalent to 1
+  assert_not_equals: calc(2 - sign(1)) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
+[FAIL] calc(2 - sign(-1)) should be used-value-equivalent to 3
+  assert_not_equals: calc(2 - sign(-1)) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
+[FAIL] calc(2 - sign(1 - sign(-1))) should be used-value-equivalent to 1
+  assert_not_equals: calc(2 - sign(1 - sign(-1))) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
+[FAIL] calc(10 - abs(20 - sign(2 - abs(-20)))) should be used-value-equivalent to -11
+  assert_not_equals: calc(10 - abs(20 - sign(2 - abs(-20)))) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
 [FAIL] sign(1px) should be used-value-equivalent to 1
   assert_not_equals: sign(1px) isn't valid in 'z-index'; got the default value instead. got disallowed value "auto"
 [FAIL] sign(1cm) should be used-value-equivalent to 1
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/README.md b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/README.md
new file mode 100644
index 0000000..7355cef
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/README.md
@@ -0,0 +1,2 @@
+This directory is for testing PlzDedicatedWorker disabled.
+See: https://crbug.com/906991
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/fetch/private-network-access/worker-fetch.tentative.https.window-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/fetch/private-network-access/worker-fetch.tentative.https.window-expected.txt
new file mode 100644
index 0000000..6e53b79
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/fetch/private-network-access/worker-fetch.tentative.https.window-expected.txt
@@ -0,0 +1,20 @@
+This is a testharness.js-based test.
+[PASS] local to local: success.
+[PASS] private to local: failed preflight.
+[PASS] private to local: success.
+[PASS] private to private: success.
+[PASS] public to local: failed preflight.
+[PASS] public to local: success.
+[PASS] public to private: failed preflight.
+[PASS] public to private: success.
+[PASS] public to public: success.
+[FAIL] treat-as-public to local: failed preflight.
+  assert_equals: fetch error expected (string) "TypeError" but got (undefined) undefined
+[PASS] treat-as-public to local: success.
+[FAIL] treat-as-public to private: failed preflight.
+  assert_equals: fetch error expected (string) "TypeError" but got (undefined) undefined
+[FAIL] treat-as-public to private: success.
+  assert_equals: fetch error expected (undefined) undefined but got (string) "TypeError"
+[PASS] treat-as-public to public: success.
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/fetch/private-network-access/worker-fetch.tentative.window-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/fetch/private-network-access/worker-fetch.tentative.window-expected.txt
new file mode 100644
index 0000000..6d2c599
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/fetch/private-network-access/worker-fetch.tentative.window-expected.txt
@@ -0,0 +1,18 @@
+This is a testharness.js-based test.
+[PASS] local to local: success.
+[PASS] private to local: failure.
+[PASS] private to private: success.
+[PASS] public to local: failure.
+[PASS] public to private: failure.
+[PASS] public to public: success.
+[FAIL] treat-as-public to local: failure.
+  assert_equals: fetch error expected (string) "TypeError" but got (undefined) undefined
+[FAIL] treat-as-public to private: failure.
+  assert_equals: fetch error expected (string) "TypeError" but got (undefined) undefined
+[PASS] treat-as-public to public: success.
+[PASS] local https to local https: success.
+[PASS] private https to local https: failure.
+[PASS] public https to private https: failure.
+[PASS] public https to local https: failure.
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/fetch/private-network-access/worker.tentative.window-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/fetch/private-network-access/worker.tentative.window-expected.txt
new file mode 100644
index 0000000..909ff671
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/fetch/private-network-access/worker.tentative.window-expected.txt
@@ -0,0 +1,6 @@
+This is a testharness.js-based test.
+[PASS] treat-as-public to local: failure.
+[PASS] treat-as-public to private: failure.
+[PASS] public to public: success.
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/html/cross-origin-embedder-policy/credentialless/cache-storage.https.window_dedicated_worker-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/html/cross-origin-embedder-policy/credentialless/cache-storage.https.window_dedicated_worker-expected.txt
new file mode 100644
index 0000000..a06f3c5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/html/cross-origin-embedder-policy/credentialless/cache-storage.https.window_dedicated_worker-expected.txt
@@ -0,0 +1,21 @@
+This is a testharness.js-based test.
+[PASS] [dedicated_worker] unsafe-none => unsafe-none
+[FAIL] [dedicated_worker] unsafe-none => credentialless
+  assert_equals: expected "error" but got "retrieved"
+[PASS] [dedicated_worker] unsafe-none => credentialless (omit)
+[PASS] [dedicated_worker] unsafe-none => credentialless + CORP
+[FAIL] [dedicated_worker] unsafe-none => require-corp
+  assert_equals: expected "error" but got "retrieved"
+[FAIL] [dedicated_worker] unsafe-none => require-corp (omit)
+  assert_equals: expected "error" but got "retrieved"
+[PASS] [dedicated_worker] unsafe-none => require-corp + CORP
+[PASS] [dedicated_worker] credentialless => unsafe-none
+[PASS] [dedicated_worker] credentialless => credentialless
+[FAIL] [dedicated_worker] credentialless => require-corp
+  assert_equals: expected "error" but got "retrieved"
+[PASS] [dedicated_worker] credentialless => require-corp + CORP
+[PASS] [dedicated_worker] require_corp => unsafe-none
+[PASS] [dedicated_worker] require_corp => credentialless
+[PASS] [dedicated_worker] require_corp => require-corp
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/html/cross-origin-embedder-policy/dedicated-worker-cache-storage.https-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/html/cross-origin-embedder-policy/dedicated-worker-cache-storage.https-expected.txt
new file mode 100644
index 0000000..2b947a5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/html/cross-origin-embedder-policy/dedicated-worker-cache-storage.https-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+[PASS] coep-none coep-none corp-cross-origin
+[PASS] coep-none coep-none corp-undefined
+[PASS] coep-none coep-require-corp corp-cross-origin
+[FAIL] coep-none coep-require-corp corp-undefined
+  assert_equals: expected "failure" but got "success"
+[PASS] coep-require-corp coep-none corp-cross-origin
+[PASS] coep-require-corp coep-none corp-undefined
+[PASS] coep-require-corp coep-require-corp corp-cross-origin
+[PASS] coep-require-corp coep-require-corp corp-undefined
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/html/cross-origin-embedder-policy/dedicated-worker.https-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/html/cross-origin-embedder-policy/dedicated-worker.https-expected.txt
new file mode 100644
index 0000000..4b685526
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/html/cross-origin-embedder-policy/dedicated-worker.https-expected.txt
@@ -0,0 +1,22 @@
+This is a testharness.js-based test.
+[PASS] COEP: none worker in COEP: none frame
+[PASS] COEP: none worker in COEP: require-corp frame
+[FAIL] COEP: require-corp worker in COEP: none frame
+  assert_equals: expected "FAILED" but got "LOADED"
+[PASS] COEP: require-corp worker in COEP: require-corp frame
+[PASS] COEP: none module worker in COEP: none frame
+[PASS] COEP: none module worker in COEP: require-corp frame
+[FAIL] COEP: require-corp module worker in COEP: none frame
+  assert_equals: expected "FAILED" but got "LOADED"
+[PASS] COEP: require-corp module worker in COEP: require-corp frame
+[PASS] COEP: worker inherits COEP for blob URL.
+[FAIL] COEP: worker inherits COEP from blob URL creator, not owner.
+  assert_equals: expected "FAILED" but got "LOADED"
+[PASS] COEP: worker inherits COEP for data URL.
+[PASS] COEP: worker inherits COEP from owner, not data URL creator.
+[FAIL] COEP: worker inherits COEP for filesystem URL.
+  assert_unreached: Worker.onerror should not be called Reached unreachable code
+[FAIL] COEP: worker inherits COEP from filesystem URL creator, not owner.
+  assert_equals: expected "FAILED" but got "LOADED"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/html/cross-origin-embedder-policy/multi-globals/workers-coep-report.https-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/html/cross-origin-embedder-policy/multi-globals/workers-coep-report.https-expected.txt
new file mode 100644
index 0000000..3ccebc11
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/html/cross-origin-embedder-policy/multi-globals/workers-coep-report.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+[FAIL] Multiple globals for Worker constructor: COEP reports
+  assert_equals: expected 1 but got 0
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/resource-timing/initiator-type/workers-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/resource-timing/initiator-type/workers-expected.txt
new file mode 100644
index 0000000..2db0993
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/resource-timing/initiator-type/workers-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+[PASS] The initiator type for classic worker must be 'other'
+[PASS] The initiator type for module worker must be 'other'
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/client-url-of-blob-url-worker.https-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/client-url-of-blob-url-worker.https-expected.txt
new file mode 100644
index 0000000..36cb811
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/client-url-of-blob-url-worker.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+[FAIL] Client.url of a blob URL worker should be a blob URL.
+  assert_not_equals: worker client should exist got disallowed value "one worker client should exist"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/clients-get-client-types.https-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/clients-get-client-types.https-expected.txt
new file mode 100644
index 0000000..d594d08
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/clients-get-client-types.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+[FAIL] Test Clients.get() with window and worker clients
+  assert_not_equals: Worker(Started by main frame) client should not be undefined got disallowed value undefined
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/clients-matchall-blob-url-worker.https-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/clients-matchall-blob-url-worker.https-expected.txt
new file mode 100644
index 0000000..3ffdbfe
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/clients-matchall-blob-url-worker.https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+[FAIL] Test Clients.matchAll() with a blob URL worker client.
+  assert_equals: expected 1 but got 0
+[FAIL] Test Clients.matchAll() with an uncontrolled blob URL worker client.
+  assert_equals: expected 1 but got 0
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/dedicated-worker-service-worker-interception.https-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/dedicated-worker-service-worker-interception.https-expected.txt
new file mode 100644
index 0000000..f00908f
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/dedicated-worker-service-worker-interception.https-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+[FAIL] Top-level module loading should be intercepted by a service worker.
+  assert_equals: expected "LOADED_FROM_SERVICE_WORKER" but got "LOADED_FROM_NETWORK"
+[FAIL] Static import should be intercepted by a service worker.
+  assert_equals: expected "LOADED_FROM_SERVICE_WORKER" but got "LOADED_FROM_NETWORK"
+[FAIL] Dynamic import should be intercepted by a service worker.
+  assert_equals: expected "LOADED_FROM_SERVICE_WORKER" but got "LOADED_FROM_NETWORK"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/local-url-inherit-controller.https-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/local-url-inherit-controller.https-expected.txt
new file mode 100644
index 0000000..a71326e
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/local-url-inherit-controller.https-expected.txt
@@ -0,0 +1,15 @@
+This is a testharness.js-based test.
+[FAIL] Same-origin blob URL iframe should inherit service worker controller.
+  assert_equals: blob URL iframe should inherit controller expected (string) "https://web-platform.test:8444/service-workers/service-worker/resources/local-url-inherit-controller-worker.js" but got (object) null
+[FAIL] Same-origin blob URL iframe should intercept fetch().
+  assert_equals: blob URL iframe should intercept fetch expected "intercepted" but got "var hello = \\"world\\";\\n"
+[FAIL] Same-origin blob URL worker should inherit service worker controller.
+  promise_test: Unhandled rejection with value: "Uncaught TypeError: Cannot read properties of undefined (reading 'controller')"
+[PASS] Same-origin blob URL worker should intercept fetch().
+[PASS] Data URL iframe should not intercept fetch().
+[FAIL] Data URL worker should not inherit service worker controller.
+  promise_test: Unhandled rejection with value: "Uncaught TypeError: Cannot read properties of undefined (reading 'controller')"
+[FAIL] Data URL worker should not intercept fetch().
+  assert_equals: data URL worker should not intercept fetch expected "" but got "intercepted"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/worker-interception-redirect.https-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/worker-interception-redirect.https-expected.txt
new file mode 100644
index 0000000..eaf5f6b
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/external/wpt/service-workers/service-worker/worker-interception-redirect.https-expected.txt
@@ -0,0 +1,81 @@
+This is a testharness.js-based test.
+Found 54 tests; 31 PASS, 23 FAIL, 0 TIMEOUT, 0 NOTRUN.
+[PASS] initialize global state
+[PASS] Case #1: network scope1->scope2 (classic DedicatedWorker)
+[PASS] Case #1: network scope1->scope2 (module DedicatedWorker)
+[FAIL] Case #1: network scope1->scope2 (classic SharedWorker)
+  assert_equals: expected "the worker script was served from network" but got "sw2 saw the request for the worker script"
+[FAIL] Case #1: network scope1->scope2 (module SharedWorker)
+  assert_equals: expected "the worker script was served from network" but got "sw2 saw the request for the worker script"
+[PASS] Case #2: network scope1->out-scope (classic DedicatedWorker)
+[PASS] Case #2: network scope1->out-scope (module DedicatedWorker)
+[PASS] Case #2: network scope1->out-scope (classic SharedWorker)
+[PASS] Case #2: network scope1->out-scope (module SharedWorker)
+[FAIL] Case #3: sw scope1->scope2 (classic DedicatedWorker)
+  assert_unreached: Worker error Reached unreachable code
+[FAIL] Case #3: sw scope1->scope2 (module DedicatedWorker)
+  assert_unreached: Worker error Reached unreachable code
+[PASS] Case #3: sw scope1->scope2 (classic SharedWorker)
+[PASS] Case #3: sw scope1->scope2 (module SharedWorker)
+[FAIL] Case #4: sw scope1->out-scope (classic DedicatedWorker)
+  assert_unreached: Worker error Reached unreachable code
+[FAIL] Case #4: sw scope1->out-scope (module DedicatedWorker)
+  assert_unreached: Worker error Reached unreachable code
+[PASS] Case #4: sw scope1->out-scope (classic SharedWorker)
+[PASS] Case #4: sw scope1->out-scope (module SharedWorker)
+[PASS] cleanup global state
+[FAIL] Case #1: network scope1->scope2 (classic DedicatedWorker, importScripts())
+  assert_equals: expected "sw1 saw importScripts from the worker: /service-workers/service-worker/resources/scope2/import-scripts-echo.py" but got "importScripts: served from network (scope2/)"
+[FAIL] Case #1: network scope1->scope2 (classic DedicatedWorker, fetch())
+  assert_equals: expected "fetch(): sw1 saw the fetch from the worker: /service-workers/service-worker/resources/scope2/simple.txt" but got "fetch(): a simple text file (scope2/)\\n"
+[PASS] Case #1: network scope1->scope2 (classic DedicatedWorker, location.href)
+[PASS] Case #1: network scope1->scope2 (module DedicatedWorker, importScripts())
+[FAIL] Case #1: network scope1->scope2 (module DedicatedWorker, fetch())
+  assert_equals: expected "fetch(): sw1 saw the fetch from the worker: /service-workers/service-worker/resources/scope2/simple.txt" but got "fetch(): a simple text file (scope2/)\\n"
+[PASS] Case #1: network scope1->scope2 (module DedicatedWorker, location.href)
+[FAIL] Case #1: network scope1->scope2 (classic SharedWorker, importScripts())
+  assert_equals: expected "sw1 saw importScripts from the worker: /service-workers/service-worker/resources/scope2/import-scripts-echo.py" but got "sw2 saw importScripts from the worker: /service-workers/service-worker/resources/subdir/import-scripts-echo.py"
+[FAIL] Case #1: network scope1->scope2 (classic SharedWorker, fetch())
+  assert_equals: expected "fetch(): sw1 saw the fetch from the worker: /service-workers/service-worker/resources/scope2/simple.txt" but got "fetch(): sw2 saw the fetch from the worker: /service-workers/service-worker/resources/subdir/simple.txt"
+[FAIL] Case #1: network scope1->scope2 (classic SharedWorker, location.href)
+  assert_equals: location.href expected "https://web-platform.test:8444/service-workers/service-worker/resources/scope2/worker_interception_redirect_webworker.py" but got "https://web-platform.test:8444/service-workers/service-worker/resources/subdir/worker_interception_redirect_webworker.py?greeting=sw2%20saw%20the%20request%20for%20the%20worker%20script"
+[PASS] Case #1: network scope1->scope2 (module SharedWorker, importScripts())
+[FAIL] Case #1: network scope1->scope2 (module SharedWorker, fetch())
+  assert_equals: expected "fetch(): sw1 saw the fetch from the worker: /service-workers/service-worker/resources/scope2/simple.txt" but got "fetch(): sw2 saw the fetch from the worker: /service-workers/service-worker/resources/subdir/simple.txt"
+[FAIL] Case #1: network scope1->scope2 (module SharedWorker, location.href)
+  assert_equals: location.href expected "https://web-platform.test:8444/service-workers/service-worker/resources/scope2/worker_interception_redirect_webworker.py" but got "https://web-platform.test:8444/service-workers/service-worker/resources/subdir/worker_interception_redirect_webworker.py?greeting=sw2%20saw%20the%20request%20for%20the%20worker%20script"
+[FAIL] Case #2: network scope1->out-scope (classic DedicatedWorker, importScripts())
+  assert_equals: expected "sw1 saw importScripts from the worker: /service-workers/service-worker/resources/import-scripts-echo.py" but got "importScripts: served from network"
+[FAIL] Case #2: network scope1->out-scope (classic DedicatedWorker, fetch())
+  assert_equals: expected "fetch(): sw1 saw the fetch from the worker: /service-workers/service-worker/resources/simple.txt" but got "fetch(): a simple text file\\n"
+[PASS] Case #2: network scope1->out-scope (classic DedicatedWorker, location.href)
+[PASS] Case #2: network scope1->out-scope (module DedicatedWorker, importScripts())
+[FAIL] Case #2: network scope1->out-scope (module DedicatedWorker, fetch())
+  assert_equals: expected "fetch(): sw1 saw the fetch from the worker: /service-workers/service-worker/resources/simple.txt" but got "fetch(): a simple text file\\n"
+[PASS] Case #2: network scope1->out-scope (module DedicatedWorker, location.href)
+[FAIL] Case #2: network scope1->out-scope (classic SharedWorker, importScripts())
+  assert_equals: expected "sw1 saw importScripts from the worker: /service-workers/service-worker/resources/import-scripts-echo.py" but got "importScripts: served from network"
+[FAIL] Case #2: network scope1->out-scope (classic SharedWorker, fetch())
+  assert_equals: expected "fetch(): sw1 saw the fetch from the worker: /service-workers/service-worker/resources/simple.txt" but got "fetch(): a simple text file\\n"
+[PASS] Case #2: network scope1->out-scope (classic SharedWorker, location.href)
+[PASS] Case #2: network scope1->out-scope (module SharedWorker, importScripts())
+[FAIL] Case #2: network scope1->out-scope (module SharedWorker, fetch())
+  assert_equals: expected "fetch(): sw1 saw the fetch from the worker: /service-workers/service-worker/resources/simple.txt" but got "fetch(): a simple text file\\n"
+[PASS] Case #2: network scope1->out-scope (module SharedWorker, location.href)
+[PASS] Case #3: sw scope1->scope2 (classic SharedWorker, importScripts())
+[PASS] Case #3: sw scope1->scope2 (classic SharedWorker, fetch())
+[PASS] Case #3: sw scope1->scope2 (classic SharedWorker, location.href)
+[PASS] Case #3: sw scope1->scope2 (module SharedWorker, importScripts())
+[PASS] Case #3: sw scope1->scope2 (module SharedWorker, fetch())
+[PASS] Case #3: sw scope1->scope2 (module SharedWorker, location.href)
+[FAIL] Case #4: sw scope1->out-scope (classic SharedWorker, importScripts())
+  assert_equals: expected "sw1 saw importScripts from the worker: /service-workers/service-worker/resources/import-scripts-echo.py" but got "importScripts: served from network"
+[FAIL] Case #4: sw scope1->out-scope (classic SharedWorker, fetch())
+  assert_equals: expected "fetch(): sw1 saw the fetch from the worker: /service-workers/service-worker/resources/simple.txt" but got "fetch(): a simple text file\\n"
+[PASS] Case #4: sw scope1->out-scope (classic SharedWorker, location.href)
+[PASS] Case #4: sw scope1->out-scope (module SharedWorker, importScripts())
+[FAIL] Case #4: sw scope1->out-scope (module SharedWorker, fetch())
+  assert_equals: expected "fetch(): sw1 saw the fetch from the worker: /service-workers/service-worker/resources/simple.txt" but got "fetch(): a simple text file\\n"
+[PASS] Case #4: sw scope1->out-scope (module SharedWorker, location.href)
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/fast/workers/sandbox-origin-setup-crash-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/fast/workers/sandbox-origin-setup-crash-expected.txt
new file mode 100644
index 0000000..34a6e047
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/fast/workers/sandbox-origin-setup-crash-expected.txt
@@ -0,0 +1,2 @@
+CONSOLE ERROR: The Content Security Policy directive 'sandbox' is ignored when delivered via a <meta> element.
+PASS if no crash.
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/http/tests/devtools/network/network-worker-fetch-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/http/tests/devtools/network/network-worker-fetch-expected.txt
new file mode 100644
index 0000000..6e298957
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/http/tests/devtools/network/network-worker-fetch-expected.txt
@@ -0,0 +1,10 @@
+Tests fetch in worker.
+
+Fetch in worker result: Hello world
+http://127.0.0.1:8000/devtools/network/resources/fetch-worker.js
+resource.type: other
+request.failed: false
+http://127.0.0.1:8000/devtools/network/resources/resource.php
+resource.type: fetch
+request.failed: false
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/http/tests/devtools/network/network-worker-fetch-parallel-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/http/tests/devtools/network/network-worker-fetch-parallel-expected.txt
new file mode 100644
index 0000000..ed8f2907
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/http/tests/devtools/network/network-worker-fetch-parallel-expected.txt
@@ -0,0 +1,13 @@
+Test that parallel fetches in worker should not cause crash.
+
+Parallel fetch in worker result: ["Hello world","Hello world"]
+http://127.0.0.1:8000/devtools/network/resources/fetch-parallel-worker.js
+resource.type: other
+request.failed: false
+http://127.0.0.1:8000/devtools/network/resources/resource.php?1
+resource.type: fetch
+request.failed: false
+http://127.0.0.1:8000/devtools/network/resources/resource.php?2
+resource.type: fetch
+request.failed: false
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/http/tests/workers/worker-redirect-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/http/tests/workers/worker-redirect-expected.txt
new file mode 100644
index 0000000..3120832
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker-disabled/http/tests/workers/worker-redirect-expected.txt
@@ -0,0 +1,8 @@
+CONSOLE ERROR: Unsafe attempt to load URL http://localhost:8000/workers/resources/worker-redirect-target.js from frame with URL http://127.0.0.1:8000/workers/worker-redirect.html. Domains, protocols and ports must match.
+
+Test that loading the worker's script does not allow a cross origin redirect (bug 26146)
+
+SUCCESS: threw exception (SecurityError: Failed to construct 'Worker': Script at 'http://localhost:8000/workers/resources/worker-target.js' cannot be accessed from origin 'http://127.0.0.1:8000'.) when attempting to cross origin while loading the worker script.
+SUCCESS: threw error when attempting to redirected cross origin while loading the worker script.
+DONE
+
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker/README.md b/third_party/blink/web_tests/virtual/plz-dedicated-worker/README.md
deleted file mode 100644
index e3fdeba..0000000
--- a/third_party/blink/web_tests/virtual/plz-dedicated-worker/README.md
+++ /dev/null
@@ -1 +0,0 @@
-This directory is for testing PlzDedicatedWorker (https://crbug.com/906991).
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker/http/tests/inspector-protocol/service-worker/tentative/static-router/receive-router-rules-on-update-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker/http/tests/inspector-protocol/service-worker/tentative/static-router/receive-router-rules-on-update-expected.txt
deleted file mode 100644
index f829580..0000000
--- a/third_party/blink/web_tests/virtual/plz-dedicated-worker/http/tests/inspector-protocol/service-worker/tentative/static-router/receive-router-rules-on-update-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Tests receiving static router rules from the service worker.
-undefined
-
diff --git a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
index b741e46..29018e6 100644
--- a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
@@ -679,6 +679,7 @@
     property version
 html element i
 html element iframe
+    property adAuctionHeaders
     property align
     property allow
     property allowFullscreen
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index d521855..80efc32 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -4075,6 +4075,7 @@
     setter version
 interface HTMLIFrameElement : HTMLElement
     attribute @@toStringTag
+    getter adAuctionHeaders
     getter align
     getter allow
     getter allowFullscreen
@@ -4102,6 +4103,7 @@
     getter width
     method constructor
     method getSVGDocument
+    setter adAuctionHeaders
     setter align
     setter allow
     setter allowFullscreen
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/utils.js b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/utils.js
index 28b7e1e..0445bae6 100644
--- a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/utils.js
+++ b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/utils.js
@@ -141,7 +141,11 @@
 // Note: this function, unlike generateURL, is asynchronous and needs to be
 // called with an await operator. @param {string} href - The base url of the
 // page being navigated to @param {string list} keylist - The list of key UUIDs
-// to be used. Note that order matters when extracting the keys
+// to be used. Note that order matters when extracting the keys.
+// Warning: tests that use this function should not be run in parallel
+// because calls to navigator.joinAdInterestGroup on interest groups with the
+// same name and owner can overwrite each other, and as a result, the tests'
+// auctions may use another test's joined interest group.
 // @param {string} href - The base url of the page being navigated to
 // @param {string list} keylist - The list of key UUIDs to be used. Note that
 //                                order matters when extracting the keys
diff --git a/third_party/breakpad/BUILD.gn b/third_party/breakpad/BUILD.gn
index bab4f30e..287ee6f 100644
--- a/third_party/breakpad/BUILD.gn
+++ b/third_party/breakpad/BUILD.gn
@@ -357,8 +357,8 @@
       if (enable_rust_crash) {
         deps = [ "//third_party/rust/rustc_demangle_capi/v0_1:lib" ]
         defines += [ "HAVE_RUSTC_DEMANGLE" ]
-        include_dirs +=
-            [ "//third_party/rust/rustc_demangle_capi/v0_1/crate/include" ]
+        include_dirs += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include" ]
+        sources += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include/rustc_demangle.h" ]
       }
     }
     test("breakpad_unittests") {
@@ -559,8 +559,8 @@
       if (enable_rust_crash) {
         deps = [ "//third_party/rust/rustc_demangle_capi/v0_1:lib" ]
         defines += [ "HAVE_RUSTC_DEMANGLE" ]
-        include_dirs +=
-            [ "//third_party/rust/rustc_demangle_capi/v0_1/crate/include" ]
+        include_dirs += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include" ]
+        sources += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include/rustc_demangle.h" ]
       }
 
       libs = [ "z" ]
diff --git a/third_party/chromite b/third_party/chromite
index 955a67b..74e55f6 160000
--- a/third_party/chromite
+++ b/third_party/chromite
@@ -1 +1 @@
-Subproject commit 955a67be684c4a95541ef7ee31e14ae860cd2d59
+Subproject commit 74e55f68b5d4e5e0e958a02b306cc062caf1c7ca
diff --git a/third_party/closure_compiler/externs/accessibility_private.js b/third_party/closure_compiler/externs/accessibility_private.js
index f9583eb..75d958b 100644
--- a/third_party/closure_compiler/externs/accessibility_private.js
+++ b/third_party/closure_compiler/externs/accessibility_private.js
@@ -531,6 +531,13 @@
 chrome.accessibilityPrivate.enableMouseEvents = function(enabled) {};
 
 /**
+ * Sets the cursor position on the screen in absolute screen coordinates.
+ * @param {!chrome.accessibilityPrivate.ScreenPoint} point The screen point at
+ *     which to put the cursor.
+ */
+chrome.accessibilityPrivate.setCursorPosition = function(point) {};
+
+/**
  * Sends a fabricated mouse event.
  * @param {!chrome.accessibilityPrivate.SyntheticMouseEvent} mouseEvent The
  *     event to send.
diff --git a/third_party/dawn b/third_party/dawn
index 235d4e5..677226e 160000
--- a/third_party/dawn
+++ b/third_party/dawn
@@ -1 +1 @@
-Subproject commit 235d4e59cb461ae67751d591d10315e427b0a934
+Subproject commit 677226ee5e87716621909c237927b74e2d741896
diff --git a/third_party/depot_tools b/third_party/depot_tools
index b0cfbe5..fba0ae4 160000
--- a/third_party/depot_tools
+++ b/third_party/depot_tools
@@ -1 +1 @@
-Subproject commit b0cfbe504be43b05745de4ddff41ffba7feea706
+Subproject commit fba0ae4a3815f379514572b04e9cd215eaf54849
diff --git a/third_party/devtools-frontend-internal b/third_party/devtools-frontend-internal
index 7622fc04..1d8f26c 160000
--- a/third_party/devtools-frontend-internal
+++ b/third_party/devtools-frontend-internal
@@ -1 +1 @@
-Subproject commit 7622fc040bfb73ebf8f196260dbe70d725310f33
+Subproject commit 1d8f26cd37329b727cc509ee2ab8414b6412317e
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src
index bac5f49..38dbfd6 160000
--- a/third_party/devtools-frontend/src
+++ b/third_party/devtools-frontend/src
@@ -1 +1 @@
-Subproject commit bac5f4964ab90c18db43d5ab2bcbc427f7227ad4
+Subproject commit 38dbfd6ebfcc88a082cb696ed4c0f856dcf70064
diff --git a/third_party/libavif/src b/third_party/libavif/src
index 622336e..026096b 160000
--- a/third_party/libavif/src
+++ b/third_party/libavif/src
@@ -1 +1 @@
-Subproject commit 622336e419de70bc1cf32d08fade6ef0fa58a547
+Subproject commit 026096bebdbe8bfe33d5037598bbb916558021d9
diff --git a/third_party/r8/3pp/patches/0001-Add-disassemble-command-to-keeps.patch b/third_party/r8/3pp/patches/0001-Add-disassemble-command-to-keeps.patch
index 946ae8d..dea7221 100644
--- a/third_party/r8/3pp/patches/0001-Add-disassemble-command-to-keeps.patch
+++ b/third_party/r8/3pp/patches/0001-Add-disassemble-command-to-keeps.patch
@@ -1,24 +1,24 @@
-From 38c8dfc4fdc2a8d0a5fab5056295e46977677ba5 Mon Sep 17 00:00:00 2001
+From 4579bd9c6a9c77a76e0a25482aa15e2bb2bfccc4 Mon Sep 17 00:00:00 2001
 From: Andrew Grieve <agrieve@chromium.org>
 Date: Mon, 13 Jun 2022 09:27:22 -0400
-Subject: [PATCH 1/2] Add disassemble command to keeps
+Subject: [PATCH] Add disassemble command to keeps
 
 ---
  src/main/keep.txt | 1 +
  1 file changed, 1 insertion(+)
 
 diff --git a/src/main/keep.txt b/src/main/keep.txt
-index 689e5b562e..46c021f48b 100644
+index 2aba17e49a..93c64590db 100644
 --- a/src/main/keep.txt
 +++ b/src/main/keep.txt
-@@ -10,6 +10,7 @@
- # Keep all things that can be reached from the retrace api and keep the annotation
- -keep @com.android.tools.r8.KeepForRetraceApi class * { public *; }
+@@ -4,6 +4,7 @@
  
+ -keepclasseswithmembers class * { @com.android.tools.r8.KeepMethodForCompileDump <methods>; }
+
 +-keep public class com.android.tools.r8.Disassemble { public static void main(java.lang.String[]); }
  -keep public class com.android.tools.r8.D8 { public static void main(java.lang.String[]); }
  -keep public class com.android.tools.r8.R8 { public static void main(java.lang.String[]); }
  -keep public class com.android.tools.r8.ExtractMarker { public static void main(java.lang.String[]); }
 -- 
-2.37.2.789.g6183377224-goog
+2.42.0.869.gea05f2083d-goog
 
diff --git a/third_party/rust/Cargo.toml b/third_party/rust/Cargo.toml
index e6719a5..49005bd 100644
--- a/third_party/rust/Cargo.toml
+++ b/third_party/rust/Cargo.toml
@@ -6,7 +6,7 @@
 edition = "2021"
 
 [workspace]
-members = ["cxxbridge_cmd/v1/crate"]
+members = ["chromium_crates_io/vendor/cxxbridge-cmd-1.0.110"]
 
 [dependencies]
 anyhow = "1"
@@ -57,249 +57,249 @@
 [dependencies.unicode-linebreak]
 version = "0.1"
 [patch.crates-io.aho-corasick_v0_7]
-path = "aho_corasick/v0_7/crate"
+path = "chromium_crates_io/vendor/aho-corasick-0.7.18"
 package = "aho-corasick"
 
 [patch.crates-io.anstyle_v1]
-path = "anstyle/v1/crate"
+path = "chromium_crates_io/vendor/anstyle-1.0.4"
 package = "anstyle"
 
 [patch.crates-io.anyhow_v1]
-path = "anyhow/v1/crate"
+path = "chromium_crates_io/vendor/anyhow-1.0.70"
 package = "anyhow"
 
 [patch.crates-io.autocfg_v1]
-path = "autocfg/v1/crate"
+path = "chromium_crates_io/vendor/autocfg-1.1.0"
 package = "autocfg"
 
 [patch.crates-io.base64_v0_13]
-path = "base64/v0_13/crate"
+path = "chromium_crates_io/vendor/base64-0.13.1"
 package = "base64"
 
 [patch.crates-io.bitflags_v1]
-path = "bitflags/v1/crate"
+path = "chromium_crates_io/vendor/bitflags-1.3.2"
 package = "bitflags"
 
 [patch.crates-io.cfg-if_v1]
-path = "cfg_if/v1/crate"
+path = "chromium_crates_io/vendor/cfg-if-1.0.0"
 package = "cfg-if"
 
 [patch.crates-io.clap_builder_v4]
-path = "clap_builder/v4/crate"
+path = "chromium_crates_io/vendor/clap_builder-4.4.6"
 package = "clap_builder"
 
 [patch.crates-io.clap_lex_v0_5]
-path = "clap_lex/v0_5/crate"
+path = "chromium_crates_io/vendor/clap_lex-0.5.1"
 package = "clap_lex"
 
 [patch.crates-io.clap_v4]
-path = "clap/v4/crate"
+path = "chromium_crates_io/vendor/clap-4.4.6"
 package = "clap"
 
 [patch.crates-io.codespan-reporting_v0_11]
-path = "codespan_reporting/v0_11/crate"
+path = "chromium_crates_io/vendor/codespan-reporting-0.11.1"
 package = "codespan-reporting"
 
 [patch.crates-io.cxx_v1]
-path = "cxx/v1/crate"
+path = "chromium_crates_io/vendor/cxx-1.0.110"
 package = "cxx"
 
 [patch.crates-io.cxxbridge-cmd_v1]
-path = "cxxbridge_cmd/v1/crate"
+path = "chromium_crates_io/vendor/cxxbridge-cmd-1.0.110"
 package = "cxxbridge-cmd"
 
 [patch.crates-io.cxxbridge-macro_v1]
-path = "cxxbridge_macro/v1/crate"
+path = "chromium_crates_io/vendor/cxxbridge-macro-1.0.110"
 package = "cxxbridge-macro"
 
 [patch.crates-io.font-types_v0_4]
-path = "font_types/v0_4/crate"
+path = "chromium_crates_io/vendor/font-types-0.4.0"
 package = "font-types"
 
 [patch.crates-io.getrandom_v0_2]
-path = "getrandom/v0_2/crate"
+path = "chromium_crates_io/vendor/getrandom-0.2.9"
 package = "getrandom"
 
 [patch.crates-io.hex-literal_v0_4]
-path = "hex_literal/v0_4/crate"
+path = "chromium_crates_io/vendor/hex-literal-0.4.1"
 package = "hex-literal"
 
 [patch.crates-io.hex_v0_4]
-path = "hex/v0_4/crate"
+path = "chromium_crates_io/vendor/hex-0.4.3"
 package = "hex"
 
 [patch.crates-io.itoa_v1]
-path = "itoa/v1/crate"
+path = "chromium_crates_io/vendor/itoa-1.0.1"
 package = "itoa"
 
 [patch.crates-io.lazy_static_v1]
-path = "lazy_static/v1/crate"
+path = "chromium_crates_io/vendor/lazy_static-1.4.0"
 package = "lazy_static"
 
 [patch.crates-io.libc_v0_2]
-path = "libc/v0_2/crate"
+path = "chromium_crates_io/vendor/libc-0.2.144"
 package = "libc"
 
 [patch.crates-io.link-cplusplus_v1]
-path = "link_cplusplus/v1/crate"
+path = "chromium_crates_io/vendor/link-cplusplus-1.0.9"
 package = "link-cplusplus"
 
 [patch.crates-io.log_v0_4]
-path = "log/v0_4/crate"
+path = "chromium_crates_io/vendor/log-0.4.17"
 package = "log"
 
 [patch.crates-io.memchr_v2]
-path = "memchr/v2/crate"
+path = "chromium_crates_io/vendor/memchr-2.4.1"
 package = "memchr"
 
 [patch.crates-io.memoffset_v0_6]
-path = "memoffset/v0_6/crate"
+path = "chromium_crates_io/vendor/memoffset-0.6.5"
 package = "memoffset"
 
 [patch.crates-io.ppv-lite86_v0_2]
-path = "ppv_lite86/v0_2/crate"
+path = "chromium_crates_io/vendor/ppv-lite86-0.2.17"
 package = "ppv-lite86"
 
 [patch.crates-io.proc-macro2_v1]
-path = "proc_macro2/v1/crate"
+path = "chromium_crates_io/vendor/proc-macro2-1.0.66"
 package = "proc-macro2"
 
 [patch.crates-io.qr_code_v2]
-path = "qr_code/v2/crate"
+path = "chromium_crates_io/vendor/qr_code-2.0.0"
 package = "qr_code"
 
 [patch.crates-io.quote_v1]
-path = "quote/v1/crate"
+path = "chromium_crates_io/vendor/quote-1.0.33"
 package = "quote"
 
 [patch.crates-io.rand_chacha_v0_3]
-path = "rand_chacha/v0_3/crate"
+path = "chromium_crates_io/vendor/rand_chacha-0.3.1"
 package = "rand_chacha"
 
 [patch.crates-io.rand_core_v0_6]
-path = "rand_core/v0_6/crate"
+path = "chromium_crates_io/vendor/rand_core-0.6.4"
 package = "rand_core"
 
 [patch.crates-io.rand_pcg_v0_3]
-path = "rand_pcg/v0_3/crate"
+path = "chromium_crates_io/vendor/rand_pcg-0.3.1"
 package = "rand_pcg"
 
 [patch.crates-io.rand_v0_8]
-path = "rand/v0_8/crate"
+path = "chromium_crates_io/vendor/rand-0.8.5"
 package = "rand"
 
 [patch.crates-io.read-fonts_v0_11]
-path = "read_fonts/v0_11/crate"
+path = "chromium_crates_io/vendor/read-fonts-0.11.0"
 package = "read-fonts"
 
 [patch.crates-io.regex-syntax_v0_6]
-path = "regex_syntax/v0_6/crate"
+path = "chromium_crates_io/vendor/regex-syntax-0.6.27"
 package = "regex-syntax"
 
 [patch.crates-io.regex_v1]
-path = "regex/v1/crate"
+path = "chromium_crates_io/vendor/regex-1.6.0"
 package = "regex"
 
 [patch.crates-io.rstest_macros_v0_17]
-path = "rstest_macros/v0_17/crate"
+path = "chromium_crates_io/vendor/rstest_macros-0.17.0"
 package = "rstest_macros"
 
 [patch.crates-io.rstest_reuse_v0_5]
-path = "rstest_reuse/v0_5/crate"
+path = "chromium_crates_io/vendor/rstest_reuse-0.5.0"
 package = "rstest_reuse"
 
 [patch.crates-io.rstest_v0_17]
-path = "rstest/v0_17/crate"
+path = "chromium_crates_io/vendor/rstest-0.17.0"
 package = "rstest"
 
 [patch.crates-io.rustc-demangle-capi_v0_1]
-path = "rustc_demangle_capi/v0_1/crate"
+path = "chromium_crates_io/vendor/rustc-demangle-capi-0.1.0"
 package = "rustc-demangle-capi"
 
 [patch.crates-io.rustc-demangle_v0_1]
-path = "rustc_demangle/v0_1/crate"
+path = "chromium_crates_io/vendor/rustc-demangle-0.1.23"
 package = "rustc-demangle"
 
 [patch.crates-io.rustc_version_v0_4]
-path = "rustc_version/v0_4/crate"
+path = "chromium_crates_io/vendor/rustc_version-0.4.0"
 package = "rustc_version"
 
 [patch.crates-io.rustversion_v1]
-path = "rustversion/v1/crate"
+path = "chromium_crates_io/vendor/rustversion-1.0.6"
 package = "rustversion"
 
 [patch.crates-io.ryu_v1]
-path = "ryu/v1/crate"
+path = "chromium_crates_io/vendor/ryu-1.0.5"
 package = "ryu"
 
 [patch.crates-io.semver_v1]
-path = "semver/v1/crate"
+path = "chromium_crates_io/vendor/semver-1.0.4"
 package = "semver"
 
 [patch.crates-io.serde_derive_v1]
-path = "serde_derive/v1/crate"
+path = "chromium_crates_io/vendor/serde_derive-1.0.188"
 package = "serde_derive"
 
 [patch.crates-io.serde_json_lenient_v0_1]
-path = "serde_json_lenient/v0_1/crate"
+path = "chromium_crates_io/vendor/serde_json_lenient-0.1.8"
 package = "serde_json_lenient"
 
 [patch.crates-io.serde_json_v1]
-path = "serde_json/v1/crate"
+path = "chromium_crates_io/vendor/serde_json-1.0.78"
 package = "serde_json"
 
 [patch.crates-io.serde_v1]
-path = "serde/v1/crate"
+path = "chromium_crates_io/vendor/serde-1.0.188"
 package = "serde"
 
 [patch.crates-io.skrifa_v0_10]
-path = "skrifa/v0_10/crate"
+path = "chromium_crates_io/vendor/skrifa-0.10.0"
 package = "skrifa"
 
 [patch.crates-io.small_ctor_v0_1]
-path = "small_ctor/v0_1/crate"
+path = "chromium_crates_io/vendor/small_ctor-0.1.1"
 package = "small_ctor"
 
 [patch.crates-io.static_assertions_v1]
-path = "static_assertions/v1/crate"
+path = "chromium_crates_io/vendor/static_assertions-1.1.0"
 package = "static_assertions"
 
 [patch.crates-io.strsim_v0_10]
-path = "strsim/v0_10/crate"
+path = "chromium_crates_io/vendor/strsim-0.10.0"
 package = "strsim"
 
 [patch.crates-io.syn_v1]
-path = "syn/v1/crate"
+path = "chromium_crates_io/vendor/syn-1.0.99"
 package = "syn"
 
 [patch.crates-io.syn_v2]
-path = "syn/v2/crate"
+path = "chromium_crates_io/vendor/syn-2.0.29"
 package = "syn"
 
 [patch.crates-io.termcolor_v1]
-path = "termcolor/v1/crate"
+path = "chromium_crates_io/vendor/termcolor-1.1.2"
 package = "termcolor"
 
 [patch.crates-io.unicode-ident_v1]
-path = "unicode_ident/v1/crate"
+path = "chromium_crates_io/vendor/unicode-ident-1.0.8"
 package = "unicode-ident"
 
 [patch.crates-io.unicode-linebreak_v0_1]
-path = "unicode_linebreak/v0_1/crate"
+path = "chromium_crates_io/vendor/unicode-linebreak-0.1.2"
 package = "unicode-linebreak"
 
 [patch.crates-io.unicode-width_v0_1]
-path = "unicode_width/v0_1/crate"
+path = "chromium_crates_io/vendor/unicode-width-0.1.9"
 package = "unicode-width"
 
 [patch.crates-io.winapi-util_v0_1]
-path = "winapi_util/v0_1/crate"
+path = "chromium_crates_io/vendor/winapi-util-0.1.5"
 package = "winapi-util"
 
 [patch.crates-io.winapi_v0_3]
-path = "winapi/v0_3/crate"
+path = "chromium_crates_io/vendor/winapi-0.3.9"
 package = "winapi"
 
 [patch.crates-io.wycheproof_v0_4]
-path = "wycheproof/v0_4/crate"
+path = "chromium_crates_io/vendor/wycheproof-0.4.0"
 package = "wycheproof"
diff --git a/third_party/rust/aho_corasick/v0_7/BUILD.gn b/third_party/rust/aho_corasick/v0_7/BUILD.gn
index 33070c0..fcc3fcc 100644
--- a/third_party/rust/aho_corasick/v0_7/BUILD.gn
+++ b/third_party/rust/aho_corasick/v0_7/BUILD.gn
@@ -11,34 +11,34 @@
   crate_name = "aho_corasick"
   epoch = "0.7"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/lib.rs"
   sources = [
-    "//third_party/rust/aho_corasick/v0_7/crate/src/ahocorasick.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/automaton.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/buffer.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/byte_frequencies.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/classes.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/dfa.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/error.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/lib.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/nfa.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/packed/api.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/packed/mod.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/packed/pattern.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/packed/rabinkarp.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/packed/teddy/compile.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/packed/teddy/mod.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/packed/teddy/runtime.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/packed/tests.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/packed/vector.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/prefilter.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/state_id.rs",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/tests.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/ahocorasick.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/automaton.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/buffer.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/byte_frequencies.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/classes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/dfa.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/nfa.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/api.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/pattern.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/rabinkarp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/teddy/compile.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/teddy/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/teddy/runtime.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/tests.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/vector.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/prefilter.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/state_id.rs",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/tests.rs",
   ]
   inputs = [
-    "//third_party/rust/aho_corasick/v0_7/crate/DESIGN.md",
-    "//third_party/rust/aho_corasick/v0_7/crate/README.md",
-    "//third_party/rust/aho_corasick/v0_7/crate/src/packed/teddy/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/DESIGN.md",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/teddy/README.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
diff --git a/third_party/rust/anstyle/v1/BUILD.gn b/third_party/rust/anstyle/v1/BUILD.gn
index fe38b2d..7bb68d3 100644
--- a/third_party/rust/anstyle/v1/BUILD.gn
+++ b/third_party/rust/anstyle/v1/BUILD.gn
@@ -11,17 +11,19 @@
   crate_name = "anstyle"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/lib.rs"
   sources = [
-    "//third_party/rust/anstyle/v1/crate/examples/dump.rs",
-    "//third_party/rust/anstyle/v1/crate/src/color.rs",
-    "//third_party/rust/anstyle/v1/crate/src/effect.rs",
-    "//third_party/rust/anstyle/v1/crate/src/lib.rs",
-    "//third_party/rust/anstyle/v1/crate/src/macros.rs",
-    "//third_party/rust/anstyle/v1/crate/src/reset.rs",
-    "//third_party/rust/anstyle/v1/crate/src/style.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/examples/dump.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/color.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/effect.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/macros.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/reset.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/style.rs",
   ]
-  inputs = [ "//third_party/rust/anstyle/v1/crate/README.md" ]
+  inputs =
+      [ "//third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/anyhow/v1/BUILD.gn b/third_party/rust/anyhow/v1/BUILD.gn
index a52500d0..e4eb2b71de 100644
--- a/third_party/rust/anyhow/v1/BUILD.gn
+++ b/third_party/rust/anyhow/v1/BUILD.gn
@@ -11,44 +11,46 @@
   crate_name = "anyhow"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/lib.rs"
   sources = [
-    "//third_party/rust/anyhow/v1/crate/build.rs",
-    "//third_party/rust/anyhow/v1/crate/src/backtrace.rs",
-    "//third_party/rust/anyhow/v1/crate/src/chain.rs",
-    "//third_party/rust/anyhow/v1/crate/src/context.rs",
-    "//third_party/rust/anyhow/v1/crate/src/ensure.rs",
-    "//third_party/rust/anyhow/v1/crate/src/error.rs",
-    "//third_party/rust/anyhow/v1/crate/src/fmt.rs",
-    "//third_party/rust/anyhow/v1/crate/src/kind.rs",
-    "//third_party/rust/anyhow/v1/crate/src/lib.rs",
-    "//third_party/rust/anyhow/v1/crate/src/macros.rs",
-    "//third_party/rust/anyhow/v1/crate/src/ptr.rs",
-    "//third_party/rust/anyhow/v1/crate/src/wrapper.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/common/mod.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/compiletest.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/drop/mod.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/test_autotrait.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/test_backtrace.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/test_boxed.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/test_chain.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/test_context.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/test_convert.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/test_downcast.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/test_ensure.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/test_ffi.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/test_fmt.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/test_macros.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/test_repr.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/test_source.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/ui/chained-comparison.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/ui/empty-ensure.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/ui/must-use.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/ui/no-impl.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/ui/temporary-value.rs",
-    "//third_party/rust/anyhow/v1/crate/tests/ui/wrong-interpolation.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/backtrace.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/chain.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/context.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/ensure.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/fmt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/kind.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/macros.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/ptr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/wrapper.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/common/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/compiletest.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/drop/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_autotrait.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_backtrace.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_boxed.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_chain.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_context.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_convert.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_downcast.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_ensure.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_ffi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_fmt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_macros.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_repr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_source.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/chained-comparison.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/empty-ensure.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/must-use.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/no-impl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/temporary-value.rs",
+    "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/wrong-interpolation.rs",
   ]
-  inputs = [ "//third_party/rust/anyhow/v1/crate/README.md" ]
+  inputs =
+      [ "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
@@ -63,8 +65,10 @@
   executable_configs -= [ "//build/config/compiler:chromium_code" ]
   executable_configs += [ "//build/config/compiler:no_chromium_code" ]
   features = [ "std" ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root =
+      "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/build.rs"
+  build_sources =
+      [ "//third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/build.rs" ]
 
   # Only for usage from third-party crates. Add the crate to
   # third_party.toml to use it from first-party code.
diff --git a/third_party/rust/anyhow/v1/crate/rust-toolchain.toml b/third_party/rust/anyhow/v1/crate/rust-toolchain.toml
deleted file mode 100644
index 20fe888..0000000
--- a/third_party/rust/anyhow/v1/crate/rust-toolchain.toml
+++ /dev/null
@@ -1,2 +0,0 @@
-[toolchain]
-components = ["rust-src"]
diff --git a/third_party/rust/autocfg/v1/BUILD.gn b/third_party/rust/autocfg/v1/BUILD.gn
index 347dd4f0..0f05dfd7 100644
--- a/third_party/rust/autocfg/v1/BUILD.gn
+++ b/third_party/rust/autocfg/v1/BUILD.gn
@@ -11,19 +11,21 @@
   crate_name = "autocfg"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/src/lib.rs"
   sources = [
-    "//third_party/rust/autocfg/v1/crate/examples/integers.rs",
-    "//third_party/rust/autocfg/v1/crate/examples/paths.rs",
-    "//third_party/rust/autocfg/v1/crate/examples/traits.rs",
-    "//third_party/rust/autocfg/v1/crate/examples/versions.rs",
-    "//third_party/rust/autocfg/v1/crate/src/error.rs",
-    "//third_party/rust/autocfg/v1/crate/src/lib.rs",
-    "//third_party/rust/autocfg/v1/crate/src/tests.rs",
-    "//third_party/rust/autocfg/v1/crate/src/version.rs",
-    "//third_party/rust/autocfg/v1/crate/tests/rustflags.rs",
+    "//third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/examples/integers.rs",
+    "//third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/examples/paths.rs",
+    "//third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/examples/traits.rs",
+    "//third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/examples/versions.rs",
+    "//third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/src/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/src/tests.rs",
+    "//third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/src/version.rs",
+    "//third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/tests/rustflags.rs",
   ]
-  inputs = [ "//third_party/rust/autocfg/v1/crate/README.md" ]
+  inputs =
+      [ "//third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/base64/v0_13/BUILD.gn b/third_party/rust/base64/v0_13/BUILD.gn
index 8bce3ff..c763c15a 100644
--- a/third_party/rust/base64/v0_13/BUILD.gn
+++ b/third_party/rust/base64/v0_13/BUILD.gn
@@ -11,33 +11,34 @@
   crate_name = "base64"
   epoch = "0.13"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/lib.rs"
   sources = [
-    "//third_party/rust/base64/v0_13/crate/benches/benchmarks.rs",
-    "//third_party/rust/base64/v0_13/crate/examples/base64.rs",
-    "//third_party/rust/base64/v0_13/crate/examples/make_tables.rs",
-    "//third_party/rust/base64/v0_13/crate/src/chunked_encoder.rs",
-    "//third_party/rust/base64/v0_13/crate/src/decode.rs",
-    "//third_party/rust/base64/v0_13/crate/src/display.rs",
-    "//third_party/rust/base64/v0_13/crate/src/encode.rs",
-    "//third_party/rust/base64/v0_13/crate/src/lib.rs",
-    "//third_party/rust/base64/v0_13/crate/src/read/decoder.rs",
-    "//third_party/rust/base64/v0_13/crate/src/read/decoder_tests.rs",
-    "//third_party/rust/base64/v0_13/crate/src/read/mod.rs",
-    "//third_party/rust/base64/v0_13/crate/src/tables.rs",
-    "//third_party/rust/base64/v0_13/crate/src/tests.rs",
-    "//third_party/rust/base64/v0_13/crate/src/write/encoder.rs",
-    "//third_party/rust/base64/v0_13/crate/src/write/encoder_string_writer.rs",
-    "//third_party/rust/base64/v0_13/crate/src/write/encoder_tests.rs",
-    "//third_party/rust/base64/v0_13/crate/src/write/mod.rs",
-    "//third_party/rust/base64/v0_13/crate/tests/decode.rs",
-    "//third_party/rust/base64/v0_13/crate/tests/encode.rs",
-    "//third_party/rust/base64/v0_13/crate/tests/helpers.rs",
-    "//third_party/rust/base64/v0_13/crate/tests/tests.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/benches/benchmarks.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/examples/base64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/examples/make_tables.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/chunked_encoder.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/decode.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/display.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/encode.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/read/decoder.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/read/decoder_tests.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/read/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/tables.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/tests.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/write/encoder.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/write/encoder_string_writer.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/write/encoder_tests.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/write/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/tests/decode.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/tests/encode.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/tests/helpers.rs",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/tests/tests.rs",
   ]
   inputs = [
-    "//third_party/rust/base64/v0_13/crate/README.md",
-    "//third_party/rust/base64/v0_13/crate/RELEASE-NOTES.md",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/base64-0.13.1/RELEASE-NOTES.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
diff --git a/third_party/rust/base64/v0_13/crate/LICENSE-APACHE b/third_party/rust/base64/v0_13/crate/LICENSE-APACHE
deleted file mode 100644
index 16fe87b..0000000
--- a/third_party/rust/base64/v0_13/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/third_party/rust/bitflags/v1/BUILD.gn b/third_party/rust/bitflags/v1/BUILD.gn
index c59442e37..cf55ef1 100644
--- a/third_party/rust/bitflags/v1/BUILD.gn
+++ b/third_party/rust/bitflags/v1/BUILD.gn
@@ -11,33 +11,34 @@
   crate_name = "bitflags"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/src/lib.rs"
   sources = [
-    "//third_party/rust/bitflags/v1/crate/src/example_generated.rs",
-    "//third_party/rust/bitflags/v1/crate/src/lib.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/basic.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile-fail/impls/copy.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile-fail/impls/eq.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile-fail/non_integer_base/all_defined.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile-fail/non_integer_base/all_missing.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile-fail/visibility/private_field.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile-fail/visibility/private_flags.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile-fail/visibility/pub_const.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile-pass/impls/convert.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile-pass/impls/default.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile-pass/impls/inherent_methods.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile-pass/redefinition/core.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile-pass/redefinition/stringify.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile-pass/repr/c.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile-pass/repr/transparent.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile-pass/visibility/bits_field.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile-pass/visibility/pub_in.rs",
-    "//third_party/rust/bitflags/v1/crate/tests/compile.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/src/example_generated.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/basic.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/impls/copy.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/impls/eq.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_defined.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_missing.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_field.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_flags.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/visibility/pub_const.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/impls/convert.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/impls/default.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/impls/inherent_methods.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/redefinition/core.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/redefinition/stringify.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/repr/c.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/repr/transparent.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/visibility/bits_field.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/visibility/pub_in.rs",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile.rs",
   ]
   inputs = [
-    "//third_party/rust/bitflags/v1/crate/CHANGELOG.md",
-    "//third_party/rust/bitflags/v1/crate/CODE_OF_CONDUCT.md",
-    "//third_party/rust/bitflags/v1/crate/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/CHANGELOG.md",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/CODE_OF_CONDUCT.md",
+    "//third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/README.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
diff --git a/third_party/rust/bitflags/v1/crate/LICENSE-APACHE b/third_party/rust/bitflags/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 16fe87b..0000000
--- a/third_party/rust/bitflags/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/third_party/rust/cfg_if/v1/BUILD.gn b/third_party/rust/cfg_if/v1/BUILD.gn
index 0d35621..0245157 100644
--- a/third_party/rust/cfg_if/v1/BUILD.gn
+++ b/third_party/rust/cfg_if/v1/BUILD.gn
@@ -11,12 +11,14 @@
   crate_name = "cfg_if"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/src/lib.rs"
   sources = [
-    "//third_party/rust/cfg_if/v1/crate/src/lib.rs",
-    "//third_party/rust/cfg_if/v1/crate/tests/xcrate.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/tests/xcrate.rs",
   ]
-  inputs = [ "//third_party/rust/cfg_if/v1/crate/README.md" ]
+  inputs =
+      [ "//third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/aho_corasick/v0_7/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/.cargo_vcs_info.json
diff --git a/third_party/rust/aho_corasick/v0_7/crate/.github/workflows/ci.yml b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/.github/workflows/ci.yml
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/.github/workflows/ci.yml
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/.github/workflows/ci.yml
diff --git a/third_party/rust/aho_corasick/v0_7/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/.gitignore
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/.gitignore
diff --git a/third_party/rust/aho_corasick/v0_7/crate/COPYING b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/COPYING
similarity index 100%
copy from third_party/rust/aho_corasick/v0_7/crate/COPYING
copy to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/COPYING
diff --git a/third_party/rust/aho_corasick/v0_7/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/Cargo.toml
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/Cargo.toml
diff --git a/third_party/rust/aho_corasick/v0_7/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/Cargo.toml.orig
diff --git a/third_party/rust/aho_corasick/v0_7/crate/DESIGN.md b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/DESIGN.md
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/DESIGN.md
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/DESIGN.md
diff --git a/third_party/rust/aho_corasick/v0_7/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/LICENSE-MIT
similarity index 100%
copy from third_party/rust/aho_corasick/v0_7/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/LICENSE-MIT
diff --git a/third_party/rust/aho_corasick/v0_7/crate/README.md b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/README.md
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/README.md
diff --git a/third_party/rust/aho_corasick/v0_7/crate/UNLICENSE b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/UNLICENSE
similarity index 100%
copy from third_party/rust/aho_corasick/v0_7/crate/UNLICENSE
copy to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/UNLICENSE
diff --git a/third_party/rust/aho_corasick/v0_7/crate/rustfmt.toml b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/rustfmt.toml
similarity index 100%
copy from third_party/rust/aho_corasick/v0_7/crate/rustfmt.toml
copy to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/rustfmt.toml
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/ahocorasick.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/ahocorasick.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/ahocorasick.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/ahocorasick.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/automaton.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/automaton.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/automaton.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/automaton.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/buffer.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/buffer.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/buffer.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/buffer.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/byte_frequencies.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/byte_frequencies.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/byte_frequencies.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/byte_frequencies.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/classes.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/classes.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/classes.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/classes.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/dfa.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/dfa.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/dfa.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/dfa.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/error.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/error.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/error.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/error.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/lib.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/lib.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/nfa.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/nfa.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/nfa.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/nfa.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/packed/api.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/api.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/packed/api.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/api.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/packed/mod.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/mod.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/packed/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/mod.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/packed/pattern.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/pattern.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/packed/pattern.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/pattern.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/packed/rabinkarp.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/rabinkarp.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/packed/rabinkarp.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/rabinkarp.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/packed/teddy/README.md b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/teddy/README.md
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/packed/teddy/README.md
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/teddy/README.md
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/packed/teddy/compile.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/teddy/compile.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/packed/teddy/compile.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/teddy/compile.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/packed/teddy/mod.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/teddy/mod.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/packed/teddy/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/teddy/mod.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/packed/teddy/runtime.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/teddy/runtime.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/packed/teddy/runtime.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/teddy/runtime.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/packed/tests.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/tests.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/packed/tests.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/tests.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/packed/vector.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/vector.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/packed/vector.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/packed/vector.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/prefilter.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/prefilter.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/prefilter.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/prefilter.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/state_id.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/state_id.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/state_id.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/state_id.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/src/tests.rs b/third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/tests.rs
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/src/tests.rs
rename to third_party/rust/chromium_crates_io/vendor/aho-corasick-0.7.18/src/tests.rs
diff --git a/third_party/rust/anstyle/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/anstyle/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/.cargo_vcs_info.json
diff --git a/third_party/rust/anstyle/v1/crate/Cargo.lock b/third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/Cargo.lock
similarity index 100%
rename from third_party/rust/anstyle/v1/crate/Cargo.lock
rename to third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/Cargo.lock
diff --git a/third_party/rust/anstyle/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/Cargo.toml
similarity index 100%
rename from third_party/rust/anstyle/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/Cargo.toml
diff --git a/third_party/rust/anstyle/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/anstyle/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/Cargo.toml.orig
diff --git a/third_party/rust/clap/v4/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/LICENSE-APACHE
similarity index 100%
rename from third_party/rust/clap/v4/crate/LICENSE-APACHE
rename to third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/LICENSE-APACHE
diff --git a/third_party/rust/anstyle/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/LICENSE-MIT
similarity index 100%
rename from third_party/rust/anstyle/v1/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/LICENSE-MIT
diff --git a/third_party/rust/anstyle/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/README.md
similarity index 100%
rename from third_party/rust/anstyle/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/README.md
diff --git a/third_party/rust/anstyle/v1/crate/examples/dump.rs b/third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/examples/dump.rs
similarity index 100%
rename from third_party/rust/anstyle/v1/crate/examples/dump.rs
rename to third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/examples/dump.rs
diff --git a/third_party/rust/anstyle/v1/crate/src/color.rs b/third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/color.rs
similarity index 100%
rename from third_party/rust/anstyle/v1/crate/src/color.rs
rename to third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/color.rs
diff --git a/third_party/rust/anstyle/v1/crate/src/effect.rs b/third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/effect.rs
similarity index 100%
rename from third_party/rust/anstyle/v1/crate/src/effect.rs
rename to third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/effect.rs
diff --git a/third_party/rust/anstyle/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/lib.rs
similarity index 100%
rename from third_party/rust/anstyle/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/lib.rs
diff --git a/third_party/rust/anstyle/v1/crate/src/macros.rs b/third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/macros.rs
similarity index 100%
rename from third_party/rust/anstyle/v1/crate/src/macros.rs
rename to third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/macros.rs
diff --git a/third_party/rust/anstyle/v1/crate/src/reset.rs b/third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/reset.rs
similarity index 100%
rename from third_party/rust/anstyle/v1/crate/src/reset.rs
rename to third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/reset.rs
diff --git a/third_party/rust/anstyle/v1/crate/src/style.rs b/third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/style.rs
similarity index 100%
rename from third_party/rust/anstyle/v1/crate/src/style.rs
rename to third_party/rust/chromium_crates_io/vendor/anstyle-1.0.4/src/style.rs
diff --git a/third_party/rust/anyhow/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/.cargo_vcs_info.json
diff --git a/third_party/rust/anyhow/v1/crate/.clippy.toml b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/.clippy.toml
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/.clippy.toml
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/.clippy.toml
diff --git a/third_party/rust/anyhow/v1/crate/.github/workflows/ci.yml b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/.github/workflows/ci.yml
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/.github/workflows/ci.yml
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/.github/workflows/ci.yml
diff --git a/third_party/rust/anyhow/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/.gitignore
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/.gitignore
diff --git a/third_party/rust/anyhow/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/Cargo.toml
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/Cargo.toml
diff --git a/third_party/rust/anyhow/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/Cargo.toml.orig
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/LICENSE-APACHE
similarity index 100%
rename from third_party/rust/cxx/v1/crate/LICENSE-APACHE
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/LICENSE-APACHE
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/LICENSE-MIT
similarity index 100%
rename from third_party/rust/cxx/v1/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/LICENSE-MIT
diff --git a/third_party/rust/anyhow/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/README.md
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/README.md
diff --git a/third_party/rust/anyhow/v1/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/build.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/build.rs
diff --git a/third_party/rust/cxx/v1/crate/rust-toolchain.toml b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/rust-toolchain.toml
similarity index 100%
rename from third_party/rust/cxx/v1/crate/rust-toolchain.toml
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/rust-toolchain.toml
diff --git a/third_party/rust/anyhow/v1/crate/src/backtrace.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/backtrace.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/src/backtrace.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/backtrace.rs
diff --git a/third_party/rust/anyhow/v1/crate/src/chain.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/chain.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/src/chain.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/chain.rs
diff --git a/third_party/rust/anyhow/v1/crate/src/context.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/context.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/src/context.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/context.rs
diff --git a/third_party/rust/anyhow/v1/crate/src/ensure.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/ensure.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/src/ensure.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/ensure.rs
diff --git a/third_party/rust/anyhow/v1/crate/src/error.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/error.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/src/error.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/error.rs
diff --git a/third_party/rust/anyhow/v1/crate/src/fmt.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/fmt.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/src/fmt.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/fmt.rs
diff --git a/third_party/rust/anyhow/v1/crate/src/kind.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/kind.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/src/kind.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/kind.rs
diff --git a/third_party/rust/anyhow/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/lib.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/lib.rs
diff --git a/third_party/rust/anyhow/v1/crate/src/macros.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/macros.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/src/macros.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/macros.rs
diff --git a/third_party/rust/anyhow/v1/crate/src/ptr.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/ptr.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/src/ptr.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/ptr.rs
diff --git a/third_party/rust/anyhow/v1/crate/src/wrapper.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/wrapper.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/src/wrapper.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/src/wrapper.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/common/mod.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/common/mod.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/common/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/common/mod.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/compiletest.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/compiletest.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/compiletest.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/compiletest.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/drop/mod.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/drop/mod.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/drop/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/drop/mod.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/test_autotrait.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_autotrait.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/test_autotrait.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_autotrait.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/test_backtrace.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_backtrace.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/test_backtrace.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_backtrace.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/test_boxed.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_boxed.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/test_boxed.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_boxed.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/test_chain.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_chain.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/test_chain.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_chain.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/test_context.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_context.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/test_context.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_context.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/test_convert.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_convert.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/test_convert.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_convert.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/test_downcast.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_downcast.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/test_downcast.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_downcast.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/test_ensure.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_ensure.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/test_ensure.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_ensure.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/test_ffi.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_ffi.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/test_ffi.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_ffi.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/test_fmt.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_fmt.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/test_fmt.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_fmt.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/test_macros.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_macros.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/test_macros.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_macros.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/test_repr.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_repr.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/test_repr.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_repr.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/test_source.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_source.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/test_source.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/test_source.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/ui/chained-comparison.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/chained-comparison.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/ui/chained-comparison.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/chained-comparison.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/ui/chained-comparison.stderr b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/chained-comparison.stderr
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/ui/chained-comparison.stderr
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/chained-comparison.stderr
diff --git a/third_party/rust/anyhow/v1/crate/tests/ui/empty-ensure.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/empty-ensure.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/ui/empty-ensure.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/empty-ensure.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/ui/empty-ensure.stderr b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/empty-ensure.stderr
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/ui/empty-ensure.stderr
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/empty-ensure.stderr
diff --git a/third_party/rust/anyhow/v1/crate/tests/ui/must-use.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/must-use.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/ui/must-use.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/must-use.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/ui/must-use.stderr b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/must-use.stderr
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/ui/must-use.stderr
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/must-use.stderr
diff --git a/third_party/rust/anyhow/v1/crate/tests/ui/no-impl.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/no-impl.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/ui/no-impl.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/no-impl.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/ui/no-impl.stderr b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/no-impl.stderr
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/ui/no-impl.stderr
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/no-impl.stderr
diff --git a/third_party/rust/anyhow/v1/crate/tests/ui/temporary-value.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/temporary-value.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/ui/temporary-value.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/temporary-value.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/ui/temporary-value.stderr b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/temporary-value.stderr
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/ui/temporary-value.stderr
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/temporary-value.stderr
diff --git a/third_party/rust/anyhow/v1/crate/tests/ui/wrong-interpolation.rs b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/wrong-interpolation.rs
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/ui/wrong-interpolation.rs
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/wrong-interpolation.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/ui/wrong-interpolation.stderr b/third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/wrong-interpolation.stderr
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/tests/ui/wrong-interpolation.stderr
rename to third_party/rust/chromium_crates_io/vendor/anyhow-1.0.70/tests/ui/wrong-interpolation.stderr
diff --git a/third_party/rust/autocfg/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/autocfg/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/.cargo_vcs_info.json
diff --git a/third_party/rust/autocfg/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/.gitignore
similarity index 100%
rename from third_party/rust/autocfg/v1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/.gitignore
diff --git a/third_party/rust/autocfg/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/Cargo.toml
similarity index 100%
rename from third_party/rust/autocfg/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/Cargo.toml
diff --git a/third_party/rust/autocfg/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/autocfg/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/Cargo.toml.orig
diff --git a/third_party/rust/cfg_if/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/LICENSE-APACHE
similarity index 100%
rename from third_party/rust/cfg_if/v1/crate/LICENSE-APACHE
rename to third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/LICENSE-APACHE
diff --git a/third_party/rust/autocfg/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/LICENSE-MIT
similarity index 100%
rename from third_party/rust/autocfg/v1/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/LICENSE-MIT
diff --git a/third_party/rust/autocfg/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/README.md
similarity index 100%
rename from third_party/rust/autocfg/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/README.md
diff --git a/third_party/rust/autocfg/v1/crate/examples/integers.rs b/third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/examples/integers.rs
similarity index 100%
rename from third_party/rust/autocfg/v1/crate/examples/integers.rs
rename to third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/examples/integers.rs
diff --git a/third_party/rust/autocfg/v1/crate/examples/paths.rs b/third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/examples/paths.rs
similarity index 100%
rename from third_party/rust/autocfg/v1/crate/examples/paths.rs
rename to third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/examples/paths.rs
diff --git a/third_party/rust/autocfg/v1/crate/examples/traits.rs b/third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/examples/traits.rs
similarity index 100%
rename from third_party/rust/autocfg/v1/crate/examples/traits.rs
rename to third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/examples/traits.rs
diff --git a/third_party/rust/autocfg/v1/crate/examples/versions.rs b/third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/examples/versions.rs
similarity index 100%
rename from third_party/rust/autocfg/v1/crate/examples/versions.rs
rename to third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/examples/versions.rs
diff --git a/third_party/rust/autocfg/v1/crate/src/error.rs b/third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/src/error.rs
similarity index 100%
rename from third_party/rust/autocfg/v1/crate/src/error.rs
rename to third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/src/error.rs
diff --git a/third_party/rust/autocfg/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/src/lib.rs
similarity index 100%
rename from third_party/rust/autocfg/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/src/lib.rs
diff --git a/third_party/rust/autocfg/v1/crate/src/tests.rs b/third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/src/tests.rs
similarity index 100%
rename from third_party/rust/autocfg/v1/crate/src/tests.rs
rename to third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/src/tests.rs
diff --git a/third_party/rust/autocfg/v1/crate/src/version.rs b/third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/src/version.rs
similarity index 100%
rename from third_party/rust/autocfg/v1/crate/src/version.rs
rename to third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/src/version.rs
diff --git a/third_party/rust/autocfg/v1/crate/tests/rustflags.rs b/third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/tests/rustflags.rs
similarity index 100%
rename from third_party/rust/autocfg/v1/crate/tests/rustflags.rs
rename to third_party/rust/chromium_crates_io/vendor/autocfg-1.1.0/tests/rustflags.rs
diff --git a/third_party/rust/base64/v0_13/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/.cargo_vcs_info.json
diff --git a/third_party/rust/base64/v0_13/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/.gitignore
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/.gitignore
diff --git a/third_party/rust/base64/v0_13/crate/.travis.yml b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/.travis.yml
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/.travis.yml
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/.travis.yml
diff --git a/third_party/rust/base64/v0_13/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/Cargo.toml
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/Cargo.toml
diff --git a/third_party/rust/base64/v0_13/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/Cargo.toml.orig
diff --git a/third_party/rust/cfg_if/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cfg_if/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/LICENSE-APACHE
diff --git a/third_party/rust/base64/v0_13/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/LICENSE-MIT
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/LICENSE-MIT
diff --git a/third_party/rust/base64/v0_13/crate/README.md b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/README.md
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/README.md
diff --git a/third_party/rust/base64/v0_13/crate/RELEASE-NOTES.md b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/RELEASE-NOTES.md
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/RELEASE-NOTES.md
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/RELEASE-NOTES.md
diff --git a/third_party/rust/base64/v0_13/crate/benches/benchmarks.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/benches/benchmarks.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/benches/benchmarks.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/benches/benchmarks.rs
diff --git a/third_party/rust/base64/v0_13/crate/examples/base64.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/examples/base64.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/examples/base64.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/examples/base64.rs
diff --git a/third_party/rust/base64/v0_13/crate/examples/make_tables.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/examples/make_tables.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/examples/make_tables.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/examples/make_tables.rs
diff --git a/third_party/rust/base64/v0_13/crate/icon_CLion.svg b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/icon_CLion.svg
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/icon_CLion.svg
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/icon_CLion.svg
diff --git a/third_party/rust/base64/v0_13/crate/src/chunked_encoder.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/chunked_encoder.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/src/chunked_encoder.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/chunked_encoder.rs
diff --git a/third_party/rust/base64/v0_13/crate/src/decode.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/decode.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/src/decode.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/decode.rs
diff --git a/third_party/rust/base64/v0_13/crate/src/display.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/display.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/src/display.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/display.rs
diff --git a/third_party/rust/base64/v0_13/crate/src/encode.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/encode.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/src/encode.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/encode.rs
diff --git a/third_party/rust/base64/v0_13/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/lib.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/lib.rs
diff --git a/third_party/rust/base64/v0_13/crate/src/read/decoder.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/read/decoder.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/src/read/decoder.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/read/decoder.rs
diff --git a/third_party/rust/base64/v0_13/crate/src/read/decoder_tests.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/read/decoder_tests.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/src/read/decoder_tests.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/read/decoder_tests.rs
diff --git a/third_party/rust/base64/v0_13/crate/src/read/mod.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/read/mod.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/src/read/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/read/mod.rs
diff --git a/third_party/rust/base64/v0_13/crate/src/tables.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/tables.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/src/tables.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/tables.rs
diff --git a/third_party/rust/base64/v0_13/crate/src/tests.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/tests.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/src/tests.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/tests.rs
diff --git a/third_party/rust/base64/v0_13/crate/src/write/encoder.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/write/encoder.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/src/write/encoder.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/write/encoder.rs
diff --git a/third_party/rust/base64/v0_13/crate/src/write/encoder_string_writer.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/write/encoder_string_writer.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/src/write/encoder_string_writer.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/write/encoder_string_writer.rs
diff --git a/third_party/rust/base64/v0_13/crate/src/write/encoder_tests.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/write/encoder_tests.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/src/write/encoder_tests.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/write/encoder_tests.rs
diff --git a/third_party/rust/base64/v0_13/crate/src/write/mod.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/write/mod.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/src/write/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/src/write/mod.rs
diff --git a/third_party/rust/base64/v0_13/crate/tests/decode.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/tests/decode.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/tests/decode.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/tests/decode.rs
diff --git a/third_party/rust/base64/v0_13/crate/tests/encode.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/tests/encode.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/tests/encode.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/tests/encode.rs
diff --git a/third_party/rust/base64/v0_13/crate/tests/helpers.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/tests/helpers.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/tests/helpers.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/tests/helpers.rs
diff --git a/third_party/rust/base64/v0_13/crate/tests/tests.rs b/third_party/rust/chromium_crates_io/vendor/base64-0.13.1/tests/tests.rs
similarity index 100%
rename from third_party/rust/base64/v0_13/crate/tests/tests.rs
rename to third_party/rust/chromium_crates_io/vendor/base64-0.13.1/tests/tests.rs
diff --git a/third_party/rust/bitflags/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/.cargo_vcs_info.json
diff --git a/third_party/rust/bitflags/v1/crate/.github/workflows/rust.yml b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/.github/workflows/rust.yml
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/.github/workflows/rust.yml
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/.github/workflows/rust.yml
diff --git a/third_party/rust/bitflags/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/.gitignore
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/.gitignore
diff --git a/third_party/rust/bitflags/v1/crate/CHANGELOG.md b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/CHANGELOG.md
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/CHANGELOG.md
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/CHANGELOG.md
diff --git a/third_party/rust/bitflags/v1/crate/CODE_OF_CONDUCT.md b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/CODE_OF_CONDUCT.md
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/CODE_OF_CONDUCT.md
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/CODE_OF_CONDUCT.md
diff --git a/third_party/rust/bitflags/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/Cargo.toml
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/Cargo.toml
diff --git a/third_party/rust/bitflags/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/Cargo.toml.orig
diff --git a/third_party/rust/cfg_if/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cfg_if/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/LICENSE-APACHE
diff --git a/third_party/rust/bitflags/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/LICENSE-MIT
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/LICENSE-MIT
diff --git a/third_party/rust/bitflags/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/README.md
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/README.md
diff --git a/third_party/rust/bitflags/v1/crate/src/example_generated.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/src/example_generated.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/src/example_generated.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/src/example_generated.rs
diff --git a/third_party/rust/bitflags/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/src/lib.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/src/lib.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/basic.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/basic.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/basic.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/basic.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-fail/.gitignore b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/.gitignore
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-fail/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/.gitignore
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-fail/impls/copy.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/impls/copy.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-fail/impls/copy.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/impls/copy.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-fail/impls/copy.stderr.beta b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/impls/copy.stderr.beta
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-fail/impls/copy.stderr.beta
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/impls/copy.stderr.beta
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-fail/impls/eq.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/impls/eq.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-fail/impls/eq.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/impls/eq.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-fail/impls/eq.stderr.beta b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/impls/eq.stderr.beta
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-fail/impls/eq.stderr.beta
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/impls/eq.stderr.beta
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-fail/non_integer_base/all_defined.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_defined.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-fail/non_integer_base/all_defined.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_defined.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-fail/non_integer_base/all_defined.stderr.beta b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_defined.stderr.beta
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-fail/non_integer_base/all_defined.stderr.beta
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_defined.stderr.beta
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-fail/non_integer_base/all_missing.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_missing.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-fail/non_integer_base/all_missing.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_missing.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-fail/non_integer_base/all_missing.stderr.beta b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_missing.stderr.beta
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-fail/non_integer_base/all_missing.stderr.beta
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_missing.stderr.beta
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-fail/visibility/private_field.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_field.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-fail/visibility/private_field.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_field.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-fail/visibility/private_field.stderr.beta b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_field.stderr.beta
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-fail/visibility/private_field.stderr.beta
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_field.stderr.beta
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-fail/visibility/private_flags.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_flags.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-fail/visibility/private_flags.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_flags.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-fail/visibility/private_flags.stderr.beta b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_flags.stderr.beta
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-fail/visibility/private_flags.stderr.beta
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_flags.stderr.beta
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-fail/visibility/pub_const.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/visibility/pub_const.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-fail/visibility/pub_const.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/visibility/pub_const.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-fail/visibility/pub_const.stderr.beta b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/visibility/pub_const.stderr.beta
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-fail/visibility/pub_const.stderr.beta
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-fail/visibility/pub_const.stderr.beta
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-pass/impls/convert.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/impls/convert.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-pass/impls/convert.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/impls/convert.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-pass/impls/default.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/impls/default.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-pass/impls/default.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/impls/default.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-pass/impls/inherent_methods.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/impls/inherent_methods.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-pass/impls/inherent_methods.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/impls/inherent_methods.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-pass/redefinition/core.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/redefinition/core.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-pass/redefinition/core.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/redefinition/core.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-pass/redefinition/stringify.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/redefinition/stringify.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-pass/redefinition/stringify.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/redefinition/stringify.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-pass/repr/c.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/repr/c.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-pass/repr/c.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/repr/c.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-pass/repr/transparent.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/repr/transparent.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-pass/repr/transparent.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/repr/transparent.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-pass/visibility/bits_field.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/visibility/bits_field.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-pass/visibility/bits_field.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/visibility/bits_field.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile-pass/visibility/pub_in.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/visibility/pub_in.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile-pass/visibility/pub_in.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile-pass/visibility/pub_in.rs
diff --git a/third_party/rust/bitflags/v1/crate/tests/compile.rs b/third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile.rs
similarity index 100%
rename from third_party/rust/bitflags/v1/crate/tests/compile.rs
rename to third_party/rust/chromium_crates_io/vendor/bitflags-1.3.2/tests/compile.rs
diff --git a/third_party/rust/cfg_if/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/cfg_if/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/.cargo_vcs_info.json
diff --git a/third_party/rust/cfg_if/v1/crate/.github/workflows/main.yml b/third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/.github/workflows/main.yml
similarity index 100%
rename from third_party/rust/cfg_if/v1/crate/.github/workflows/main.yml
rename to third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/.github/workflows/main.yml
diff --git a/third_party/rust/cfg_if/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/.gitignore
similarity index 100%
rename from third_party/rust/cfg_if/v1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/.gitignore
diff --git a/third_party/rust/cfg_if/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/Cargo.toml
similarity index 100%
rename from third_party/rust/cfg_if/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/Cargo.toml
diff --git a/third_party/rust/cfg_if/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/cfg_if/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/Cargo.toml.orig
diff --git a/third_party/rust/cfg_if/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cfg_if/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/LICENSE-APACHE
diff --git a/third_party/rust/cfg_if/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/LICENSE-MIT
similarity index 100%
rename from third_party/rust/cfg_if/v1/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/LICENSE-MIT
diff --git a/third_party/rust/cfg_if/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/README.md
similarity index 100%
rename from third_party/rust/cfg_if/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/README.md
diff --git a/third_party/rust/cfg_if/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/src/lib.rs
similarity index 100%
rename from third_party/rust/cfg_if/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/src/lib.rs
diff --git a/third_party/rust/cfg_if/v1/crate/tests/xcrate.rs b/third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/tests/xcrate.rs
similarity index 100%
rename from third_party/rust/cfg_if/v1/crate/tests/xcrate.rs
rename to third_party/rust/chromium_crates_io/vendor/cfg-if-1.0.0/tests/xcrate.rs
diff --git a/third_party/rust/clap/v4/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/clap/v4/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/.cargo_vcs_info.json
diff --git a/third_party/rust/clap/v4/crate/Cargo.lock b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/Cargo.lock
similarity index 100%
rename from third_party/rust/clap/v4/crate/Cargo.lock
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/Cargo.lock
diff --git a/third_party/rust/clap/v4/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/Cargo.toml
similarity index 100%
rename from third_party/rust/clap/v4/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/Cargo.toml
diff --git a/third_party/rust/clap/v4/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/clap/v4/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/Cargo.toml.orig
diff --git a/third_party/rust/anstyle/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/LICENSE-APACHE
similarity index 100%
rename from third_party/rust/anstyle/v1/crate/LICENSE-APACHE
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/LICENSE-APACHE
diff --git a/third_party/rust/clap/v4/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/LICENSE-MIT
similarity index 100%
rename from third_party/rust/clap/v4/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/LICENSE-MIT
diff --git a/third_party/rust/clap/v4/crate/README.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/README.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/README.md
diff --git a/third_party/rust/clap/v4/crate/examples/README.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/README.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/README.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/README.md
diff --git a/third_party/rust/clap/v4/crate/examples/cargo-example-derive.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/cargo-example-derive.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/cargo-example-derive.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/cargo-example-derive.md
diff --git a/third_party/rust/clap/v4/crate/examples/cargo-example-derive.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/cargo-example-derive.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/cargo-example-derive.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/cargo-example-derive.rs
diff --git a/third_party/rust/clap/v4/crate/examples/cargo-example.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/cargo-example.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/cargo-example.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/cargo-example.md
diff --git a/third_party/rust/clap/v4/crate/examples/cargo-example.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/cargo-example.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/cargo-example.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/cargo-example.rs
diff --git a/third_party/rust/clap/v4/crate/examples/demo.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/demo.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/demo.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/demo.md
diff --git a/third_party/rust/clap/v4/crate/examples/demo.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/demo.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/demo.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/demo.rs
diff --git a/third_party/rust/clap/v4/crate/examples/derive_ref/augment_args.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/augment_args.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/derive_ref/augment_args.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/augment_args.rs
diff --git a/third_party/rust/clap/v4/crate/examples/derive_ref/augment_subcommands.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/augment_subcommands.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/derive_ref/augment_subcommands.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/augment_subcommands.rs
diff --git a/third_party/rust/clap/v4/crate/examples/derive_ref/flatten_hand_args.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/flatten_hand_args.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/derive_ref/flatten_hand_args.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/flatten_hand_args.rs
diff --git a/third_party/rust/clap/v4/crate/examples/derive_ref/hand_subcommand.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/hand_subcommand.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/derive_ref/hand_subcommand.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/hand_subcommand.rs
diff --git a/third_party/rust/clap/v4/crate/examples/derive_ref/interop_tests.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/interop_tests.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/derive_ref/interop_tests.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/interop_tests.md
diff --git a/third_party/rust/clap/v4/crate/examples/escaped-positional-derive.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/escaped-positional-derive.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/escaped-positional-derive.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/escaped-positional-derive.md
diff --git a/third_party/rust/clap/v4/crate/examples/escaped-positional-derive.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/escaped-positional-derive.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/escaped-positional-derive.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/escaped-positional-derive.rs
diff --git a/third_party/rust/clap/v4/crate/examples/escaped-positional.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/escaped-positional.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/escaped-positional.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/escaped-positional.md
diff --git a/third_party/rust/clap/v4/crate/examples/escaped-positional.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/escaped-positional.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/escaped-positional.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/escaped-positional.rs
diff --git a/third_party/rust/clap/v4/crate/examples/find.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/find.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/find.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/find.md
diff --git a/third_party/rust/clap/v4/crate/examples/find.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/find.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/find.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/find.rs
diff --git a/third_party/rust/clap/v4/crate/examples/git-derive.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/git-derive.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/git-derive.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/git-derive.md
diff --git a/third_party/rust/clap/v4/crate/examples/git-derive.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/git-derive.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/git-derive.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/git-derive.rs
diff --git a/third_party/rust/clap/v4/crate/examples/git.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/git.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/git.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/git.md
diff --git a/third_party/rust/clap/v4/crate/examples/git.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/git.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/git.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/git.rs
diff --git a/third_party/rust/clap/v4/crate/examples/multicall-busybox.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/multicall-busybox.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/multicall-busybox.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/multicall-busybox.md
diff --git a/third_party/rust/clap/v4/crate/examples/multicall-busybox.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/multicall-busybox.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/multicall-busybox.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/multicall-busybox.rs
diff --git a/third_party/rust/clap/v4/crate/examples/multicall-hostname.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/multicall-hostname.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/multicall-hostname.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/multicall-hostname.md
diff --git a/third_party/rust/clap/v4/crate/examples/multicall-hostname.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/multicall-hostname.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/multicall-hostname.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/multicall-hostname.rs
diff --git a/third_party/rust/clap/v4/crate/examples/pacman.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/pacman.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/pacman.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/pacman.md
diff --git a/third_party/rust/clap/v4/crate/examples/pacman.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/pacman.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/pacman.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/pacman.rs
diff --git a/third_party/rust/clap/v4/crate/examples/repl.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/repl.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/repl.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/repl.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/01_quick.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/01_quick.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/01_quick.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/01_quick.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/01_quick.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/01_quick.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/01_quick.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/01_quick.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/02_app_settings.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_app_settings.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/02_app_settings.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_app_settings.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/02_app_settings.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_app_settings.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/02_app_settings.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_app_settings.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/02_apps.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_apps.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/02_apps.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_apps.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/02_apps.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_apps.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/02_apps.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_apps.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/02_crate.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_crate.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/02_crate.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_crate.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/02_crate.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_crate.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/02_crate.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_crate.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/03_01_flag_bool.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_01_flag_bool.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/03_01_flag_bool.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_01_flag_bool.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/03_01_flag_bool.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_01_flag_bool.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/03_01_flag_bool.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_01_flag_bool.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/03_01_flag_count.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_01_flag_count.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/03_01_flag_count.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_01_flag_count.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/03_01_flag_count.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_01_flag_count.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/03_01_flag_count.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_01_flag_count.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/03_02_option.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_02_option.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/03_02_option.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_02_option.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/03_02_option.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_02_option.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/03_02_option.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_02_option.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/03_02_option_mult.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_02_option_mult.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/03_02_option_mult.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_02_option_mult.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/03_02_option_mult.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_02_option_mult.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/03_02_option_mult.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_02_option_mult.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/03_03_positional.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_03_positional.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/03_03_positional.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_03_positional.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/03_03_positional.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_03_positional.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/03_03_positional.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_03_positional.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/03_03_positional_mult.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_03_positional_mult.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/03_03_positional_mult.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_03_positional_mult.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/03_03_positional_mult.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_03_positional_mult.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/03_03_positional_mult.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_03_positional_mult.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/03_04_subcommands.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_04_subcommands.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/03_04_subcommands.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_04_subcommands.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/03_04_subcommands.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_04_subcommands.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/03_04_subcommands.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_04_subcommands.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/03_05_default_values.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_05_default_values.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/03_05_default_values.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_05_default_values.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/03_05_default_values.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_05_default_values.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/03_05_default_values.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_05_default_values.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/04_01_enum.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_01_enum.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/04_01_enum.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_01_enum.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/04_01_enum.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_01_enum.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/04_01_enum.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_01_enum.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/04_01_possible.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_01_possible.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/04_01_possible.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_01_possible.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/04_01_possible.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_01_possible.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/04_01_possible.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_01_possible.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/04_02_parse.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_02_parse.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/04_02_parse.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_02_parse.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/04_02_parse.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_02_parse.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/04_02_parse.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_02_parse.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/04_02_validate.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_02_validate.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/04_02_validate.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_02_validate.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/04_02_validate.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_02_validate.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/04_02_validate.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_02_validate.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/04_03_relations.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_03_relations.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/04_03_relations.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_03_relations.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/04_03_relations.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_03_relations.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/04_03_relations.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_03_relations.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/04_04_custom.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_04_custom.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/04_04_custom.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_04_custom.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/04_04_custom.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_04_custom.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/04_04_custom.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_04_custom.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_builder/05_01_assert.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/05_01_assert.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_builder/05_01_assert.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/05_01_assert.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/01_quick.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/01_quick.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/01_quick.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/01_quick.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/01_quick.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/01_quick.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/01_quick.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/01_quick.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/02_app_settings.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_app_settings.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/02_app_settings.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_app_settings.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/02_app_settings.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_app_settings.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/02_app_settings.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_app_settings.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/02_apps.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_apps.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/02_apps.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_apps.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/02_apps.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_apps.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/02_apps.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_apps.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/02_crate.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_crate.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/02_crate.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_crate.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/02_crate.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_crate.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/02_crate.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_crate.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_01_flag_bool.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_01_flag_bool.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_01_flag_bool.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_01_flag_bool.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_01_flag_bool.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_01_flag_bool.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_01_flag_bool.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_01_flag_bool.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_01_flag_count.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_01_flag_count.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_01_flag_count.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_01_flag_count.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_01_flag_count.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_01_flag_count.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_01_flag_count.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_01_flag_count.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_02_option.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_02_option.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_02_option.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_02_option.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_02_option.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_02_option.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_02_option.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_02_option.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_02_option_mult.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_02_option_mult.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_02_option_mult.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_02_option_mult.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_02_option_mult.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_02_option_mult.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_02_option_mult.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_02_option_mult.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_03_positional.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_03_positional.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_03_positional.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_03_positional.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_03_positional.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_03_positional.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_03_positional.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_03_positional.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_03_positional_mult.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_03_positional_mult.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_03_positional_mult.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_03_positional_mult.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_03_positional_mult.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_03_positional_mult.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_03_positional_mult.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_03_positional_mult.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_04_subcommands.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_04_subcommands.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_04_subcommands.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_04_subcommands.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_04_subcommands.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_04_subcommands.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_04_subcommands.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_04_subcommands.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_04_subcommands_alt.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_04_subcommands_alt.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_04_subcommands_alt.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_04_subcommands_alt.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_05_default_values.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_05_default_values.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_05_default_values.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_05_default_values.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/03_05_default_values.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_05_default_values.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/03_05_default_values.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_05_default_values.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/04_01_enum.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_01_enum.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/04_01_enum.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_01_enum.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/04_01_enum.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_01_enum.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/04_01_enum.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_01_enum.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/04_02_parse.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_02_parse.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/04_02_parse.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_02_parse.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/04_02_parse.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_02_parse.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/04_02_parse.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_02_parse.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/04_02_validate.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_02_validate.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/04_02_validate.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_02_validate.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/04_02_validate.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_02_validate.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/04_02_validate.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_02_validate.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/04_03_relations.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_03_relations.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/04_03_relations.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_03_relations.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/04_03_relations.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_03_relations.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/04_03_relations.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_03_relations.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/04_04_custom.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_04_custom.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/04_04_custom.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_04_custom.md
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/04_04_custom.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_04_custom.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/04_04_custom.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_04_custom.rs
diff --git a/third_party/rust/clap/v4/crate/examples/tutorial_derive/05_01_assert.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/05_01_assert.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/tutorial_derive/05_01_assert.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/05_01_assert.rs
diff --git a/third_party/rust/clap/v4/crate/examples/typed-derive.md b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/typed-derive.md
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/typed-derive.md
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/typed-derive.md
diff --git a/third_party/rust/clap/v4/crate/examples/typed-derive.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/typed-derive.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/examples/typed-derive.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/typed-derive.rs
diff --git a/third_party/rust/clap/v4/crate/src/_cookbook/cargo_example.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/cargo_example.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_cookbook/cargo_example.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/cargo_example.rs
diff --git a/third_party/rust/clap/v4/crate/src/_cookbook/cargo_example_derive.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/cargo_example_derive.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_cookbook/cargo_example_derive.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/cargo_example_derive.rs
diff --git a/third_party/rust/clap/v4/crate/src/_cookbook/escaped_positional.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/escaped_positional.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_cookbook/escaped_positional.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/escaped_positional.rs
diff --git a/third_party/rust/clap/v4/crate/src/_cookbook/escaped_positional_derive.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/escaped_positional_derive.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_cookbook/escaped_positional_derive.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/escaped_positional_derive.rs
diff --git a/third_party/rust/clap/v4/crate/src/_cookbook/find.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/find.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_cookbook/find.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/find.rs
diff --git a/third_party/rust/clap/v4/crate/src/_cookbook/git.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/git.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_cookbook/git.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/git.rs
diff --git a/third_party/rust/clap/v4/crate/src/_cookbook/git_derive.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/git_derive.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_cookbook/git_derive.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/git_derive.rs
diff --git a/third_party/rust/clap/v4/crate/src/_cookbook/mod.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/mod.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_cookbook/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/mod.rs
diff --git a/third_party/rust/clap/v4/crate/src/_cookbook/multicall_busybox.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/multicall_busybox.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_cookbook/multicall_busybox.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/multicall_busybox.rs
diff --git a/third_party/rust/clap/v4/crate/src/_cookbook/multicall_hostname.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/multicall_hostname.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_cookbook/multicall_hostname.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/multicall_hostname.rs
diff --git a/third_party/rust/clap/v4/crate/src/_cookbook/pacman.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/pacman.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_cookbook/pacman.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/pacman.rs
diff --git a/third_party/rust/clap/v4/crate/src/_cookbook/repl.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/repl.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_cookbook/repl.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/repl.rs
diff --git a/third_party/rust/clap/v4/crate/src/_cookbook/typed_derive.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/typed_derive.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_cookbook/typed_derive.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/typed_derive.rs
diff --git a/third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_0.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_0.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_0.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_0.rs
diff --git a/third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_1.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_1.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_1.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_1.rs
diff --git a/third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_2.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_2.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_2.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_2.rs
diff --git a/third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_3.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_3.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_3.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_3.rs
diff --git a/third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_4.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_4.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_4.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_4.rs
diff --git a/third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_5.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_5.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_5.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_5.rs
diff --git a/third_party/rust/clap/v4/crate/src/_derive/_tutorial/mod.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/mod.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_derive/_tutorial/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/mod.rs
diff --git a/third_party/rust/clap/v4/crate/src/_derive/mod.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/mod.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_derive/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/mod.rs
diff --git a/third_party/rust/clap/v4/crate/src/_faq.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_faq.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_faq.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_faq.rs
diff --git a/third_party/rust/clap/v4/crate/src/_features.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_features.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_features.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_features.rs
diff --git a/third_party/rust/clap/v4/crate/src/_tutorial/chapter_0.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_0.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_tutorial/chapter_0.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_0.rs
diff --git a/third_party/rust/clap/v4/crate/src/_tutorial/chapter_1.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_1.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_tutorial/chapter_1.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_1.rs
diff --git a/third_party/rust/clap/v4/crate/src/_tutorial/chapter_2.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_2.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_tutorial/chapter_2.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_2.rs
diff --git a/third_party/rust/clap/v4/crate/src/_tutorial/chapter_3.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_3.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_tutorial/chapter_3.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_3.rs
diff --git a/third_party/rust/clap/v4/crate/src/_tutorial/chapter_4.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_4.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_tutorial/chapter_4.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_4.rs
diff --git a/third_party/rust/clap/v4/crate/src/_tutorial/chapter_5.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_5.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_tutorial/chapter_5.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_5.rs
diff --git a/third_party/rust/clap/v4/crate/src/_tutorial/mod.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/mod.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/_tutorial/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/mod.rs
diff --git a/third_party/rust/clap/v4/crate/src/bin/stdio-fixture.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/bin/stdio-fixture.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/bin/stdio-fixture.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/bin/stdio-fixture.rs
diff --git a/third_party/rust/clap/v4/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/lib.rs
similarity index 100%
rename from third_party/rust/clap/v4/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/lib.rs
diff --git a/third_party/rust/clap_builder/v4/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/.cargo_vcs_info.json
diff --git a/third_party/rust/clap_builder/v4/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/Cargo.toml
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/Cargo.toml
diff --git a/third_party/rust/clap_builder/v4/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/Cargo.toml.orig
diff --git a/third_party/rust/clap_builder/v4/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/clap_builder/v4/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/LICENSE-APACHE
diff --git a/third_party/rust/clap_builder/v4/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/LICENSE-MIT
similarity index 100%
copy from third_party/rust/clap_builder/v4/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/LICENSE-MIT
diff --git a/third_party/rust/clap_builder/v4/crate/README.md b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/README.md
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/README.md
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/action.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/action.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/action.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/action.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/app_settings.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/app_settings.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/app_settings.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/app_settings.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/arg.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/arg.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/arg.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/arg.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/arg_group.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/arg_group.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/arg_group.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/arg_group.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/arg_predicate.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/arg_predicate.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/arg_predicate.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/arg_predicate.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/arg_settings.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/arg_settings.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/arg_settings.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/arg_settings.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/command.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/command.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/command.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/command.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/debug_asserts.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/debug_asserts.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/debug_asserts.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/debug_asserts.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/ext.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/ext.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/ext.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/ext.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/mod.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/mod.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/mod.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/os_str.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/os_str.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/os_str.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/os_str.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/possible_value.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/possible_value.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/possible_value.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/possible_value.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/range.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/range.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/range.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/range.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/resettable.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/resettable.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/resettable.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/resettable.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/str.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/str.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/str.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/str.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/styled_str.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/styled_str.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/styled_str.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/styled_str.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/styling.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/styling.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/styling.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/styling.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/tests.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/tests.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/tests.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/tests.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/value_hint.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/value_hint.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/value_hint.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/value_hint.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/builder/value_parser.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/value_parser.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/builder/value_parser.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/value_parser.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/derive.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/derive.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/derive.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/derive.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/error/context.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/error/context.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/error/context.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/error/context.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/error/format.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/error/format.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/error/format.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/error/format.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/error/kind.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/error/kind.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/error/kind.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/error/kind.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/error/mod.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/error/mod.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/error/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/error/mod.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/lib.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/lib.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/macros.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/macros.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/macros.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/macros.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/mkeymap.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/mkeymap.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/mkeymap.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/mkeymap.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/output/fmt.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/fmt.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/output/fmt.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/fmt.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/output/help.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/help.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/output/help.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/help.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/output/help_template.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/help_template.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/output/help_template.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/help_template.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/output/mod.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/mod.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/output/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/mod.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/output/textwrap/core.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/textwrap/core.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/output/textwrap/core.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/textwrap/core.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/output/textwrap/mod.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/textwrap/mod.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/output/textwrap/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/textwrap/mod.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/output/textwrap/word_separators.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/textwrap/word_separators.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/output/textwrap/word_separators.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/textwrap/word_separators.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/output/textwrap/wrap_algorithms.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/textwrap/wrap_algorithms.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/output/textwrap/wrap_algorithms.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/textwrap/wrap_algorithms.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/output/usage.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/usage.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/output/usage.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/usage.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/parser/arg_matcher.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/arg_matcher.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/parser/arg_matcher.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/arg_matcher.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/parser/error.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/error.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/parser/error.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/error.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/parser/features/mod.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/features/mod.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/parser/features/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/features/mod.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/parser/features/suggestions.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/features/suggestions.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/parser/features/suggestions.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/features/suggestions.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/parser/matches/arg_matches.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/matches/arg_matches.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/parser/matches/arg_matches.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/matches/arg_matches.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/parser/matches/matched_arg.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/matches/matched_arg.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/parser/matches/matched_arg.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/matches/matched_arg.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/parser/matches/mod.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/matches/mod.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/parser/matches/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/matches/mod.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/parser/matches/value_source.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/matches/value_source.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/parser/matches/value_source.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/matches/value_source.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/parser/mod.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/mod.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/parser/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/mod.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/parser/parser.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/parser.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/parser/parser.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/parser.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/parser/validator.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/validator.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/parser/validator.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/validator.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/util/any_value.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/any_value.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/util/any_value.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/any_value.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/util/color.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/color.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/util/color.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/color.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/util/flat_map.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/flat_map.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/util/flat_map.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/flat_map.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/util/flat_set.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/flat_set.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/util/flat_set.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/flat_set.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/util/graph.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/graph.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/util/graph.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/graph.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/util/id.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/id.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/util/id.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/id.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/util/mod.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/mod.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/util/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/mod.rs
diff --git a/third_party/rust/clap_builder/v4/crate/src/util/str_to_bool.rs b/third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/str_to_bool.rs
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/src/util/str_to_bool.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/str_to_bool.rs
diff --git a/third_party/rust/clap_lex/v0_5/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/clap_lex/v0_5/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/.cargo_vcs_info.json
diff --git a/third_party/rust/clap_lex/v0_5/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/Cargo.toml
similarity index 100%
rename from third_party/rust/clap_lex/v0_5/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/Cargo.toml
diff --git a/third_party/rust/clap_lex/v0_5/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/clap_lex/v0_5/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/Cargo.toml.orig
diff --git a/third_party/rust/clap_builder/v4/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/LICENSE-APACHE
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/LICENSE-APACHE
rename to third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/LICENSE-APACHE
diff --git a/third_party/rust/clap_builder/v4/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/LICENSE-MIT
similarity index 100%
rename from third_party/rust/clap_builder/v4/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/LICENSE-MIT
diff --git a/third_party/rust/clap_lex/v0_5/crate/README.md b/third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/README.md
similarity index 100%
rename from third_party/rust/clap_lex/v0_5/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/README.md
diff --git a/third_party/rust/clap_lex/v0_5/crate/src/ext.rs b/third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/src/ext.rs
similarity index 100%
rename from third_party/rust/clap_lex/v0_5/crate/src/ext.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/src/ext.rs
diff --git a/third_party/rust/clap_lex/v0_5/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/src/lib.rs
similarity index 100%
rename from third_party/rust/clap_lex/v0_5/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/src/lib.rs
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/.cargo_vcs_info.json
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/CHANGELOG.md b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/CHANGELOG.md
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/CHANGELOG.md
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/CHANGELOG.md
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/Cargo.lock b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/Cargo.lock
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/Cargo.lock
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/Cargo.lock
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/Cargo.toml
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/Cargo.toml
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/Cargo.toml.orig
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/examples/custom_files.rs b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/examples/custom_files.rs
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/examples/custom_files.rs
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/examples/custom_files.rs
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/examples/peg_calculator.rs b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/examples/peg_calculator.rs
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/examples/peg_calculator.rs
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/examples/peg_calculator.rs
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/examples/readme_preview.rs b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/examples/readme_preview.rs
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/examples/readme_preview.rs
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/examples/readme_preview.rs
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/examples/reusable_diagnostic.rs b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/examples/reusable_diagnostic.rs
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/examples/reusable_diagnostic.rs
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/examples/reusable_diagnostic.rs
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/examples/term.rs b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/examples/term.rs
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/examples/term.rs
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/examples/term.rs
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/src/diagnostic.rs b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/diagnostic.rs
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/src/diagnostic.rs
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/diagnostic.rs
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/src/files.rs b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/files.rs
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/src/files.rs
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/files.rs
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/lib.rs
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/lib.rs
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/src/term.rs b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/term.rs
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/src/term.rs
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/term.rs
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/src/term/config.rs b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/term/config.rs
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/src/term/config.rs
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/term/config.rs
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/src/term/renderer.rs b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/term/renderer.rs
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/src/term/renderer.rs
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/term/renderer.rs
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/src/term/views.rs b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/term/views.rs
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/src/term/views.rs
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/term/views.rs
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty__medium_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty__medium_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty__medium_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty__medium_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty__medium_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty__medium_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty__medium_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty__medium_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty__rich_ascii_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty__rich_ascii_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty__rich_ascii_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty__rich_ascii_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty__rich_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty__rich_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty__rich_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty__rich_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty__rich_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty__rich_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty__rich_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty__rich_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty__short_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty__short_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty__short_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty__short_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty__short_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty__short_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty__short_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty__short_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty_ranges__medium_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty_ranges__medium_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty_ranges__medium_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty_ranges__medium_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty_ranges__medium_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty_ranges__medium_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty_ranges__medium_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty_ranges__medium_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty_ranges__rich_ascii_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty_ranges__rich_ascii_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty_ranges__rich_ascii_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty_ranges__rich_ascii_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty_ranges__rich_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty_ranges__rich_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty_ranges__rich_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty_ranges__rich_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty_ranges__rich_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty_ranges__rich_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty_ranges__rich_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty_ranges__rich_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty_ranges__short_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty_ranges__short_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty_ranges__short_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty_ranges__short_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty_ranges__short_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty_ranges__short_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__empty_ranges__short_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__empty_ranges__short_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__fizz_buzz__medium_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__fizz_buzz__medium_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__fizz_buzz__medium_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__fizz_buzz__medium_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__fizz_buzz__medium_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__fizz_buzz__medium_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__fizz_buzz__medium_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__fizz_buzz__medium_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__fizz_buzz__rich_ascii_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__fizz_buzz__rich_ascii_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__fizz_buzz__rich_ascii_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__fizz_buzz__rich_ascii_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__fizz_buzz__rich_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__fizz_buzz__rich_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__fizz_buzz__rich_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__fizz_buzz__rich_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__fizz_buzz__rich_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__fizz_buzz__rich_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__fizz_buzz__rich_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__fizz_buzz__rich_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__fizz_buzz__short_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__fizz_buzz__short_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__fizz_buzz__short_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__fizz_buzz__short_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__fizz_buzz__short_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__fizz_buzz__short_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__fizz_buzz__short_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__fizz_buzz__short_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message__medium_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message__medium_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message__medium_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message__medium_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message__medium_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message__medium_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message__medium_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message__medium_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message__rich_ascii_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message__rich_ascii_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message__rich_ascii_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message__rich_ascii_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message__rich_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message__rich_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message__rich_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message__rich_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message__rich_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message__rich_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message__rich_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message__rich_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message__short_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message__short_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message__short_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message__short_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message__short_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message__short_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message__short_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message__short_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_and_notes__medium_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_and_notes__medium_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_and_notes__medium_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_and_notes__medium_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_and_notes__medium_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_and_notes__medium_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_and_notes__medium_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_and_notes__medium_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_and_notes__rich_ascii_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_and_notes__rich_ascii_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_and_notes__rich_ascii_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_and_notes__rich_ascii_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_and_notes__rich_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_and_notes__rich_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_and_notes__rich_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_and_notes__rich_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_and_notes__rich_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_and_notes__rich_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_and_notes__rich_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_and_notes__rich_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_and_notes__short_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_and_notes__short_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_and_notes__short_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_and_notes__short_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_and_notes__short_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_and_notes__short_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_and_notes__short_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_and_notes__short_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_errorcode__rich_ascii_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_errorcode__rich_ascii_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_errorcode__rich_ascii_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_errorcode__rich_ascii_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_errorcode__rich_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_errorcode__rich_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_errorcode__rich_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_errorcode__rich_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_errorcode__short_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_errorcode__short_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__message_errorcode__short_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__message_errorcode__short_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multifile__medium_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multifile__medium_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multifile__medium_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multifile__medium_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multifile__medium_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multifile__medium_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multifile__medium_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multifile__medium_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multifile__rich_ascii_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multifile__rich_ascii_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multifile__rich_ascii_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multifile__rich_ascii_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multifile__rich_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multifile__rich_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multifile__rich_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multifile__rich_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multifile__rich_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multifile__rich_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multifile__rich_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multifile__rich_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multifile__short_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multifile__short_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multifile__short_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multifile__short_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multifile__short_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multifile__short_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multifile__short_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multifile__short_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multiline_omit__rich_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multiline_omit__rich_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multiline_omit__rich_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multiline_omit__rich_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multiline_overlapping__medium_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multiline_overlapping__medium_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multiline_overlapping__medium_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multiline_overlapping__medium_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multiline_overlapping__medium_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multiline_overlapping__medium_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multiline_overlapping__medium_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multiline_overlapping__medium_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multiline_overlapping__rich_ascii_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multiline_overlapping__rich_ascii_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multiline_overlapping__rich_ascii_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multiline_overlapping__rich_ascii_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multiline_overlapping__rich_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multiline_overlapping__rich_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multiline_overlapping__rich_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multiline_overlapping__rich_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multiline_overlapping__rich_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multiline_overlapping__rich_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multiline_overlapping__rich_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multiline_overlapping__rich_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multiline_overlapping__short_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multiline_overlapping__short_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multiline_overlapping__short_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multiline_overlapping__short_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multiline_overlapping__short_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multiline_overlapping__short_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__multiline_overlapping__short_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__multiline_overlapping__short_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__overlapping__medium_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__overlapping__medium_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__overlapping__medium_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__overlapping__medium_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__overlapping__medium_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__overlapping__medium_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__overlapping__medium_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__overlapping__medium_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__overlapping__rich_ascii_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__overlapping__rich_ascii_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__overlapping__rich_ascii_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__overlapping__rich_ascii_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__overlapping__rich_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__overlapping__rich_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__overlapping__rich_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__overlapping__rich_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__overlapping__rich_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__overlapping__rich_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__overlapping__rich_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__overlapping__rich_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__overlapping__short_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__overlapping__short_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__overlapping__short_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__overlapping__short_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__overlapping__short_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__overlapping__short_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__overlapping__short_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__overlapping__short_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__position_indicator__medium_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__position_indicator__medium_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__position_indicator__medium_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__position_indicator__medium_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__position_indicator__rich_ascii_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__position_indicator__rich_ascii_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__position_indicator__rich_ascii_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__position_indicator__rich_ascii_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__position_indicator__rich_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__position_indicator__rich_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__position_indicator__rich_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__position_indicator__rich_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__position_indicator__short_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__position_indicator__short_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__position_indicator__short_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__position_indicator__short_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_line__medium_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_line__medium_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_line__medium_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_line__medium_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_line__medium_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_line__medium_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_line__medium_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_line__medium_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_line__rich_ascii_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_line__rich_ascii_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_line__rich_ascii_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_line__rich_ascii_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_line__rich_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_line__rich_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_line__rich_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_line__rich_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_line__rich_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_line__rich_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_line__rich_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_line__rich_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_line__short_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_line__short_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_line__short_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_line__short_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_line__short_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_line__short_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_line__short_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_line__short_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_ranges__medium_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_ranges__medium_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_ranges__medium_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_ranges__medium_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_ranges__medium_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_ranges__medium_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_ranges__medium_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_ranges__medium_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_ranges__rich_ascii_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_ranges__rich_ascii_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_ranges__rich_ascii_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_ranges__rich_ascii_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_ranges__rich_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_ranges__rich_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_ranges__rich_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_ranges__rich_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_ranges__rich_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_ranges__rich_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_ranges__rich_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_ranges__rich_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_ranges__short_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_ranges__short_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_ranges__short_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_ranges__short_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_ranges__short_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_ranges__short_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__same_ranges__short_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__same_ranges__short_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__tab_columns__tab_width_2_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__tab_columns__tab_width_2_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__tab_columns__tab_width_2_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__tab_columns__tab_width_2_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__tab_columns__tab_width_3_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__tab_columns__tab_width_3_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__tab_columns__tab_width_3_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__tab_columns__tab_width_3_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__tab_columns__tab_width_6_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__tab_columns__tab_width_6_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__tab_columns__tab_width_6_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__tab_columns__tab_width_6_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__tab_columns__tab_width_default_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__tab_columns__tab_width_default_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__tab_columns__tab_width_default_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__tab_columns__tab_width_default_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__tabbed__tab_width_3_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__tabbed__tab_width_3_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__tabbed__tab_width_3_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__tabbed__tab_width_3_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__tabbed__tab_width_6_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__tabbed__tab_width_6_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__tabbed__tab_width_6_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__tabbed__tab_width_6_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__tabbed__tab_width_default_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__tabbed__tab_width_default_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__tabbed__tab_width_default_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__tabbed__tab_width_default_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__unicode__medium_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__unicode__medium_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__unicode__medium_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__unicode__medium_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__unicode__rich_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__unicode__rich_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__unicode__rich_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__unicode__rich_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__unicode__short_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__unicode__short_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__unicode__short_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__unicode__short_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__unicode_spans__medium_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__unicode_spans__medium_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__unicode_spans__medium_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__unicode_spans__medium_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__unicode_spans__rich_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__unicode_spans__rich_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__unicode_spans__rich_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__unicode_spans__rich_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__unicode_spans__short_no_color.snap b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__unicode_spans__short_no_color.snap
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/snapshots/term__unicode_spans__short_no_color.snap
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/snapshots/term__unicode_spans__short_no_color.snap
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/support/color_buffer.rs b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/support/color_buffer.rs
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/support/color_buffer.rs
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/support/color_buffer.rs
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/support/mod.rs b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/support/mod.rs
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/support/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/support/mod.rs
diff --git a/third_party/rust/codespan_reporting/v0_11/crate/tests/term.rs b/third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/term.rs
similarity index 100%
rename from third_party/rust/codespan_reporting/v0_11/crate/tests/term.rs
rename to third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/term.rs
diff --git a/third_party/rust/cxx/v1/crate/.bazelignore b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.bazelignore
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.bazelignore
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.bazelignore
diff --git a/third_party/rust/cxx/v1/crate/.bazelrc b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.bazelrc
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.bazelrc
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.bazelrc
diff --git a/third_party/rust/cxx/v1/crate/.buckconfig b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.buckconfig
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.buckconfig
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.buckconfig
diff --git a/third_party/rust/cxx/v1/crate/.buckroot b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.buckroot
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.buckroot
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.buckroot
diff --git a/third_party/rust/cxx/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.cargo_vcs_info.json
diff --git a/third_party/rust/cxx/v1/crate/.clang-format b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.clang-format
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.clang-format
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.clang-format
diff --git a/third_party/rust/cxx/v1/crate/.clang-tidy b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.clang-tidy
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.clang-tidy
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.clang-tidy
diff --git a/third_party/rust/cxx/v1/crate/.devcontainer/Dockerfile b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.devcontainer/Dockerfile
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.devcontainer/Dockerfile
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.devcontainer/Dockerfile
diff --git a/third_party/rust/cxx/v1/crate/.devcontainer/README.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.devcontainer/README.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.devcontainer/README.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.devcontainer/README.md
diff --git a/third_party/rust/cxx/v1/crate/.devcontainer/build.Dockerfile b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.devcontainer/build.Dockerfile
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.devcontainer/build.Dockerfile
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.devcontainer/build.Dockerfile
diff --git a/third_party/rust/cxx/v1/crate/.devcontainer/devcontainer.json b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.devcontainer/devcontainer.json
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.devcontainer/devcontainer.json
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.devcontainer/devcontainer.json
diff --git a/third_party/rust/cxx/v1/crate/.gitattributes b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.gitattributes
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.gitattributes
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.gitattributes
diff --git a/third_party/rust/cxx/v1/crate/.github/FUNDING.yml b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.github/FUNDING.yml
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.github/FUNDING.yml
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.github/FUNDING.yml
diff --git a/third_party/rust/cxx/v1/crate/.github/workflows/buck2.yml b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.github/workflows/buck2.yml
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.github/workflows/buck2.yml
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.github/workflows/buck2.yml
diff --git a/third_party/rust/cxx/v1/crate/.github/workflows/ci.yml b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.github/workflows/ci.yml
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.github/workflows/ci.yml
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.github/workflows/ci.yml
diff --git a/third_party/rust/cxx/v1/crate/.github/workflows/install.yml b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.github/workflows/install.yml
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.github/workflows/install.yml
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.github/workflows/install.yml
diff --git a/third_party/rust/cxx/v1/crate/.github/workflows/site.yml b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.github/workflows/site.yml
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.github/workflows/site.yml
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.github/workflows/site.yml
diff --git a/third_party/rust/cxx/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.gitignore
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.gitignore
diff --git a/third_party/rust/cxx/v1/crate/.gitmodules b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.gitmodules
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.gitmodules
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.gitmodules
diff --git a/third_party/rust/cxx/v1/crate/.watchmanconfig b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.watchmanconfig
similarity index 100%
rename from third_party/rust/cxx/v1/crate/.watchmanconfig
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/.watchmanconfig
diff --git a/third_party/rust/cxx/v1/crate/BUCK b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/BUCK
similarity index 100%
rename from third_party/rust/cxx/v1/crate/BUCK
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/BUCK
diff --git a/third_party/rust/cxx/v1/crate/BUILD b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/BUILD
similarity index 100%
rename from third_party/rust/cxx/v1/crate/BUILD
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/BUILD
diff --git a/third_party/rust/cxx/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/Cargo.toml
similarity index 100%
rename from third_party/rust/cxx/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/Cargo.toml
diff --git a/third_party/rust/cxx/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/cxx/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/Cargo.toml.orig
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cxx/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/LICENSE-APACHE
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/LICENSE-MIT
similarity index 100%
copy from third_party/rust/cxx/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/LICENSE-MIT
diff --git a/third_party/rust/cxx/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/README.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/README.md
diff --git a/third_party/rust/cxx/v1/crate/WORKSPACE b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/WORKSPACE
similarity index 100%
rename from third_party/rust/cxx/v1/crate/WORKSPACE
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/WORKSPACE
diff --git a/third_party/rust/cxx/v1/crate/book/.gitignore b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/.gitignore
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/.gitignore
diff --git a/third_party/rust/cxx/v1/crate/book/README.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/README.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/README.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/README.md
diff --git a/third_party/rust/cxx/v1/crate/book/book.toml b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/book.toml
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/book.toml
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/book.toml
diff --git a/third_party/rust/cxx/v1/crate/book/build.js b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/build.js
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/build.js
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/build.js
diff --git a/third_party/rust/cxx/v1/crate/book/build.sh b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/build.sh
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/build.sh
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/build.sh
diff --git a/third_party/rust/cxx/v1/crate/book/css/cxx.css b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/css/cxx.css
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/css/cxx.css
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/css/cxx.css
diff --git a/third_party/rust/cxx/v1/crate/book/diagram/.gitignore b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/diagram/.gitignore
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/diagram/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/diagram/.gitignore
diff --git a/third_party/rust/cxx/v1/crate/book/diagram/Makefile b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/diagram/Makefile
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/diagram/Makefile
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/diagram/Makefile
diff --git a/third_party/rust/cxx/v1/crate/book/diagram/overview.tex b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/diagram/overview.tex
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/diagram/overview.tex
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/diagram/overview.tex
diff --git a/third_party/rust/cxx/v1/crate/book/package-lock.json b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/package-lock.json
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/package-lock.json
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/package-lock.json
diff --git a/third_party/rust/cxx/v1/crate/book/package.json b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/package.json
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/package.json
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/package.json
diff --git a/third_party/rust/cxx/v1/crate/book/src/404.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/404.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/404.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/404.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/SUMMARY.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/SUMMARY.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/SUMMARY.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/SUMMARY.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/async.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/async.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/async.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/async.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/attributes.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/attributes.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/attributes.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/attributes.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/binding/box.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/box.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/binding/box.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/box.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/binding/cxxstring.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/cxxstring.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/binding/cxxstring.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/cxxstring.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/binding/cxxvector.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/cxxvector.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/binding/cxxvector.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/cxxvector.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/binding/fn.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/fn.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/binding/fn.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/fn.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/binding/rawptr.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/rawptr.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/binding/rawptr.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/rawptr.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/binding/result.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/result.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/binding/result.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/result.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/binding/sharedptr.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/sharedptr.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/binding/sharedptr.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/sharedptr.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/binding/slice.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/slice.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/binding/slice.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/slice.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/binding/str.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/str.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/binding/str.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/str.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/binding/string.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/string.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/binding/string.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/string.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/binding/uniqueptr.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/uniqueptr.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/binding/uniqueptr.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/uniqueptr.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/binding/vec.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/vec.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/binding/vec.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/vec.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/bindings.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/bindings.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/bindings.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/bindings.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/build/bazel.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/build/bazel.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/build/bazel.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/build/bazel.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/build/cargo.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/build/cargo.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/build/cargo.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/build/cargo.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/build/cmake.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/build/cmake.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/build/cmake.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/build/cmake.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/build/other.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/build/other.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/build/other.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/build/other.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/building.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/building.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/building.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/building.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/concepts.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/concepts.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/concepts.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/concepts.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/context.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/context.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/context.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/context.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/cxx.png b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/cxx.png
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/cxx.png
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/cxx.png
Binary files differ
diff --git a/third_party/rust/cxx/v1/crate/book/src/extern-c++.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/extern-c++.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/extern-c++.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/extern-c++.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/extern-rust.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/extern-rust.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/extern-rust.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/extern-rust.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/index.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/index.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/index.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/index.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/overview.svg b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/overview.svg
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/overview.svg
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/overview.svg
diff --git a/third_party/rust/cxx/v1/crate/book/src/reference.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/reference.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/reference.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/reference.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/shared.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/shared.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/shared.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/shared.md
diff --git a/third_party/rust/cxx/v1/crate/book/src/tutorial.md b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/tutorial.md
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/src/tutorial.md
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/tutorial.md
diff --git a/third_party/rust/cxx/v1/crate/book/theme/head.hbs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/theme/head.hbs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/book/theme/head.hbs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/theme/head.hbs
diff --git a/third_party/rust/cxx/v1/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/build.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/build.rs
diff --git a/third_party/rust/cxx/v1/crate/compile_flags.txt b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/compile_flags.txt
similarity index 100%
rename from third_party/rust/cxx/v1/crate/compile_flags.txt
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/compile_flags.txt
diff --git a/third_party/rust/cxx/v1/crate/include/cxx.h b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/include/cxx.h
similarity index 100%
rename from third_party/rust/cxx/v1/crate/include/cxx.h
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/include/cxx.h
diff --git a/third_party/rust/cxx/v1/crate/reindeer.toml b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/reindeer.toml
similarity index 100%
rename from third_party/rust/cxx/v1/crate/reindeer.toml
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/reindeer.toml
diff --git a/third_party/rust/cxx/v1/crate/rust-toolchain.toml b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/rust-toolchain.toml
similarity index 100%
copy from third_party/rust/cxx/v1/crate/rust-toolchain.toml
copy to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/rust-toolchain.toml
diff --git a/third_party/rust/cxx/v1/crate/src/c_char.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/c_char.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/c_char.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/c_char.rs
diff --git a/third_party/rust/cxx/v1/crate/src/cxx.cc b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/cxx.cc
similarity index 99%
rename from third_party/rust/cxx/v1/crate/src/cxx.cc
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/cxx.cc
index bacf3f7..50e9954b 100644
--- a/third_party/rust/cxx/v1/crate/src/cxx.cc
+++ b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/cxx.cc
@@ -1,4 +1,4 @@
-#include "third_party/rust/cxx/v1/crate/include/cxx.h"
+#include "third_party/rust/cxx/v1/cxx.h"
 #include <cstdio>
 #include <cstring>
 #include <iostream>
diff --git a/third_party/rust/cxx/v1/crate/src/cxx_string.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/cxx_string.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/cxx_string.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/cxx_string.rs
diff --git a/third_party/rust/cxx/v1/crate/src/cxx_vector.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/cxx_vector.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/cxx_vector.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/cxx_vector.rs
diff --git a/third_party/rust/cxx/v1/crate/src/exception.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/exception.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/exception.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/exception.rs
diff --git a/third_party/rust/cxx/v1/crate/src/extern_type.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/extern_type.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/extern_type.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/extern_type.rs
diff --git a/third_party/rust/cxx/v1/crate/src/fmt.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/fmt.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/fmt.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/fmt.rs
diff --git a/third_party/rust/cxx/v1/crate/src/function.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/function.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/function.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/function.rs
diff --git a/third_party/rust/cxx/v1/crate/src/hash.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/hash.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/hash.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/hash.rs
diff --git a/third_party/rust/cxx/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/lib.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/lib.rs
diff --git a/third_party/rust/cxx/v1/crate/src/lossy.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/lossy.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/lossy.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/lossy.rs
diff --git a/third_party/rust/cxx/v1/crate/src/macros/assert.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/macros/assert.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/macros/assert.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/macros/assert.rs
diff --git a/third_party/rust/cxx/v1/crate/src/macros/mod.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/macros/mod.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/macros/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/macros/mod.rs
diff --git a/third_party/rust/cxx/v1/crate/src/memory.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/memory.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/memory.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/memory.rs
diff --git a/third_party/rust/cxx/v1/crate/src/opaque.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/opaque.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/opaque.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/opaque.rs
diff --git a/third_party/rust/cxx/v1/crate/src/result.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/result.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/result.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/result.rs
diff --git a/third_party/rust/cxx/v1/crate/src/rust_slice.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/rust_slice.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/rust_slice.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/rust_slice.rs
diff --git a/third_party/rust/cxx/v1/crate/src/rust_str.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/rust_str.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/rust_str.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/rust_str.rs
diff --git a/third_party/rust/cxx/v1/crate/src/rust_string.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/rust_string.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/rust_string.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/rust_string.rs
diff --git a/third_party/rust/cxx/v1/crate/src/rust_type.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/rust_type.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/rust_type.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/rust_type.rs
diff --git a/third_party/rust/cxx/v1/crate/src/rust_vec.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/rust_vec.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/rust_vec.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/rust_vec.rs
diff --git a/third_party/rust/cxx/v1/crate/src/shared_ptr.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/shared_ptr.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/shared_ptr.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/shared_ptr.rs
diff --git a/third_party/rust/cxx/v1/crate/src/sip.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/sip.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/sip.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/sip.rs
diff --git a/third_party/rust/cxx/v1/crate/src/symbols/exception.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/exception.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/symbols/exception.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/exception.rs
diff --git a/third_party/rust/cxx/v1/crate/src/symbols/mod.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/mod.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/symbols/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/mod.rs
diff --git a/third_party/rust/cxx/v1/crate/src/symbols/rust_slice.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/rust_slice.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/symbols/rust_slice.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/rust_slice.rs
diff --git a/third_party/rust/cxx/v1/crate/src/symbols/rust_str.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/rust_str.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/symbols/rust_str.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/rust_str.rs
diff --git a/third_party/rust/cxx/v1/crate/src/symbols/rust_string.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/rust_string.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/symbols/rust_string.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/rust_string.rs
diff --git a/third_party/rust/cxx/v1/crate/src/symbols/rust_vec.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/rust_vec.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/symbols/rust_vec.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/rust_vec.rs
diff --git a/third_party/rust/cxx/v1/crate/src/type_id.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/type_id.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/type_id.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/type_id.rs
diff --git a/third_party/rust/cxx/v1/crate/src/unique_ptr.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/unique_ptr.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/unique_ptr.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/unique_ptr.rs
diff --git a/third_party/rust/cxx/v1/crate/src/unwind.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/unwind.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/unwind.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/unwind.rs
diff --git a/third_party/rust/cxx/v1/crate/src/vector.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/vector.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/vector.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/vector.rs
diff --git a/third_party/rust/cxx/v1/crate/src/weak_ptr.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/weak_ptr.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/src/weak_ptr.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/weak_ptr.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/BUCK b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/BUCK
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/BUCK
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/BUCK
diff --git a/third_party/rust/cxx/v1/crate/tests/BUILD b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/BUILD
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/BUILD
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/BUILD
diff --git a/third_party/rust/cxx/v1/crate/tests/compiletest.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/compiletest.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/compiletest.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/compiletest.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/cxx_gen.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/cxx_gen.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/cxx_gen.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/cxx_gen.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/cxx_string.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/cxx_string.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/cxx_string.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/cxx_string.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/cxx_vector.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/cxx_vector.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/cxx_vector.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/cxx_vector.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/test.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/test.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/test.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/test.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/array_len_expr.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/array_len_expr.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/array_len_expr.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/array_len_expr.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/array_len_expr.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/array_len_expr.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/array_len_expr.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/array_len_expr.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/array_len_suffix.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/array_len_suffix.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/array_len_suffix.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/array_len_suffix.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/array_len_suffix.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/array_len_suffix.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/array_len_suffix.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/array_len_suffix.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/async_fn.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/async_fn.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/async_fn.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/async_fn.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/async_fn.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/async_fn.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/async_fn.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/async_fn.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/bad_explicit_impl.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/bad_explicit_impl.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/bad_explicit_impl.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/bad_explicit_impl.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/bad_explicit_impl.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/bad_explicit_impl.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/bad_explicit_impl.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/bad_explicit_impl.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/by_value_not_supported.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/by_value_not_supported.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/by_value_not_supported.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/by_value_not_supported.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/by_value_not_supported.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/by_value_not_supported.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/by_value_not_supported.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/by_value_not_supported.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/const_fn.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/const_fn.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/const_fn.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/const_fn.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/const_fn.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/const_fn.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/const_fn.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/const_fn.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/data_enums.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/data_enums.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/data_enums.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/data_enums.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/data_enums.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/data_enums.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/data_enums.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/data_enums.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/deny_elided_lifetimes.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/deny_elided_lifetimes.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/deny_elided_lifetimes.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/deny_elided_lifetimes.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/deny_elided_lifetimes.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/deny_elided_lifetimes.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/deny_elided_lifetimes.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/deny_elided_lifetimes.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/deny_missing_docs.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/deny_missing_docs.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/deny_missing_docs.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/deny_missing_docs.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/deny_missing_docs.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/deny_missing_docs.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/deny_missing_docs.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/deny_missing_docs.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/derive_duplicate.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/derive_duplicate.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/derive_duplicate.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/derive_duplicate.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/derive_duplicate.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/derive_duplicate.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/derive_duplicate.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/derive_duplicate.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/derive_noncopy.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/derive_noncopy.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/derive_noncopy.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/derive_noncopy.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/derive_noncopy.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/derive_noncopy.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/derive_noncopy.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/derive_noncopy.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/drop_shared.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/drop_shared.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/drop_shared.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/drop_shared.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/drop_shared.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/drop_shared.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/drop_shared.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/drop_shared.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/empty_enum.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/empty_enum.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/empty_enum.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/empty_enum.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/empty_enum.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/empty_enum.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/empty_enum.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/empty_enum.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/empty_struct.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/empty_struct.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/empty_struct.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/empty_struct.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/empty_struct.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/empty_struct.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/empty_struct.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/empty_struct.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/enum_inconsistent.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_inconsistent.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/enum_inconsistent.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_inconsistent.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/enum_inconsistent.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_inconsistent.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/enum_inconsistent.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_inconsistent.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/enum_match_without_wildcard.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_match_without_wildcard.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/enum_match_without_wildcard.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_match_without_wildcard.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/enum_match_without_wildcard.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_match_without_wildcard.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/enum_match_without_wildcard.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_match_without_wildcard.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/enum_out_of_bounds.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_out_of_bounds.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/enum_out_of_bounds.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_out_of_bounds.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/enum_out_of_bounds.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_out_of_bounds.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/enum_out_of_bounds.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_out_of_bounds.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/enum_overflows.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_overflows.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/enum_overflows.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_overflows.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/enum_overflows.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_overflows.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/enum_overflows.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_overflows.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/enum_receiver.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_receiver.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/enum_receiver.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_receiver.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/enum_receiver.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_receiver.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/enum_receiver.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_receiver.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/enum_unsatisfiable.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_unsatisfiable.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/enum_unsatisfiable.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_unsatisfiable.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/enum_unsatisfiable.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_unsatisfiable.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/enum_unsatisfiable.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_unsatisfiable.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/expected_named.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/expected_named.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/expected_named.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/expected_named.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/expected_named.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/expected_named.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/expected_named.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/expected_named.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/extern_fn_abi.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_fn_abi.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/extern_fn_abi.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_fn_abi.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/extern_fn_abi.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_fn_abi.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/extern_fn_abi.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_fn_abi.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/extern_type_bound.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_type_bound.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/extern_type_bound.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_type_bound.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/extern_type_bound.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_type_bound.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/extern_type_bound.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_type_bound.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/extern_type_generic.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_type_generic.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/extern_type_generic.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_type_generic.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/extern_type_generic.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_type_generic.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/extern_type_generic.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_type_generic.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/extern_type_lifetime_bound.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_type_lifetime_bound.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/extern_type_lifetime_bound.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_type_lifetime_bound.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/extern_type_lifetime_bound.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_type_lifetime_bound.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/extern_type_lifetime_bound.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_type_lifetime_bound.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/fallible_fnptr.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/fallible_fnptr.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/fallible_fnptr.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/fallible_fnptr.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/fallible_fnptr.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/fallible_fnptr.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/fallible_fnptr.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/fallible_fnptr.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/function_with_body.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/function_with_body.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/function_with_body.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/function_with_body.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/function_with_body.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/function_with_body.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/function_with_body.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/function_with_body.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/generic_enum.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/generic_enum.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/generic_enum.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/generic_enum.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/generic_enum.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/generic_enum.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/generic_enum.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/generic_enum.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/impl_trait_for_type.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/impl_trait_for_type.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/impl_trait_for_type.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/impl_trait_for_type.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/impl_trait_for_type.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/impl_trait_for_type.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/impl_trait_for_type.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/impl_trait_for_type.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/include.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/include.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/include.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/include.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/include.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/include.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/include.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/include.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/lifetime_extern_cxx.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/lifetime_extern_cxx.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/lifetime_extern_cxx.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/lifetime_extern_cxx.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/lifetime_extern_cxx.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/lifetime_extern_cxx.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/lifetime_extern_cxx.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/lifetime_extern_cxx.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/lifetime_extern_rust.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/lifetime_extern_rust.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/lifetime_extern_rust.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/lifetime_extern_rust.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/lifetime_extern_rust.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/lifetime_extern_rust.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/lifetime_extern_rust.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/lifetime_extern_rust.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/missing_unsafe.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/missing_unsafe.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/missing_unsafe.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/missing_unsafe.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/missing_unsafe.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/missing_unsafe.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/missing_unsafe.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/missing_unsafe.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/multiple_parse_error.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/multiple_parse_error.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/multiple_parse_error.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/multiple_parse_error.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/multiple_parse_error.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/multiple_parse_error.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/multiple_parse_error.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/multiple_parse_error.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/mut_return.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/mut_return.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/mut_return.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/mut_return.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/mut_return.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/mut_return.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/mut_return.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/mut_return.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/non_integer_discriminant_enum.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/non_integer_discriminant_enum.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/non_integer_discriminant_enum.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/non_integer_discriminant_enum.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/non_integer_discriminant_enum.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/non_integer_discriminant_enum.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/non_integer_discriminant_enum.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/non_integer_discriminant_enum.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/nonempty_impl_block.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/nonempty_impl_block.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/nonempty_impl_block.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/nonempty_impl_block.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/nonempty_impl_block.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/nonempty_impl_block.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/nonempty_impl_block.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/nonempty_impl_block.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/nonlocal_rust_type.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/nonlocal_rust_type.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/nonlocal_rust_type.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/nonlocal_rust_type.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/nonlocal_rust_type.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/nonlocal_rust_type.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/nonlocal_rust_type.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/nonlocal_rust_type.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/opaque_autotraits.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/opaque_autotraits.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/opaque_autotraits.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/opaque_autotraits.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/opaque_autotraits.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/opaque_autotraits.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/opaque_autotraits.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/opaque_autotraits.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/opaque_not_sized.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/opaque_not_sized.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/opaque_not_sized.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/opaque_not_sized.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/opaque_not_sized.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/opaque_not_sized.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/opaque_not_sized.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/opaque_not_sized.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/pin_mut_opaque.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/pin_mut_opaque.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/pin_mut_opaque.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/pin_mut_opaque.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/pin_mut_opaque.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/pin_mut_opaque.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/pin_mut_opaque.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/pin_mut_opaque.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/ptr_in_fnptr.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_in_fnptr.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/ptr_in_fnptr.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_in_fnptr.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/ptr_in_fnptr.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_in_fnptr.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/ptr_in_fnptr.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_in_fnptr.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/ptr_missing_unsafe.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_missing_unsafe.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/ptr_missing_unsafe.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_missing_unsafe.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/ptr_missing_unsafe.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_missing_unsafe.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/ptr_missing_unsafe.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_missing_unsafe.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/ptr_no_const_mut.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_no_const_mut.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/ptr_no_const_mut.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_no_const_mut.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/ptr_no_const_mut.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_no_const_mut.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/ptr_no_const_mut.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_no_const_mut.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/ptr_unsupported.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_unsupported.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/ptr_unsupported.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_unsupported.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/ptr_unsupported.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_unsupported.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/ptr_unsupported.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_unsupported.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/raw_ident_namespace.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/raw_ident_namespace.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/raw_ident_namespace.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/raw_ident_namespace.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/raw_ident_namespace.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/raw_ident_namespace.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/raw_ident_namespace.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/raw_ident_namespace.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/reference_to_reference.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/reference_to_reference.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/reference_to_reference.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/reference_to_reference.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/reference_to_reference.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/reference_to_reference.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/reference_to_reference.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/reference_to_reference.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/reserved_lifetime.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/reserved_lifetime.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/reserved_lifetime.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/reserved_lifetime.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/reserved_lifetime.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/reserved_lifetime.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/reserved_lifetime.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/reserved_lifetime.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/reserved_name.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/reserved_name.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/reserved_name.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/reserved_name.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/reserved_name.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/reserved_name.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/reserved_name.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/reserved_name.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/result_no_display.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/result_no_display.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/result_no_display.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/result_no_display.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/result_no_display.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/result_no_display.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/result_no_display.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/result_no_display.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/root_namespace.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/root_namespace.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/root_namespace.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/root_namespace.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/root_namespace.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/root_namespace.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/root_namespace.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/root_namespace.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/rust_pinned.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/rust_pinned.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/rust_pinned.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/rust_pinned.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/rust_pinned.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/rust_pinned.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/rust_pinned.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/rust_pinned.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/slice_of_type_alias.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/slice_of_type_alias.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/slice_of_type_alias.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/slice_of_type_alias.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/slice_of_type_alias.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/slice_of_type_alias.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/slice_of_type_alias.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/slice_of_type_alias.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/slice_unsupported.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/slice_unsupported.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/slice_unsupported.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/slice_unsupported.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/slice_unsupported.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/slice_unsupported.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/slice_unsupported.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/slice_unsupported.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/struct_cycle.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/struct_cycle.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/struct_cycle.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/struct_cycle.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/struct_cycle.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/struct_cycle.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/struct_cycle.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/struct_cycle.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/type_alias_rust.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/type_alias_rust.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/type_alias_rust.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/type_alias_rust.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/type_alias_rust.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/type_alias_rust.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/type_alias_rust.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/type_alias_rust.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/unique_ptr_as_mut.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unique_ptr_as_mut.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/unique_ptr_as_mut.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unique_ptr_as_mut.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/unique_ptr_as_mut.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unique_ptr_as_mut.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/unique_ptr_as_mut.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unique_ptr_as_mut.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/unique_ptr_to_opaque.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unique_ptr_to_opaque.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/unique_ptr_to_opaque.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unique_ptr_to_opaque.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/unique_ptr_to_opaque.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unique_ptr_to_opaque.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/unique_ptr_to_opaque.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unique_ptr_to_opaque.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/unique_ptr_twice.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unique_ptr_twice.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/unique_ptr_twice.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unique_ptr_twice.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/unique_ptr_twice.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unique_ptr_twice.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/unique_ptr_twice.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unique_ptr_twice.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/unnamed_receiver.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unnamed_receiver.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/unnamed_receiver.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unnamed_receiver.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/unnamed_receiver.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unnamed_receiver.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/unnamed_receiver.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unnamed_receiver.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/unpin_impl.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unpin_impl.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/unpin_impl.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unpin_impl.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/unpin_impl.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unpin_impl.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/unpin_impl.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unpin_impl.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/unrecognized_receiver.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unrecognized_receiver.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/unrecognized_receiver.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unrecognized_receiver.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/unrecognized_receiver.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unrecognized_receiver.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/unrecognized_receiver.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unrecognized_receiver.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/unsupported_elided.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unsupported_elided.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/unsupported_elided.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unsupported_elided.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/unsupported_elided.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unsupported_elided.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/unsupported_elided.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unsupported_elided.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/vec_opaque.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/vec_opaque.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/vec_opaque.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/vec_opaque.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/vec_opaque.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/vec_opaque.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/vec_opaque.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/vec_opaque.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/vector_autotraits.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/vector_autotraits.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/vector_autotraits.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/vector_autotraits.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/vector_autotraits.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/vector_autotraits.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/vector_autotraits.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/vector_autotraits.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/wrong_type_id.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/wrong_type_id.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/wrong_type_id.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/wrong_type_id.rs
diff --git a/third_party/rust/cxx/v1/crate/tests/ui/wrong_type_id.stderr b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/wrong_type_id.stderr
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/ui/wrong_type_id.stderr
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/wrong_type_id.stderr
diff --git a/third_party/rust/cxx/v1/crate/tests/unique_ptr.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/unique_ptr.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tests/unique_ptr.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/unique_ptr.rs
diff --git a/third_party/rust/cxx/v1/crate/tools/bazel/BUILD b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tools/bazel/BUILD
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tools/bazel/BUILD
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tools/bazel/BUILD
diff --git a/third_party/rust/cxx/v1/crate/tools/bazel/rust_cxx_bridge.bzl b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tools/bazel/rust_cxx_bridge.bzl
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tools/bazel/rust_cxx_bridge.bzl
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tools/bazel/rust_cxx_bridge.bzl
diff --git a/third_party/rust/cxx/v1/crate/tools/buck/.ignore b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tools/buck/.ignore
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tools/buck/.ignore
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tools/buck/.ignore
diff --git a/third_party/rust/cxx/v1/crate/tools/buck/build_mode.bzl b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tools/buck/build_mode.bzl
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tools/buck/build_mode.bzl
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tools/buck/build_mode.bzl
diff --git a/third_party/rust/cxx/v1/crate/tools/buck/rust_cxx_bridge.bzl b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tools/buck/rust_cxx_bridge.bzl
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tools/buck/rust_cxx_bridge.bzl
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tools/buck/rust_cxx_bridge.bzl
diff --git a/third_party/rust/cxx/v1/crate/tools/buck/toolchains/BUCK b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tools/buck/toolchains/BUCK
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tools/buck/toolchains/BUCK
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tools/buck/toolchains/BUCK
diff --git a/third_party/rust/cxx/v1/crate/tools/cargo/build.rs b/third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tools/cargo/build.rs
similarity index 100%
rename from third_party/rust/cxx/v1/crate/tools/cargo/build.rs
rename to third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tools/cargo/build.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/.cargo_vcs_info.json
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/Cargo.lock b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/Cargo.lock
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/Cargo.lock
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/Cargo.lock
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/Cargo.toml
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/Cargo.toml
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/Cargo.toml.orig
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cxx/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/LICENSE-APACHE
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/LICENSE-MIT
similarity index 100%
copy from third_party/rust/cxx/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/LICENSE-MIT
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/app.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/app.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/app.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/app.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/cfg.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/cfg.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/cfg.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/cfg.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/gen/block.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/block.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/gen/block.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/block.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/gen/builtin.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/builtin.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/gen/builtin.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/builtin.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/gen/cfg.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/cfg.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/gen/cfg.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/cfg.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/gen/check.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/check.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/gen/check.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/check.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/gen/error.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/error.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/gen/error.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/error.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/gen/file.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/file.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/gen/file.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/file.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/gen/fs.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/fs.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/gen/fs.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/fs.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/gen/ifndef.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/ifndef.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/gen/ifndef.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/ifndef.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/gen/include.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/include.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/gen/include.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/include.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/gen/include/cxx.h b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/include/cxx.h
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/gen/include/cxx.h
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/include/cxx.h
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/gen/mod.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/mod.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/gen/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/mod.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/gen/names.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/names.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/gen/names.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/names.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/gen/namespace.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/namespace.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/gen/namespace.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/namespace.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/gen/nested.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/nested.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/gen/nested.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/nested.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/gen/out.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/out.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/gen/out.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/out.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/gen/write.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/write.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/gen/write.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/write.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/main.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/main.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/main.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/main.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/output.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/output.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/output.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/output.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/atom.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/atom.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/atom.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/atom.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/attrs.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/attrs.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/attrs.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/attrs.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/cfg.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/cfg.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/cfg.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/cfg.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/check.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/check.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/check.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/check.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/derive.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/derive.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/derive.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/derive.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/discriminant.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/discriminant.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/discriminant.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/discriminant.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/doc.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/doc.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/doc.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/doc.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/error.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/error.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/error.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/error.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/file.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/file.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/file.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/file.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/ident.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/ident.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/ident.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/ident.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/impls.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/impls.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/impls.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/impls.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/improper.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/improper.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/improper.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/improper.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/instantiate.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/instantiate.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/instantiate.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/instantiate.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/mangle.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/mangle.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/mangle.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/mangle.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/map.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/map.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/map.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/map.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/mod.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/mod.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/mod.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/names.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/names.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/names.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/names.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/namespace.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/namespace.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/namespace.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/namespace.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/parse.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/parse.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/parse.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/parse.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/pod.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/pod.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/pod.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/pod.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/qualified.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/qualified.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/qualified.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/qualified.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/report.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/report.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/report.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/report.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/resolve.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/resolve.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/resolve.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/resolve.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/set.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/set.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/set.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/set.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/symbol.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/symbol.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/symbol.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/symbol.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/tokens.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/tokens.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/tokens.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/tokens.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/toposort.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/toposort.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/toposort.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/toposort.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/trivial.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/trivial.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/trivial.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/trivial.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/types.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/types.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/types.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/types.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/visit.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/visit.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/visit.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/visit.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/test.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/test.rs
similarity index 100%
rename from third_party/rust/cxxbridge_cmd/v1/crate/src/test.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/test.rs
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/cxxbridge_macro/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/.cargo_vcs_info.json
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/Cargo.toml
similarity index 100%
rename from third_party/rust/cxxbridge_macro/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/Cargo.toml
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/cxxbridge_macro/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/Cargo.toml.orig
diff --git a/third_party/rust/anyhow/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/anyhow/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/LICENSE-APACHE
diff --git a/third_party/rust/anyhow/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/LICENSE-MIT
similarity index 100%
copy from third_party/rust/anyhow/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/LICENSE-MIT
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/README.md
similarity index 100%
rename from third_party/rust/cxxbridge_macro/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/README.md
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/clang.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/clang.rs
similarity index 100%
rename from third_party/rust/cxxbridge_macro/v1/crate/src/clang.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/clang.rs
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/derive.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/derive.rs
similarity index 100%
rename from third_party/rust/cxxbridge_macro/v1/crate/src/derive.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/derive.rs
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/expand.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/expand.rs
similarity index 100%
rename from third_party/rust/cxxbridge_macro/v1/crate/src/expand.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/expand.rs
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/generics.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/generics.rs
similarity index 100%
rename from third_party/rust/cxxbridge_macro/v1/crate/src/generics.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/generics.rs
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/lib.rs
similarity index 100%
rename from third_party/rust/cxxbridge_macro/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/lib.rs
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/load.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/load.rs
similarity index 100%
rename from third_party/rust/cxxbridge_macro/v1/crate/src/load.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/load.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/atom.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/atom.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/atom.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/atom.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/attrs.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/attrs.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/attrs.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/attrs.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/cfg.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/cfg.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/cfg.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/cfg.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/check.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/check.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/check.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/check.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/derive.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/derive.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/derive.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/derive.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/discriminant.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/discriminant.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/discriminant.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/discriminant.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/doc.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/doc.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/doc.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/doc.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/error.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/error.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/error.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/error.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/file.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/file.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/file.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/file.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/ident.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/ident.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/ident.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/ident.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/impls.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/impls.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/impls.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/impls.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/improper.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/improper.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/improper.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/improper.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/instantiate.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/instantiate.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/instantiate.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/instantiate.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/mangle.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/mangle.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/mangle.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/mangle.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/map.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/map.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/map.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/map.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/mod.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/mod.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/mod.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/mod.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/names.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/names.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/names.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/names.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/namespace.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/namespace.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/namespace.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/namespace.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/parse.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/parse.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/parse.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/parse.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/pod.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/pod.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/pod.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/pod.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/qualified.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/qualified.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/qualified.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/qualified.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/report.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/report.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/report.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/report.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/resolve.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/resolve.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/resolve.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/resolve.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/set.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/set.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/set.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/set.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/symbol.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/symbol.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/symbol.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/symbol.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/tokens.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/tokens.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/tokens.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/tokens.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/toposort.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/toposort.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/toposort.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/toposort.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/trivial.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/trivial.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/trivial.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/trivial.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/types.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/types.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/types.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/types.rs
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/visit.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/visit.rs
similarity index 100%
copy from third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/visit.rs
copy to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/visit.rs
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/tokens.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/tokens.rs
similarity index 100%
rename from third_party/rust/cxxbridge_macro/v1/crate/src/tokens.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/tokens.rs
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/type_id.rs b/third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/type_id.rs
similarity index 100%
rename from third_party/rust/cxxbridge_macro/v1/crate/src/type_id.rs
rename to third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/type_id.rs
diff --git a/third_party/rust/font_types/v0_4/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/.cargo_vcs_info.json
diff --git a/third_party/rust/font_types/v0_4/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/Cargo.toml
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/Cargo.toml
diff --git a/third_party/rust/font_types/v0_4/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/Cargo.toml.orig
diff --git a/third_party/rust/font_types/v0_4/crate/README.md b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/README.md
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/README.md
diff --git a/third_party/rust/font_types/v0_4/crate/src/bbox.rs b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/bbox.rs
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/src/bbox.rs
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/bbox.rs
diff --git a/third_party/rust/font_types/v0_4/crate/src/fixed.rs b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/fixed.rs
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/src/fixed.rs
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/fixed.rs
diff --git a/third_party/rust/font_types/v0_4/crate/src/fword.rs b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/fword.rs
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/src/fword.rs
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/fword.rs
diff --git a/third_party/rust/font_types/v0_4/crate/src/glyph_id.rs b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/glyph_id.rs
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/src/glyph_id.rs
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/glyph_id.rs
diff --git a/third_party/rust/font_types/v0_4/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/lib.rs
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/lib.rs
diff --git a/third_party/rust/font_types/v0_4/crate/src/longdatetime.rs b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/longdatetime.rs
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/src/longdatetime.rs
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/longdatetime.rs
diff --git a/third_party/rust/font_types/v0_4/crate/src/name_id.rs b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/name_id.rs
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/src/name_id.rs
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/name_id.rs
diff --git a/third_party/rust/font_types/v0_4/crate/src/offset.rs b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/offset.rs
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/src/offset.rs
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/offset.rs
diff --git a/third_party/rust/font_types/v0_4/crate/src/pen.rs b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/pen.rs
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/src/pen.rs
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/pen.rs
diff --git a/third_party/rust/font_types/v0_4/crate/src/point.rs b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/point.rs
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/src/point.rs
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/point.rs
diff --git a/third_party/rust/font_types/v0_4/crate/src/raw.rs b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/raw.rs
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/src/raw.rs
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/raw.rs
diff --git a/third_party/rust/font_types/v0_4/crate/src/serde_test.rs b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/serde_test.rs
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/src/serde_test.rs
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/serde_test.rs
diff --git a/third_party/rust/font_types/v0_4/crate/src/tag.rs b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/tag.rs
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/src/tag.rs
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/tag.rs
diff --git a/third_party/rust/font_types/v0_4/crate/src/uint24.rs b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/uint24.rs
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/src/uint24.rs
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/uint24.rs
diff --git a/third_party/rust/font_types/v0_4/crate/src/version.rs b/third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/version.rs
similarity index 100%
rename from third_party/rust/font_types/v0_4/crate/src/version.rs
rename to third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/version.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/.cargo_vcs_info.json
diff --git a/third_party/rust/getrandom/v0_2/crate/CHANGELOG.md b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/CHANGELOG.md
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/CHANGELOG.md
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/CHANGELOG.md
diff --git a/third_party/rust/getrandom/v0_2/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/Cargo.toml
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/Cargo.toml
diff --git a/third_party/rust/getrandom/v0_2/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/Cargo.toml.orig
diff --git a/third_party/rust/getrandom/v0_2/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/LICENSE-APACHE
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/LICENSE-APACHE
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/LICENSE-APACHE
diff --git a/third_party/rust/getrandom/v0_2/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/LICENSE-MIT
similarity index 100%
copy from third_party/rust/getrandom/v0_2/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/LICENSE-MIT
diff --git a/third_party/rust/getrandom/v0_2/crate/README.md b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/README.md
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/README.md
diff --git a/third_party/rust/getrandom/v0_2/crate/benches/buffer.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/benches/buffer.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/benches/buffer.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/benches/buffer.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/3ds.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/3ds.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/3ds.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/3ds.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/apple-other.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/apple-other.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/apple-other.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/apple-other.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/bsd_arandom.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/bsd_arandom.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/bsd_arandom.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/bsd_arandom.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/custom.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/custom.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/custom.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/custom.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/dragonfly.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/dragonfly.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/dragonfly.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/dragonfly.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/emscripten.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/emscripten.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/emscripten.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/emscripten.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/error.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/error.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/error.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/error.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/error_impls.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/error_impls.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/error_impls.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/error_impls.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/espidf.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/espidf.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/espidf.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/espidf.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/fuchsia.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/fuchsia.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/fuchsia.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/fuchsia.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/hermit.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/hermit.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/hermit.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/hermit.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/js.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/js.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/js.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/js.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/lib.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/lib.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/linux_android.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/linux_android.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/linux_android.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/linux_android.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/macos.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/macos.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/macos.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/macos.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/openbsd.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/openbsd.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/openbsd.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/openbsd.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/rdrand.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/rdrand.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/rdrand.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/rdrand.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/solaris_illumos.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/solaris_illumos.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/solaris_illumos.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/solaris_illumos.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/solid.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/solid.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/solid.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/solid.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/use_file.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/use_file.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/use_file.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/use_file.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/util.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/util.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/util.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/util.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/util_libc.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/util_libc.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/util_libc.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/util_libc.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/vxworks.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/vxworks.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/vxworks.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/vxworks.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/wasi.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/wasi.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/wasi.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/wasi.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/src/windows.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/windows.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/src/windows.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/windows.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/tests/common/mod.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/tests/common/mod.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/tests/common/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/tests/common/mod.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/tests/custom.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/tests/custom.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/tests/custom.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/tests/custom.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/tests/normal.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/tests/normal.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/tests/normal.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/tests/normal.rs
diff --git a/third_party/rust/getrandom/v0_2/crate/tests/rdrand.rs b/third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/tests/rdrand.rs
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/tests/rdrand.rs
rename to third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/tests/rdrand.rs
diff --git a/third_party/rust/hex/v0_4/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/hex-0.4.3/.gitignore
similarity index 100%
rename from third_party/rust/hex/v0_4/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/hex-0.4.3/.gitignore
diff --git a/third_party/rust/hex/v0_4/crate/.gitlab-ci.yml b/third_party/rust/chromium_crates_io/vendor/hex-0.4.3/.gitlab-ci.yml
similarity index 100%
rename from third_party/rust/hex/v0_4/crate/.gitlab-ci.yml
rename to third_party/rust/chromium_crates_io/vendor/hex-0.4.3/.gitlab-ci.yml
diff --git a/third_party/rust/hex/v0_4/crate/.travis.yml b/third_party/rust/chromium_crates_io/vendor/hex-0.4.3/.travis.yml
similarity index 100%
rename from third_party/rust/hex/v0_4/crate/.travis.yml
rename to third_party/rust/chromium_crates_io/vendor/hex-0.4.3/.travis.yml
diff --git a/third_party/rust/hex/v0_4/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/hex-0.4.3/Cargo.toml
similarity index 100%
rename from third_party/rust/hex/v0_4/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/hex-0.4.3/Cargo.toml
diff --git a/third_party/rust/hex/v0_4/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/hex-0.4.3/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/hex/v0_4/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/hex-0.4.3/Cargo.toml.orig
diff --git a/third_party/rust/anstyle/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/hex-0.4.3/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/anstyle/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/hex-0.4.3/LICENSE-APACHE
diff --git a/third_party/rust/hex/v0_4/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/hex-0.4.3/LICENSE-MIT
similarity index 100%
rename from third_party/rust/hex/v0_4/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/hex-0.4.3/LICENSE-MIT
diff --git a/third_party/rust/hex/v0_4/crate/README.md b/third_party/rust/chromium_crates_io/vendor/hex-0.4.3/README.md
similarity index 100%
rename from third_party/rust/hex/v0_4/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/hex-0.4.3/README.md
diff --git a/third_party/rust/hex/v0_4/crate/benches/hex.rs b/third_party/rust/chromium_crates_io/vendor/hex-0.4.3/benches/hex.rs
similarity index 100%
rename from third_party/rust/hex/v0_4/crate/benches/hex.rs
rename to third_party/rust/chromium_crates_io/vendor/hex-0.4.3/benches/hex.rs
diff --git a/third_party/rust/hex/v0_4/crate/src/error.rs b/third_party/rust/chromium_crates_io/vendor/hex-0.4.3/src/error.rs
similarity index 100%
rename from third_party/rust/hex/v0_4/crate/src/error.rs
rename to third_party/rust/chromium_crates_io/vendor/hex-0.4.3/src/error.rs
diff --git a/third_party/rust/hex/v0_4/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/hex-0.4.3/src/lib.rs
similarity index 100%
rename from third_party/rust/hex/v0_4/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/hex-0.4.3/src/lib.rs
diff --git a/third_party/rust/hex/v0_4/crate/src/serde.rs b/third_party/rust/chromium_crates_io/vendor/hex-0.4.3/src/serde.rs
similarity index 100%
rename from third_party/rust/hex/v0_4/crate/src/serde.rs
rename to third_party/rust/chromium_crates_io/vendor/hex-0.4.3/src/serde.rs
diff --git a/third_party/rust/hex/v0_4/crate/tests/serde.rs b/third_party/rust/chromium_crates_io/vendor/hex-0.4.3/tests/serde.rs
similarity index 100%
rename from third_party/rust/hex/v0_4/crate/tests/serde.rs
rename to third_party/rust/chromium_crates_io/vendor/hex-0.4.3/tests/serde.rs
diff --git a/third_party/rust/hex/v0_4/crate/tests/version-number.rs b/third_party/rust/chromium_crates_io/vendor/hex-0.4.3/tests/version-number.rs
similarity index 100%
rename from third_party/rust/hex/v0_4/crate/tests/version-number.rs
rename to third_party/rust/chromium_crates_io/vendor/hex-0.4.3/tests/version-number.rs
diff --git a/third_party/rust/hex_literal/v0_4/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/hex_literal/v0_4/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/.cargo_vcs_info.json
diff --git a/third_party/rust/hex_literal/v0_4/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/.gitignore
similarity index 100%
rename from third_party/rust/hex_literal/v0_4/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/.gitignore
diff --git a/third_party/rust/hex_literal/v0_4/crate/CHANGELOG.md b/third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/CHANGELOG.md
similarity index 100%
rename from third_party/rust/hex_literal/v0_4/crate/CHANGELOG.md
rename to third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/CHANGELOG.md
diff --git a/third_party/rust/hex_literal/v0_4/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/Cargo.toml
similarity index 100%
rename from third_party/rust/hex_literal/v0_4/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/Cargo.toml
diff --git a/third_party/rust/hex_literal/v0_4/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/hex_literal/v0_4/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/Cargo.toml.orig
diff --git a/third_party/rust/hex_literal/v0_4/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/LICENSE-APACHE
similarity index 100%
rename from third_party/rust/hex_literal/v0_4/crate/LICENSE-APACHE
rename to third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/LICENSE-APACHE
diff --git a/third_party/rust/hex_literal/v0_4/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/LICENSE-MIT
similarity index 100%
rename from third_party/rust/hex_literal/v0_4/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/LICENSE-MIT
diff --git a/third_party/rust/hex_literal/v0_4/crate/README.md b/third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/README.md
similarity index 100%
rename from third_party/rust/hex_literal/v0_4/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/README.md
diff --git a/third_party/rust/hex_literal/v0_4/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/src/lib.rs
similarity index 100%
rename from third_party/rust/hex_literal/v0_4/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/src/lib.rs
diff --git a/third_party/rust/hex_literal/v0_4/crate/tests/basic.rs b/third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/tests/basic.rs
similarity index 100%
rename from third_party/rust/hex_literal/v0_4/crate/tests/basic.rs
rename to third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/tests/basic.rs
diff --git a/third_party/rust/itoa/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/itoa/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/.cargo_vcs_info.json
diff --git a/third_party/rust/itoa/v1/crate/.clippy.toml b/third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/.clippy.toml
similarity index 100%
rename from third_party/rust/itoa/v1/crate/.clippy.toml
rename to third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/.clippy.toml
diff --git a/third_party/rust/cxx/v1/crate/.github/FUNDING.yml b/third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/.github/FUNDING.yml
similarity index 100%
copy from third_party/rust/cxx/v1/crate/.github/FUNDING.yml
copy to third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/.github/FUNDING.yml
diff --git a/third_party/rust/itoa/v1/crate/.github/workflows/ci.yml b/third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/.github/workflows/ci.yml
similarity index 100%
rename from third_party/rust/itoa/v1/crate/.github/workflows/ci.yml
rename to third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/.github/workflows/ci.yml
diff --git a/third_party/rust/cfg_if/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/.gitignore
similarity index 100%
copy from third_party/rust/cfg_if/v1/crate/.gitignore
copy to third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/.gitignore
diff --git a/third_party/rust/itoa/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/Cargo.toml
similarity index 100%
rename from third_party/rust/itoa/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/Cargo.toml
diff --git a/third_party/rust/itoa/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/itoa/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/Cargo.toml.orig
diff --git a/third_party/rust/autocfg/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/LICENSE-APACHE
similarity index 100%
rename from third_party/rust/autocfg/v1/crate/LICENSE-APACHE
rename to third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/LICENSE-APACHE
diff --git a/third_party/rust/anyhow/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/LICENSE-MIT
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/LICENSE-MIT
diff --git a/third_party/rust/itoa/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/README.md
similarity index 100%
rename from third_party/rust/itoa/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/README.md
diff --git a/third_party/rust/itoa/v1/crate/benches/bench.rs b/third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/benches/bench.rs
similarity index 100%
rename from third_party/rust/itoa/v1/crate/benches/bench.rs
rename to third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/benches/bench.rs
diff --git a/third_party/rust/itoa/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/src/lib.rs
similarity index 100%
rename from third_party/rust/itoa/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/src/lib.rs
diff --git a/third_party/rust/itoa/v1/crate/src/udiv128.rs b/third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/src/udiv128.rs
similarity index 100%
rename from third_party/rust/itoa/v1/crate/src/udiv128.rs
rename to third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/src/udiv128.rs
diff --git a/third_party/rust/itoa/v1/crate/tests/test.rs b/third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/tests/test.rs
similarity index 100%
rename from third_party/rust/itoa/v1/crate/tests/test.rs
rename to third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/tests/test.rs
diff --git a/third_party/rust/lazy_static/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/lazy_static/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/.cargo_vcs_info.json
diff --git a/third_party/rust/lazy_static/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/.gitignore
similarity index 100%
rename from third_party/rust/lazy_static/v1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/.gitignore
diff --git a/third_party/rust/lazy_static/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/Cargo.toml
similarity index 100%
rename from third_party/rust/lazy_static/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/Cargo.toml
diff --git a/third_party/rust/lazy_static/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/lazy_static/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/Cargo.toml.orig
diff --git a/third_party/rust/autocfg/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/autocfg/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/LICENSE-APACHE
diff --git a/third_party/rust/lazy_static/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/LICENSE-MIT
similarity index 100%
rename from third_party/rust/lazy_static/v1/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/LICENSE-MIT
diff --git a/third_party/rust/lazy_static/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/README.md
similarity index 100%
rename from third_party/rust/lazy_static/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/README.md
diff --git a/third_party/rust/lazy_static/v1/crate/src/core_lazy.rs b/third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/src/core_lazy.rs
similarity index 100%
rename from third_party/rust/lazy_static/v1/crate/src/core_lazy.rs
rename to third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/src/core_lazy.rs
diff --git a/third_party/rust/lazy_static/v1/crate/src/inline_lazy.rs b/third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/src/inline_lazy.rs
similarity index 100%
rename from third_party/rust/lazy_static/v1/crate/src/inline_lazy.rs
rename to third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/src/inline_lazy.rs
diff --git a/third_party/rust/lazy_static/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/src/lib.rs
similarity index 100%
rename from third_party/rust/lazy_static/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/src/lib.rs
diff --git a/third_party/rust/lazy_static/v1/crate/tests/no_std.rs b/third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/tests/no_std.rs
similarity index 100%
rename from third_party/rust/lazy_static/v1/crate/tests/no_std.rs
rename to third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/tests/no_std.rs
diff --git a/third_party/rust/lazy_static/v1/crate/tests/test.rs b/third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/tests/test.rs
similarity index 100%
rename from third_party/rust/lazy_static/v1/crate/tests/test.rs
rename to third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/tests/test.rs
diff --git a/third_party/rust/libc/v0_2/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/.cargo_vcs_info.json
diff --git a/third_party/rust/libc/v0_2/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/.gitignore
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/.gitignore
diff --git a/third_party/rust/libc/v0_2/crate/CONTRIBUTING.md b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/CONTRIBUTING.md
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/CONTRIBUTING.md
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/CONTRIBUTING.md
diff --git a/third_party/rust/libc/v0_2/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/Cargo.toml
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/Cargo.toml
diff --git a/third_party/rust/libc/v0_2/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/Cargo.toml.orig
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cxx/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/LICENSE-APACHE
diff --git a/third_party/rust/libc/v0_2/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/LICENSE-MIT
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/LICENSE-MIT
diff --git a/third_party/rust/libc/v0_2/crate/README.md b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/README.md
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/README.md
diff --git a/third_party/rust/libc/v0_2/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/build.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/build.rs
diff --git a/third_party/rust/libc/v0_2/crate/rustfmt.toml b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/rustfmt.toml
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/rustfmt.toml
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/rustfmt.toml
diff --git a/third_party/rust/libc/v0_2/crate/src/fixed_width_ints.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fixed_width_ints.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/fixed_width_ints.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fixed_width_ints.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/fuchsia/aarch64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/aarch64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/fuchsia/aarch64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/aarch64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/fuchsia/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/fuchsia/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/fuchsia/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/fuchsia/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/fuchsia/no_align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/no_align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/fuchsia/no_align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/no_align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/fuchsia/riscv64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/riscv64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/fuchsia/riscv64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/riscv64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/fuchsia/x86_64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/x86_64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/fuchsia/x86_64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/x86_64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/hermit/aarch64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/hermit/aarch64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/hermit/aarch64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/hermit/aarch64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/hermit/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/hermit/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/hermit/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/hermit/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/hermit/x86_64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/hermit/x86_64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/hermit/x86_64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/hermit/x86_64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/lib.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/lib.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/macros.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/macros.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/macros.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/macros.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/psp.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/psp.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/psp.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/psp.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/sgx.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/sgx.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/sgx.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/sgx.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/solid/aarch64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/solid/aarch64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/solid/aarch64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/solid/aarch64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/solid/arm.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/solid/arm.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/solid/arm.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/solid/arm.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/solid/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/solid/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/solid/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/solid/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/switch.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/switch.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/switch.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/switch.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/aix/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/aix/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/aix/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/aix/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/aix/powerpc64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/aix/powerpc64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/aix/powerpc64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/aix/powerpc64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b32/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b32/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b32/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b32/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b32/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b32/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b32/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b32/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/aarch64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/aarch64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/aarch64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/aarch64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/aarch64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/aarch64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/aarch64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/aarch64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/x86_64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/x86_64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/x86_64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/x86_64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/x86_64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/x86_64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/x86_64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/x86_64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/long_array.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/long_array.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/long_array.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/long_array.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/dragonfly/errno.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/dragonfly/errno.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/dragonfly/errno.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/dragonfly/errno.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/dragonfly/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/dragonfly/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/dragonfly/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/dragonfly/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/aarch64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/aarch64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/aarch64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/aarch64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/arm.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/arm.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/arm.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/arm.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd12/b64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd12/b64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd12/b64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd12/b64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd12/x86_64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd12/x86_64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd12/x86_64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd12/x86_64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd13/b64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd13/b64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd13/b64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd13/b64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd13/x86_64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd13/x86_64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd13/x86_64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd13/x86_64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd14/b64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd14/b64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd14/b64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd14/b64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd14/x86_64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd14/x86_64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd14/x86_64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd14/x86_64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/powerpc.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/powerpc.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/powerpc.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/powerpc.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/riscv64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/riscv64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/riscv64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/riscv64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/x86.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/x86.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/x86.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/x86.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/x86_64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/x86_64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/x86_64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/x86_64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/x86_64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/x86_64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/x86_64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/x86_64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/aarch64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/aarch64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/aarch64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/aarch64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/arm.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/arm.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/arm.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/arm.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/powerpc.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/powerpc.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/powerpc.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/powerpc.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/sparc64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/sparc64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/sparc64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/sparc64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/x86.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/x86.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/x86.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/x86.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/x86_64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/x86_64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/x86_64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/x86_64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/aarch64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/aarch64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/aarch64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/aarch64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/arm.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/arm.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/arm.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/arm.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/mips64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/mips64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/mips64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/mips64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/powerpc.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/powerpc.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/powerpc.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/powerpc.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/powerpc64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/powerpc64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/powerpc64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/powerpc64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/riscv64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/riscv64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/riscv64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/riscv64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/sparc64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/sparc64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/sparc64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/sparc64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/x86.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/x86.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/x86.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/x86.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/x86_64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/x86_64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/x86_64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/x86_64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/haiku/b32.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/haiku/b32.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/haiku/b32.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/haiku/b32.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/haiku/b64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/haiku/b64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/haiku/b64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/haiku/b64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/haiku/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/haiku/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/haiku/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/haiku/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/haiku/native.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/haiku/native.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/haiku/native.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/haiku/native.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/haiku/x86_64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/haiku/x86_64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/haiku/x86_64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/haiku/x86_64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/hermit/aarch64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/hermit/aarch64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/hermit/aarch64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/hermit/aarch64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/hermit/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/hermit/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/hermit/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/hermit/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/hermit/x86_64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/hermit/x86_64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/hermit/x86_64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/hermit/x86_64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b32/arm.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b32/arm.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b32/arm.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b32/arm.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b32/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b32/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b32/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b32/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b32/x86/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b32/x86/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b32/x86/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b32/x86/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b32/x86/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b32/x86/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b32/x86/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b32/x86/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/aarch64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/aarch64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/aarch64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/aarch64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/aarch64/int128.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/aarch64/int128.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/aarch64/int128.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/aarch64/int128.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/aarch64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/aarch64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/aarch64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/aarch64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/riscv64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/riscv64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/riscv64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/riscv64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/riscv64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/riscv64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/riscv64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/riscv64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/x86_64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/x86_64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/x86_64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/x86_64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/x86_64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/x86_64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/x86_64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/x86_64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/emscripten/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/emscripten/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/emscripten/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/emscripten/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/emscripten/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/emscripten/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/emscripten/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/emscripten/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/emscripten/no_align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/emscripten/no_align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/emscripten/no_align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/emscripten/no_align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/arch/generic/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/arch/generic/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/arch/generic/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/arch/generic/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/arch/mips/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/arch/mips/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/arch/mips/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/arch/mips/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/arch/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/arch/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/arch/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/arch/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/arch/powerpc/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/arch/powerpc/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/arch/powerpc/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/arch/powerpc/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/arch/sparc/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/arch/sparc/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/arch/sparc/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/arch/sparc/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/arm/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/arm/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/arm/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/arm/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/arm/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/arm/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/arm/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/arm/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/m68k/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/m68k/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/m68k/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/m68k/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/mips/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/mips/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/mips/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/mips/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/mips/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/mips/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/mips/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/mips/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/powerpc.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/powerpc.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/powerpc.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/powerpc.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/riscv32/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/riscv32/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/riscv32/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/riscv32/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/sparc/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/sparc/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/sparc/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/sparc/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/x86/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/x86/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/x86/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/x86/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/x86/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/x86/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/x86/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/x86/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/aarch64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/aarch64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/aarch64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/aarch64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/aarch64/ilp32.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/aarch64/ilp32.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/aarch64/ilp32.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/aarch64/ilp32.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/aarch64/int128.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/aarch64/int128.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/aarch64/int128.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/aarch64/int128.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/aarch64/lp64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/aarch64/lp64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/aarch64/lp64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/aarch64/lp64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/loongarch64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/loongarch64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/loongarch64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/loongarch64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/mips64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/mips64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/mips64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/mips64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/powerpc64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/powerpc64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/powerpc64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/powerpc64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/riscv64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/riscv64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/riscv64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/riscv64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/s390x.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/s390x.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/s390x.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/s390x.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/sparc64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/sparc64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/sparc64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/sparc64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/x86_64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/x86_64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/x86_64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/x86_64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/no_align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/no_align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/no_align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/no_align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/arm/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/arm/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/arm/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/arm/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/arm/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/arm/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/arm/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/arm/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/hexagon.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/hexagon.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/hexagon.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/hexagon.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/mips/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/mips/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/mips/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/mips/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/mips/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/mips/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/mips/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/mips/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/powerpc.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/powerpc.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/powerpc.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/powerpc.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/riscv32/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/riscv32/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/riscv32/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/riscv32/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/riscv32/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/riscv32/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/riscv32/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/riscv32/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/x86/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/x86/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/x86/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/x86/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/x86/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/x86/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/x86/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/x86/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/aarch64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/aarch64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/aarch64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/aarch64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/aarch64/int128.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/aarch64/int128.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/aarch64/int128.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/aarch64/int128.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/mips64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/mips64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/mips64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/mips64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/powerpc64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/powerpc64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/powerpc64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/powerpc64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/riscv64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/riscv64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/riscv64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/riscv64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/s390x.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/s390x.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/s390x.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/s390x.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/x86_64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/x86_64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/x86_64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/x86_64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/no_align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/no_align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/no_align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/no_align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/non_exhaustive.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/non_exhaustive.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/non_exhaustive.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/non_exhaustive.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/arm/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/arm/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/arm/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/arm/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/arm/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/arm/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/arm/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/arm/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/arm/no_align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/arm/no_align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/arm/no_align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/arm/no_align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips32/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips32/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips32/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips32/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips32/no_align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips32/no_align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips32/no_align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips32/no_align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips64/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips64/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips64/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips64/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips64/no_align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips64/no_align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips64/no_align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips64/no_align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/no_align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/no_align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/no_align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/no_align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/x86_64/l4re.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/x86_64/l4re.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/x86_64/l4re.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/x86_64/l4re.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/x86_64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/x86_64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/x86_64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/x86_64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/x86_64/other.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/x86_64/other.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/x86_64/other.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/x86_64/other.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/linux_like/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/linux_like/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/newlib/aarch64/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/aarch64/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/newlib/aarch64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/aarch64/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/newlib/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/newlib/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/newlib/arm/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/arm/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/newlib/arm/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/arm/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/newlib/espidf/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/espidf/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/newlib/espidf/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/espidf/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/newlib/generic.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/generic.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/newlib/generic.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/generic.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/newlib/horizon/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/horizon/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/newlib/horizon/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/horizon/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/newlib/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/newlib/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/newlib/no_align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/no_align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/newlib/no_align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/no_align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/newlib/powerpc/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/powerpc/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/newlib/powerpc/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/powerpc/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/newlib/vita/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/vita/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/newlib/vita/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/vita/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/no_align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/no_align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/no_align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/no_align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/nto/aarch64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/nto/aarch64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/nto/aarch64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/nto/aarch64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/nto/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/nto/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/nto/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/nto/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/nto/neutrino.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/nto/neutrino.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/nto/neutrino.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/nto/neutrino.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/nto/x86_64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/nto/x86_64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/nto/x86_64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/nto/x86_64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/redox/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/redox/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/redox/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/redox/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/solarish/compat.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/compat.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/solarish/compat.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/compat.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/solarish/illumos.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/illumos.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/solarish/illumos.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/illumos.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/solarish/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/solarish/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/solarish/solaris.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/solaris.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/solarish/solaris.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/solaris.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/solarish/x86.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/x86.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/solarish/x86.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/x86.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/solarish/x86_64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/x86_64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/solarish/x86_64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/x86_64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/unix/solarish/x86_common.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/x86_common.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/unix/solarish/x86_common.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/x86_common.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/vxworks/aarch64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/aarch64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/vxworks/aarch64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/aarch64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/vxworks/arm.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/arm.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/vxworks/arm.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/arm.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/vxworks/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/vxworks/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/vxworks/powerpc.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/powerpc.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/vxworks/powerpc.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/powerpc.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/vxworks/powerpc64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/powerpc64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/vxworks/powerpc64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/powerpc64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/vxworks/x86.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/x86.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/vxworks/x86.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/x86.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/vxworks/x86_64.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/x86_64.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/vxworks/x86_64.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/x86_64.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/wasi.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/wasi.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/wasi.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/wasi.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/windows/gnu/align.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/windows/gnu/align.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/windows/gnu/align.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/windows/gnu/align.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/windows/gnu/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/windows/gnu/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/windows/gnu/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/windows/gnu/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/windows/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/windows/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/windows/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/windows/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/windows/msvc/mod.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/windows/msvc/mod.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/windows/msvc/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/windows/msvc/mod.rs
diff --git a/third_party/rust/libc/v0_2/crate/src/xous.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/xous.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/src/xous.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/xous.rs
diff --git a/third_party/rust/libc/v0_2/crate/tests/const_fn.rs b/third_party/rust/chromium_crates_io/vendor/libc-0.2.144/tests/const_fn.rs
similarity index 100%
rename from third_party/rust/libc/v0_2/crate/tests/const_fn.rs
rename to third_party/rust/chromium_crates_io/vendor/libc-0.2.144/tests/const_fn.rs
diff --git a/third_party/rust/link_cplusplus/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/link_cplusplus/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/.cargo_vcs_info.json
diff --git a/third_party/rust/cxx/v1/crate/.github/FUNDING.yml b/third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/.github/FUNDING.yml
similarity index 100%
copy from third_party/rust/cxx/v1/crate/.github/FUNDING.yml
copy to third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/.github/FUNDING.yml
diff --git a/third_party/rust/link_cplusplus/v1/crate/.github/workflows/ci.yml b/third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/.github/workflows/ci.yml
similarity index 100%
rename from third_party/rust/link_cplusplus/v1/crate/.github/workflows/ci.yml
rename to third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/.github/workflows/ci.yml
diff --git a/third_party/rust/link_cplusplus/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/.gitignore
similarity index 100%
rename from third_party/rust/link_cplusplus/v1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/.gitignore
diff --git a/third_party/rust/link_cplusplus/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/Cargo.toml
similarity index 100%
rename from third_party/rust/link_cplusplus/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/Cargo.toml
diff --git a/third_party/rust/link_cplusplus/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/link_cplusplus/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/Cargo.toml.orig
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cxx/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/LICENSE-APACHE
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/LICENSE-MIT
similarity index 100%
copy from third_party/rust/cxx/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/LICENSE-MIT
diff --git a/third_party/rust/link_cplusplus/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/README.md
similarity index 100%
rename from third_party/rust/link_cplusplus/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/README.md
diff --git a/third_party/rust/link_cplusplus/v1/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/build.rs
similarity index 100%
rename from third_party/rust/link_cplusplus/v1/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/build.rs
diff --git a/third_party/rust/link_cplusplus/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/src/lib.rs
similarity index 100%
rename from third_party/rust/link_cplusplus/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/src/lib.rs
diff --git a/third_party/rust/log/v0_4/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/log/v0_4/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/.cargo_vcs_info.json
diff --git a/third_party/rust/log/v0_4/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/.gitignore
similarity index 100%
rename from third_party/rust/log/v0_4/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/.gitignore
diff --git a/third_party/rust/log/v0_4/crate/CHANGELOG.md b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/CHANGELOG.md
similarity index 100%
rename from third_party/rust/log/v0_4/crate/CHANGELOG.md
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/CHANGELOG.md
diff --git a/third_party/rust/log/v0_4/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/Cargo.toml
similarity index 100%
rename from third_party/rust/log/v0_4/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/Cargo.toml
diff --git a/third_party/rust/log/v0_4/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/log/v0_4/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/Cargo.toml.orig
diff --git a/third_party/rust/log/v0_4/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/LICENSE-APACHE
similarity index 100%
rename from third_party/rust/log/v0_4/crate/LICENSE-APACHE
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/LICENSE-APACHE
diff --git a/third_party/rust/log/v0_4/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/LICENSE-MIT
similarity index 100%
rename from third_party/rust/log/v0_4/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/LICENSE-MIT
diff --git a/third_party/rust/log/v0_4/crate/README.md b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/README.md
similarity index 100%
rename from third_party/rust/log/v0_4/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/README.md
diff --git a/third_party/rust/log/v0_4/crate/benches/value.rs b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/benches/value.rs
similarity index 100%
rename from third_party/rust/log/v0_4/crate/benches/value.rs
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/benches/value.rs
diff --git a/third_party/rust/log/v0_4/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/build.rs
similarity index 100%
rename from third_party/rust/log/v0_4/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/build.rs
diff --git a/third_party/rust/log/v0_4/crate/src/kv/error.rs b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/kv/error.rs
similarity index 100%
rename from third_party/rust/log/v0_4/crate/src/kv/error.rs
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/kv/error.rs
diff --git a/third_party/rust/log/v0_4/crate/src/kv/key.rs b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/kv/key.rs
similarity index 100%
rename from third_party/rust/log/v0_4/crate/src/kv/key.rs
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/kv/key.rs
diff --git a/third_party/rust/log/v0_4/crate/src/kv/mod.rs b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/kv/mod.rs
similarity index 100%
rename from third_party/rust/log/v0_4/crate/src/kv/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/kv/mod.rs
diff --git a/third_party/rust/log/v0_4/crate/src/kv/source.rs b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/kv/source.rs
similarity index 100%
rename from third_party/rust/log/v0_4/crate/src/kv/source.rs
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/kv/source.rs
diff --git a/third_party/rust/log/v0_4/crate/src/kv/value.rs b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/kv/value.rs
similarity index 100%
rename from third_party/rust/log/v0_4/crate/src/kv/value.rs
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/kv/value.rs
diff --git a/third_party/rust/log/v0_4/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/lib.rs
similarity index 100%
rename from third_party/rust/log/v0_4/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/lib.rs
diff --git a/third_party/rust/log/v0_4/crate/src/macros.rs b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/macros.rs
similarity index 100%
rename from third_party/rust/log/v0_4/crate/src/macros.rs
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/macros.rs
diff --git a/third_party/rust/log/v0_4/crate/src/serde.rs b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/serde.rs
similarity index 100%
rename from third_party/rust/log/v0_4/crate/src/serde.rs
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/serde.rs
diff --git a/third_party/rust/log/v0_4/crate/triagebot.toml b/third_party/rust/chromium_crates_io/vendor/log-0.4.17/triagebot.toml
similarity index 100%
rename from third_party/rust/log/v0_4/crate/triagebot.toml
rename to third_party/rust/chromium_crates_io/vendor/log-0.4.17/triagebot.toml
diff --git a/third_party/rust/memchr/v2/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/memchr/v2/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/.cargo_vcs_info.json
diff --git a/third_party/rust/memchr/v2/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/.gitignore
similarity index 100%
rename from third_party/rust/memchr/v2/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/.gitignore
diff --git a/third_party/rust/memchr/v2/crate/.ignore b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/.ignore
similarity index 100%
rename from third_party/rust/memchr/v2/crate/.ignore
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/.ignore
diff --git a/third_party/rust/aho_corasick/v0_7/crate/COPYING b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/COPYING
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/COPYING
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/COPYING
diff --git a/third_party/rust/memchr/v2/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/Cargo.toml
similarity index 100%
rename from third_party/rust/memchr/v2/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/Cargo.toml
diff --git a/third_party/rust/memchr/v2/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/memchr/v2/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/Cargo.toml.orig
diff --git a/third_party/rust/aho_corasick/v0_7/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/LICENSE-MIT
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/LICENSE-MIT
diff --git a/third_party/rust/memchr/v2/crate/README.md b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/README.md
similarity index 100%
rename from third_party/rust/memchr/v2/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/README.md
diff --git a/third_party/rust/aho_corasick/v0_7/crate/UNLICENSE b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/UNLICENSE
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/UNLICENSE
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/UNLICENSE
diff --git a/third_party/rust/memchr/v2/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/build.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/build.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/rustfmt.toml b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/rustfmt.toml
similarity index 100%
rename from third_party/rust/aho_corasick/v0_7/crate/rustfmt.toml
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/rustfmt.toml
diff --git a/third_party/rust/memchr/v2/crate/scripts/make-byte-frequency-table b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/scripts/make-byte-frequency-table
similarity index 100%
rename from third_party/rust/memchr/v2/crate/scripts/make-byte-frequency-table
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/scripts/make-byte-frequency-table
diff --git a/third_party/rust/memchr/v2/crate/src/cow.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/cow.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/cow.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/cow.rs
diff --git a/third_party/rust/memchr/v2/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/lib.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/lib.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memchr/c.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/c.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memchr/c.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/c.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memchr/fallback.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/fallback.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memchr/fallback.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/fallback.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memchr/iter.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/iter.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memchr/iter.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/iter.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memchr/mod.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/mod.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memchr/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/mod.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memchr/naive.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/naive.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memchr/naive.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/naive.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memchr/x86/avx.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/x86/avx.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memchr/x86/avx.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/x86/avx.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memchr/x86/mod.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/x86/mod.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memchr/x86/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/x86/mod.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memchr/x86/sse2.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/x86/sse2.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memchr/x86/sse2.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/x86/sse2.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memchr/x86/sse42.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/x86/sse42.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memchr/x86/sse42.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/x86/sse42.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/byte_frequencies.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/byte_frequencies.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/byte_frequencies.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/byte_frequencies.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/genericsimd.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/genericsimd.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/genericsimd.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/genericsimd.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/mod.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/mod.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/mod.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/prefilter/fallback.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/fallback.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/prefilter/fallback.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/fallback.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/prefilter/genericsimd.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/genericsimd.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/prefilter/genericsimd.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/genericsimd.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/prefilter/mod.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/mod.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/prefilter/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/mod.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/prefilter/x86/avx.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/x86/avx.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/prefilter/x86/avx.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/x86/avx.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/prefilter/x86/mod.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/x86/mod.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/prefilter/x86/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/x86/mod.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/prefilter/x86/sse.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/x86/sse.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/prefilter/x86/sse.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/x86/sse.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/rabinkarp.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/rabinkarp.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/rabinkarp.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/rabinkarp.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/rarebytes.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/rarebytes.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/rarebytes.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/rarebytes.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/twoway.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/twoway.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/twoway.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/twoway.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/util.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/util.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/util.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/util.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/vector.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/vector.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/vector.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/vector.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/x86/avx.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/x86/avx.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/x86/avx.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/x86/avx.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/x86/mod.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/x86/mod.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/x86/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/x86/mod.rs
diff --git a/third_party/rust/memchr/v2/crate/src/memmem/x86/sse.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/x86/sse.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/memmem/x86/sse.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/x86/sse.rs
diff --git a/third_party/rust/memchr/v2/crate/src/tests/memchr/iter.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/memchr/iter.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/tests/memchr/iter.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/memchr/iter.rs
diff --git a/third_party/rust/memchr/v2/crate/src/tests/memchr/memchr.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/memchr/memchr.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/tests/memchr/memchr.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/memchr/memchr.rs
diff --git a/third_party/rust/memchr/v2/crate/src/tests/memchr/mod.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/memchr/mod.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/tests/memchr/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/memchr/mod.rs
diff --git a/third_party/rust/memchr/v2/crate/src/tests/memchr/simple.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/memchr/simple.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/tests/memchr/simple.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/memchr/simple.rs
diff --git a/third_party/rust/memchr/v2/crate/src/tests/memchr/testdata.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/memchr/testdata.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/tests/memchr/testdata.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/memchr/testdata.rs
diff --git a/third_party/rust/memchr/v2/crate/src/tests/mod.rs b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/mod.rs
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/tests/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/mod.rs
diff --git a/third_party/rust/memchr/v2/crate/src/tests/x86_64-soft_float.json b/third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/x86_64-soft_float.json
similarity index 100%
rename from third_party/rust/memchr/v2/crate/src/tests/x86_64-soft_float.json
rename to third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/x86_64-soft_float.json
diff --git a/third_party/rust/memoffset/v0_6/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/memoffset/v0_6/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/.cargo_vcs_info.json
diff --git a/third_party/rust/memoffset/v0_6/crate/.github/workflows/ci.yml b/third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/.github/workflows/ci.yml
similarity index 100%
rename from third_party/rust/memoffset/v0_6/crate/.github/workflows/ci.yml
rename to third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/.github/workflows/ci.yml
diff --git a/third_party/rust/memoffset/v0_6/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/.gitignore
similarity index 100%
rename from third_party/rust/memoffset/v0_6/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/.gitignore
diff --git a/third_party/rust/memoffset/v0_6/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/Cargo.toml
similarity index 100%
rename from third_party/rust/memoffset/v0_6/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/Cargo.toml
diff --git a/third_party/rust/memoffset/v0_6/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/memoffset/v0_6/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/Cargo.toml.orig
diff --git a/third_party/rust/memoffset/v0_6/crate/LICENSE b/third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/LICENSE
similarity index 100%
rename from third_party/rust/memoffset/v0_6/crate/LICENSE
rename to third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/LICENSE
diff --git a/third_party/rust/memoffset/v0_6/crate/README.md b/third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/README.md
similarity index 100%
rename from third_party/rust/memoffset/v0_6/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/README.md
diff --git a/third_party/rust/memoffset/v0_6/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/build.rs
similarity index 100%
rename from third_party/rust/memoffset/v0_6/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/build.rs
diff --git a/third_party/rust/memoffset/v0_6/crate/ci/miri.sh b/third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/ci/miri.sh
similarity index 100%
rename from third_party/rust/memoffset/v0_6/crate/ci/miri.sh
rename to third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/ci/miri.sh
diff --git a/third_party/rust/memoffset/v0_6/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/src/lib.rs
similarity index 100%
rename from third_party/rust/memoffset/v0_6/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/src/lib.rs
diff --git a/third_party/rust/memoffset/v0_6/crate/src/offset_of.rs b/third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/src/offset_of.rs
similarity index 100%
rename from third_party/rust/memoffset/v0_6/crate/src/offset_of.rs
rename to third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/src/offset_of.rs
diff --git a/third_party/rust/memoffset/v0_6/crate/src/raw_field.rs b/third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/src/raw_field.rs
similarity index 100%
rename from third_party/rust/memoffset/v0_6/crate/src/raw_field.rs
rename to third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/src/raw_field.rs
diff --git a/third_party/rust/memoffset/v0_6/crate/src/span_of.rs b/third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/src/span_of.rs
similarity index 100%
rename from third_party/rust/memoffset/v0_6/crate/src/span_of.rs
rename to third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/src/span_of.rs
diff --git a/third_party/rust/ppv_lite86/v0_2/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/ppv_lite86/v0_2/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/.cargo_vcs_info.json
diff --git a/third_party/rust/ppv_lite86/v0_2/crate/CHANGELOG.md b/third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/CHANGELOG.md
similarity index 100%
rename from third_party/rust/ppv_lite86/v0_2/crate/CHANGELOG.md
rename to third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/CHANGELOG.md
diff --git a/third_party/rust/ppv_lite86/v0_2/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/Cargo.toml
similarity index 100%
rename from third_party/rust/ppv_lite86/v0_2/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/Cargo.toml
diff --git a/third_party/rust/ppv_lite86/v0_2/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/ppv_lite86/v0_2/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/Cargo.toml.orig
diff --git a/third_party/rust/ppv_lite86/v0_2/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/LICENSE-APACHE
similarity index 100%
rename from third_party/rust/ppv_lite86/v0_2/crate/LICENSE-APACHE
rename to third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/LICENSE-APACHE
diff --git a/third_party/rust/ppv_lite86/v0_2/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/LICENSE-MIT
similarity index 100%
rename from third_party/rust/ppv_lite86/v0_2/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/LICENSE-MIT
diff --git a/third_party/rust/ppv_lite86/v0_2/crate/src/generic.rs b/third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/generic.rs
similarity index 100%
rename from third_party/rust/ppv_lite86/v0_2/crate/src/generic.rs
rename to third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/generic.rs
diff --git a/third_party/rust/ppv_lite86/v0_2/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/lib.rs
similarity index 100%
rename from third_party/rust/ppv_lite86/v0_2/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/lib.rs
diff --git a/third_party/rust/ppv_lite86/v0_2/crate/src/soft.rs b/third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/soft.rs
similarity index 100%
rename from third_party/rust/ppv_lite86/v0_2/crate/src/soft.rs
rename to third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/soft.rs
diff --git a/third_party/rust/ppv_lite86/v0_2/crate/src/types.rs b/third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/types.rs
similarity index 100%
rename from third_party/rust/ppv_lite86/v0_2/crate/src/types.rs
rename to third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/types.rs
diff --git a/third_party/rust/ppv_lite86/v0_2/crate/src/x86_64/mod.rs b/third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/x86_64/mod.rs
similarity index 100%
rename from third_party/rust/ppv_lite86/v0_2/crate/src/x86_64/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/x86_64/mod.rs
diff --git a/third_party/rust/ppv_lite86/v0_2/crate/src/x86_64/sse2.rs b/third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/x86_64/sse2.rs
similarity index 100%
rename from third_party/rust/ppv_lite86/v0_2/crate/src/x86_64/sse2.rs
rename to third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/x86_64/sse2.rs
diff --git a/third_party/rust/proc_macro2/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/.cargo_vcs_info.json
diff --git a/third_party/rust/cxx/v1/crate/.github/FUNDING.yml b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/.github/FUNDING.yml
similarity index 100%
copy from third_party/rust/cxx/v1/crate/.github/FUNDING.yml
copy to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/.github/FUNDING.yml
diff --git a/third_party/rust/proc_macro2/v1/crate/.github/workflows/ci.yml b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/.github/workflows/ci.yml
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/.github/workflows/ci.yml
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/.github/workflows/ci.yml
diff --git a/third_party/rust/anyhow/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/.gitignore
similarity index 100%
copy from third_party/rust/anyhow/v1/crate/.gitignore
copy to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/.gitignore
diff --git a/third_party/rust/proc_macro2/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/Cargo.toml
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/Cargo.toml
diff --git a/third_party/rust/proc_macro2/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/Cargo.toml.orig
diff --git a/third_party/rust/anyhow/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/anyhow/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/LICENSE-APACHE
diff --git a/third_party/rust/anyhow/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/LICENSE-MIT
similarity index 100%
copy from third_party/rust/anyhow/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/LICENSE-MIT
diff --git a/third_party/rust/proc_macro2/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/README.md
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/README.md
diff --git a/third_party/rust/proc_macro2/v1/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/build.rs
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/build.rs
diff --git a/third_party/rust/proc_macro2/v1/crate/src/detection.rs b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/detection.rs
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/src/detection.rs
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/detection.rs
diff --git a/third_party/rust/proc_macro2/v1/crate/src/extra.rs b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/extra.rs
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/src/extra.rs
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/extra.rs
diff --git a/third_party/rust/proc_macro2/v1/crate/src/fallback.rs b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/fallback.rs
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/src/fallback.rs
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/fallback.rs
diff --git a/third_party/rust/proc_macro2/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/lib.rs
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/lib.rs
diff --git a/third_party/rust/proc_macro2/v1/crate/src/location.rs b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/location.rs
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/src/location.rs
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/location.rs
diff --git a/third_party/rust/proc_macro2/v1/crate/src/marker.rs b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/marker.rs
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/src/marker.rs
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/marker.rs
diff --git a/third_party/rust/proc_macro2/v1/crate/src/parse.rs b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/parse.rs
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/src/parse.rs
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/parse.rs
diff --git a/third_party/rust/proc_macro2/v1/crate/src/rcvec.rs b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/rcvec.rs
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/src/rcvec.rs
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/rcvec.rs
diff --git a/third_party/rust/proc_macro2/v1/crate/src/wrapper.rs b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/wrapper.rs
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/src/wrapper.rs
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/wrapper.rs
diff --git a/third_party/rust/proc_macro2/v1/crate/tests/comments.rs b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/comments.rs
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/tests/comments.rs
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/comments.rs
diff --git a/third_party/rust/proc_macro2/v1/crate/tests/features.rs b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/features.rs
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/tests/features.rs
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/features.rs
diff --git a/third_party/rust/proc_macro2/v1/crate/tests/marker.rs b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/marker.rs
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/tests/marker.rs
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/marker.rs
diff --git a/third_party/rust/proc_macro2/v1/crate/tests/test.rs b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/test.rs
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/tests/test.rs
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/test.rs
diff --git a/third_party/rust/proc_macro2/v1/crate/tests/test_fmt.rs b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/test_fmt.rs
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/tests/test_fmt.rs
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/test_fmt.rs
diff --git a/third_party/rust/proc_macro2/v1/crate/tests/test_size.rs b/third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/test_size.rs
similarity index 100%
rename from third_party/rust/proc_macro2/v1/crate/tests/test_size.rs
rename to third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/test_size.rs
diff --git a/third_party/rust/qr_code/v2/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/.cargo_vcs_info.json
diff --git a/third_party/rust/qr_code/v2/crate/.travis.yml b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/.travis.yml
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/.travis.yml
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/.travis.yml
diff --git a/third_party/rust/qr_code/v2/crate/Cargo.lock b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/Cargo.lock
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/Cargo.lock
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/Cargo.lock
diff --git a/third_party/rust/qr_code/v2/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/Cargo.toml
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/Cargo.toml
diff --git a/third_party/rust/qr_code/v2/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/Cargo.toml.orig
diff --git a/third_party/rust/qr_code/v2/crate/LICENSE-APACHE.txt b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/LICENSE-APACHE.txt
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/LICENSE-APACHE.txt
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/LICENSE-APACHE.txt
diff --git a/third_party/rust/qr_code/v2/crate/LICENSE-MIT.txt b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/LICENSE-MIT.txt
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/LICENSE-MIT.txt
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/LICENSE-MIT.txt
diff --git a/third_party/rust/qr_code/v2/crate/README.md b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/README.md
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/README.md
diff --git a/third_party/rust/qr_code/v2/crate/examples/decode_bmp.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/examples/decode_bmp.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/examples/decode_bmp.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/examples/decode_bmp.rs
diff --git a/third_party/rust/qr_code/v2/crate/examples/encode_bmp.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/examples/encode_bmp.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/examples/encode_bmp.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/examples/encode_bmp.rs
diff --git a/third_party/rust/qr_code/v2/crate/examples/encode_string.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/examples/encode_string.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/examples/encode_string.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/examples/encode_string.rs
diff --git a/third_party/rust/qr_code/v2/crate/src/bits.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/bits.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/src/bits.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/bits.rs
diff --git a/third_party/rust/qr_code/v2/crate/src/canvas.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/canvas.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/src/canvas.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/canvas.rs
diff --git a/third_party/rust/qr_code/v2/crate/src/cast.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/cast.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/src/cast.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/cast.rs
diff --git a/third_party/rust/qr_code/v2/crate/src/decode/bmp_grid.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/decode/bmp_grid.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/src/decode/bmp_grid.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/decode/bmp_grid.rs
diff --git a/third_party/rust/qr_code/v2/crate/src/decode/decode.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/decode/decode.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/src/decode/decode.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/decode/decode.rs
diff --git a/third_party/rust/qr_code/v2/crate/src/decode/mod.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/decode/mod.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/src/decode/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/decode/mod.rs
diff --git a/third_party/rust/qr_code/v2/crate/src/decode/version_db.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/decode/version_db.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/src/decode/version_db.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/decode/version_db.rs
diff --git a/third_party/rust/qr_code/v2/crate/src/ec.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/ec.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/src/ec.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/ec.rs
diff --git a/third_party/rust/qr_code/v2/crate/src/fuzz.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/fuzz.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/src/fuzz.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/fuzz.rs
diff --git a/third_party/rust/qr_code/v2/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/lib.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/lib.rs
diff --git a/third_party/rust/qr_code/v2/crate/src/optimize.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/optimize.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/src/optimize.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/optimize.rs
diff --git a/third_party/rust/qr_code/v2/crate/src/render.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/render.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/src/render.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/render.rs
diff --git a/third_party/rust/qr_code/v2/crate/src/structured.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/structured.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/src/structured.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/structured.rs
diff --git a/third_party/rust/qr_code/v2/crate/src/types.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/types.rs
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/src/types.rs
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/types.rs
diff --git a/third_party/rust/qr_code/v2/crate/test_data/large_base64.in b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/test_data/large_base64.in
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/test_data/large_base64.in
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/test_data/large_base64.in
diff --git a/third_party/rust/qr_code/v2/crate/test_data/large_base64.md b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/test_data/large_base64.md
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/test_data/large_base64.md
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/test_data/large_base64.md
diff --git a/third_party/rust/qr_code/v2/crate/test_data/qr_not_normalized.bmp b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/test_data/qr_not_normalized.bmp
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/test_data/qr_not_normalized.bmp
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/test_data/qr_not_normalized.bmp
Binary files differ
diff --git a/third_party/rust/qr_code/v2/crate/test_data/test.bmp b/third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/test_data/test.bmp
similarity index 100%
rename from third_party/rust/qr_code/v2/crate/test_data/test.bmp
rename to third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/test_data/test.bmp
Binary files differ
diff --git a/third_party/rust/quote/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/quote/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/.cargo_vcs_info.json
diff --git a/third_party/rust/cxx/v1/crate/.github/FUNDING.yml b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/.github/FUNDING.yml
similarity index 100%
copy from third_party/rust/cxx/v1/crate/.github/FUNDING.yml
copy to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/.github/FUNDING.yml
diff --git a/third_party/rust/quote/v1/crate/.github/workflows/ci.yml b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/.github/workflows/ci.yml
similarity index 100%
rename from third_party/rust/quote/v1/crate/.github/workflows/ci.yml
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/.github/workflows/ci.yml
diff --git a/third_party/rust/quote/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/.gitignore
similarity index 100%
rename from third_party/rust/quote/v1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/.gitignore
diff --git a/third_party/rust/quote/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/Cargo.toml
similarity index 100%
rename from third_party/rust/quote/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/Cargo.toml
diff --git a/third_party/rust/quote/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/quote/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/Cargo.toml.orig
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cxx/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/LICENSE-APACHE
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/LICENSE-MIT
similarity index 100%
copy from third_party/rust/cxx/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/LICENSE-MIT
diff --git a/third_party/rust/quote/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/README.md
similarity index 100%
rename from third_party/rust/quote/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/README.md
diff --git a/third_party/rust/cxx/v1/crate/rust-toolchain.toml b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/rust-toolchain.toml
similarity index 100%
copy from third_party/rust/cxx/v1/crate/rust-toolchain.toml
copy to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/rust-toolchain.toml
diff --git a/third_party/rust/quote/v1/crate/src/ext.rs b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/ext.rs
similarity index 100%
rename from third_party/rust/quote/v1/crate/src/ext.rs
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/ext.rs
diff --git a/third_party/rust/quote/v1/crate/src/format.rs b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/format.rs
similarity index 100%
rename from third_party/rust/quote/v1/crate/src/format.rs
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/format.rs
diff --git a/third_party/rust/quote/v1/crate/src/ident_fragment.rs b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/ident_fragment.rs
similarity index 100%
rename from third_party/rust/quote/v1/crate/src/ident_fragment.rs
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/ident_fragment.rs
diff --git a/third_party/rust/quote/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/lib.rs
similarity index 100%
rename from third_party/rust/quote/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/lib.rs
diff --git a/third_party/rust/quote/v1/crate/src/runtime.rs b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/runtime.rs
similarity index 100%
rename from third_party/rust/quote/v1/crate/src/runtime.rs
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/runtime.rs
diff --git a/third_party/rust/quote/v1/crate/src/spanned.rs b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/spanned.rs
similarity index 100%
rename from third_party/rust/quote/v1/crate/src/spanned.rs
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/spanned.rs
diff --git a/third_party/rust/quote/v1/crate/src/to_tokens.rs b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/to_tokens.rs
similarity index 100%
rename from third_party/rust/quote/v1/crate/src/to_tokens.rs
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/to_tokens.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/compiletest.rs b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/compiletest.rs
similarity index 100%
copy from third_party/rust/anyhow/v1/crate/tests/compiletest.rs
copy to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/compiletest.rs
diff --git a/third_party/rust/quote/v1/crate/tests/test.rs b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/test.rs
similarity index 100%
rename from third_party/rust/quote/v1/crate/tests/test.rs
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/test.rs
diff --git a/third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter-interpolated-dup.rs b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter-interpolated-dup.rs
similarity index 100%
rename from third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter-interpolated-dup.rs
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter-interpolated-dup.rs
diff --git a/third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter-interpolated-dup.stderr b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter-interpolated-dup.stderr
similarity index 100%
rename from third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter-interpolated-dup.stderr
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter-interpolated-dup.stderr
diff --git a/third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter-interpolated.rs b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter-interpolated.rs
similarity index 100%
rename from third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter-interpolated.rs
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter-interpolated.rs
diff --git a/third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter-interpolated.stderr b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter-interpolated.stderr
similarity index 100%
rename from third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter-interpolated.stderr
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter-interpolated.stderr
diff --git a/third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter-separated.rs b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter-separated.rs
similarity index 100%
rename from third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter-separated.rs
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter-separated.rs
diff --git a/third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter-separated.stderr b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter-separated.stderr
similarity index 100%
rename from third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter-separated.stderr
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter-separated.stderr
diff --git a/third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter.rs b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter.rs
similarity index 100%
rename from third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter.rs
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter.rs
diff --git a/third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter.stderr b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter.stderr
similarity index 100%
rename from third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter.stderr
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter.stderr
diff --git a/third_party/rust/quote/v1/crate/tests/ui/not-quotable.rs b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/not-quotable.rs
similarity index 100%
rename from third_party/rust/quote/v1/crate/tests/ui/not-quotable.rs
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/not-quotable.rs
diff --git a/third_party/rust/quote/v1/crate/tests/ui/not-quotable.stderr b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/not-quotable.stderr
similarity index 100%
rename from third_party/rust/quote/v1/crate/tests/ui/not-quotable.stderr
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/not-quotable.stderr
diff --git a/third_party/rust/quote/v1/crate/tests/ui/not-repeatable.rs b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/not-repeatable.rs
similarity index 100%
rename from third_party/rust/quote/v1/crate/tests/ui/not-repeatable.rs
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/not-repeatable.rs
diff --git a/third_party/rust/quote/v1/crate/tests/ui/not-repeatable.stderr b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/not-repeatable.stderr
similarity index 100%
rename from third_party/rust/quote/v1/crate/tests/ui/not-repeatable.stderr
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/not-repeatable.stderr
diff --git a/third_party/rust/quote/v1/crate/tests/ui/wrong-type-span.rs b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/wrong-type-span.rs
similarity index 100%
rename from third_party/rust/quote/v1/crate/tests/ui/wrong-type-span.rs
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/wrong-type-span.rs
diff --git a/third_party/rust/quote/v1/crate/tests/ui/wrong-type-span.stderr b/third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/wrong-type-span.stderr
similarity index 100%
rename from third_party/rust/quote/v1/crate/tests/ui/wrong-type-span.stderr
rename to third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/wrong-type-span.stderr
diff --git a/third_party/rust/rand/v0_8/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/.cargo_vcs_info.json
diff --git a/third_party/rust/rand/v0_8/crate/CHANGELOG.md b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/CHANGELOG.md
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/CHANGELOG.md
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/CHANGELOG.md
diff --git a/third_party/rust/rand/v0_8/crate/COPYRIGHT b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/COPYRIGHT
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/COPYRIGHT
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/COPYRIGHT
diff --git a/third_party/rust/rand/v0_8/crate/Cargo.lock b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/Cargo.lock
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/Cargo.lock
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/Cargo.lock
diff --git a/third_party/rust/rand/v0_8/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/Cargo.toml
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/Cargo.toml
diff --git a/third_party/rust/rand/v0_8/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/Cargo.toml.orig
diff --git a/third_party/rust/rand/v0_8/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/LICENSE-APACHE
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/LICENSE-APACHE
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/LICENSE-APACHE
diff --git a/third_party/rust/getrandom/v0_2/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/LICENSE-MIT
similarity index 100%
rename from third_party/rust/getrandom/v0_2/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/LICENSE-MIT
diff --git a/third_party/rust/rand/v0_8/crate/README.md b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/README.md
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/README.md
diff --git a/third_party/rust/rand/v0_8/crate/src/distributions/bernoulli.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/bernoulli.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/distributions/bernoulli.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/bernoulli.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/distributions/distribution.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/distribution.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/distributions/distribution.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/distribution.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/distributions/float.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/float.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/distributions/float.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/float.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/distributions/integer.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/integer.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/distributions/integer.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/integer.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/distributions/mod.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/mod.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/distributions/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/mod.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/distributions/other.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/other.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/distributions/other.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/other.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/distributions/slice.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/slice.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/distributions/slice.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/slice.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/distributions/uniform.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/uniform.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/distributions/uniform.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/uniform.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/distributions/utils.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/utils.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/distributions/utils.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/utils.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/distributions/weighted.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/weighted.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/distributions/weighted.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/weighted.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/distributions/weighted_index.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/weighted_index.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/distributions/weighted_index.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/weighted_index.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/lib.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/lib.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/prelude.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/prelude.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/prelude.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/prelude.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/rng.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rng.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/rng.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rng.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/rngs/adapter/mod.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/adapter/mod.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/rngs/adapter/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/adapter/mod.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/rngs/adapter/read.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/adapter/read.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/rngs/adapter/read.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/adapter/read.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/rngs/adapter/reseeding.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/adapter/reseeding.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/rngs/adapter/reseeding.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/adapter/reseeding.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/rngs/mock.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/mock.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/rngs/mock.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/mock.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/rngs/mod.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/mod.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/rngs/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/mod.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/rngs/small.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/small.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/rngs/small.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/small.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/rngs/std.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/std.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/rngs/std.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/std.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/rngs/thread.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/thread.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/rngs/thread.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/thread.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/rngs/xoshiro128plusplus.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/xoshiro128plusplus.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/rngs/xoshiro128plusplus.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/xoshiro128plusplus.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/rngs/xoshiro256plusplus.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/xoshiro256plusplus.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/rngs/xoshiro256plusplus.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/xoshiro256plusplus.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/seq/index.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/seq/index.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/seq/index.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/seq/index.rs
diff --git a/third_party/rust/rand/v0_8/crate/src/seq/mod.rs b/third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/seq/mod.rs
similarity index 100%
rename from third_party/rust/rand/v0_8/crate/src/seq/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/seq/mod.rs
diff --git a/third_party/rust/rand_chacha/v0_3/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/rand_chacha/v0_3/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/.cargo_vcs_info.json
diff --git a/third_party/rust/rand_chacha/v0_3/crate/CHANGELOG.md b/third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/CHANGELOG.md
similarity index 100%
rename from third_party/rust/rand_chacha/v0_3/crate/CHANGELOG.md
rename to third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/CHANGELOG.md
diff --git a/third_party/rust/rand/v0_8/crate/COPYRIGHT b/third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/COPYRIGHT
similarity index 100%
copy from third_party/rust/rand/v0_8/crate/COPYRIGHT
copy to third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/COPYRIGHT
diff --git a/third_party/rust/rand_chacha/v0_3/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/Cargo.toml
similarity index 100%
rename from third_party/rust/rand_chacha/v0_3/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/Cargo.toml
diff --git a/third_party/rust/rand_chacha/v0_3/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/rand_chacha/v0_3/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/Cargo.toml.orig
diff --git a/third_party/rust/getrandom/v0_2/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/getrandom/v0_2/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/LICENSE-APACHE
diff --git a/third_party/rust/getrandom/v0_2/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/LICENSE-MIT
similarity index 100%
copy from third_party/rust/getrandom/v0_2/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/LICENSE-MIT
diff --git a/third_party/rust/rand_chacha/v0_3/crate/README.md b/third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/README.md
similarity index 100%
rename from third_party/rust/rand_chacha/v0_3/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/README.md
diff --git a/third_party/rust/rand_chacha/v0_3/crate/src/chacha.rs b/third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/src/chacha.rs
similarity index 100%
rename from third_party/rust/rand_chacha/v0_3/crate/src/chacha.rs
rename to third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/src/chacha.rs
diff --git a/third_party/rust/rand_chacha/v0_3/crate/src/guts.rs b/third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/src/guts.rs
similarity index 100%
rename from third_party/rust/rand_chacha/v0_3/crate/src/guts.rs
rename to third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/src/guts.rs
diff --git a/third_party/rust/rand_chacha/v0_3/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/src/lib.rs
similarity index 100%
rename from third_party/rust/rand_chacha/v0_3/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/src/lib.rs
diff --git a/third_party/rust/rand_core/v0_6/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/rand_core/v0_6/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/.cargo_vcs_info.json
diff --git a/third_party/rust/rand_core/v0_6/crate/CHANGELOG.md b/third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/CHANGELOG.md
similarity index 100%
rename from third_party/rust/rand_core/v0_6/crate/CHANGELOG.md
rename to third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/CHANGELOG.md
diff --git a/third_party/rust/rand/v0_8/crate/COPYRIGHT b/third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/COPYRIGHT
similarity index 100%
copy from third_party/rust/rand/v0_8/crate/COPYRIGHT
copy to third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/COPYRIGHT
diff --git a/third_party/rust/rand_core/v0_6/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/Cargo.toml
similarity index 100%
rename from third_party/rust/rand_core/v0_6/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/Cargo.toml
diff --git a/third_party/rust/rand_core/v0_6/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/rand_core/v0_6/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/Cargo.toml.orig
diff --git a/third_party/rust/rand_core/v0_6/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/LICENSE-APACHE
similarity index 100%
rename from third_party/rust/rand_core/v0_6/crate/LICENSE-APACHE
rename to third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/LICENSE-APACHE
diff --git a/third_party/rust/getrandom/v0_2/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/LICENSE-MIT
similarity index 100%
copy from third_party/rust/getrandom/v0_2/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/LICENSE-MIT
diff --git a/third_party/rust/rand_core/v0_6/crate/README.md b/third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/README.md
similarity index 100%
rename from third_party/rust/rand_core/v0_6/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/README.md
diff --git a/third_party/rust/rand_core/v0_6/crate/src/block.rs b/third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/block.rs
similarity index 100%
rename from third_party/rust/rand_core/v0_6/crate/src/block.rs
rename to third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/block.rs
diff --git a/third_party/rust/rand_core/v0_6/crate/src/error.rs b/third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/error.rs
similarity index 100%
rename from third_party/rust/rand_core/v0_6/crate/src/error.rs
rename to third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/error.rs
diff --git a/third_party/rust/rand_core/v0_6/crate/src/impls.rs b/third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/impls.rs
similarity index 100%
rename from third_party/rust/rand_core/v0_6/crate/src/impls.rs
rename to third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/impls.rs
diff --git a/third_party/rust/rand_core/v0_6/crate/src/le.rs b/third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/le.rs
similarity index 100%
rename from third_party/rust/rand_core/v0_6/crate/src/le.rs
rename to third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/le.rs
diff --git a/third_party/rust/rand_core/v0_6/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/lib.rs
similarity index 100%
rename from third_party/rust/rand_core/v0_6/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/lib.rs
diff --git a/third_party/rust/rand_core/v0_6/crate/src/os.rs b/third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/os.rs
similarity index 100%
rename from third_party/rust/rand_core/v0_6/crate/src/os.rs
rename to third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/os.rs
diff --git a/third_party/rust/rand_pcg/v0_3/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/rand_pcg/v0_3/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/.cargo_vcs_info.json
diff --git a/third_party/rust/rand_pcg/v0_3/crate/CHANGELOG.md b/third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/CHANGELOG.md
similarity index 100%
rename from third_party/rust/rand_pcg/v0_3/crate/CHANGELOG.md
rename to third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/CHANGELOG.md
diff --git a/third_party/rust/rand/v0_8/crate/COPYRIGHT b/third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/COPYRIGHT
similarity index 100%
copy from third_party/rust/rand/v0_8/crate/COPYRIGHT
copy to third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/COPYRIGHT
diff --git a/third_party/rust/rand_pcg/v0_3/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/Cargo.toml
similarity index 100%
rename from third_party/rust/rand_pcg/v0_3/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/Cargo.toml
diff --git a/third_party/rust/rand_pcg/v0_3/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/rand_pcg/v0_3/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/Cargo.toml.orig
diff --git a/third_party/rust/getrandom/v0_2/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/getrandom/v0_2/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/LICENSE-APACHE
diff --git a/third_party/rust/rand_pcg/v0_3/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/LICENSE-MIT
similarity index 100%
rename from third_party/rust/rand_pcg/v0_3/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/LICENSE-MIT
diff --git a/third_party/rust/rand_pcg/v0_3/crate/README.md b/third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/README.md
similarity index 100%
rename from third_party/rust/rand_pcg/v0_3/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/README.md
diff --git a/third_party/rust/rand_pcg/v0_3/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/src/lib.rs
similarity index 100%
rename from third_party/rust/rand_pcg/v0_3/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/src/lib.rs
diff --git a/third_party/rust/rand_pcg/v0_3/crate/src/pcg128.rs b/third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/src/pcg128.rs
similarity index 100%
rename from third_party/rust/rand_pcg/v0_3/crate/src/pcg128.rs
rename to third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/src/pcg128.rs
diff --git a/third_party/rust/rand_pcg/v0_3/crate/src/pcg64.rs b/third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/src/pcg64.rs
similarity index 100%
rename from third_party/rust/rand_pcg/v0_3/crate/src/pcg64.rs
rename to third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/src/pcg64.rs
diff --git a/third_party/rust/rand_pcg/v0_3/crate/tests/lcg128xsl64.rs b/third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/tests/lcg128xsl64.rs
similarity index 100%
rename from third_party/rust/rand_pcg/v0_3/crate/tests/lcg128xsl64.rs
rename to third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/tests/lcg128xsl64.rs
diff --git a/third_party/rust/rand_pcg/v0_3/crate/tests/lcg64xsh32.rs b/third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/tests/lcg64xsh32.rs
similarity index 100%
rename from third_party/rust/rand_pcg/v0_3/crate/tests/lcg64xsh32.rs
rename to third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/tests/lcg64xsh32.rs
diff --git a/third_party/rust/rand_pcg/v0_3/crate/tests/mcg128xsl64.rs b/third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/tests/mcg128xsl64.rs
similarity index 100%
rename from third_party/rust/rand_pcg/v0_3/crate/tests/mcg128xsl64.rs
rename to third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/tests/mcg128xsl64.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/.cargo_vcs_info.json
diff --git a/third_party/rust/read_fonts/v0_11/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/Cargo.toml
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/Cargo.toml
diff --git a/third_party/rust/read_fonts/v0_11/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/Cargo.toml.orig
diff --git a/third_party/rust/read_fonts/v0_11/crate/README.md b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/README.md
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/README.md
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/font.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/font.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/font.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/font.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_avar.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_avar.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_avar.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_avar.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_base.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_base.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_base.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_base.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_cff.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_cff.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_cff.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_cff.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_cff2.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_cff2.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_cff2.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_cff2.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_cmap.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_cmap.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_cmap.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_cmap.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_colr.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_colr.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_colr.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_colr.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_cpal.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_cpal.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_cpal.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_cpal.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_fvar.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_fvar.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_fvar.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_fvar.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_gdef.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_gdef.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_gdef.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_gdef.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_glyf.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_glyf.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_glyf.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_glyf.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_gpos.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_gpos.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_gpos.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_gpos.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_gsub.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_gsub.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_gsub.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_gsub.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_gvar.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_gvar.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_gvar.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_gvar.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_head.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_head.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_head.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_head.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_hhea.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_hhea.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_hhea.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_hhea.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_hmtx.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_hmtx.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_hmtx.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_hmtx.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_hvar.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_hvar.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_hvar.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_hvar.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_layout.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_layout.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_layout.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_layout.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_maxp.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_maxp.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_maxp.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_maxp.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_mvar.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_mvar.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_mvar.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_mvar.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_name.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_name.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_name.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_name.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_os2.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_os2.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_os2.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_os2.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_post.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_post.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_post.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_post.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_postscript.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_postscript.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_postscript.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_postscript.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_stat.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_stat.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_stat.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_stat.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_test_enum.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_test_enum.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_test_enum.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_test_enum.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_test_flags.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_test_flags.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_test_flags.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_test_flags.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_test_formats.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_test_formats.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_test_formats.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_test_formats.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_test_offsets_arrays.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_test_offsets_arrays.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_test_offsets_arrays.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_test_offsets_arrays.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_test_records.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_test_records.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_test_records.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_test_records.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_variations.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_variations.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_variations.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_variations.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_vhea.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_vhea.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_vhea.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_vhea.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_vmtx.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_vmtx.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_vmtx.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_vmtx.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/generated/generated_vvar.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_vvar.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/generated/generated_vvar.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_vvar.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/array.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/array.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/array.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/array.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/codegen_test.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/codegen_test.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/codegen_test.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/codegen_test.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/font_data.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/font_data.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/font_data.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/font_data.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/lib.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/lib.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/offset.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/offset.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/offset.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/offset.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/offset_array.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/offset_array.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/offset_array.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/offset_array.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/read.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/read.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/read.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/read.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/scaler_test.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/scaler_test.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/scaler_test.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/scaler_test.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/table_provider.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/table_provider.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/table_provider.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/table_provider.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/table_ref.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/table_ref.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/table_ref.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/table_ref.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/avar.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/avar.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/avar.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/avar.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/base.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/base.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/base.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/base.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/cff.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/cff.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/cff.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/cff.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/cff2.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/cff2.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/cff2.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/cff2.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/cmap.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/cmap.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/cmap.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/cmap.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/colr.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/colr.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/colr.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/colr.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/cpal.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/cpal.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/cpal.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/cpal.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/fvar.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/fvar.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/fvar.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/fvar.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/gdef.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/gdef.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/gdef.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/gdef.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/glyf.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/glyf.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/glyf.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/glyf.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/gpos.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/gpos.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/gpos.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/gpos.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/gsub.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/gsub.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/gsub.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/gsub.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/gvar.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/gvar.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/gvar.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/gvar.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/head.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/head.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/head.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/head.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/hhea.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/hhea.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/hhea.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/hhea.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/hmtx.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/hmtx.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/hmtx.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/hmtx.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/hvar.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/hvar.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/hvar.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/hvar.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/instance_record.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/instance_record.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/instance_record.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/instance_record.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/layout.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/layout.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/layout.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/layout.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/loca.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/loca.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/loca.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/loca.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/lookupflag.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/lookupflag.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/lookupflag.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/lookupflag.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/maxp.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/maxp.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/maxp.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/maxp.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/mvar.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/mvar.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/mvar.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/mvar.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/name.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/name.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/name.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/name.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/os2.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/os2.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/os2.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/os2.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/post.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/post.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/post.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/post.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/postscript.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/postscript.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/blend.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/blend.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/blend.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/blend.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/charstring.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/charstring.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/charstring.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/charstring.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/dict.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/dict.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/dict.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/dict.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/fd_select.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/fd_select.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/fd_select.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/fd_select.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/index.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/index.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/index.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/index.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/stack.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/stack.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/stack.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/stack.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/string.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/string.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/string.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/string.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/stat.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/stat.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/stat.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/stat.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/value_record.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/value_record.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/value_record.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/value_record.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/variations.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/variations.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/variations.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/variations.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/vhea.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/vhea.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/vhea.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/vhea.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/vmtx.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/vmtx.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/vmtx.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/vmtx.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tables/vvar.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/vvar.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tables/vvar.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/vvar.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tests/gpos.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tests/gpos.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tests/gpos.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tests/gpos.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tests/layout.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tests/layout.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tests/layout.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tests/layout.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tests/test_gdef.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tests/test_gdef.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tests/test_gdef.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tests/test_gdef.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tests/test_gsub.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tests/test_gsub.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tests/test_gsub.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tests/test_gsub.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/tests/test_helpers.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tests/test_helpers.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/tests/test_helpers.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tests/test_helpers.rs
diff --git a/third_party/rust/read_fonts/v0_11/crate/src/traversal.rs b/third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/traversal.rs
similarity index 100%
rename from third_party/rust/read_fonts/v0_11/crate/src/traversal.rs
rename to third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/traversal.rs
diff --git a/third_party/rust/regex/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/regex/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/.cargo_vcs_info.json
diff --git a/third_party/rust/regex/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/.gitignore
similarity index 100%
rename from third_party/rust/regex/v1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/.gitignore
diff --git a/third_party/rust/regex/v1/crate/CHANGELOG.md b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/CHANGELOG.md
similarity index 100%
rename from third_party/rust/regex/v1/crate/CHANGELOG.md
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/CHANGELOG.md
diff --git a/third_party/rust/regex/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/Cargo.toml
similarity index 100%
rename from third_party/rust/regex/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/Cargo.toml
diff --git a/third_party/rust/regex/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/regex/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/Cargo.toml.orig
diff --git a/third_party/rust/regex/v1/crate/HACKING.md b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/HACKING.md
similarity index 100%
rename from third_party/rust/regex/v1/crate/HACKING.md
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/HACKING.md
diff --git a/third_party/rust/cfg_if/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cfg_if/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/LICENSE-APACHE
diff --git a/third_party/rust/bitflags/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/LICENSE-MIT
similarity index 100%
copy from third_party/rust/bitflags/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/LICENSE-MIT
diff --git a/third_party/rust/regex/v1/crate/PERFORMANCE.md b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/PERFORMANCE.md
similarity index 100%
rename from third_party/rust/regex/v1/crate/PERFORMANCE.md
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/PERFORMANCE.md
diff --git a/third_party/rust/regex/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/README.md
similarity index 100%
rename from third_party/rust/regex/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/README.md
diff --git a/third_party/rust/regex/v1/crate/UNICODE.md b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/UNICODE.md
similarity index 100%
rename from third_party/rust/regex/v1/crate/UNICODE.md
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/UNICODE.md
diff --git a/third_party/rust/regex/v1/crate/examples/regexdna-input.txt b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/regexdna-input.txt
similarity index 100%
rename from third_party/rust/regex/v1/crate/examples/regexdna-input.txt
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/regexdna-input.txt
diff --git a/third_party/rust/regex/v1/crate/examples/regexdna-output.txt b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/regexdna-output.txt
similarity index 100%
rename from third_party/rust/regex/v1/crate/examples/regexdna-output.txt
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/regexdna-output.txt
diff --git a/third_party/rust/regex/v1/crate/examples/shootout-regex-dna-bytes.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-bytes.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/examples/shootout-regex-dna-bytes.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-bytes.rs
diff --git a/third_party/rust/regex/v1/crate/examples/shootout-regex-dna-cheat.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-cheat.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/examples/shootout-regex-dna-cheat.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-cheat.rs
diff --git a/third_party/rust/regex/v1/crate/examples/shootout-regex-dna-replace.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-replace.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/examples/shootout-regex-dna-replace.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-replace.rs
diff --git a/third_party/rust/regex/v1/crate/examples/shootout-regex-dna-single-cheat.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-single-cheat.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/examples/shootout-regex-dna-single-cheat.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-single-cheat.rs
diff --git a/third_party/rust/regex/v1/crate/examples/shootout-regex-dna-single.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-single.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/examples/shootout-regex-dna-single.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-single.rs
diff --git a/third_party/rust/regex/v1/crate/examples/shootout-regex-dna.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/examples/shootout-regex-dna.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna.rs
diff --git a/third_party/rust/aho_corasick/v0_7/crate/rustfmt.toml b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/rustfmt.toml
similarity index 100%
copy from third_party/rust/aho_corasick/v0_7/crate/rustfmt.toml
copy to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/rustfmt.toml
diff --git a/third_party/rust/regex/v1/crate/src/backtrack.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/backtrack.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/backtrack.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/backtrack.rs
diff --git a/third_party/rust/regex/v1/crate/src/compile.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/compile.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/compile.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/compile.rs
diff --git a/third_party/rust/regex/v1/crate/src/dfa.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/dfa.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/dfa.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/dfa.rs
diff --git a/third_party/rust/regex/v1/crate/src/error.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/error.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/error.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/error.rs
diff --git a/third_party/rust/regex/v1/crate/src/exec.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/exec.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/exec.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/exec.rs
diff --git a/third_party/rust/regex/v1/crate/src/expand.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/expand.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/expand.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/expand.rs
diff --git a/third_party/rust/regex/v1/crate/src/find_byte.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/find_byte.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/find_byte.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/find_byte.rs
diff --git a/third_party/rust/regex/v1/crate/src/freqs.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/freqs.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/freqs.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/freqs.rs
diff --git a/third_party/rust/regex/v1/crate/src/input.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/input.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/input.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/input.rs
diff --git a/third_party/rust/regex/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/lib.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/lib.rs
diff --git a/third_party/rust/regex/v1/crate/src/literal/imp.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/literal/imp.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/literal/imp.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/literal/imp.rs
diff --git a/third_party/rust/regex/v1/crate/src/literal/mod.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/literal/mod.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/literal/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/literal/mod.rs
diff --git a/third_party/rust/regex/v1/crate/src/pattern.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/pattern.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/pattern.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/pattern.rs
diff --git a/third_party/rust/regex/v1/crate/src/pikevm.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/pikevm.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/pikevm.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/pikevm.rs
diff --git a/third_party/rust/regex/v1/crate/src/pool.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/pool.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/pool.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/pool.rs
diff --git a/third_party/rust/regex/v1/crate/src/prog.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/prog.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/prog.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/prog.rs
diff --git a/third_party/rust/regex/v1/crate/src/re_builder.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_builder.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/re_builder.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_builder.rs
diff --git a/third_party/rust/regex/v1/crate/src/re_bytes.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_bytes.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/re_bytes.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_bytes.rs
diff --git a/third_party/rust/regex/v1/crate/src/re_set.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_set.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/re_set.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_set.rs
diff --git a/third_party/rust/regex/v1/crate/src/re_trait.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_trait.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/re_trait.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_trait.rs
diff --git a/third_party/rust/regex/v1/crate/src/re_unicode.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_unicode.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/re_unicode.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_unicode.rs
diff --git a/third_party/rust/regex/v1/crate/src/sparse.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/sparse.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/sparse.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/sparse.rs
diff --git a/third_party/rust/regex/v1/crate/src/testdata/LICENSE b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/testdata/LICENSE
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/testdata/LICENSE
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/testdata/LICENSE
diff --git a/third_party/rust/regex/v1/crate/src/testdata/README b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/testdata/README
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/testdata/README
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/testdata/README
diff --git a/third_party/rust/regex/v1/crate/src/testdata/basic.dat b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/testdata/basic.dat
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/testdata/basic.dat
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/testdata/basic.dat
diff --git a/third_party/rust/regex/v1/crate/src/testdata/nullsubexpr.dat b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/testdata/nullsubexpr.dat
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/testdata/nullsubexpr.dat
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/testdata/nullsubexpr.dat
diff --git a/third_party/rust/regex/v1/crate/src/testdata/repetition.dat b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/testdata/repetition.dat
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/testdata/repetition.dat
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/testdata/repetition.dat
diff --git a/third_party/rust/regex/v1/crate/src/utf8.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/utf8.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/src/utf8.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/utf8.rs
diff --git a/third_party/rust/regex/v1/crate/test b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/test
similarity index 100%
rename from third_party/rust/regex/v1/crate/test
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/test
diff --git a/third_party/rust/regex/v1/crate/tests/api.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/api.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/api.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/api.rs
diff --git a/third_party/rust/regex/v1/crate/tests/api_str.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/api_str.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/api_str.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/api_str.rs
diff --git a/third_party/rust/regex/v1/crate/tests/bytes.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/bytes.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/bytes.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/bytes.rs
diff --git a/third_party/rust/regex/v1/crate/tests/consistent.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/consistent.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/consistent.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/consistent.rs
diff --git a/third_party/rust/regex/v1/crate/tests/crates_regex.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/crates_regex.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/crates_regex.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/crates_regex.rs
diff --git a/third_party/rust/regex/v1/crate/tests/crazy.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/crazy.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/crazy.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/crazy.rs
diff --git a/third_party/rust/regex/v1/crate/tests/flags.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/flags.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/flags.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/flags.rs
diff --git a/third_party/rust/regex/v1/crate/tests/fowler.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/fowler.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/fowler.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/fowler.rs
diff --git a/third_party/rust/regex/v1/crate/tests/macros.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/macros.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/macros.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/macros.rs
diff --git a/third_party/rust/regex/v1/crate/tests/macros_bytes.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/macros_bytes.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/macros_bytes.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/macros_bytes.rs
diff --git a/third_party/rust/regex/v1/crate/tests/macros_str.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/macros_str.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/macros_str.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/macros_str.rs
diff --git a/third_party/rust/regex/v1/crate/tests/misc.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/misc.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/misc.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/misc.rs
diff --git a/third_party/rust/regex/v1/crate/tests/multiline.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/multiline.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/multiline.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/multiline.rs
diff --git a/third_party/rust/regex/v1/crate/tests/noparse.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/noparse.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/noparse.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/noparse.rs
diff --git a/third_party/rust/regex/v1/crate/tests/regression.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/regression.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/regression.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/regression.rs
diff --git a/third_party/rust/regex/v1/crate/tests/regression_fuzz.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/regression_fuzz.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/regression_fuzz.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/regression_fuzz.rs
diff --git a/third_party/rust/regex/v1/crate/tests/replace.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/replace.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/replace.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/replace.rs
diff --git a/third_party/rust/regex/v1/crate/tests/searcher.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/searcher.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/searcher.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/searcher.rs
diff --git a/third_party/rust/regex/v1/crate/tests/set.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/set.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/set.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/set.rs
diff --git a/third_party/rust/regex/v1/crate/tests/shortest_match.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/shortest_match.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/shortest_match.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/shortest_match.rs
diff --git a/third_party/rust/regex/v1/crate/tests/suffix_reverse.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/suffix_reverse.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/suffix_reverse.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/suffix_reverse.rs
diff --git a/third_party/rust/regex/v1/crate/tests/test_backtrack.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_backtrack.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/test_backtrack.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_backtrack.rs
diff --git a/third_party/rust/regex/v1/crate/tests/test_backtrack_bytes.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_backtrack_bytes.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/test_backtrack_bytes.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_backtrack_bytes.rs
diff --git a/third_party/rust/regex/v1/crate/tests/test_backtrack_utf8bytes.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_backtrack_utf8bytes.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/test_backtrack_utf8bytes.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_backtrack_utf8bytes.rs
diff --git a/third_party/rust/regex/v1/crate/tests/test_crates_regex.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_crates_regex.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/test_crates_regex.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_crates_regex.rs
diff --git a/third_party/rust/regex/v1/crate/tests/test_default.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_default.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/test_default.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_default.rs
diff --git a/third_party/rust/regex/v1/crate/tests/test_default_bytes.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_default_bytes.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/test_default_bytes.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_default_bytes.rs
diff --git a/third_party/rust/regex/v1/crate/tests/test_nfa.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_nfa.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/test_nfa.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_nfa.rs
diff --git a/third_party/rust/regex/v1/crate/tests/test_nfa_bytes.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_nfa_bytes.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/test_nfa_bytes.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_nfa_bytes.rs
diff --git a/third_party/rust/regex/v1/crate/tests/test_nfa_utf8bytes.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_nfa_utf8bytes.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/test_nfa_utf8bytes.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_nfa_utf8bytes.rs
diff --git a/third_party/rust/regex/v1/crate/tests/unicode.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/unicode.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/unicode.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/unicode.rs
diff --git a/third_party/rust/regex/v1/crate/tests/word_boundary.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/word_boundary.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/word_boundary.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/word_boundary.rs
diff --git a/third_party/rust/regex/v1/crate/tests/word_boundary_ascii.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/word_boundary_ascii.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/word_boundary_ascii.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/word_boundary_ascii.rs
diff --git a/third_party/rust/regex/v1/crate/tests/word_boundary_unicode.rs b/third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/word_boundary_unicode.rs
similarity index 100%
rename from third_party/rust/regex/v1/crate/tests/word_boundary_unicode.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/word_boundary_unicode.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/.cargo_vcs_info.json
diff --git a/third_party/rust/regex_syntax/v0_6/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/Cargo.toml
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/Cargo.toml
diff --git a/third_party/rust/regex_syntax/v0_6/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/Cargo.toml.orig
diff --git a/third_party/rust/cfg_if/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cfg_if/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/LICENSE-APACHE
diff --git a/third_party/rust/bitflags/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/LICENSE-MIT
similarity index 100%
copy from third_party/rust/bitflags/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/LICENSE-MIT
diff --git a/third_party/rust/regex_syntax/v0_6/crate/README.md b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/README.md
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/README.md
diff --git a/third_party/rust/regex_syntax/v0_6/crate/benches/bench.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/benches/bench.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/benches/bench.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/benches/bench.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/ast/mod.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/ast/mod.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/ast/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/ast/mod.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/ast/parse.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/ast/parse.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/ast/parse.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/ast/parse.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/ast/print.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/ast/print.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/ast/print.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/ast/print.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/ast/visitor.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/ast/visitor.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/ast/visitor.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/ast/visitor.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/either.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/either.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/either.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/either.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/error.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/error.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/error.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/error.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/hir/interval.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/interval.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/hir/interval.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/interval.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/hir/literal/mod.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/literal/mod.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/hir/literal/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/literal/mod.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/hir/mod.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/mod.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/hir/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/mod.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/hir/print.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/print.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/hir/print.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/print.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/hir/translate.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/translate.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/hir/translate.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/translate.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/hir/visitor.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/visitor.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/hir/visitor.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/visitor.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/lib.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/lib.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/parser.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/parser.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/parser.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/parser.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/LICENSE-UNICODE b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/LICENSE-UNICODE
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/LICENSE-UNICODE
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/LICENSE-UNICODE
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/age.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/age.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/age.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/age.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/case_folding_simple.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/case_folding_simple.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/case_folding_simple.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/case_folding_simple.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/general_category.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/general_category.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/general_category.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/general_category.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/grapheme_cluster_break.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/grapheme_cluster_break.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/grapheme_cluster_break.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/grapheme_cluster_break.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/mod.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/mod.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/mod.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/perl_decimal.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/perl_decimal.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/perl_decimal.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/perl_decimal.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/perl_space.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/perl_space.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/perl_space.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/perl_space.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/perl_word.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/perl_word.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/perl_word.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/perl_word.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/property_bool.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/property_bool.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/property_bool.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/property_bool.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/property_names.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/property_names.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/property_names.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/property_names.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/property_values.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/property_values.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/property_values.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/property_values.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/script.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/script.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/script.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/script.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/script_extension.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/script_extension.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/script_extension.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/script_extension.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/sentence_break.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/sentence_break.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/sentence_break.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/sentence_break.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/word_break.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/word_break.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/word_break.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/word_break.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/src/utf8.rs b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/utf8.rs
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/src/utf8.rs
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/utf8.rs
diff --git a/third_party/rust/regex_syntax/v0_6/crate/test b/third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/test
similarity index 100%
rename from third_party/rust/regex_syntax/v0_6/crate/test
rename to third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/test
diff --git a/third_party/rust/rstest/v0_17/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/.cargo_vcs_info.json
diff --git a/third_party/rust/rstest/v0_17/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/Cargo.toml
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/Cargo.toml
diff --git a/third_party/rust/rstest/v0_17/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/Cargo.toml.orig
diff --git a/third_party/rust/rstest/v0_17/crate/README.md b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/README.md
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/README.md
diff --git a/third_party/rust/rstest/v0_17/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/src/lib.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/src/lib.rs
diff --git a/third_party/rust/rstest/v0_17/crate/src/magic_conversion.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/src/magic_conversion.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/src/magic_conversion.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/src/magic_conversion.rs
diff --git a/third_party/rust/rstest/v0_17/crate/src/timeout.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/src/timeout.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/src/timeout.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/src/timeout.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/fixture/mod.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/fixture/mod.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/fixture/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/fixture/mod.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/integration.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/integration.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/integration.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/integration.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/async_fixture.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/async_fixture.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/async_fixture.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/async_fixture.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/await_complete_fixture.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/await_complete_fixture.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/await_complete_fixture.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/await_complete_fixture.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/await_partial_fixture.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/await_partial_fixture.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/await_partial_fixture.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/await_partial_fixture.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/clean_up_default_generics.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/clean_up_default_generics.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/clean_up_default_generics.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/clean_up_default_generics.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/default.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/default.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/default.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/default.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/default_conversion.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/default_conversion.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/default_conversion.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/default_conversion.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/default_in_attrs.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/default_in_attrs.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/default_in_attrs.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/default_in_attrs.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/defined_return_type.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/defined_return_type.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/defined_return_type.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/defined_return_type.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/dyn.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/dyn.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/dyn.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/dyn.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/errors.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/errors.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/errors.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/errors.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/fixture_struct.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/fixture_struct.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/fixture_struct.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/fixture_struct.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/from_other_module.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/from_other_module.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/from_other_module.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/from_other_module.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/impl.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/impl.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/impl.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/impl.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/no_warning.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/no_warning.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/no_warning.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/no_warning.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/once.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/once.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/once.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/once.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/once_defined_type.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/once_defined_type.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/once_defined_type.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/once_defined_type.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/once_no_return.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/once_no_return.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/once_no_return.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/once_no_return.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/partial.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/partial.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/partial.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/partial.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/partial_in_attr.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/partial_in_attr.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/partial_in_attr.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/partial_in_attr.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/rename.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/rename.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/rename.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/rename.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/resolve.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/resolve.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/resolve.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/resolve.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/fixture/simple_injection.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/simple_injection.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/fixture/simple_injection.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/simple_injection.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/args_with_no_cases.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/args_with_no_cases.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/args_with_no_cases.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/args_with_no_cases.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/async.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/async.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/async.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/async.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/async_awt.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/async_awt.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/async_awt.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/async_awt.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/async_awt_global.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/async_awt_global.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/async_awt_global.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/async_awt_global.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/case_attributes.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/case_attributes.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/case_attributes.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/case_attributes.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/case_with_wrong_args.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/case_with_wrong_args.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/case_with_wrong_args.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/case_with_wrong_args.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/description.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/description.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/description.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/description.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/dump_just_one_case.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/dump_just_one_case.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/dump_just_one_case.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/dump_just_one_case.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/inject.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/inject.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/inject.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/inject.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/missed_argument.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/missed_argument.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/missed_argument.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/missed_argument.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/missed_some_arguments.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/missed_some_arguments.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/missed_some_arguments.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/missed_some_arguments.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/partial.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/partial.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/partial.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/partial.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/simple.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/simple.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/simple.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/simple.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/use_attr.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/use_attr.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/use_attr.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/use_attr.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/convert_string_literal.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/convert_string_literal.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/convert_string_literal.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/convert_string_literal.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_debug.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_debug.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_debug.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_debug.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_debug_compact.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_debug_compact.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_debug_compact.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_debug_compact.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_exclude_some_inputs.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_exclude_some_inputs.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_exclude_some_inputs.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_exclude_some_inputs.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_exclude_some_inputs_compact.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_exclude_some_inputs_compact.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_exclude_some_inputs_compact.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_exclude_some_inputs_compact.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_not_debug.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_not_debug.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_not_debug.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_not_debug.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_not_debug_compact.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_not_debug_compact.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_not_debug_compact.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_not_debug_compact.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/errors.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/errors.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/errors.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/errors.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/generic.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/generic.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/generic.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/generic.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/happy_path.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/happy_path.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/happy_path.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/happy_path.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/ignore_args.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/ignore_args.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/ignore_args.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/ignore_args.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/impl_param.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/impl_param.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/impl_param.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/impl_param.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/async.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/async.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/async.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/async.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/async_awt.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/async_awt.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/async_awt.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/async_awt.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/async_awt_global.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/async_awt_global.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/async_awt_global.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/async_awt_global.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/inject.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/inject.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/inject.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/inject.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/partial.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/partial.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/partial.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/partial.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/simple.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/simple.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/simple.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/simple.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/use_attr.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/use_attr.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/use_attr.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/use_attr.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/mut.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/mut.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/mut.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/mut.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/panic.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/panic.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/panic.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/panic.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/reject_no_item_function.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/reject_no_item_function.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/reject_no_item_function.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/reject_no_item_function.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/remove_underscore.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/remove_underscore.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/remove_underscore.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/remove_underscore.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/rename.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/rename.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/rename.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/rename.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/return_result.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/return_result.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/return_result.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/return_result.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/async.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/async.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/async.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/async.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/async_awt.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/async_awt.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/async_awt.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/async_awt.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/async_awt_global.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/async_awt_global.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/async_awt_global.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/async_awt_global.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/dump_debug.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/dump_debug.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/dump_debug.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/dump_debug.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/inject.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/inject.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/inject.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/inject.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/partial.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/partial.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/partial.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/partial.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/resolve.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/resolve.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/resolve.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/resolve.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/simple.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/simple.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/simple.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/simple.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/timeout.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/timeout.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/timeout.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/timeout.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/timeout_async.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/timeout_async.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/timeout_async.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/timeout_async.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/use_mutable_fixture_in_parametric_argumnts.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/use_mutable_fixture_in_parametric_argumnts.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/use_mutable_fixture_in_parametric_argumnts.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/use_mutable_fixture_in_parametric_argumnts.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/resources/rstest/values_tests_name.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/values_tests_name.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/resources/rstest/values_tests_name.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/values_tests_name.rs
diff --git a/third_party/rust/rstest/v0_17/crate/tests/rstest/mod.rs b/third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/rstest/mod.rs
similarity index 100%
rename from third_party/rust/rstest/v0_17/crate/tests/rstest/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/rstest/mod.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/.cargo_vcs_info.json
diff --git a/third_party/rust/rstest_macros/v0_17/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/Cargo.toml
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/Cargo.toml
diff --git a/third_party/rust/rstest_macros/v0_17/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/Cargo.toml.orig
diff --git a/third_party/rust/rstest_macros/v0_17/crate/README.md b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/README.md
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/README.md
diff --git a/third_party/rust/rstest_macros/v0_17/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/build.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/build.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/error.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/error.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/error.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/error.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/lib.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/lib.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/parse/expressions.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/expressions.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/parse/expressions.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/expressions.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/parse/fixture.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/fixture.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/parse/fixture.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/fixture.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/parse/future.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/future.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/parse/future.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/future.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/parse/macros.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/macros.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/parse/macros.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/macros.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/parse/mod.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/mod.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/parse/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/mod.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/parse/rstest.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/rstest.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/parse/rstest.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/rstest.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/parse/testcase.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/testcase.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/parse/testcase.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/testcase.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/parse/vlist.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/vlist.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/parse/vlist.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/vlist.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/refident.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/refident.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/refident.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/refident.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/render/apply_argumets.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/apply_argumets.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/render/apply_argumets.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/apply_argumets.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/render/fixture.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/fixture.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/render/fixture.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/fixture.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/render/inject.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/inject.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/render/inject.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/inject.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/render/mod.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/mod.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/render/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/mod.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/render/test.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/test.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/render/test.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/test.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/render/wrapper.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/wrapper.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/render/wrapper.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/wrapper.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/resolver.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/resolver.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/resolver.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/resolver.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/test.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/test.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/test.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/test.rs
diff --git a/third_party/rust/rstest_macros/v0_17/crate/src/utils.rs b/third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/utils.rs
similarity index 100%
rename from third_party/rust/rstest_macros/v0_17/crate/src/utils.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/utils.rs
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/.cargo_vcs_info.json
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/Cargo.toml
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/Cargo.toml
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/Cargo.toml.orig
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/README.md b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/README.md
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/README.md
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/build.rs
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/build.rs
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/checkoutlist.md b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/checkoutlist.md
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/checkoutlist.md
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/checkoutlist.md
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/src/lib.rs
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/src/lib.rs
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/tests/acceptance.rs b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/acceptance.rs
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/tests/acceptance.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/acceptance.rs
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/tests/resources/copy_args_attributes_from_template.rs b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/copy_args_attributes_from_template.rs
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/tests/resources/copy_args_attributes_from_template.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/copy_args_attributes_from_template.rs
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/tests/resources/deny_docs.rs b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/deny_docs.rs
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/tests/resources/deny_docs.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/deny_docs.rs
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/tests/resources/export_not_used.rs b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/export_not_used.rs
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/tests/resources/export_not_used.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/export_not_used.rs
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/tests/resources/export_template.rs b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/export_template.rs
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/tests/resources/export_template.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/export_template.rs
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/tests/resources/export_template_root.rs b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/export_template_root.rs
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/tests/resources/export_template_root.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/export_template_root.rs
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/tests/resources/import_template.rs b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/import_template.rs
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/tests/resources/import_template.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/import_template.rs
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/tests/resources/in_mod.rs b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/in_mod.rs
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/tests/resources/in_mod.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/in_mod.rs
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/tests/resources/no_local_macro_should_not_compile.rs b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/no_local_macro_should_not_compile.rs
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/tests/resources/no_local_macro_should_not_compile.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/no_local_macro_should_not_compile.rs
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/tests/resources/not_used.rs b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/not_used.rs
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/tests/resources/not_used.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/not_used.rs
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/tests/resources/qualify_template_use.rs b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/qualify_template_use.rs
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/tests/resources/qualify_template_use.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/qualify_template_use.rs
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/tests/resources/simple_example.rs b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/simple_example.rs
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/tests/resources/simple_example.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/simple_example.rs
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/tests/resources/templates_with_same_name.rs b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/templates_with_same_name.rs
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/tests/resources/templates_with_same_name.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/templates_with_same_name.rs
diff --git a/third_party/rust/rstest_reuse/v0_5/crate/tests/resources/use_before_define.rs b/third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/use_before_define.rs
similarity index 100%
rename from third_party/rust/rstest_reuse/v0_5/crate/tests/resources/use_before_define.rs
rename to third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/use_before_define.rs
diff --git a/third_party/rust/rustc_demangle/v0_1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/rustc_demangle/v0_1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/.cargo_vcs_info.json
diff --git a/third_party/rust/rustc_demangle/v0_1/crate/.github/dependabot.yml b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/.github/dependabot.yml
similarity index 100%
rename from third_party/rust/rustc_demangle/v0_1/crate/.github/dependabot.yml
rename to third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/.github/dependabot.yml
diff --git a/third_party/rust/rustc_demangle/v0_1/crate/.github/workflows/main.yml b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/.github/workflows/main.yml
similarity index 100%
rename from third_party/rust/rustc_demangle/v0_1/crate/.github/workflows/main.yml
rename to third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/.github/workflows/main.yml
diff --git a/third_party/rust/cfg_if/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/.gitignore
similarity index 100%
copy from third_party/rust/cfg_if/v1/crate/.gitignore
copy to third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/.gitignore
diff --git a/third_party/rust/rustc_demangle/v0_1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/Cargo.toml
similarity index 100%
rename from third_party/rust/rustc_demangle/v0_1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/Cargo.toml
diff --git a/third_party/rust/rustc_demangle/v0_1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/rustc_demangle/v0_1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/Cargo.toml.orig
diff --git a/third_party/rust/cfg_if/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cfg_if/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/LICENSE-APACHE
diff --git a/third_party/rust/cfg_if/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/LICENSE-MIT
similarity index 100%
copy from third_party/rust/cfg_if/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/LICENSE-MIT
diff --git a/third_party/rust/rustc_demangle/v0_1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/README.md
similarity index 100%
rename from third_party/rust/rustc_demangle/v0_1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/README.md
diff --git a/third_party/rust/rustc_demangle/v0_1/crate/src/legacy.rs b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/src/legacy.rs
similarity index 100%
rename from third_party/rust/rustc_demangle/v0_1/crate/src/legacy.rs
rename to third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/src/legacy.rs
diff --git a/third_party/rust/rustc_demangle/v0_1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/src/lib.rs
similarity index 100%
rename from third_party/rust/rustc_demangle/v0_1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/src/lib.rs
diff --git a/third_party/rust/rustc_demangle/v0_1/crate/src/v0-large-test-symbols/early-recursion-limit b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/src/v0-large-test-symbols/early-recursion-limit
similarity index 100%
rename from third_party/rust/rustc_demangle/v0_1/crate/src/v0-large-test-symbols/early-recursion-limit
rename to third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/src/v0-large-test-symbols/early-recursion-limit
diff --git a/third_party/rust/rustc_demangle/v0_1/crate/src/v0.rs b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/src/v0.rs
similarity index 100%
rename from third_party/rust/rustc_demangle/v0_1/crate/src/v0.rs
rename to third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/src/v0.rs
diff --git a/third_party/rust/rustc_demangle_capi/v0_1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/rustc_demangle_capi/v0_1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/.cargo_vcs_info.json
diff --git a/third_party/rust/rustc_demangle_capi/v0_1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/Cargo.toml
similarity index 100%
rename from third_party/rust/rustc_demangle_capi/v0_1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/Cargo.toml
diff --git a/third_party/rust/rustc_demangle_capi/v0_1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/rustc_demangle_capi/v0_1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/Cargo.toml.orig
diff --git a/third_party/rust/rustc_demangle_capi/v0_1/crate/include/rustc_demangle.h b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include/rustc_demangle.h
similarity index 100%
rename from third_party/rust/rustc_demangle_capi/v0_1/crate/include/rustc_demangle.h
rename to third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include/rustc_demangle.h
diff --git a/third_party/rust/rustc_demangle_capi/v0_1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/src/lib.rs
similarity index 100%
rename from third_party/rust/rustc_demangle_capi/v0_1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/src/lib.rs
diff --git a/third_party/rust/rustc_version/v0_4/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/rustc_version/v0_4/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/.cargo_vcs_info.json
diff --git a/third_party/rust/rustc_version/v0_4/crate/.github/dependabot.yml b/third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/.github/dependabot.yml
similarity index 100%
rename from third_party/rust/rustc_version/v0_4/crate/.github/dependabot.yml
rename to third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/.github/dependabot.yml
diff --git a/third_party/rust/rustc_version/v0_4/crate/.github/workflows/rust.yml b/third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/.github/workflows/rust.yml
similarity index 100%
rename from third_party/rust/rustc_version/v0_4/crate/.github/workflows/rust.yml
rename to third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/.github/workflows/rust.yml
diff --git a/third_party/rust/rustc_version/v0_4/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/.gitignore
similarity index 100%
rename from third_party/rust/rustc_version/v0_4/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/.gitignore
diff --git a/third_party/rust/rustc_version/v0_4/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/Cargo.toml
similarity index 100%
rename from third_party/rust/rustc_version/v0_4/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/Cargo.toml
diff --git a/third_party/rust/rustc_version/v0_4/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/rustc_version/v0_4/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/Cargo.toml.orig
diff --git a/third_party/rust/cfg_if/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cfg_if/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/LICENSE-APACHE
diff --git a/third_party/rust/rustc_version/v0_4/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/LICENSE-MIT
similarity index 100%
rename from third_party/rust/rustc_version/v0_4/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/LICENSE-MIT
diff --git a/third_party/rust/rustc_version/v0_4/crate/README.md b/third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/README.md
similarity index 100%
rename from third_party/rust/rustc_version/v0_4/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/README.md
diff --git a/third_party/rust/rustc_version/v0_4/crate/deny.toml b/third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/deny.toml
similarity index 100%
rename from third_party/rust/rustc_version/v0_4/crate/deny.toml
rename to third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/deny.toml
diff --git a/third_party/rust/rustc_version/v0_4/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/src/lib.rs
similarity index 100%
rename from third_party/rust/rustc_version/v0_4/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/src/lib.rs
diff --git a/third_party/rust/rustc_version/v0_4/crate/tests/all.rs b/third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/tests/all.rs
similarity index 100%
rename from third_party/rust/rustc_version/v0_4/crate/tests/all.rs
rename to third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/tests/all.rs
diff --git a/third_party/rust/rustversion/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/.cargo_vcs_info.json
diff --git a/third_party/rust/rustversion/v1/crate/.clippy.toml b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/.clippy.toml
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/.clippy.toml
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/.clippy.toml
diff --git a/third_party/rust/rustversion/v1/crate/.github/workflows/ci.yml b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/.github/workflows/ci.yml
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/.github/workflows/ci.yml
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/.github/workflows/ci.yml
diff --git a/third_party/rust/anyhow/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/.gitignore
similarity index 100%
copy from third_party/rust/anyhow/v1/crate/.gitignore
copy to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/.gitignore
diff --git a/third_party/rust/rustversion/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/Cargo.toml
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/Cargo.toml
diff --git a/third_party/rust/rustversion/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/Cargo.toml.orig
diff --git a/third_party/rust/autocfg/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/autocfg/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/LICENSE-APACHE
diff --git a/third_party/rust/anyhow/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/LICENSE-MIT
similarity index 100%
copy from third_party/rust/anyhow/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/LICENSE-MIT
diff --git a/third_party/rust/rustversion/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/README.md
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/README.md
diff --git a/third_party/rust/rustversion/v1/crate/build/build.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/build/build.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/build/build.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/build/build.rs
diff --git a/third_party/rust/rustversion/v1/crate/build/rustc.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/build/rustc.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/build/rustc.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/build/rustc.rs
diff --git a/third_party/rust/rustversion/v1/crate/src/attr.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/attr.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/src/attr.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/attr.rs
diff --git a/third_party/rust/rustversion/v1/crate/src/bound.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/bound.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/src/bound.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/bound.rs
diff --git a/third_party/rust/rustversion/v1/crate/src/constfn.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/constfn.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/src/constfn.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/constfn.rs
diff --git a/third_party/rust/rustversion/v1/crate/src/date.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/date.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/src/date.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/date.rs
diff --git a/third_party/rust/rustversion/v1/crate/src/error.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/error.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/src/error.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/error.rs
diff --git a/third_party/rust/rustversion/v1/crate/src/expand.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/expand.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/src/expand.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/expand.rs
diff --git a/third_party/rust/rustversion/v1/crate/src/expr.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/expr.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/src/expr.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/expr.rs
diff --git a/third_party/rust/rustversion/v1/crate/src/iter.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/iter.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/src/iter.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/iter.rs
diff --git a/third_party/rust/rustversion/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/lib.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/lib.rs
diff --git a/third_party/rust/rustversion/v1/crate/src/release.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/release.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/src/release.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/release.rs
diff --git a/third_party/rust/rustversion/v1/crate/src/time.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/time.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/src/time.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/time.rs
diff --git a/third_party/rust/rustversion/v1/crate/src/token.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/token.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/src/token.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/token.rs
diff --git a/third_party/rust/rustversion/v1/crate/src/version.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/version.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/src/version.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/version.rs
diff --git a/third_party/rust/rustversion/v1/crate/tests/compiletest.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/compiletest.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/tests/compiletest.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/compiletest.rs
diff --git a/third_party/rust/rustversion/v1/crate/tests/test_const.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/test_const.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/tests/test_const.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/test_const.rs
diff --git a/third_party/rust/rustversion/v1/crate/tests/test_eval.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/test_eval.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/tests/test_eval.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/test_eval.rs
diff --git a/third_party/rust/rustversion/v1/crate/tests/test_parse.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/test_parse.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/tests/test_parse.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/test_parse.rs
diff --git a/third_party/rust/rustversion/v1/crate/tests/ui/bad-bound.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-bound.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/tests/ui/bad-bound.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-bound.rs
diff --git a/third_party/rust/rustversion/v1/crate/tests/ui/bad-bound.stderr b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-bound.stderr
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/tests/ui/bad-bound.stderr
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-bound.stderr
diff --git a/third_party/rust/rustversion/v1/crate/tests/ui/bad-date.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-date.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/tests/ui/bad-date.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-date.rs
diff --git a/third_party/rust/rustversion/v1/crate/tests/ui/bad-date.stderr b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-date.stderr
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/tests/ui/bad-date.stderr
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-date.stderr
diff --git a/third_party/rust/rustversion/v1/crate/tests/ui/bad-not.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-not.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/tests/ui/bad-not.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-not.rs
diff --git a/third_party/rust/rustversion/v1/crate/tests/ui/bad-not.stderr b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-not.stderr
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/tests/ui/bad-not.stderr
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-not.stderr
diff --git a/third_party/rust/rustversion/v1/crate/tests/ui/bad-version.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-version.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/tests/ui/bad-version.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-version.rs
diff --git a/third_party/rust/rustversion/v1/crate/tests/ui/bad-version.stderr b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-version.stderr
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/tests/ui/bad-version.stderr
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-version.stderr
diff --git a/third_party/rust/rustversion/v1/crate/tests/ui/const-not-fn.rs b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/const-not-fn.rs
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/tests/ui/const-not-fn.rs
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/const-not-fn.rs
diff --git a/third_party/rust/rustversion/v1/crate/tests/ui/const-not-fn.stderr b/third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/const-not-fn.stderr
similarity index 100%
rename from third_party/rust/rustversion/v1/crate/tests/ui/const-not-fn.stderr
rename to third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/const-not-fn.stderr
diff --git a/third_party/rust/ryu/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/ryu/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/.cargo_vcs_info.json
diff --git a/third_party/rust/ryu/v1/crate/.github/workflows/ci.yml b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/.github/workflows/ci.yml
similarity index 100%
rename from third_party/rust/ryu/v1/crate/.github/workflows/ci.yml
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/.github/workflows/ci.yml
diff --git a/third_party/rust/ryu/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/.gitignore
similarity index 100%
rename from third_party/rust/ryu/v1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/.gitignore
diff --git a/third_party/rust/ryu/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/Cargo.toml
similarity index 100%
rename from third_party/rust/ryu/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/Cargo.toml
diff --git a/third_party/rust/ryu/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/ryu/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/Cargo.toml.orig
diff --git a/third_party/rust/clap_builder/v4/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/clap_builder/v4/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/LICENSE-APACHE
diff --git a/third_party/rust/ryu/v1/crate/LICENSE-BOOST b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/LICENSE-BOOST
similarity index 100%
rename from third_party/rust/ryu/v1/crate/LICENSE-BOOST
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/LICENSE-BOOST
diff --git a/third_party/rust/ryu/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/README.md
similarity index 100%
rename from third_party/rust/ryu/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/README.md
diff --git a/third_party/rust/ryu/v1/crate/benches/bench.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/benches/bench.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/benches/bench.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/benches/bench.rs
diff --git a/third_party/rust/ryu/v1/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/build.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/build.rs
diff --git a/third_party/rust/ryu/v1/crate/examples/upstream_benchmark.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/examples/upstream_benchmark.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/examples/upstream_benchmark.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/examples/upstream_benchmark.rs
diff --git a/third_party/rust/ryu/v1/crate/src/buffer/mod.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/buffer/mod.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/src/buffer/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/buffer/mod.rs
diff --git a/third_party/rust/ryu/v1/crate/src/common.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/common.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/src/common.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/common.rs
diff --git a/third_party/rust/ryu/v1/crate/src/d2s.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/d2s.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/src/d2s.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/d2s.rs
diff --git a/third_party/rust/ryu/v1/crate/src/d2s_full_table.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/d2s_full_table.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/src/d2s_full_table.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/d2s_full_table.rs
diff --git a/third_party/rust/ryu/v1/crate/src/d2s_intrinsics.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/d2s_intrinsics.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/src/d2s_intrinsics.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/d2s_intrinsics.rs
diff --git a/third_party/rust/ryu/v1/crate/src/d2s_small_table.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/d2s_small_table.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/src/d2s_small_table.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/d2s_small_table.rs
diff --git a/third_party/rust/ryu/v1/crate/src/digit_table.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/digit_table.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/src/digit_table.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/digit_table.rs
diff --git a/third_party/rust/ryu/v1/crate/src/f2s.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/f2s.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/src/f2s.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/f2s.rs
diff --git a/third_party/rust/ryu/v1/crate/src/f2s_intrinsics.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/f2s_intrinsics.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/src/f2s_intrinsics.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/f2s_intrinsics.rs
diff --git a/third_party/rust/ryu/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/lib.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/lib.rs
diff --git a/third_party/rust/ryu/v1/crate/src/parse.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/parse.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/src/parse.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/parse.rs
diff --git a/third_party/rust/ryu/v1/crate/src/pretty/exponent.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/pretty/exponent.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/src/pretty/exponent.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/pretty/exponent.rs
diff --git a/third_party/rust/ryu/v1/crate/src/pretty/mantissa.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/pretty/mantissa.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/src/pretty/mantissa.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/pretty/mantissa.rs
diff --git a/third_party/rust/ryu/v1/crate/src/pretty/mod.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/pretty/mod.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/src/pretty/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/pretty/mod.rs
diff --git a/third_party/rust/ryu/v1/crate/src/s2d.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/s2d.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/src/s2d.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/s2d.rs
diff --git a/third_party/rust/ryu/v1/crate/src/s2f.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/s2f.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/src/s2f.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/s2f.rs
diff --git a/third_party/rust/ryu/v1/crate/tests/common_test.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/common_test.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/tests/common_test.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/common_test.rs
diff --git a/third_party/rust/ryu/v1/crate/tests/d2s_table_test.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/d2s_table_test.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/tests/d2s_table_test.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/d2s_table_test.rs
diff --git a/third_party/rust/ryu/v1/crate/tests/d2s_test.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/d2s_test.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/tests/d2s_test.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/d2s_test.rs
diff --git a/third_party/rust/ryu/v1/crate/tests/exhaustive.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/exhaustive.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/tests/exhaustive.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/exhaustive.rs
diff --git a/third_party/rust/ryu/v1/crate/tests/f2s_test.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/f2s_test.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/tests/f2s_test.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/f2s_test.rs
diff --git a/third_party/rust/ryu/v1/crate/tests/macros/mod.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/macros/mod.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/tests/macros/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/macros/mod.rs
diff --git a/third_party/rust/ryu/v1/crate/tests/s2d_test.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/s2d_test.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/tests/s2d_test.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/s2d_test.rs
diff --git a/third_party/rust/ryu/v1/crate/tests/s2f_test.rs b/third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/s2f_test.rs
similarity index 100%
rename from third_party/rust/ryu/v1/crate/tests/s2f_test.rs
rename to third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/s2f_test.rs
diff --git a/third_party/rust/semver/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/semver/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/.cargo_vcs_info.json
diff --git a/third_party/rust/rustversion/v1/crate/.clippy.toml b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/.clippy.toml
similarity index 100%
copy from third_party/rust/rustversion/v1/crate/.clippy.toml
copy to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/.clippy.toml
diff --git a/third_party/rust/semver/v1/crate/.github/workflows/ci.yml b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/.github/workflows/ci.yml
similarity index 100%
rename from third_party/rust/semver/v1/crate/.github/workflows/ci.yml
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/.github/workflows/ci.yml
diff --git a/third_party/rust/semver/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/.gitignore
similarity index 100%
rename from third_party/rust/semver/v1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/.gitignore
diff --git a/third_party/rust/semver/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/Cargo.toml
similarity index 100%
rename from third_party/rust/semver/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/Cargo.toml
diff --git a/third_party/rust/semver/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/semver/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/Cargo.toml.orig
diff --git a/third_party/rust/cfg_if/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cfg_if/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/LICENSE-APACHE
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/LICENSE-MIT
similarity index 100%
copy from third_party/rust/cxx/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/LICENSE-MIT
diff --git a/third_party/rust/semver/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/README.md
similarity index 100%
rename from third_party/rust/semver/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/README.md
diff --git a/third_party/rust/semver/v1/crate/benches/parse.rs b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/benches/parse.rs
similarity index 100%
rename from third_party/rust/semver/v1/crate/benches/parse.rs
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/benches/parse.rs
diff --git a/third_party/rust/semver/v1/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/build.rs
similarity index 100%
rename from third_party/rust/semver/v1/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/build.rs
diff --git a/third_party/rust/semver/v1/crate/src/backport.rs b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/backport.rs
similarity index 100%
rename from third_party/rust/semver/v1/crate/src/backport.rs
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/backport.rs
diff --git a/third_party/rust/semver/v1/crate/src/display.rs b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/display.rs
similarity index 100%
rename from third_party/rust/semver/v1/crate/src/display.rs
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/display.rs
diff --git a/third_party/rust/semver/v1/crate/src/error.rs b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/error.rs
similarity index 100%
rename from third_party/rust/semver/v1/crate/src/error.rs
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/error.rs
diff --git a/third_party/rust/semver/v1/crate/src/eval.rs b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/eval.rs
similarity index 100%
rename from third_party/rust/semver/v1/crate/src/eval.rs
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/eval.rs
diff --git a/third_party/rust/semver/v1/crate/src/identifier.rs b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/identifier.rs
similarity index 100%
rename from third_party/rust/semver/v1/crate/src/identifier.rs
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/identifier.rs
diff --git a/third_party/rust/semver/v1/crate/src/impls.rs b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/impls.rs
similarity index 100%
rename from third_party/rust/semver/v1/crate/src/impls.rs
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/impls.rs
diff --git a/third_party/rust/semver/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/lib.rs
similarity index 100%
rename from third_party/rust/semver/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/lib.rs
diff --git a/third_party/rust/semver/v1/crate/src/parse.rs b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/parse.rs
similarity index 100%
rename from third_party/rust/semver/v1/crate/src/parse.rs
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/parse.rs
diff --git a/third_party/rust/semver/v1/crate/src/serde.rs b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/serde.rs
similarity index 100%
rename from third_party/rust/semver/v1/crate/src/serde.rs
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/serde.rs
diff --git a/third_party/rust/semver/v1/crate/tests/node/mod.rs b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/tests/node/mod.rs
similarity index 100%
rename from third_party/rust/semver/v1/crate/tests/node/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/tests/node/mod.rs
diff --git a/third_party/rust/semver/v1/crate/tests/test_identifier.rs b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/tests/test_identifier.rs
similarity index 100%
rename from third_party/rust/semver/v1/crate/tests/test_identifier.rs
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/tests/test_identifier.rs
diff --git a/third_party/rust/semver/v1/crate/tests/test_version.rs b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/tests/test_version.rs
similarity index 100%
rename from third_party/rust/semver/v1/crate/tests/test_version.rs
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/tests/test_version.rs
diff --git a/third_party/rust/semver/v1/crate/tests/test_version_req.rs b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/tests/test_version_req.rs
similarity index 100%
rename from third_party/rust/semver/v1/crate/tests/test_version_req.rs
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/tests/test_version_req.rs
diff --git a/third_party/rust/semver/v1/crate/tests/util/mod.rs b/third_party/rust/chromium_crates_io/vendor/semver-1.0.4/tests/util/mod.rs
similarity index 100%
rename from third_party/rust/semver/v1/crate/tests/util/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/semver-1.0.4/tests/util/mod.rs
diff --git a/third_party/rust/serde/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/serde/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/.cargo_vcs_info.json
diff --git a/third_party/rust/serde/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/Cargo.toml
similarity index 100%
rename from third_party/rust/serde/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/Cargo.toml
diff --git a/third_party/rust/serde/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/serde/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/Cargo.toml.orig
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cxx/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/LICENSE-APACHE
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/LICENSE-MIT
similarity index 100%
copy from third_party/rust/cxx/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/LICENSE-MIT
diff --git a/third_party/rust/serde/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/README.md
similarity index 100%
rename from third_party/rust/serde/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/README.md
diff --git a/third_party/rust/serde/v1/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/build.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/build.rs
diff --git a/third_party/rust/serde/v1/crate/crates-io.md b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/crates-io.md
similarity index 100%
rename from third_party/rust/serde/v1/crate/crates-io.md
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/crates-io.md
diff --git a/third_party/rust/serde/v1/crate/src/de/format.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/format.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/de/format.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/format.rs
diff --git a/third_party/rust/serde/v1/crate/src/de/ignored_any.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/ignored_any.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/de/ignored_any.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/ignored_any.rs
diff --git a/third_party/rust/serde/v1/crate/src/de/impls.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/impls.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/de/impls.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/impls.rs
diff --git a/third_party/rust/serde/v1/crate/src/de/mod.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/mod.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/de/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/mod.rs
diff --git a/third_party/rust/serde/v1/crate/src/de/seed.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/seed.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/de/seed.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/seed.rs
diff --git a/third_party/rust/serde/v1/crate/src/de/size_hint.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/size_hint.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/de/size_hint.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/size_hint.rs
diff --git a/third_party/rust/serde/v1/crate/src/de/value.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/value.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/de/value.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/value.rs
diff --git a/third_party/rust/serde/v1/crate/src/integer128.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/integer128.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/integer128.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/integer128.rs
diff --git a/third_party/rust/serde/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/lib.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/lib.rs
diff --git a/third_party/rust/serde/v1/crate/src/macros.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/macros.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/macros.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/macros.rs
diff --git a/third_party/rust/serde/v1/crate/src/private/de.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/private/de.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/private/de.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/private/de.rs
diff --git a/third_party/rust/serde/v1/crate/src/private/doc.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/private/doc.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/private/doc.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/private/doc.rs
diff --git a/third_party/rust/serde/v1/crate/src/private/mod.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/private/mod.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/private/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/private/mod.rs
diff --git a/third_party/rust/serde/v1/crate/src/private/ser.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/private/ser.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/private/ser.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/private/ser.rs
diff --git a/third_party/rust/serde/v1/crate/src/ser/fmt.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/ser/fmt.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/ser/fmt.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/ser/fmt.rs
diff --git a/third_party/rust/serde/v1/crate/src/ser/impls.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/ser/impls.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/ser/impls.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/ser/impls.rs
diff --git a/third_party/rust/serde/v1/crate/src/ser/impossible.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/ser/impossible.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/ser/impossible.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/ser/impossible.rs
diff --git a/third_party/rust/serde/v1/crate/src/ser/mod.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/ser/mod.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/ser/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/ser/mod.rs
diff --git a/third_party/rust/serde/v1/crate/src/std_error.rs b/third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/std_error.rs
similarity index 100%
rename from third_party/rust/serde/v1/crate/src/std_error.rs
rename to third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/std_error.rs
diff --git a/third_party/rust/serde_derive/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/.cargo_vcs_info.json
diff --git a/third_party/rust/serde_derive/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/Cargo.toml
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/Cargo.toml
diff --git a/third_party/rust/serde_derive/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/Cargo.toml.orig
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cxx/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/LICENSE-APACHE
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/LICENSE-MIT
similarity index 100%
copy from third_party/rust/cxx/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/LICENSE-MIT
diff --git a/third_party/rust/serde/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/README.md
similarity index 100%
copy from third_party/rust/serde/v1/crate/README.md
copy to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/README.md
diff --git a/third_party/rust/serde/v1/crate/crates-io.md b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/crates-io.md
similarity index 100%
copy from third_party/rust/serde/v1/crate/crates-io.md
copy to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/crates-io.md
diff --git a/third_party/rust/serde_derive/v1/crate/src/bound.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/bound.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/bound.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/bound.rs
diff --git a/third_party/rust/serde_derive/v1/crate/src/de.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/de.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/de.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/de.rs
diff --git a/third_party/rust/serde_derive/v1/crate/src/dummy.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/dummy.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/dummy.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/dummy.rs
diff --git a/third_party/rust/serde_derive/v1/crate/src/fragment.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/fragment.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/fragment.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/fragment.rs
diff --git a/third_party/rust/serde_derive/v1/crate/src/internals/ast.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/ast.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/internals/ast.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/ast.rs
diff --git a/third_party/rust/serde_derive/v1/crate/src/internals/attr.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/attr.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/internals/attr.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/attr.rs
diff --git a/third_party/rust/serde_derive/v1/crate/src/internals/case.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/case.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/internals/case.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/case.rs
diff --git a/third_party/rust/serde_derive/v1/crate/src/internals/check.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/check.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/internals/check.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/check.rs
diff --git a/third_party/rust/serde_derive/v1/crate/src/internals/ctxt.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/ctxt.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/internals/ctxt.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/ctxt.rs
diff --git a/third_party/rust/serde_derive/v1/crate/src/internals/mod.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/mod.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/internals/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/mod.rs
diff --git a/third_party/rust/serde_derive/v1/crate/src/internals/receiver.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/receiver.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/internals/receiver.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/receiver.rs
diff --git a/third_party/rust/serde_derive/v1/crate/src/internals/respan.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/respan.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/internals/respan.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/respan.rs
diff --git a/third_party/rust/serde_derive/v1/crate/src/internals/symbol.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/symbol.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/internals/symbol.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/symbol.rs
diff --git a/third_party/rust/serde_derive/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/lib.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/lib.rs
diff --git a/third_party/rust/serde_derive/v1/crate/src/pretend.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/pretend.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/pretend.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/pretend.rs
diff --git a/third_party/rust/serde_derive/v1/crate/src/ser.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/ser.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/ser.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/ser.rs
diff --git a/third_party/rust/serde_derive/v1/crate/src/this.rs b/third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/this.rs
similarity index 100%
rename from third_party/rust/serde_derive/v1/crate/src/this.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/this.rs
diff --git a/third_party/rust/serde_json/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/.cargo_vcs_info.json
diff --git a/third_party/rust/serde_json/v1/crate/.github/workflows/ci.yml b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/.github/workflows/ci.yml
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/.github/workflows/ci.yml
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/.github/workflows/ci.yml
diff --git a/third_party/rust/serde_json/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/.gitignore
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/.gitignore
diff --git a/third_party/rust/serde_json/v1/crate/CONTRIBUTING.md b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/CONTRIBUTING.md
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/CONTRIBUTING.md
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/CONTRIBUTING.md
diff --git a/third_party/rust/serde_json/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/Cargo.toml
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/Cargo.toml
diff --git a/third_party/rust/serde_json/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/Cargo.toml.orig
diff --git a/third_party/rust/autocfg/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/autocfg/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/LICENSE-APACHE
diff --git a/third_party/rust/anyhow/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/LICENSE-MIT
similarity index 100%
copy from third_party/rust/anyhow/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/LICENSE-MIT
diff --git a/third_party/rust/serde_json/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/README.md
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/README.md
diff --git a/third_party/rust/serde_json/v1/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/build.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/build.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/de.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/de.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/de.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/de.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/error.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/error.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/error.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/error.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/features_check/error.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/features_check/error.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/features_check/error.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/features_check/error.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/features_check/mod.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/features_check/mod.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/features_check/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/features_check/mod.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/io/core.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/io/core.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/io/core.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/io/core.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/io/mod.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/io/mod.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/io/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/io/mod.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/iter.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/iter.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/iter.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/iter.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/algorithm.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/algorithm.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/algorithm.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/algorithm.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/bhcomp.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/bhcomp.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/bhcomp.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/bhcomp.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/bignum.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/bignum.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/bignum.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/bignum.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/cached.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/cached.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/cached.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/cached.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/cached_float80.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/cached_float80.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/cached_float80.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/cached_float80.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/digit.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/digit.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/digit.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/digit.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/errors.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/errors.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/errors.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/errors.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/exponent.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/exponent.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/exponent.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/exponent.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/float.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/float.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/float.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/float.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/large_powers.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/large_powers.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/large_powers.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/large_powers.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/large_powers32.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/large_powers32.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/large_powers32.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/large_powers32.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/large_powers64.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/large_powers64.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/large_powers64.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/large_powers64.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/math.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/math.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/math.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/math.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/mod.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/mod.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/mod.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/num.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/num.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/num.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/num.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/parse.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/parse.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/parse.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/parse.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/rounding.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/rounding.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/rounding.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/rounding.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/shift.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/shift.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/shift.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/shift.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/small_powers.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/small_powers.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lexical/small_powers.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/small_powers.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lib.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lib.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/macros.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/macros.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/macros.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/macros.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/map.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/map.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/map.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/map.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/number.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/number.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/number.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/number.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/raw.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/raw.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/raw.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/raw.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/read.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/read.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/read.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/read.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/ser.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/ser.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/ser.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/ser.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/value/de.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/de.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/value/de.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/de.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/value/from.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/from.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/value/from.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/from.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/value/index.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/index.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/value/index.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/index.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/value/mod.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/mod.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/value/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/mod.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/value/partial_eq.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/partial_eq.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/value/partial_eq.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/partial_eq.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/value/ser.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/ser.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/src/value/ser.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/ser.rs
diff --git a/third_party/rust/anyhow/v1/crate/tests/compiletest.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/compiletest.rs
similarity index 100%
copy from third_party/rust/anyhow/v1/crate/tests/compiletest.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/compiletest.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/debug.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/debug.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/debug.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/debug.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/lexical.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/lexical.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/lexical/algorithm.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/algorithm.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/lexical/algorithm.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/algorithm.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/lexical/exponent.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/exponent.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/lexical/exponent.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/exponent.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/lexical/float.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/float.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/lexical/float.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/float.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/lexical/math.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/math.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/lexical/math.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/math.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/lexical/num.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/num.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/lexical/num.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/num.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/lexical/parse.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/parse.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/lexical/parse.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/parse.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/lexical/rounding.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/rounding.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/lexical/rounding.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/rounding.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/macros/mod.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/macros/mod.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/macros/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/macros/mod.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/map.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/map.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/map.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/map.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/regression.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/regression.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/regression.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/regression.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/regression/issue520.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/regression/issue520.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/regression/issue520.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/regression/issue520.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/regression/issue795.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/regression/issue795.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/regression/issue795.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/regression/issue795.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/regression/issue845.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/regression/issue845.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/regression/issue845.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/regression/issue845.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/stream.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/stream.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/stream.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/stream.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/test.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/test.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/test.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/test.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/missing_colon.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/missing_colon.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/missing_colon.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/missing_colon.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/missing_colon.stderr b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/missing_colon.stderr
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/missing_colon.stderr
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/missing_colon.stderr
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/missing_comma.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/missing_comma.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/missing_comma.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/missing_comma.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/missing_comma.stderr b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/missing_comma.stderr
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/missing_comma.stderr
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/missing_comma.stderr
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/missing_value.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/missing_value.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/missing_value.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/missing_value.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/missing_value.stderr b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/missing_value.stderr
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/missing_value.stderr
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/missing_value.stderr
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/not_found.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/not_found.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/not_found.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/not_found.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/not_found.stderr b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/not_found.stderr
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/not_found.stderr
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/not_found.stderr
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/parse_expr.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/parse_expr.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/parse_expr.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/parse_expr.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/parse_expr.stderr b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/parse_expr.stderr
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/parse_expr.stderr
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/parse_expr.stderr
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/parse_key.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/parse_key.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/parse_key.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/parse_key.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/parse_key.stderr b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/parse_key.stderr
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/parse_key.stderr
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/parse_key.stderr
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/unexpected_after_array_element.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_after_array_element.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/unexpected_after_array_element.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_after_array_element.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/unexpected_after_array_element.stderr b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_after_array_element.stderr
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/unexpected_after_array_element.stderr
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_after_array_element.stderr
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/unexpected_after_map_entry.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_after_map_entry.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/unexpected_after_map_entry.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_after_map_entry.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/unexpected_after_map_entry.stderr b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_after_map_entry.stderr
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/unexpected_after_map_entry.stderr
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_after_map_entry.stderr
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/unexpected_colon.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_colon.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/unexpected_colon.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_colon.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/unexpected_colon.stderr b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_colon.stderr
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/unexpected_colon.stderr
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_colon.stderr
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/unexpected_comma.rs b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_comma.rs
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/unexpected_comma.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_comma.rs
diff --git a/third_party/rust/serde_json/v1/crate/tests/ui/unexpected_comma.stderr b/third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_comma.stderr
similarity index 100%
rename from third_party/rust/serde_json/v1/crate/tests/ui/unexpected_comma.stderr
rename to third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_comma.stderr
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/.cargo_vcs_info.json
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/Cargo.toml
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/Cargo.toml
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/Cargo.toml.orig
diff --git a/third_party/rust/anyhow/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/anyhow/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/LICENSE-APACHE
diff --git a/third_party/rust/anyhow/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/LICENSE-MIT
similarity index 100%
copy from third_party/rust/anyhow/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/LICENSE-MIT
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/README.md
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/README.md
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/build.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/build.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/de.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/de.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/de.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/de.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/error.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/error.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/error.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/error.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/features_check/error.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/features_check/error.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/features_check/error.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/features_check/error.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/features_check/mod.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/features_check/mod.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/features_check/mod.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/features_check/mod.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/io/core.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/io/core.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/io/core.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/io/core.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/io/mod.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/io/mod.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/io/mod.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/io/mod.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/iter.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/iter.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/iter.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/iter.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/algorithm.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/algorithm.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/algorithm.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/algorithm.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/bhcomp.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/bhcomp.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/lexical/bhcomp.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/bhcomp.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/bignum.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/bignum.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/lexical/bignum.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/bignum.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/cached.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/cached.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/lexical/cached.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/cached.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/cached_float80.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/cached_float80.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/lexical/cached_float80.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/cached_float80.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/digit.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/digit.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/digit.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/digit.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/errors.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/errors.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/errors.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/errors.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/exponent.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/exponent.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/lexical/exponent.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/exponent.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/float.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/float.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/lexical/float.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/float.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/large_powers.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/large_powers.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/lexical/large_powers.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/large_powers.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/large_powers32.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/large_powers32.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/lexical/large_powers32.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/large_powers32.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/large_powers64.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/large_powers64.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/lexical/large_powers64.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/large_powers64.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/math.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/math.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/math.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/math.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/mod.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/mod.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/lexical/mod.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/mod.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/num.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/num.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/lexical/num.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/num.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/parse.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/parse.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/lexical/parse.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/parse.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/rounding.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/rounding.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/lexical/rounding.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/rounding.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/shift.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/shift.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/lexical/shift.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/shift.rs
diff --git a/third_party/rust/serde_json/v1/crate/src/lexical/small_powers.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/small_powers.rs
similarity index 100%
copy from third_party/rust/serde_json/v1/crate/src/lexical/small_powers.rs
copy to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/small_powers.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lib.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lib.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/macros.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/macros.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/macros.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/macros.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/map.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/map.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/map.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/map.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/number.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/number.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/number.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/number.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/raw.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/raw.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/raw.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/raw.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/read.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/read.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/read.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/read.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/ser.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/ser.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/ser.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/ser.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/value/de.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/de.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/value/de.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/de.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/value/from.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/from.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/value/from.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/from.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/value/index.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/index.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/value/index.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/index.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/value/mod.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/mod.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/value/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/mod.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/value/partial_eq.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/partial_eq.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/value/partial_eq.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/partial_eq.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/value/ser.rs b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/ser.rs
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/src/value/ser.rs
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/ser.rs
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/tests/README.md b/third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/tests/README.md
similarity index 100%
rename from third_party/rust/serde_json_lenient/v0_1/crate/tests/README.md
rename to third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/tests/README.md
diff --git a/third_party/rust/skrifa/v0_10/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/.cargo_vcs_info.json
diff --git a/third_party/rust/skrifa/v0_10/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/Cargo.toml
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/Cargo.toml
diff --git a/third_party/rust/skrifa/v0_10/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/Cargo.toml.orig
diff --git a/third_party/rust/skrifa/v0_10/crate/README.md b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/README.md
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/README.md
diff --git a/third_party/rust/skrifa/v0_10/crate/src/attribute.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/attribute.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/attribute.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/attribute.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/charmap.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/charmap.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/charmap.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/charmap.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/font.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/font.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/font.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/font.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/instance.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/instance.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/instance.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/instance.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/lib.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/lib.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/metrics.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/metrics.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/metrics.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/metrics.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/provider.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/provider.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/provider.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/provider.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/scale/cff/hint.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/cff/hint.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/scale/cff/hint.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/cff/hint.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/scale/cff/mod.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/cff/mod.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/scale/cff/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/cff/mod.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/scale/cff/scaler.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/cff/scaler.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/scale/cff/scaler.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/cff/scaler.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/scale/error.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/error.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/scale/error.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/error.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/scale/glyf/deltas.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/deltas.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/scale/glyf/deltas.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/deltas.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/scale/glyf/glyph.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/glyph.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/scale/glyf/glyph.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/glyph.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/scale/glyf/hint.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/hint.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/scale/glyf/hint.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/hint.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/scale/glyf/mem.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/mem.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/scale/glyf/mem.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/mem.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/scale/glyf/mod.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/mod.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/scale/glyf/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/mod.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/scale/glyf/scaler.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/scaler.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/scale/glyf/scaler.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/scaler.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/scale/mod.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/mod.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/scale/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/mod.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/scale/scaler.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/scaler.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/scale/scaler.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/scaler.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/setting.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/setting.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/setting.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/setting.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/small_array.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/small_array.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/small_array.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/small_array.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/string.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/string.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/string.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/string.rs
diff --git a/third_party/rust/skrifa/v0_10/crate/src/variation.rs b/third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/variation.rs
similarity index 100%
rename from third_party/rust/skrifa/v0_10/crate/src/variation.rs
rename to third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/variation.rs
diff --git a/third_party/rust/small_ctor/v0_1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/small_ctor/v0_1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/.cargo_vcs_info.json
diff --git a/third_party/rust/small_ctor/v0_1/crate/.github/workflows/clippy.yml b/third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/.github/workflows/clippy.yml
similarity index 100%
rename from third_party/rust/small_ctor/v0_1/crate/.github/workflows/clippy.yml
rename to third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/.github/workflows/clippy.yml
diff --git a/third_party/rust/small_ctor/v0_1/crate/.github/workflows/rustfmt.yml b/third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/.github/workflows/rustfmt.yml
similarity index 100%
rename from third_party/rust/small_ctor/v0_1/crate/.github/workflows/rustfmt.yml
rename to third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/.github/workflows/rustfmt.yml
diff --git a/third_party/rust/small_ctor/v0_1/crate/.github/workflows/tests.yml b/third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/.github/workflows/tests.yml
similarity index 100%
rename from third_party/rust/small_ctor/v0_1/crate/.github/workflows/tests.yml
rename to third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/.github/workflows/tests.yml
diff --git a/third_party/rust/small_ctor/v0_1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/.gitignore
similarity index 100%
rename from third_party/rust/small_ctor/v0_1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/.gitignore
diff --git a/third_party/rust/small_ctor/v0_1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/Cargo.toml
similarity index 100%
rename from third_party/rust/small_ctor/v0_1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/Cargo.toml
diff --git a/third_party/rust/small_ctor/v0_1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/small_ctor/v0_1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/Cargo.toml.orig
diff --git a/third_party/rust/small_ctor/v0_1/crate/LICENSE b/third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/LICENSE
similarity index 100%
rename from third_party/rust/small_ctor/v0_1/crate/LICENSE
rename to third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/LICENSE
diff --git a/third_party/rust/small_ctor/v0_1/crate/Makefile b/third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/Makefile
similarity index 100%
rename from third_party/rust/small_ctor/v0_1/crate/Makefile
rename to third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/Makefile
diff --git a/third_party/rust/small_ctor/v0_1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/README.md
similarity index 100%
rename from third_party/rust/small_ctor/v0_1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/README.md
diff --git a/third_party/rust/small_ctor/v0_1/crate/examples/hello.rs b/third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/examples/hello.rs
similarity index 100%
rename from third_party/rust/small_ctor/v0_1/crate/examples/hello.rs
rename to third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/examples/hello.rs
diff --git a/third_party/rust/small_ctor/v0_1/crate/scripts/check-example.py b/third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/scripts/check-example.py
similarity index 100%
rename from third_party/rust/small_ctor/v0_1/crate/scripts/check-example.py
rename to third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/scripts/check-example.py
diff --git a/third_party/rust/small_ctor/v0_1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/src/lib.rs
similarity index 100%
rename from third_party/rust/small_ctor/v0_1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/src/lib.rs
diff --git a/third_party/rust/static_assertions/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/.cargo_vcs_info.json
diff --git a/third_party/rust/static_assertions/v1/crate/CHANGELOG.md b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/CHANGELOG.md
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/CHANGELOG.md
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/CHANGELOG.md
diff --git a/third_party/rust/static_assertions/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/Cargo.toml
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/Cargo.toml
diff --git a/third_party/rust/static_assertions/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/Cargo.toml.orig
diff --git a/third_party/rust/static_assertions/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/LICENSE-APACHE
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/LICENSE-APACHE
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/LICENSE-APACHE
diff --git a/third_party/rust/static_assertions/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/LICENSE-MIT
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/LICENSE-MIT
diff --git a/third_party/rust/static_assertions/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/README.md
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/README.md
diff --git a/third_party/rust/static_assertions/v1/crate/src/assert_cfg.rs b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_cfg.rs
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/src/assert_cfg.rs
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_cfg.rs
diff --git a/third_party/rust/static_assertions/v1/crate/src/assert_eq_align.rs b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_eq_align.rs
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/src/assert_eq_align.rs
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_eq_align.rs
diff --git a/third_party/rust/static_assertions/v1/crate/src/assert_eq_size.rs b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_eq_size.rs
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/src/assert_eq_size.rs
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_eq_size.rs
diff --git a/third_party/rust/static_assertions/v1/crate/src/assert_fields.rs b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_fields.rs
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/src/assert_fields.rs
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_fields.rs
diff --git a/third_party/rust/static_assertions/v1/crate/src/assert_impl.rs b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_impl.rs
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/src/assert_impl.rs
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_impl.rs
diff --git a/third_party/rust/static_assertions/v1/crate/src/assert_obj_safe.rs b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_obj_safe.rs
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/src/assert_obj_safe.rs
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_obj_safe.rs
diff --git a/third_party/rust/static_assertions/v1/crate/src/assert_trait.rs b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_trait.rs
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/src/assert_trait.rs
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_trait.rs
diff --git a/third_party/rust/static_assertions/v1/crate/src/assert_type.rs b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_type.rs
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/src/assert_type.rs
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_type.rs
diff --git a/third_party/rust/static_assertions/v1/crate/src/const_assert.rs b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/const_assert.rs
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/src/const_assert.rs
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/const_assert.rs
diff --git a/third_party/rust/static_assertions/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/lib.rs
similarity index 100%
rename from third_party/rust/static_assertions/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/lib.rs
diff --git a/third_party/rust/strsim/v0_10/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/strsim/v0_10/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/.cargo_vcs_info.json
diff --git a/third_party/rust/strsim/v0_10/crate/.editorconfig b/third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/.editorconfig
similarity index 100%
rename from third_party/rust/strsim/v0_10/crate/.editorconfig
rename to third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/.editorconfig
diff --git a/third_party/rust/strsim/v0_10/crate/.gitattributes b/third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/.gitattributes
similarity index 100%
rename from third_party/rust/strsim/v0_10/crate/.gitattributes
rename to third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/.gitattributes
diff --git a/third_party/rust/strsim/v0_10/crate/.github/FUNDING.yml b/third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/.github/FUNDING.yml
similarity index 100%
rename from third_party/rust/strsim/v0_10/crate/.github/FUNDING.yml
rename to third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/.github/FUNDING.yml
diff --git a/third_party/rust/strsim/v0_10/crate/.github/workflows/ci.yml b/third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/.github/workflows/ci.yml
similarity index 100%
rename from third_party/rust/strsim/v0_10/crate/.github/workflows/ci.yml
rename to third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/.github/workflows/ci.yml
diff --git a/third_party/rust/strsim/v0_10/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/.gitignore
similarity index 100%
rename from third_party/rust/strsim/v0_10/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/.gitignore
diff --git a/third_party/rust/strsim/v0_10/crate/CHANGELOG.md b/third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/CHANGELOG.md
similarity index 100%
rename from third_party/rust/strsim/v0_10/crate/CHANGELOG.md
rename to third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/CHANGELOG.md
diff --git a/third_party/rust/strsim/v0_10/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/Cargo.toml
similarity index 100%
rename from third_party/rust/strsim/v0_10/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/Cargo.toml
diff --git a/third_party/rust/strsim/v0_10/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/strsim/v0_10/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/Cargo.toml.orig
diff --git a/third_party/rust/strsim/v0_10/crate/LICENSE b/third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/LICENSE
similarity index 100%
rename from third_party/rust/strsim/v0_10/crate/LICENSE
rename to third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/LICENSE
diff --git a/third_party/rust/strsim/v0_10/crate/README.md b/third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/README.md
similarity index 100%
rename from third_party/rust/strsim/v0_10/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/README.md
diff --git a/third_party/rust/strsim/v0_10/crate/benches/benches.rs b/third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/benches/benches.rs
similarity index 100%
rename from third_party/rust/strsim/v0_10/crate/benches/benches.rs
rename to third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/benches/benches.rs
diff --git a/third_party/rust/strsim/v0_10/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/src/lib.rs
similarity index 100%
rename from third_party/rust/strsim/v0_10/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/src/lib.rs
diff --git a/third_party/rust/strsim/v0_10/crate/tests/lib.rs b/third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/tests/lib.rs
similarity index 100%
rename from third_party/rust/strsim/v0_10/crate/tests/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/tests/lib.rs
diff --git a/third_party/rust/syn/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/syn/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/.cargo_vcs_info.json
diff --git a/third_party/rust/syn/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/Cargo.toml
similarity index 100%
rename from third_party/rust/syn/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/Cargo.toml
diff --git a/third_party/rust/syn/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/syn/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/Cargo.toml.orig
diff --git a/third_party/rust/autocfg/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/autocfg/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/LICENSE-APACHE
diff --git a/third_party/rust/anyhow/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/LICENSE-MIT
similarity index 100%
copy from third_party/rust/anyhow/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/LICENSE-MIT
diff --git a/third_party/rust/syn/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/README.md
similarity index 100%
rename from third_party/rust/syn/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/README.md
diff --git a/third_party/rust/syn/v1/crate/benches/file.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/benches/file.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/benches/file.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/benches/file.rs
diff --git a/third_party/rust/syn/v1/crate/benches/rust.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/benches/rust.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/benches/rust.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/benches/rust.rs
diff --git a/third_party/rust/syn/v1/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/build.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/build.rs
diff --git a/third_party/rust/syn/v1/crate/src/attr.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/attr.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/attr.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/attr.rs
diff --git a/third_party/rust/syn/v1/crate/src/await.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/await.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/await.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/await.rs
diff --git a/third_party/rust/syn/v1/crate/src/bigint.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/bigint.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/bigint.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/bigint.rs
diff --git a/third_party/rust/syn/v1/crate/src/buffer.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/buffer.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/buffer.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/buffer.rs
diff --git a/third_party/rust/syn/v1/crate/src/custom_keyword.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/custom_keyword.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/custom_keyword.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/custom_keyword.rs
diff --git a/third_party/rust/syn/v1/crate/src/custom_punctuation.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/custom_punctuation.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/custom_punctuation.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/custom_punctuation.rs
diff --git a/third_party/rust/syn/v1/crate/src/data.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/data.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/data.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/data.rs
diff --git a/third_party/rust/syn/v1/crate/src/derive.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/derive.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/derive.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/derive.rs
diff --git a/third_party/rust/syn/v1/crate/src/discouraged.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/discouraged.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/discouraged.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/discouraged.rs
diff --git a/third_party/rust/syn/v1/crate/src/error.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/error.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/error.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/error.rs
diff --git a/third_party/rust/syn/v1/crate/src/export.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/export.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/export.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/export.rs
diff --git a/third_party/rust/syn/v1/crate/src/expr.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/expr.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/expr.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/expr.rs
diff --git a/third_party/rust/syn/v1/crate/src/ext.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/ext.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/ext.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/ext.rs
diff --git a/third_party/rust/syn/v1/crate/src/file.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/file.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/file.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/file.rs
diff --git a/third_party/rust/syn/v1/crate/src/gen/clone.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/clone.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/gen/clone.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/clone.rs
diff --git a/third_party/rust/syn/v1/crate/src/gen/debug.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/debug.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/gen/debug.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/debug.rs
diff --git a/third_party/rust/syn/v1/crate/src/gen/eq.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/eq.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/gen/eq.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/eq.rs
diff --git a/third_party/rust/syn/v1/crate/src/gen/fold.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/fold.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/gen/fold.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/fold.rs
diff --git a/third_party/rust/syn/v1/crate/src/gen/hash.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/hash.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/gen/hash.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/hash.rs
diff --git a/third_party/rust/syn/v1/crate/src/gen/visit.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/visit.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/gen/visit.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/visit.rs
diff --git a/third_party/rust/syn/v1/crate/src/gen/visit_mut.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/visit_mut.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/gen/visit_mut.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/visit_mut.rs
diff --git a/third_party/rust/syn/v1/crate/src/gen_helper.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen_helper.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/gen_helper.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen_helper.rs
diff --git a/third_party/rust/syn/v1/crate/src/generics.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/generics.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/generics.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/generics.rs
diff --git a/third_party/rust/syn/v1/crate/src/group.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/group.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/group.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/group.rs
diff --git a/third_party/rust/syn/v1/crate/src/ident.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/ident.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/ident.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/ident.rs
diff --git a/third_party/rust/syn/v1/crate/src/item.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/item.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/item.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/item.rs
diff --git a/third_party/rust/syn/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/lib.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/lib.rs
diff --git a/third_party/rust/syn/v1/crate/src/lifetime.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/lifetime.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/lifetime.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/lifetime.rs
diff --git a/third_party/rust/syn/v1/crate/src/lit.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/lit.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/lit.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/lit.rs
diff --git a/third_party/rust/syn/v1/crate/src/lookahead.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/lookahead.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/lookahead.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/lookahead.rs
diff --git a/third_party/rust/syn/v1/crate/src/mac.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/mac.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/mac.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/mac.rs
diff --git a/third_party/rust/syn/v1/crate/src/macros.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/macros.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/macros.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/macros.rs
diff --git a/third_party/rust/syn/v1/crate/src/op.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/op.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/op.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/op.rs
diff --git a/third_party/rust/syn/v1/crate/src/parse.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/parse.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/parse.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/parse.rs
diff --git a/third_party/rust/syn/v1/crate/src/parse_macro_input.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/parse_macro_input.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/parse_macro_input.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/parse_macro_input.rs
diff --git a/third_party/rust/syn/v1/crate/src/parse_quote.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/parse_quote.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/parse_quote.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/parse_quote.rs
diff --git a/third_party/rust/syn/v1/crate/src/pat.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/pat.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/pat.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/pat.rs
diff --git a/third_party/rust/syn/v1/crate/src/path.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/path.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/path.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/path.rs
diff --git a/third_party/rust/syn/v1/crate/src/print.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/print.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/print.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/print.rs
diff --git a/third_party/rust/syn/v1/crate/src/punctuated.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/punctuated.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/punctuated.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/punctuated.rs
diff --git a/third_party/rust/syn/v1/crate/src/reserved.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/reserved.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/reserved.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/reserved.rs
diff --git a/third_party/rust/syn/v1/crate/src/sealed.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/sealed.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/sealed.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/sealed.rs
diff --git a/third_party/rust/syn/v1/crate/src/span.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/span.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/span.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/span.rs
diff --git a/third_party/rust/syn/v1/crate/src/spanned.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/spanned.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/spanned.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/spanned.rs
diff --git a/third_party/rust/syn/v1/crate/src/stmt.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/stmt.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/stmt.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/stmt.rs
diff --git a/third_party/rust/syn/v1/crate/src/thread.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/thread.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/thread.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/thread.rs
diff --git a/third_party/rust/syn/v1/crate/src/token.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/token.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/token.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/token.rs
diff --git a/third_party/rust/syn/v1/crate/src/tt.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/tt.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/tt.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/tt.rs
diff --git a/third_party/rust/syn/v1/crate/src/ty.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/ty.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/ty.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/ty.rs
diff --git a/third_party/rust/syn/v1/crate/src/verbatim.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/verbatim.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/verbatim.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/verbatim.rs
diff --git a/third_party/rust/syn/v1/crate/src/whitespace.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/whitespace.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/src/whitespace.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/whitespace.rs
diff --git a/third_party/rust/syn/v1/crate/tests/.gitignore b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/.gitignore
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/.gitignore
diff --git a/third_party/rust/syn/v1/crate/tests/common/eq.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/common/eq.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/common/eq.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/common/eq.rs
diff --git a/third_party/rust/syn/v1/crate/tests/common/mod.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/common/mod.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/common/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/common/mod.rs
diff --git a/third_party/rust/syn/v1/crate/tests/common/parse.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/common/parse.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/common/parse.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/common/parse.rs
diff --git a/third_party/rust/syn/v1/crate/tests/debug/gen.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/debug/gen.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/debug/gen.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/debug/gen.rs
diff --git a/third_party/rust/syn/v1/crate/tests/debug/mod.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/debug/mod.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/debug/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/debug/mod.rs
diff --git a/third_party/rust/syn/v1/crate/tests/macros/mod.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/macros/mod.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/macros/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/macros/mod.rs
diff --git a/third_party/rust/syn/v1/crate/tests/regression.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/regression.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/regression.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/regression.rs
diff --git a/third_party/rust/syn/v1/crate/tests/regression/issue1108.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/regression/issue1108.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/regression/issue1108.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/regression/issue1108.rs
diff --git a/third_party/rust/syn/v1/crate/tests/repo/mod.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/repo/mod.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/repo/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/repo/mod.rs
diff --git a/third_party/rust/syn/v1/crate/tests/repo/progress.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/repo/progress.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/repo/progress.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/repo/progress.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_asyncness.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_asyncness.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_asyncness.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_asyncness.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_attribute.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_attribute.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_attribute.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_attribute.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_derive_input.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_derive_input.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_derive_input.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_derive_input.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_expr.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_expr.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_expr.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_expr.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_generics.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_generics.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_generics.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_generics.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_grouping.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_grouping.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_grouping.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_grouping.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_ident.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_ident.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_ident.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_ident.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_item.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_item.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_item.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_item.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_iterators.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_iterators.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_iterators.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_iterators.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_lit.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_lit.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_lit.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_lit.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_meta.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_meta.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_meta.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_meta.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_parse_buffer.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_parse_buffer.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_parse_buffer.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_parse_buffer.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_parse_stream.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_parse_stream.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_parse_stream.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_parse_stream.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_pat.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_pat.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_pat.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_pat.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_path.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_path.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_path.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_path.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_precedence.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_precedence.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_precedence.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_precedence.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_receiver.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_receiver.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_receiver.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_receiver.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_round_trip.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_round_trip.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_round_trip.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_round_trip.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_shebang.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_shebang.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_shebang.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_shebang.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_should_parse.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_should_parse.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_should_parse.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_should_parse.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_size.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_size.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_size.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_size.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_stmt.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_stmt.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_stmt.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_stmt.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_token_trees.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_token_trees.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_token_trees.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_token_trees.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_ty.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_ty.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_ty.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_ty.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_visibility.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_visibility.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/test_visibility.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_visibility.rs
diff --git a/third_party/rust/syn/v1/crate/tests/zzz_stable.rs b/third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/zzz_stable.rs
similarity index 100%
rename from third_party/rust/syn/v1/crate/tests/zzz_stable.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/zzz_stable.rs
diff --git a/third_party/rust/syn/v2/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/syn/v2/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/.cargo_vcs_info.json
diff --git a/third_party/rust/syn/v2/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/Cargo.toml
similarity index 100%
rename from third_party/rust/syn/v2/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/Cargo.toml
diff --git a/third_party/rust/syn/v2/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/syn/v2/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/Cargo.toml.orig
diff --git a/third_party/rust/anyhow/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/LICENSE-APACHE
similarity index 100%
rename from third_party/rust/anyhow/v1/crate/LICENSE-APACHE
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/LICENSE-APACHE
diff --git a/third_party/rust/anyhow/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/LICENSE-MIT
similarity index 100%
copy from third_party/rust/anyhow/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/LICENSE-MIT
diff --git a/third_party/rust/syn/v2/crate/README.md b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/README.md
similarity index 100%
rename from third_party/rust/syn/v2/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/README.md
diff --git a/third_party/rust/syn/v2/crate/benches/file.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/benches/file.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/benches/file.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/benches/file.rs
diff --git a/third_party/rust/syn/v2/crate/benches/rust.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/benches/rust.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/benches/rust.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/benches/rust.rs
diff --git a/third_party/rust/syn/v2/crate/src/attr.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/attr.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/attr.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/attr.rs
diff --git a/third_party/rust/syn/v2/crate/src/bigint.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/bigint.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/bigint.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/bigint.rs
diff --git a/third_party/rust/syn/v2/crate/src/buffer.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/buffer.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/buffer.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/buffer.rs
diff --git a/third_party/rust/syn/v2/crate/src/custom_keyword.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/custom_keyword.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/custom_keyword.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/custom_keyword.rs
diff --git a/third_party/rust/syn/v2/crate/src/custom_punctuation.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/custom_punctuation.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/custom_punctuation.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/custom_punctuation.rs
diff --git a/third_party/rust/syn/v2/crate/src/data.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/data.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/data.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/data.rs
diff --git a/third_party/rust/syn/v2/crate/src/derive.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/derive.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/derive.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/derive.rs
diff --git a/third_party/rust/syn/v2/crate/src/discouraged.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/discouraged.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/discouraged.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/discouraged.rs
diff --git a/third_party/rust/syn/v2/crate/src/drops.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/drops.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/drops.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/drops.rs
diff --git a/third_party/rust/syn/v2/crate/src/error.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/error.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/error.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/error.rs
diff --git a/third_party/rust/syn/v2/crate/src/export.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/export.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/export.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/export.rs
diff --git a/third_party/rust/syn/v2/crate/src/expr.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/expr.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/expr.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/expr.rs
diff --git a/third_party/rust/syn/v2/crate/src/ext.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/ext.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/ext.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/ext.rs
diff --git a/third_party/rust/syn/v2/crate/src/file.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/file.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/file.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/file.rs
diff --git a/third_party/rust/syn/v2/crate/src/gen/clone.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/clone.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/gen/clone.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/clone.rs
diff --git a/third_party/rust/syn/v2/crate/src/gen/debug.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/debug.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/gen/debug.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/debug.rs
diff --git a/third_party/rust/syn/v2/crate/src/gen/eq.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/eq.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/gen/eq.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/eq.rs
diff --git a/third_party/rust/syn/v2/crate/src/gen/fold.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/fold.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/gen/fold.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/fold.rs
diff --git a/third_party/rust/syn/v2/crate/src/gen/hash.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/hash.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/gen/hash.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/hash.rs
diff --git a/third_party/rust/syn/v2/crate/src/gen/visit.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/visit.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/gen/visit.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/visit.rs
diff --git a/third_party/rust/syn/v2/crate/src/gen/visit_mut.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/visit_mut.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/gen/visit_mut.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/visit_mut.rs
diff --git a/third_party/rust/syn/v2/crate/src/gen_helper.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen_helper.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/gen_helper.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen_helper.rs
diff --git a/third_party/rust/syn/v2/crate/src/generics.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/generics.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/generics.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/generics.rs
diff --git a/third_party/rust/syn/v2/crate/src/group.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/group.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/group.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/group.rs
diff --git a/third_party/rust/syn/v2/crate/src/ident.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/ident.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/ident.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/ident.rs
diff --git a/third_party/rust/syn/v2/crate/src/item.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/item.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/item.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/item.rs
diff --git a/third_party/rust/syn/v2/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/lib.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/lib.rs
diff --git a/third_party/rust/syn/v2/crate/src/lifetime.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/lifetime.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/lifetime.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/lifetime.rs
diff --git a/third_party/rust/syn/v2/crate/src/lit.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/lit.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/lit.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/lit.rs
diff --git a/third_party/rust/syn/v2/crate/src/lookahead.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/lookahead.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/lookahead.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/lookahead.rs
diff --git a/third_party/rust/syn/v2/crate/src/mac.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/mac.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/mac.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/mac.rs
diff --git a/third_party/rust/syn/v2/crate/src/macros.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/macros.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/macros.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/macros.rs
diff --git a/third_party/rust/syn/v2/crate/src/meta.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/meta.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/meta.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/meta.rs
diff --git a/third_party/rust/syn/v2/crate/src/op.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/op.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/op.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/op.rs
diff --git a/third_party/rust/syn/v2/crate/src/parse.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/parse.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/parse.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/parse.rs
diff --git a/third_party/rust/syn/v2/crate/src/parse_macro_input.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/parse_macro_input.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/parse_macro_input.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/parse_macro_input.rs
diff --git a/third_party/rust/syn/v2/crate/src/parse_quote.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/parse_quote.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/parse_quote.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/parse_quote.rs
diff --git a/third_party/rust/syn/v2/crate/src/pat.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/pat.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/pat.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/pat.rs
diff --git a/third_party/rust/syn/v2/crate/src/path.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/path.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/path.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/path.rs
diff --git a/third_party/rust/syn/v2/crate/src/print.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/print.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/print.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/print.rs
diff --git a/third_party/rust/syn/v2/crate/src/punctuated.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/punctuated.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/punctuated.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/punctuated.rs
diff --git a/third_party/rust/syn/v2/crate/src/restriction.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/restriction.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/restriction.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/restriction.rs
diff --git a/third_party/rust/syn/v2/crate/src/sealed.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/sealed.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/sealed.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/sealed.rs
diff --git a/third_party/rust/syn/v2/crate/src/span.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/span.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/span.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/span.rs
diff --git a/third_party/rust/syn/v2/crate/src/spanned.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/spanned.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/spanned.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/spanned.rs
diff --git a/third_party/rust/syn/v2/crate/src/stmt.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/stmt.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/stmt.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/stmt.rs
diff --git a/third_party/rust/syn/v2/crate/src/thread.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/thread.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/thread.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/thread.rs
diff --git a/third_party/rust/syn/v2/crate/src/token.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/token.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/token.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/token.rs
diff --git a/third_party/rust/syn/v2/crate/src/tt.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/tt.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/tt.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/tt.rs
diff --git a/third_party/rust/syn/v2/crate/src/ty.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/ty.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/ty.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/ty.rs
diff --git a/third_party/rust/syn/v2/crate/src/verbatim.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/verbatim.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/verbatim.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/verbatim.rs
diff --git a/third_party/rust/syn/v2/crate/src/whitespace.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/whitespace.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/src/whitespace.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/whitespace.rs
diff --git a/third_party/rust/syn/v2/crate/tests/common/eq.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/common/eq.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/common/eq.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/common/eq.rs
diff --git a/third_party/rust/syn/v1/crate/tests/common/mod.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/common/mod.rs
similarity index 100%
copy from third_party/rust/syn/v1/crate/tests/common/mod.rs
copy to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/common/mod.rs
diff --git a/third_party/rust/syn/v2/crate/tests/common/parse.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/common/parse.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/common/parse.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/common/parse.rs
diff --git a/third_party/rust/syn/v2/crate/tests/debug/gen.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/debug/gen.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/debug/gen.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/debug/gen.rs
diff --git a/third_party/rust/syn/v2/crate/tests/debug/mod.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/debug/mod.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/debug/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/debug/mod.rs
diff --git a/third_party/rust/syn/v2/crate/tests/macros/mod.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/macros/mod.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/macros/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/macros/mod.rs
diff --git a/third_party/rust/syn/v2/crate/tests/regression.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/regression.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/regression.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/regression.rs
diff --git a/third_party/rust/syn/v1/crate/tests/regression/issue1108.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/regression/issue1108.rs
similarity index 100%
copy from third_party/rust/syn/v1/crate/tests/regression/issue1108.rs
copy to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/regression/issue1108.rs
diff --git a/third_party/rust/syn/v2/crate/tests/regression/issue1235.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/regression/issue1235.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/regression/issue1235.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/regression/issue1235.rs
diff --git a/third_party/rust/syn/v2/crate/tests/repo/mod.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/repo/mod.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/repo/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/repo/mod.rs
diff --git a/third_party/rust/syn/v1/crate/tests/repo/progress.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/repo/progress.rs
similarity index 100%
copy from third_party/rust/syn/v1/crate/tests/repo/progress.rs
copy to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/repo/progress.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_asyncness.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_asyncness.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_asyncness.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_asyncness.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_attribute.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_attribute.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_attribute.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_attribute.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_derive_input.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_derive_input.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_derive_input.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_derive_input.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_expr.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_expr.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_expr.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_expr.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_generics.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_generics.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_generics.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_generics.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_grouping.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_grouping.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_grouping.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_grouping.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_ident.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_ident.rs
similarity index 100%
copy from third_party/rust/syn/v1/crate/tests/test_ident.rs
copy to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_ident.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_item.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_item.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_item.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_item.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_iterators.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_iterators.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_iterators.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_iterators.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_lit.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_lit.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_lit.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_lit.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_meta.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_meta.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_meta.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_meta.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_parse_buffer.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_parse_buffer.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_parse_buffer.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_parse_buffer.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_parse_stream.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_parse_stream.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_parse_stream.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_parse_stream.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_pat.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_pat.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_pat.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_pat.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_path.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_path.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_path.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_path.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_precedence.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_precedence.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_precedence.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_precedence.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_receiver.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_receiver.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_receiver.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_receiver.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_round_trip.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_round_trip.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_round_trip.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_round_trip.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_shebang.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_shebang.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_shebang.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_shebang.rs
diff --git a/third_party/rust/syn/v1/crate/tests/test_should_parse.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_should_parse.rs
similarity index 100%
copy from third_party/rust/syn/v1/crate/tests/test_should_parse.rs
copy to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_should_parse.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_size.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_size.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_size.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_size.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_stmt.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_stmt.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_stmt.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_stmt.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_token_trees.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_token_trees.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_token_trees.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_token_trees.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_ty.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_ty.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_ty.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_ty.rs
diff --git a/third_party/rust/syn/v2/crate/tests/test_visibility.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_visibility.rs
similarity index 100%
rename from third_party/rust/syn/v2/crate/tests/test_visibility.rs
rename to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_visibility.rs
diff --git a/third_party/rust/syn/v1/crate/tests/zzz_stable.rs b/third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/zzz_stable.rs
similarity index 100%
copy from third_party/rust/syn/v1/crate/tests/zzz_stable.rs
copy to third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/zzz_stable.rs
diff --git a/third_party/rust/termcolor/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/termcolor/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/.cargo_vcs_info.json
diff --git a/third_party/rust/termcolor/v1/crate/.github/workflows/ci.yml b/third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/.github/workflows/ci.yml
similarity index 100%
rename from third_party/rust/termcolor/v1/crate/.github/workflows/ci.yml
rename to third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/.github/workflows/ci.yml
diff --git a/third_party/rust/termcolor/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/.gitignore
similarity index 100%
rename from third_party/rust/termcolor/v1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/.gitignore
diff --git a/third_party/rust/aho_corasick/v0_7/crate/COPYING b/third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/COPYING
similarity index 100%
copy from third_party/rust/aho_corasick/v0_7/crate/COPYING
copy to third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/COPYING
diff --git a/third_party/rust/termcolor/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/Cargo.toml
similarity index 100%
rename from third_party/rust/termcolor/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/Cargo.toml
diff --git a/third_party/rust/termcolor/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/termcolor/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/Cargo.toml.orig
diff --git a/third_party/rust/aho_corasick/v0_7/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/LICENSE-MIT
similarity index 100%
copy from third_party/rust/aho_corasick/v0_7/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/LICENSE-MIT
diff --git a/third_party/rust/termcolor/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/README.md
similarity index 100%
rename from third_party/rust/termcolor/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/README.md
diff --git a/third_party/rust/aho_corasick/v0_7/crate/UNLICENSE b/third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/UNLICENSE
similarity index 100%
copy from third_party/rust/aho_corasick/v0_7/crate/UNLICENSE
copy to third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/UNLICENSE
diff --git a/third_party/rust/aho_corasick/v0_7/crate/rustfmt.toml b/third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/rustfmt.toml
similarity index 100%
copy from third_party/rust/aho_corasick/v0_7/crate/rustfmt.toml
copy to third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/rustfmt.toml
diff --git a/third_party/rust/termcolor/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/src/lib.rs
similarity index 100%
rename from third_party/rust/termcolor/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/src/lib.rs
diff --git a/third_party/rust/unicode_ident/v1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/.cargo_vcs_info.json
diff --git a/third_party/rust/unicode_ident/v1/crate/.gitattributes b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/.gitattributes
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/.gitattributes
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/.gitattributes
diff --git a/third_party/rust/cxx/v1/crate/.github/FUNDING.yml b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/.github/FUNDING.yml
similarity index 100%
copy from third_party/rust/cxx/v1/crate/.github/FUNDING.yml
copy to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/.github/FUNDING.yml
diff --git a/third_party/rust/unicode_ident/v1/crate/.github/workflows/ci.yml b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/.github/workflows/ci.yml
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/.github/workflows/ci.yml
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/.github/workflows/ci.yml
diff --git a/third_party/rust/unicode_ident/v1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/.gitignore
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/.gitignore
diff --git a/third_party/rust/unicode_ident/v1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/Cargo.toml
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/Cargo.toml
diff --git a/third_party/rust/unicode_ident/v1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/Cargo.toml.orig
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cxx/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/LICENSE-APACHE
diff --git a/third_party/rust/cxx/v1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/LICENSE-MIT
similarity index 100%
copy from third_party/rust/cxx/v1/crate/LICENSE-MIT
copy to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/LICENSE-MIT
diff --git a/third_party/rust/unicode_ident/v1/crate/LICENSE-UNICODE b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/LICENSE-UNICODE
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/LICENSE-UNICODE
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/LICENSE-UNICODE
diff --git a/third_party/rust/unicode_ident/v1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/README.md
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/README.md
diff --git a/third_party/rust/unicode_ident/v1/crate/benches/xid.rs b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/benches/xid.rs
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/benches/xid.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/benches/xid.rs
diff --git a/third_party/rust/unicode_ident/v1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/src/lib.rs
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/src/lib.rs
diff --git a/third_party/rust/unicode_ident/v1/crate/src/tables.rs b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/src/tables.rs
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/src/tables.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/src/tables.rs
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/compare.rs b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/compare.rs
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/tests/compare.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/compare.rs
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/fst/.gitignore b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/fst/.gitignore
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/tests/fst/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/fst/.gitignore
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/fst/mod.rs b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/fst/mod.rs
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/tests/fst/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/fst/mod.rs
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/fst/xid_continue.fst b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/fst/xid_continue.fst
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/tests/fst/xid_continue.fst
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/fst/xid_continue.fst
Binary files differ
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/fst/xid_start.fst b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/fst/xid_start.fst
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/tests/fst/xid_start.fst
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/fst/xid_start.fst
Binary files differ
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/roaring/mod.rs b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/roaring/mod.rs
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/tests/roaring/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/roaring/mod.rs
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/static_size.rs b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/static_size.rs
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/tests/static_size.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/static_size.rs
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/tables/mod.rs b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/tables/mod.rs
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/tests/tables/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/tables/mod.rs
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/tables/tables.rs b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/tables/tables.rs
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/tests/tables/tables.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/tables/tables.rs
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/trie/mod.rs b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/trie/mod.rs
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/tests/trie/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/trie/mod.rs
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/trie/trie.rs b/third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/trie/trie.rs
similarity index 100%
rename from third_party/rust/unicode_ident/v1/crate/tests/trie/trie.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/trie/trie.rs
diff --git a/third_party/rust/unicode_linebreak/v0_1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/unicode_linebreak/v0_1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/.cargo_vcs_info.json
diff --git a/third_party/rust/unicode_linebreak/v0_1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/Cargo.toml
similarity index 100%
rename from third_party/rust/unicode_linebreak/v0_1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/Cargo.toml
diff --git a/third_party/rust/unicode_linebreak/v0_1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/unicode_linebreak/v0_1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/Cargo.toml.orig
diff --git a/third_party/rust/unicode_linebreak/v0_1/crate/LICENSE b/third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/LICENSE
similarity index 100%
rename from third_party/rust/unicode_linebreak/v0_1/crate/LICENSE
rename to third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/LICENSE
diff --git a/third_party/rust/unicode_linebreak/v0_1/crate/LineBreak.txt b/third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/LineBreak.txt
similarity index 100%
rename from third_party/rust/unicode_linebreak/v0_1/crate/LineBreak.txt
rename to third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/LineBreak.txt
diff --git a/third_party/rust/unicode_linebreak/v0_1/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/build.rs
similarity index 100%
rename from third_party/rust/unicode_linebreak/v0_1/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/build.rs
diff --git a/third_party/rust/unicode_linebreak/v0_1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/src/lib.rs
similarity index 100%
rename from third_party/rust/unicode_linebreak/v0_1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/src/lib.rs
diff --git a/third_party/rust/unicode_linebreak/v0_1/crate/src/shared.rs b/third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/src/shared.rs
similarity index 100%
rename from third_party/rust/unicode_linebreak/v0_1/crate/src/shared.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/src/shared.rs
diff --git a/third_party/rust/unicode_width/v0_1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/unicode_width/v0_1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/.cargo_vcs_info.json
diff --git a/third_party/rust/unicode_width/v0_1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/.gitignore
similarity index 100%
rename from third_party/rust/unicode_width/v0_1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/.gitignore
diff --git a/third_party/rust/unicode_width/v0_1/crate/.travis.yml b/third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/.travis.yml
similarity index 100%
rename from third_party/rust/unicode_width/v0_1/crate/.travis.yml
rename to third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/.travis.yml
diff --git a/third_party/rust/unicode_width/v0_1/crate/COPYRIGHT b/third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/COPYRIGHT
similarity index 100%
rename from third_party/rust/unicode_width/v0_1/crate/COPYRIGHT
rename to third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/COPYRIGHT
diff --git a/third_party/rust/unicode_width/v0_1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/Cargo.toml
similarity index 100%
rename from third_party/rust/unicode_width/v0_1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/Cargo.toml
diff --git a/third_party/rust/unicode_width/v0_1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/unicode_width/v0_1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/Cargo.toml.orig
diff --git a/third_party/rust/cfg_if/v1/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/LICENSE-APACHE
similarity index 100%
copy from third_party/rust/cfg_if/v1/crate/LICENSE-APACHE
copy to third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/LICENSE-APACHE
diff --git a/third_party/rust/unicode_width/v0_1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/LICENSE-MIT
similarity index 100%
rename from third_party/rust/unicode_width/v0_1/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/LICENSE-MIT
diff --git a/third_party/rust/unicode_width/v0_1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/README.md
similarity index 100%
rename from third_party/rust/unicode_width/v0_1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/README.md
diff --git a/third_party/rust/unicode_width/v0_1/crate/scripts/unicode.py b/third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/scripts/unicode.py
similarity index 100%
rename from third_party/rust/unicode_width/v0_1/crate/scripts/unicode.py
rename to third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/scripts/unicode.py
diff --git a/third_party/rust/unicode_width/v0_1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/src/lib.rs
similarity index 100%
rename from third_party/rust/unicode_width/v0_1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/src/lib.rs
diff --git a/third_party/rust/unicode_width/v0_1/crate/src/tables.rs b/third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/src/tables.rs
similarity index 100%
rename from third_party/rust/unicode_width/v0_1/crate/src/tables.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/src/tables.rs
diff --git a/third_party/rust/unicode_width/v0_1/crate/src/tests.rs b/third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/src/tests.rs
similarity index 100%
rename from third_party/rust/unicode_width/v0_1/crate/src/tests.rs
rename to third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/src/tests.rs
diff --git a/third_party/rust/winapi/v0_3/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/.cargo_vcs_info.json
diff --git a/third_party/rust/winapi/v0_3/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/Cargo.toml
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/Cargo.toml
diff --git a/third_party/rust/winapi/v0_3/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/Cargo.toml.orig
diff --git a/third_party/rust/winapi/v0_3/crate/LICENSE-APACHE b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/LICENSE-APACHE
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/LICENSE-APACHE
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/LICENSE-APACHE
diff --git a/third_party/rust/winapi/v0_3/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/LICENSE-MIT
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/LICENSE-MIT
diff --git a/third_party/rust/winapi/v0_3/crate/README.md b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/README.md
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/README.md
diff --git a/third_party/rust/winapi/v0_3/crate/build.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/build.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/build.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/build.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/km/d3dkmthk.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/km/d3dkmthk.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/km/d3dkmthk.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/km/d3dkmthk.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/km/mod.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/km/mod.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/km/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/km/mod.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/lib.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/lib.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/macros.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/macros.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/macros.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/macros.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/basetsd.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/basetsd.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/basetsd.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/basetsd.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/bcrypt.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/bcrypt.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/bcrypt.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/bcrypt.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/bthdef.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/bthdef.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/bthdef.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/bthdef.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/bthioctl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/bthioctl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/bthioctl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/bthioctl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/bthsdpdef.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/bthsdpdef.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/bthsdpdef.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/bthsdpdef.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/bugcodes.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/bugcodes.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/bugcodes.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/bugcodes.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/cderr.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/cderr.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/cderr.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/cderr.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/cfg.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/cfg.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/cfg.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/cfg.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/d3d9.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/d3d9.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/d3d9.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/d3d9.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/d3d9caps.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/d3d9caps.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/d3d9caps.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/d3d9caps.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/d3d9types.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/d3d9types.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/d3d9types.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/d3d9types.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/d3dkmdt.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/d3dkmdt.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/d3dkmdt.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/d3dkmdt.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/d3dukmdt.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/d3dukmdt.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/d3dukmdt.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/d3dukmdt.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/dcomptypes.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dcomptypes.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/dcomptypes.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dcomptypes.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/devguid.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/devguid.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/devguid.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/devguid.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/devpkey.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/devpkey.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/devpkey.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/devpkey.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/devpropdef.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/devpropdef.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/devpropdef.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/devpropdef.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/dinputd.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dinputd.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/dinputd.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dinputd.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/dxgi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/dxgi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/dxgi1_2.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi1_2.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/dxgi1_2.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi1_2.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/dxgi1_3.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi1_3.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/dxgi1_3.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi1_3.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/dxgi1_4.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi1_4.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/dxgi1_4.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi1_4.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/dxgi1_5.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi1_5.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/dxgi1_5.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi1_5.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/dxgi1_6.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi1_6.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/dxgi1_6.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi1_6.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/dxgiformat.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgiformat.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/dxgiformat.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgiformat.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/dxgitype.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgitype.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/dxgitype.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgitype.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/evntprov.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/evntprov.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/evntprov.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/evntprov.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/evntrace.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/evntrace.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/evntrace.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/evntrace.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/guiddef.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/guiddef.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/guiddef.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/guiddef.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/hidclass.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/hidclass.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/hidclass.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/hidclass.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/hidpi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/hidpi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/hidpi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/hidpi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/hidsdi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/hidsdi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/hidsdi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/hidsdi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/hidusage.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/hidusage.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/hidusage.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/hidusage.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/ifdef.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ifdef.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/ifdef.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ifdef.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/ifmib.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ifmib.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/ifmib.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ifmib.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/in6addr.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/in6addr.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/in6addr.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/in6addr.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/inaddr.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/inaddr.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/inaddr.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/inaddr.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/intsafe.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/intsafe.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/intsafe.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/intsafe.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/ipifcons.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ipifcons.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/ipifcons.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ipifcons.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/ipmib.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ipmib.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/ipmib.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ipmib.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/iprtrmib.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/iprtrmib.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/iprtrmib.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/iprtrmib.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/ks.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ks.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/ks.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ks.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/ksmedia.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ksmedia.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/ksmedia.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ksmedia.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/ktmtypes.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ktmtypes.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/ktmtypes.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ktmtypes.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/lmcons.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/lmcons.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/lmcons.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/lmcons.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/minwindef.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/minwindef.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/minwindef.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/minwindef.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/mmreg.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/mmreg.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/mmreg.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/mmreg.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/mod.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/mod.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/mod.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/mprapidef.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/mprapidef.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/mprapidef.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/mprapidef.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/mstcpip.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/mstcpip.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/mstcpip.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/mstcpip.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/mswsockdef.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/mswsockdef.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/mswsockdef.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/mswsockdef.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/netioapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/netioapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/netioapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/netioapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/nldef.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/nldef.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/nldef.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/nldef.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/ntddndis.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ntddndis.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/ntddndis.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ntddndis.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/ntddscsi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ntddscsi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/ntddscsi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ntddscsi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/ntddser.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ntddser.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/ntddser.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ntddser.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/ntdef.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ntdef.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/ntdef.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ntdef.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/ntstatus.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ntstatus.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/ntstatus.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ntstatus.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/qos.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/qos.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/qos.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/qos.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/rpc.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/rpc.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/rpc.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/rpc.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/rpcdce.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/rpcdce.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/rpcdce.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/rpcdce.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/rpcndr.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/rpcndr.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/rpcndr.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/rpcndr.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/sddl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/sddl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/sddl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/sddl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/sspi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/sspi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/sspi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/sspi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/stralign.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/stralign.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/stralign.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/stralign.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/tcpestats.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/tcpestats.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/tcpestats.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/tcpestats.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/tcpmib.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/tcpmib.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/tcpmib.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/tcpmib.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/transportsettingcommon.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/transportsettingcommon.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/transportsettingcommon.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/transportsettingcommon.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/tvout.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/tvout.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/tvout.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/tvout.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/udpmib.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/udpmib.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/udpmib.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/udpmib.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/usb.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/usb.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/usb.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/usb.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/usbioctl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/usbioctl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/usbioctl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/usbioctl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/usbiodef.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/usbiodef.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/usbiodef.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/usbiodef.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/usbscan.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/usbscan.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/usbscan.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/usbscan.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/usbspec.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/usbspec.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/usbspec.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/usbspec.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/windef.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/windef.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/windef.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/windef.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/windot11.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/windot11.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/windot11.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/windot11.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/windowsx.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/windowsx.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/windowsx.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/windowsx.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/winerror.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/winerror.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/winerror.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/winerror.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/winusbio.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/winusbio.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/winusbio.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/winusbio.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/wlantypes.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/wlantypes.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/wlantypes.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/wlantypes.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/wmistr.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/wmistr.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/wmistr.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/wmistr.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/wnnc.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/wnnc.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/wnnc.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/wnnc.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/ws2def.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ws2def.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/ws2def.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ws2def.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/ws2ipdef.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ws2ipdef.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/ws2ipdef.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ws2ipdef.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/wtypes.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/wtypes.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/wtypes.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/wtypes.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/shared/wtypesbase.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/wtypesbase.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/shared/wtypesbase.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/wtypesbase.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/ucrt/corecrt.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/ucrt/corecrt.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/ucrt/corecrt.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/ucrt/corecrt.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/ucrt/mod.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/ucrt/mod.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/ucrt/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/ucrt/mod.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/accctrl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/accctrl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/accctrl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/accctrl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/aclapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/aclapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/aclapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/aclapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/adhoc.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/adhoc.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/adhoc.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/adhoc.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/appmgmt.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/appmgmt.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/appmgmt.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/appmgmt.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/audioclient.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/audioclient.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/audioclient.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/audioclient.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/audiosessiontypes.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/audiosessiontypes.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/audiosessiontypes.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/audiosessiontypes.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/avrt.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/avrt.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/avrt.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/avrt.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/bits.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/bits.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/bits10_1.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits10_1.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/bits10_1.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits10_1.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/bits1_5.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits1_5.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/bits1_5.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits1_5.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/bits2_0.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits2_0.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/bits2_0.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits2_0.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/bits2_5.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits2_5.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/bits2_5.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits2_5.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/bits3_0.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits3_0.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/bits3_0.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits3_0.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/bits4_0.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits4_0.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/bits4_0.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits4_0.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/bits5_0.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits5_0.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/bits5_0.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits5_0.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/bitscfg.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bitscfg.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/bitscfg.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bitscfg.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/bitsmsg.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bitsmsg.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/bitsmsg.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bitsmsg.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/bluetoothapis.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bluetoothapis.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/bluetoothapis.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bluetoothapis.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/bluetoothleapis.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bluetoothleapis.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/bluetoothleapis.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bluetoothleapis.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/bthledef.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bthledef.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/bthledef.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bthledef.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/cfgmgr32.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/cfgmgr32.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/cfgmgr32.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/cfgmgr32.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/cguid.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/cguid.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/cguid.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/cguid.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/combaseapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/combaseapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/combaseapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/combaseapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/coml2api.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/coml2api.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/coml2api.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/coml2api.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/commapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/commapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/commapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/commapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/commctrl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/commctrl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/commctrl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/commctrl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/commdlg.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/commdlg.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/commdlg.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/commdlg.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/commoncontrols.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/commoncontrols.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/commoncontrols.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/commoncontrols.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/consoleapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/consoleapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/consoleapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/consoleapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/corsym.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/corsym.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/corsym.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/corsym.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d2d1.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d2d1.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d2d1_1.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1_1.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d2d1_1.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1_1.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d2d1_2.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1_2.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d2d1_2.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1_2.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d2d1_3.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1_3.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d2d1_3.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1_3.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d2d1effectauthor.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1effectauthor.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d2d1effectauthor.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1effectauthor.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d2d1effects.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1effects.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d2d1effects.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1effects.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d2d1effects_1.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1effects_1.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d2d1effects_1.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1effects_1.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d2d1effects_2.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1effects_2.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d2d1effects_2.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1effects_2.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d2d1svg.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1svg.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d2d1svg.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1svg.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d2dbasetypes.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2dbasetypes.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d2dbasetypes.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2dbasetypes.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d10.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d10.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d10_1.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10_1.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d10_1.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10_1.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d10_1shader.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10_1shader.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d10_1shader.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10_1shader.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d10effect.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10effect.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d10effect.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10effect.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d10misc.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10misc.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d10misc.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10misc.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d10sdklayers.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10sdklayers.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d10sdklayers.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10sdklayers.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d10shader.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10shader.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d10shader.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10shader.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d11.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d11.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d11_1.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11_1.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d11_1.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11_1.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d11_2.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11_2.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d11_2.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11_2.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d11_3.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11_3.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d11_3.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11_3.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d11_4.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11_4.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d11_4.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11_4.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d11on12.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11on12.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d11on12.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11on12.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d11sdklayers.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11sdklayers.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d11sdklayers.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11sdklayers.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d11shader.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11shader.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d11shader.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11shader.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d11tokenizedprogramformat.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11tokenizedprogramformat.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d11tokenizedprogramformat.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11tokenizedprogramformat.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d12.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d12.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d12.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d12.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d12sdklayers.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d12sdklayers.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d12sdklayers.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d12sdklayers.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3d12shader.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d12shader.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3d12shader.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d12shader.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3dcommon.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dcommon.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3dcommon.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dcommon.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3dcompiler.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dcompiler.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3dcompiler.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dcompiler.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3dcsx.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dcsx.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3dcsx.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dcsx.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3dx10core.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dx10core.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3dx10core.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dx10core.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3dx10math.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dx10math.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3dx10math.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dx10math.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/d3dx10mesh.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dx10mesh.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/d3dx10mesh.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dx10mesh.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/datetimeapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/datetimeapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/datetimeapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/datetimeapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/davclnt.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/davclnt.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/davclnt.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/davclnt.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dbghelp.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dbghelp.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dbghelp.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dbghelp.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dbt.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dbt.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dbt.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dbt.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dcommon.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dcommon.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dcommon.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dcommon.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dcomp.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dcomp.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dcomp.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dcomp.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dcompanimation.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dcompanimation.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dcompanimation.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dcompanimation.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dde.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dde.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dde.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dde.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/ddraw.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ddraw.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/ddraw.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ddraw.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/ddrawi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ddrawi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/ddrawi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ddrawi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/ddrawint.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ddrawint.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/ddrawint.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ddrawint.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/debugapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/debugapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/debugapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/debugapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/devicetopology.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/devicetopology.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/devicetopology.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/devicetopology.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dinput.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dinput.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dinput.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dinput.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dispex.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dispex.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dispex.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dispex.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dmksctl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dmksctl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dmksctl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dmksctl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dmusicc.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dmusicc.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dmusicc.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dmusicc.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/docobj.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/docobj.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/docobj.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/docobj.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/documenttarget.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/documenttarget.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/documenttarget.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/documenttarget.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dot1x.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dot1x.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dot1x.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dot1x.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dpa_dsa.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dpa_dsa.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dpa_dsa.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dpa_dsa.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dpapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dpapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dpapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dpapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dsgetdc.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dsgetdc.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dsgetdc.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dsgetdc.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dsound.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dsound.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dsound.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dsound.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dsrole.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dsrole.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dsrole.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dsrole.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dvp.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dvp.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dvp.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dvp.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dwmapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dwmapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dwmapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dwmapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dwrite.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dwrite.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dwrite.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dwrite.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dwrite_1.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dwrite_1.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dwrite_1.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dwrite_1.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dwrite_2.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dwrite_2.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dwrite_2.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dwrite_2.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dwrite_3.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dwrite_3.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dwrite_3.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dwrite_3.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dxdiag.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dxdiag.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dxdiag.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dxdiag.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dxfile.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dxfile.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dxfile.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dxfile.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dxgidebug.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dxgidebug.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dxgidebug.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dxgidebug.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dxva2api.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dxva2api.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dxva2api.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dxva2api.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/dxvahd.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dxvahd.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/dxvahd.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dxvahd.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/eaptypes.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/eaptypes.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/eaptypes.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/eaptypes.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/enclaveapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/enclaveapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/enclaveapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/enclaveapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/endpointvolume.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/endpointvolume.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/endpointvolume.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/endpointvolume.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/errhandlingapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/errhandlingapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/errhandlingapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/errhandlingapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/evntcons.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/evntcons.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/evntcons.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/evntcons.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/exdisp.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/exdisp.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/exdisp.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/exdisp.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/fibersapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/fibersapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/fibersapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/fibersapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/fileapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/fileapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/fileapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/fileapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/functiondiscoverykeys_devpkey.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/functiondiscoverykeys_devpkey.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/functiondiscoverykeys_devpkey.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/functiondiscoverykeys_devpkey.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/gl/gl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/gl/gl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/gl/gl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/gl/gl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/gl/mod.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/gl/mod.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/gl/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/gl/mod.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/handleapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/handleapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/handleapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/handleapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/heapapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/heapapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/heapapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/heapapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/highlevelmonitorconfigurationapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/highlevelmonitorconfigurationapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/highlevelmonitorconfigurationapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/highlevelmonitorconfigurationapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/http.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/http.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/http.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/http.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/imm.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/imm.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/imm.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/imm.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/interlockedapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/interlockedapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/interlockedapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/interlockedapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/ioapiset.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ioapiset.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/ioapiset.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ioapiset.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/ipexport.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ipexport.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/ipexport.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ipexport.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/iphlpapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/iphlpapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/iphlpapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/iphlpapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/iptypes.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/iptypes.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/iptypes.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/iptypes.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/jobapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/jobapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/jobapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/jobapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/jobapi2.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/jobapi2.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/jobapi2.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/jobapi2.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/knownfolders.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/knownfolders.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/knownfolders.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/knownfolders.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/ktmw32.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ktmw32.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/ktmw32.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ktmw32.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/l2cmn.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/l2cmn.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/l2cmn.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/l2cmn.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/libloaderapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/libloaderapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/libloaderapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/libloaderapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lmaccess.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmaccess.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lmaccess.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmaccess.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lmalert.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmalert.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lmalert.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmalert.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lmapibuf.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmapibuf.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lmapibuf.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmapibuf.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lmat.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmat.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lmat.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmat.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lmdfs.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmdfs.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lmdfs.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmdfs.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lmerrlog.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmerrlog.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lmerrlog.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmerrlog.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lmjoin.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmjoin.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lmjoin.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmjoin.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lmmsg.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmmsg.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lmmsg.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmmsg.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lmremutl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmremutl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lmremutl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmremutl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lmrepl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmrepl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lmrepl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmrepl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lmserver.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmserver.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lmserver.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmserver.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lmshare.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmshare.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lmshare.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmshare.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lmstats.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmstats.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lmstats.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmstats.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lmsvc.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmsvc.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lmsvc.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmsvc.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lmuse.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmuse.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lmuse.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmuse.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lmwksta.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmwksta.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lmwksta.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmwksta.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lowlevelmonitorconfigurationapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lowlevelmonitorconfigurationapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lowlevelmonitorconfigurationapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lowlevelmonitorconfigurationapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/lsalookup.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lsalookup.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/lsalookup.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lsalookup.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/memoryapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/memoryapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/memoryapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/memoryapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/minschannel.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/minschannel.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/minschannel.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/minschannel.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/minwinbase.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/minwinbase.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/minwinbase.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/minwinbase.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/mmdeviceapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mmdeviceapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/mmdeviceapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mmdeviceapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/mmeapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mmeapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/mmeapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mmeapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/mmsystem.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mmsystem.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/mmsystem.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mmsystem.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/mod.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mod.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mod.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/msaatext.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/msaatext.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/msaatext.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/msaatext.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/mscat.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mscat.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/mscat.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mscat.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/mschapp.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mschapp.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/mschapp.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mschapp.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/mssip.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mssip.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/mssip.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mssip.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/mswsock.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mswsock.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/mswsock.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mswsock.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/namedpipeapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/namedpipeapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/namedpipeapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/namedpipeapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/namespaceapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/namespaceapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/namespaceapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/namespaceapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/nb30.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/nb30.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/nb30.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/nb30.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/ncrypt.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ncrypt.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/ncrypt.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ncrypt.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/ntlsa.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ntlsa.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/ntlsa.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ntlsa.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/ntsecapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ntsecapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/ntsecapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ntsecapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/oaidl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/oaidl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/oaidl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/oaidl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/objbase.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/objbase.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/objbase.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/objbase.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/objidl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/objidl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/objidl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/objidl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/objidlbase.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/objidlbase.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/objidlbase.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/objidlbase.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/ocidl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ocidl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/ocidl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ocidl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/ole2.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ole2.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/ole2.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ole2.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/oleauto.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/oleauto.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/oleauto.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/oleauto.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/olectl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/olectl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/olectl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/olectl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/oleidl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/oleidl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/oleidl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/oleidl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/opmapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/opmapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/opmapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/opmapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/pdh.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/pdh.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/pdh.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/pdh.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/perflib.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/perflib.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/perflib.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/perflib.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/physicalmonitorenumerationapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/physicalmonitorenumerationapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/physicalmonitorenumerationapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/physicalmonitorenumerationapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/playsoundapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/playsoundapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/playsoundapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/playsoundapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/portabledevice.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/portabledevice.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/portabledevice.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/portabledevice.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/portabledeviceapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/portabledeviceapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/portabledeviceapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/portabledeviceapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/portabledevicetypes.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/portabledevicetypes.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/portabledevicetypes.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/portabledevicetypes.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/powerbase.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/powerbase.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/powerbase.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/powerbase.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/powersetting.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/powersetting.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/powersetting.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/powersetting.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/powrprof.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/powrprof.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/powrprof.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/powrprof.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/processenv.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/processenv.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/processenv.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/processenv.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/processsnapshot.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/processsnapshot.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/processsnapshot.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/processsnapshot.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/processthreadsapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/processthreadsapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/processthreadsapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/processthreadsapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/processtopologyapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/processtopologyapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/processtopologyapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/processtopologyapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/profileapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/profileapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/profileapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/profileapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/propidl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/propidl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/propidl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/propidl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/propkey.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/propkey.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/propkey.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/propkey.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/propkeydef.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/propkeydef.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/propkeydef.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/propkeydef.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/propsys.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/propsys.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/propsys.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/propsys.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/prsht.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/prsht.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/prsht.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/prsht.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/psapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/psapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/psapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/psapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/realtimeapiset.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/realtimeapiset.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/realtimeapiset.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/realtimeapiset.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/reason.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/reason.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/reason.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/reason.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/restartmanager.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/restartmanager.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/restartmanager.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/restartmanager.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/restrictederrorinfo.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/restrictederrorinfo.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/restrictederrorinfo.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/restrictederrorinfo.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/rmxfguid.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/rmxfguid.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/rmxfguid.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/rmxfguid.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/rtinfo.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/rtinfo.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/rtinfo.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/rtinfo.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/sapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/sapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/sapi51.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sapi51.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/sapi51.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sapi51.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/sapi53.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sapi53.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/sapi53.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sapi53.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/sapiddk.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sapiddk.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/sapiddk.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sapiddk.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/sapiddk51.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sapiddk51.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/sapiddk51.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sapiddk51.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/schannel.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/schannel.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/schannel.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/schannel.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/securityappcontainer.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/securityappcontainer.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/securityappcontainer.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/securityappcontainer.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/securitybaseapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/securitybaseapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/securitybaseapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/securitybaseapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/servprov.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/servprov.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/servprov.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/servprov.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/setupapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/setupapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/setupapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/setupapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/shellapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shellapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/shellapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shellapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/shellscalingapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shellscalingapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/shellscalingapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shellscalingapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/shlobj.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shlobj.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/shlobj.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shlobj.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/shobjidl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shobjidl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/shobjidl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shobjidl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/shobjidl_core.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shobjidl_core.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/shobjidl_core.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shobjidl_core.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/shtypes.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shtypes.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/shtypes.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shtypes.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/softpub.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/softpub.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/softpub.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/softpub.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/spapidef.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/spapidef.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/spapidef.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/spapidef.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/spellcheck.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/spellcheck.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/spellcheck.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/spellcheck.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/sporder.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sporder.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/sporder.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sporder.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/sql.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sql.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/sql.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sql.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/sqlext.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sqlext.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/sqlext.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sqlext.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/sqltypes.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sqltypes.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/sqltypes.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sqltypes.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/sqlucode.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sqlucode.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/sqlucode.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sqlucode.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/sspi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sspi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/sspi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sspi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/stringapiset.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/stringapiset.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/stringapiset.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/stringapiset.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/strmif.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/strmif.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/strmif.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/strmif.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/subauth.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/subauth.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/subauth.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/subauth.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/synchapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/synchapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/synchapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/synchapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/sysinfoapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sysinfoapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/sysinfoapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sysinfoapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/systemtopologyapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/systemtopologyapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/systemtopologyapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/systemtopologyapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/taskschd.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/taskschd.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/taskschd.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/taskschd.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/textstor.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/textstor.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/textstor.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/textstor.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/threadpoolapiset.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/threadpoolapiset.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/threadpoolapiset.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/threadpoolapiset.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/threadpoollegacyapiset.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/threadpoollegacyapiset.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/threadpoollegacyapiset.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/threadpoollegacyapiset.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/timeapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/timeapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/timeapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/timeapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/timezoneapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/timezoneapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/timezoneapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/timezoneapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/tlhelp32.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/tlhelp32.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/tlhelp32.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/tlhelp32.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/unknwnbase.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/unknwnbase.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/unknwnbase.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/unknwnbase.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/urlhist.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/urlhist.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/urlhist.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/urlhist.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/urlmon.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/urlmon.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/urlmon.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/urlmon.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/userenv.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/userenv.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/userenv.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/userenv.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/usp10.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/usp10.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/usp10.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/usp10.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/utilapiset.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/utilapiset.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/utilapiset.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/utilapiset.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/uxtheme.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/uxtheme.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/uxtheme.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/uxtheme.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/vsbackup.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/vsbackup.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/vsbackup.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/vsbackup.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/vss.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/vss.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/vss.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/vss.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/vsserror.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/vsserror.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/vsserror.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/vsserror.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/vswriter.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/vswriter.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/vswriter.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/vswriter.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wbemads.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wbemads.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wbemads.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wbemads.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wbemcli.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wbemcli.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wbemcli.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wbemcli.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wbemdisp.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wbemdisp.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wbemdisp.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wbemdisp.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wbemprov.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wbemprov.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wbemprov.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wbemprov.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wbemtran.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wbemtran.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wbemtran.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wbemtran.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wct.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wct.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wct.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wct.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/werapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/werapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/werapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/werapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winbase.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winbase.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winbase.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winbase.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wincodec.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincodec.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wincodec.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincodec.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wincodecsdk.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincodecsdk.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wincodecsdk.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincodecsdk.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wincon.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincon.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wincon.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincon.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wincontypes.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincontypes.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wincontypes.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincontypes.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wincred.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincred.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wincred.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincred.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wincrypt.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincrypt.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wincrypt.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincrypt.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/windowsceip.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/windowsceip.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/windowsceip.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/windowsceip.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winefs.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winefs.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winefs.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winefs.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winevt.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winevt.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winevt.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winevt.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wingdi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wingdi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wingdi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wingdi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winhttp.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winhttp.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winhttp.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winhttp.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wininet.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wininet.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wininet.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wininet.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winineti.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winineti.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winineti.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winineti.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winioctl.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winioctl.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winioctl.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winioctl.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winnetwk.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winnetwk.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winnetwk.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winnetwk.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winnls.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winnls.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winnls.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winnls.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winnt.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winnt.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winnt.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winnt.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winreg.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winreg.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winreg.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winreg.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winsafer.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winsafer.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winsafer.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winsafer.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winscard.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winscard.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winscard.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winscard.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winsmcrd.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winsmcrd.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winsmcrd.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winsmcrd.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winsock2.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winsock2.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winsock2.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winsock2.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winspool.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winspool.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winspool.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winspool.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winsvc.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winsvc.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winsvc.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winsvc.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wintrust.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wintrust.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wintrust.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wintrust.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winusb.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winusb.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winusb.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winusb.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winuser.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winuser.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winuser.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winuser.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/winver.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winver.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/winver.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winver.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wlanapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wlanapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wlanapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wlanapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wlanihv.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wlanihv.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wlanihv.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wlanihv.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wlanihvtypes.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wlanihvtypes.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wlanihvtypes.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wlanihvtypes.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wlclient.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wlclient.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wlclient.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wlclient.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wow64apiset.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wow64apiset.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wow64apiset.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wow64apiset.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wpdmtpextensions.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wpdmtpextensions.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wpdmtpextensions.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wpdmtpextensions.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/ws2bth.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ws2bth.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/ws2bth.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ws2bth.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/ws2spi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ws2spi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/ws2spi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ws2spi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/ws2tcpip.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ws2tcpip.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/ws2tcpip.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ws2tcpip.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/wtsapi32.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wtsapi32.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/wtsapi32.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wtsapi32.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/um/xinput.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/xinput.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/um/xinput.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/xinput.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/vc/excpt.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/vc/excpt.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/vc/excpt.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/vc/excpt.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/vc/limits.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/vc/limits.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/vc/limits.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/vc/limits.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/vc/mod.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/vc/mod.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/vc/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/vc/mod.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/vc/vadefs.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/vc/vadefs.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/vc/vadefs.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/vc/vadefs.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/vc/vcruntime.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/vc/vcruntime.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/vc/vcruntime.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/vc/vcruntime.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/winrt/activation.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/activation.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/winrt/activation.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/activation.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/winrt/hstring.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/hstring.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/winrt/hstring.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/hstring.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/winrt/inspectable.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/inspectable.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/winrt/inspectable.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/inspectable.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/winrt/mod.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/mod.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/winrt/mod.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/mod.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/winrt/roapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/roapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/winrt/roapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/roapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/winrt/robuffer.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/robuffer.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/winrt/robuffer.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/robuffer.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/winrt/roerrorapi.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/roerrorapi.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/winrt/roerrorapi.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/roerrorapi.rs
diff --git a/third_party/rust/winapi/v0_3/crate/src/winrt/winstring.rs b/third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/winstring.rs
similarity index 100%
rename from third_party/rust/winapi/v0_3/crate/src/winrt/winstring.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/winstring.rs
diff --git a/third_party/rust/winapi_util/v0_1/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/winapi_util/v0_1/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/.cargo_vcs_info.json
diff --git a/third_party/rust/winapi_util/v0_1/crate/.github/workflows/ci.yml b/third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/.github/workflows/ci.yml
similarity index 100%
rename from third_party/rust/winapi_util/v0_1/crate/.github/workflows/ci.yml
rename to third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/.github/workflows/ci.yml
diff --git a/third_party/rust/winapi_util/v0_1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/.gitignore
similarity index 100%
rename from third_party/rust/winapi_util/v0_1/crate/.gitignore
rename to third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/.gitignore
diff --git a/third_party/rust/aho_corasick/v0_7/crate/COPYING b/third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/COPYING
similarity index 100%
copy from third_party/rust/aho_corasick/v0_7/crate/COPYING
copy to third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/COPYING
diff --git a/third_party/rust/winapi_util/v0_1/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/Cargo.toml
similarity index 100%
rename from third_party/rust/winapi_util/v0_1/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/Cargo.toml
diff --git a/third_party/rust/winapi_util/v0_1/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/winapi_util/v0_1/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/Cargo.toml.orig
diff --git a/third_party/rust/winapi_util/v0_1/crate/LICENSE-MIT b/third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/LICENSE-MIT
similarity index 100%
rename from third_party/rust/winapi_util/v0_1/crate/LICENSE-MIT
rename to third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/LICENSE-MIT
diff --git a/third_party/rust/winapi_util/v0_1/crate/README.md b/third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/README.md
similarity index 100%
rename from third_party/rust/winapi_util/v0_1/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/README.md
diff --git a/third_party/rust/aho_corasick/v0_7/crate/UNLICENSE b/third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/UNLICENSE
similarity index 100%
copy from third_party/rust/aho_corasick/v0_7/crate/UNLICENSE
copy to third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/UNLICENSE
diff --git a/third_party/rust/aho_corasick/v0_7/crate/rustfmt.toml b/third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/rustfmt.toml
similarity index 100%
copy from third_party/rust/aho_corasick/v0_7/crate/rustfmt.toml
copy to third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/rustfmt.toml
diff --git a/third_party/rust/winapi_util/v0_1/crate/src/console.rs b/third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/src/console.rs
similarity index 100%
rename from third_party/rust/winapi_util/v0_1/crate/src/console.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/src/console.rs
diff --git a/third_party/rust/winapi_util/v0_1/crate/src/file.rs b/third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/src/file.rs
similarity index 100%
rename from third_party/rust/winapi_util/v0_1/crate/src/file.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/src/file.rs
diff --git a/third_party/rust/winapi_util/v0_1/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/src/lib.rs
similarity index 100%
rename from third_party/rust/winapi_util/v0_1/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/src/lib.rs
diff --git a/third_party/rust/winapi_util/v0_1/crate/src/win.rs b/third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/src/win.rs
similarity index 100%
rename from third_party/rust/winapi_util/v0_1/crate/src/win.rs
rename to third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/src/win.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/.cargo_vcs_info.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/.cargo_vcs_info.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/.cargo_vcs_info.json
diff --git a/third_party/rust/small_ctor/v0_1/crate/.gitignore b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/.gitignore
similarity index 100%
copy from third_party/rust/small_ctor/v0_1/crate/.gitignore
copy to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/.gitignore
diff --git a/third_party/rust/wycheproof/v0_4/crate/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/Cargo.toml
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/Cargo.toml
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/Cargo.toml
diff --git a/third_party/rust/wycheproof/v0_4/crate/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/Cargo.toml.orig
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/Cargo.toml.orig
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/Cargo.toml.orig
diff --git a/third_party/rust/wycheproof/v0_4/crate/LICENSE b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/LICENSE
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/LICENSE
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/LICENSE
diff --git a/third_party/rust/wycheproof/v0_4/crate/NEWS.md b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/NEWS.md
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/NEWS.md
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/NEWS.md
diff --git a/third_party/rust/wycheproof/v0_4/crate/README.md b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/README.md
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/README.md
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/README.md
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/aead.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/aead.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/aead.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/aead.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/cipher.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/cipher.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/cipher.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/cipher.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/daead.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/daead.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/daead.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/daead.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/aead_aes_siv_cmac_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aead_aes_siv_cmac_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/aead_aes_siv_cmac_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aead_aes_siv_cmac_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/aegis128L_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aegis128L_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/aegis128L_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aegis128L_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/aegis128_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aegis128_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/aegis128_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aegis128_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/aegis256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aegis256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/aegis256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aegis256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/aes_cbc_pkcs5_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aes_cbc_pkcs5_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/aes_cbc_pkcs5_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aes_cbc_pkcs5_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/aes_ccm_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aes_ccm_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/aes_ccm_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aes_ccm_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/aes_cmac_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aes_cmac_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/aes_cmac_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aes_cmac_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/aes_eax_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aes_eax_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/aes_eax_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aes_eax_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/aes_gcm_siv_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aes_gcm_siv_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/aes_gcm_siv_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aes_gcm_siv_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/aes_gcm_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aes_gcm_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/aes_gcm_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aes_gcm_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/aes_siv_cmac_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aes_siv_cmac_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/aes_siv_cmac_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/aes_siv_cmac_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/chacha20_poly1305_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/chacha20_poly1305_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/chacha20_poly1305_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/chacha20_poly1305_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/dsa_2048_224_sha224_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_2048_224_sha224_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/dsa_2048_224_sha224_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_2048_224_sha224_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/dsa_2048_224_sha224_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_2048_224_sha224_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/dsa_2048_224_sha224_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_2048_224_sha224_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/dsa_2048_224_sha256_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_2048_224_sha256_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/dsa_2048_224_sha256_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_2048_224_sha256_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/dsa_2048_224_sha256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_2048_224_sha256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/dsa_2048_224_sha256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_2048_224_sha256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/dsa_2048_256_sha256_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_2048_256_sha256_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/dsa_2048_256_sha256_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_2048_256_sha256_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/dsa_2048_256_sha256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_2048_256_sha256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/dsa_2048_256_sha256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_2048_256_sha256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/dsa_3072_256_sha256_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_3072_256_sha256_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/dsa_3072_256_sha256_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_3072_256_sha256_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/dsa_3072_256_sha256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_3072_256_sha256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/dsa_3072_256_sha256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_3072_256_sha256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/dsa_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/dsa_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/dsa_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_brainpoolP224r1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_brainpoolP224r1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_brainpoolP224r1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_brainpoolP224r1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_brainpoolP256r1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_brainpoolP256r1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_brainpoolP256r1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_brainpoolP256r1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_brainpoolP320r1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_brainpoolP320r1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_brainpoolP320r1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_brainpoolP320r1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_brainpoolP384r1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_brainpoolP384r1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_brainpoolP384r1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_brainpoolP384r1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_brainpoolP512r1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_brainpoolP512r1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_brainpoolP512r1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_brainpoolP512r1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp224r1_ecpoint_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp224r1_ecpoint_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp224r1_ecpoint_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp224r1_ecpoint_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp224r1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp224r1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp224r1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp224r1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp256k1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp256k1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp256k1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp256k1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp256r1_ecpoint_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp256r1_ecpoint_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp256r1_ecpoint_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp256r1_ecpoint_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp256r1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp256r1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp256r1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp256r1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp384r1_ecpoint_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp384r1_ecpoint_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp384r1_ecpoint_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp384r1_ecpoint_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp384r1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp384r1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp384r1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp384r1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp521r1_ecpoint_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp521r1_ecpoint_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp521r1_ecpoint_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp521r1_ecpoint_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp521r1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp521r1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_secp521r1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_secp521r1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_webcrypto_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_webcrypto_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdh_webcrypto_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdh_webcrypto_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP224r1_sha224_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP224r1_sha224_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP224r1_sha224_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP224r1_sha224_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP224r1_sha224_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP224r1_sha224_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP224r1_sha224_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP224r1_sha224_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP256r1_sha256_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP256r1_sha256_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP256r1_sha256_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP256r1_sha256_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP256r1_sha256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP256r1_sha256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP256r1_sha256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP256r1_sha256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP320r1_sha384_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP320r1_sha384_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP320r1_sha384_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP320r1_sha384_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP320r1_sha384_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP320r1_sha384_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP320r1_sha384_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP320r1_sha384_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP384r1_sha384_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP384r1_sha384_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP384r1_sha384_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP384r1_sha384_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP384r1_sha384_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP384r1_sha384_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP384r1_sha384_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP384r1_sha384_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP512r1_sha512_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP512r1_sha512_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP512r1_sha512_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP512r1_sha512_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP512r1_sha512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP512r1_sha512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_brainpoolP512r1_sha512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_brainpoolP512r1_sha512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha224_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha224_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha224_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha224_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha224_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha224_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha224_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha224_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha256_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha256_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha256_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha256_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha3_224_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha3_224_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha3_224_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha3_224_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha3_256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha3_256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha3_256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha3_256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha3_512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha3_512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha3_512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha3_512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha512_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha512_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha512_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha512_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp224r1_sha512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp224r1_sha512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256k1_sha256_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256k1_sha256_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256k1_sha256_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256k1_sha256_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256k1_sha256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256k1_sha256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256k1_sha256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256k1_sha256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256k1_sha3_256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256k1_sha3_256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256k1_sha3_256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256k1_sha3_256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256k1_sha3_512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256k1_sha3_512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256k1_sha3_512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256k1_sha3_512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256k1_sha512_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256k1_sha512_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256k1_sha512_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256k1_sha512_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256k1_sha512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256k1_sha512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256k1_sha512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256k1_sha512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256r1_sha256_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256r1_sha256_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256r1_sha256_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256r1_sha256_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256r1_sha256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256r1_sha256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256r1_sha256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256r1_sha256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256r1_sha3_256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256r1_sha3_256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256r1_sha3_256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256r1_sha3_256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256r1_sha3_512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256r1_sha3_512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256r1_sha3_512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256r1_sha3_512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256r1_sha512_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256r1_sha512_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256r1_sha512_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256r1_sha512_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256r1_sha512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256r1_sha512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp256r1_sha512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp256r1_sha512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp384r1_sha384_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp384r1_sha384_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp384r1_sha384_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp384r1_sha384_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp384r1_sha384_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp384r1_sha384_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp384r1_sha384_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp384r1_sha384_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp384r1_sha3_384_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp384r1_sha3_384_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp384r1_sha3_384_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp384r1_sha3_384_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp384r1_sha3_512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp384r1_sha3_512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp384r1_sha3_512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp384r1_sha3_512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp384r1_sha512_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp384r1_sha512_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp384r1_sha512_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp384r1_sha512_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp384r1_sha512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp384r1_sha512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp384r1_sha512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp384r1_sha512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp521r1_sha3_512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp521r1_sha3_512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp521r1_sha3_512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp521r1_sha3_512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp521r1_sha512_p1363_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp521r1_sha512_p1363_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp521r1_sha512_p1363_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp521r1_sha512_p1363_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp521r1_sha512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp521r1_sha512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_secp521r1_sha512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_secp521r1_sha512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_webcrypto_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_webcrypto_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ecdsa_webcrypto_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ecdsa_webcrypto_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/ed448_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ed448_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/ed448_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/ed448_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/eddsa_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/eddsa_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/eddsa_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/eddsa_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/gmac_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/gmac_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/gmac_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/gmac_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/hkdf_sha1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hkdf_sha1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/hkdf_sha1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hkdf_sha1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/hkdf_sha256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hkdf_sha256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/hkdf_sha256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hkdf_sha256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/hkdf_sha384_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hkdf_sha384_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/hkdf_sha384_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hkdf_sha384_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/hkdf_sha512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hkdf_sha512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/hkdf_sha512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hkdf_sha512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha224_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha224_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha224_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha224_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha384_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha384_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha384_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha384_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha3_224_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha3_224_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha3_224_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha3_224_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha3_256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha3_256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha3_256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha3_256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha3_384_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha3_384_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha3_384_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha3_384_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha3_512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha3_512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha3_512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha3_512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/hmac_sha512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/hmac_sha512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/kw_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/kw_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/kw_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/kw_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/kwp_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/kwp_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/kwp_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/kwp_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/primality_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/primality_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/primality_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/primality_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha1_mgf1sha1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha1_mgf1sha1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha1_mgf1sha1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha1_mgf1sha1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha224_mgf1sha1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha224_mgf1sha1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha224_mgf1sha1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha224_mgf1sha1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha224_mgf1sha224_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha224_mgf1sha224_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha224_mgf1sha224_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha224_mgf1sha224_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha256_mgf1sha1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha256_mgf1sha1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha256_mgf1sha1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha256_mgf1sha1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha256_mgf1sha256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha256_mgf1sha256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha256_mgf1sha256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha256_mgf1sha256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha384_mgf1sha1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha384_mgf1sha1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha384_mgf1sha1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha384_mgf1sha1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha384_mgf1sha384_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha384_mgf1sha384_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha384_mgf1sha384_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha384_mgf1sha384_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha512_mgf1sha1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha512_mgf1sha1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha512_mgf1sha1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha512_mgf1sha1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha512_mgf1sha512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha512_mgf1sha512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_2048_sha512_mgf1sha512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_2048_sha512_mgf1sha512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_3072_sha256_mgf1sha1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_3072_sha256_mgf1sha1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_3072_sha256_mgf1sha1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_3072_sha256_mgf1sha1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_3072_sha256_mgf1sha256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_3072_sha256_mgf1sha256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_3072_sha256_mgf1sha256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_3072_sha256_mgf1sha256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_3072_sha512_mgf1sha1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_3072_sha512_mgf1sha1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_3072_sha512_mgf1sha1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_3072_sha512_mgf1sha1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_3072_sha512_mgf1sha512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_3072_sha512_mgf1sha512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_3072_sha512_mgf1sha512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_3072_sha512_mgf1sha512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_4096_sha256_mgf1sha1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_4096_sha256_mgf1sha1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_4096_sha256_mgf1sha1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_4096_sha256_mgf1sha1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_4096_sha256_mgf1sha256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_4096_sha256_mgf1sha256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_4096_sha256_mgf1sha256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_4096_sha256_mgf1sha256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_4096_sha512_mgf1sha1_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_4096_sha512_mgf1sha1_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_4096_sha512_mgf1sha1_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_4096_sha512_mgf1sha1_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_4096_sha512_mgf1sha512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_4096_sha512_mgf1sha512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_4096_sha512_mgf1sha512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_4096_sha512_mgf1sha512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_misc_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_misc_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_oaep_misc_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_oaep_misc_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pkcs1_2048_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pkcs1_2048_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pkcs1_2048_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pkcs1_2048_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pkcs1_3072_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pkcs1_3072_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pkcs1_3072_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pkcs1_3072_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pkcs1_4096_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pkcs1_4096_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pkcs1_4096_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pkcs1_4096_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_2048_sha1_mgf1_20_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_2048_sha1_mgf1_20_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_2048_sha1_mgf1_20_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_2048_sha1_mgf1_20_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_2048_sha256_mgf1_0_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_2048_sha256_mgf1_0_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_2048_sha256_mgf1_0_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_2048_sha256_mgf1_0_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_2048_sha256_mgf1_32_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_2048_sha256_mgf1_32_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_2048_sha256_mgf1_32_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_2048_sha256_mgf1_32_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_2048_sha512_256_mgf1_28_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_2048_sha512_256_mgf1_28_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_2048_sha512_256_mgf1_28_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_2048_sha512_256_mgf1_28_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_2048_sha512_256_mgf1_32_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_2048_sha512_256_mgf1_32_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_2048_sha512_256_mgf1_32_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_2048_sha512_256_mgf1_32_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_3072_sha256_mgf1_32_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_3072_sha256_mgf1_32_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_3072_sha256_mgf1_32_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_3072_sha256_mgf1_32_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_4096_sha256_mgf1_32_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_4096_sha256_mgf1_32_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_4096_sha256_mgf1_32_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_4096_sha256_mgf1_32_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_4096_sha512_mgf1_32_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_4096_sha512_mgf1_32_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_4096_sha512_mgf1_32_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_4096_sha512_mgf1_32_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_misc_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_misc_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_pss_misc_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_pss_misc_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_sig_gen_misc_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_sig_gen_misc_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_sig_gen_misc_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_sig_gen_misc_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha224_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha224_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha224_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha224_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha384_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha384_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha384_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha384_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha3_224_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha3_224_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha3_224_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha3_224_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha3_256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha3_256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha3_256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha3_256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha3_384_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha3_384_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha3_384_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha3_384_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha3_512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha3_512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha3_512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha3_512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha512_224_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha512_224_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha512_224_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha512_224_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha512_256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha512_256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha512_256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha512_256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_2048_sha512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_2048_sha512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_3072_sha256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_3072_sha256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_3072_sha256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_3072_sha256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_3072_sha384_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_3072_sha384_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_3072_sha384_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_3072_sha384_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_3072_sha3_256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_3072_sha3_256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_3072_sha3_256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_3072_sha3_256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_3072_sha3_384_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_3072_sha3_384_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_3072_sha3_384_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_3072_sha3_384_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_3072_sha3_512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_3072_sha3_512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_3072_sha3_512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_3072_sha3_512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_3072_sha512_256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_3072_sha512_256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_3072_sha512_256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_3072_sha512_256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_3072_sha512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_3072_sha512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_3072_sha512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_3072_sha512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_4096_sha384_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_4096_sha384_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_4096_sha384_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_4096_sha384_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_4096_sha512_256_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_4096_sha512_256_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_4096_sha512_256_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_4096_sha512_256_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_4096_sha512_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_4096_sha512_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_4096_sha512_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_4096_sha512_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/rsa_signature_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/rsa_signature_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/vmac_128_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/vmac_128_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/vmac_128_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/vmac_128_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/vmac_64_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/vmac_64_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/vmac_64_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/vmac_64_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/x25519_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/x25519_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/x25519_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/x25519_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/x448_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/x448_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/x448_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/x448_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/data/xchacha20_poly1305_test.json b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/xchacha20_poly1305_test.json
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/data/xchacha20_poly1305_test.json
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/data/xchacha20_poly1305_test.json
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/dsa.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/dsa.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/dsa.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/dsa.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/ecdh.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/ecdh.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/ecdh.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/ecdh.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/ecdsa.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/ecdsa.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/ecdsa.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/ecdsa.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/eddsa.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/eddsa.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/eddsa.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/eddsa.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/hkdf.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/hkdf.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/hkdf.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/hkdf.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/jwk.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/jwk.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/jwk.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/jwk.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/keywrap.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/keywrap.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/keywrap.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/keywrap.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/lib.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/lib.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/lib.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/mac.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/mac.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/mac.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/mac.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/mac_with_iv.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/mac_with_iv.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/mac_with_iv.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/mac_with_iv.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/primality.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/primality.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/primality.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/primality.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/rsa_oaep.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/rsa_oaep.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/rsa_oaep.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/rsa_oaep.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/rsa_pkcs1_decrypt.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/rsa_pkcs1_decrypt.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/rsa_pkcs1_decrypt.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/rsa_pkcs1_decrypt.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/rsa_pkcs1_sign.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/rsa_pkcs1_sign.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/rsa_pkcs1_sign.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/rsa_pkcs1_sign.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/rsa_pkcs1_verify.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/rsa_pkcs1_verify.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/rsa_pkcs1_verify.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/rsa_pkcs1_verify.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/rsa_pss_verify.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/rsa_pss_verify.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/rsa_pss_verify.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/rsa_pss_verify.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/src/xdh.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/xdh.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/src/xdh.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/xdh.rs
diff --git a/third_party/rust/wycheproof/v0_4/crate/tests/tests.rs b/third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/tests/tests.rs
similarity index 100%
rename from third_party/rust/wycheproof/v0_4/crate/tests/tests.rs
rename to third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/tests/tests.rs
diff --git a/third_party/rust/clap/v4/BUILD.gn b/third_party/rust/clap/v4/BUILD.gn
index 1e44230..27fd759 100644
--- a/third_party/rust/clap/v4/BUILD.gn
+++ b/third_party/rust/clap/v4/BUILD.gn
@@ -9,147 +9,147 @@
 
 cargo_crate("stdio_fixture") {
   crate_type = "bin"
-  crate_root = "crate/src/bin/stdio-fixture.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/bin/stdio-fixture.rs"
   sources = [
-    "//third_party/rust/clap/v4/crate/examples/cargo-example-derive.rs",
-    "//third_party/rust/clap/v4/crate/examples/cargo-example.rs",
-    "//third_party/rust/clap/v4/crate/examples/demo.rs",
-    "//third_party/rust/clap/v4/crate/examples/derive_ref/augment_args.rs",
-    "//third_party/rust/clap/v4/crate/examples/derive_ref/augment_subcommands.rs",
-    "//third_party/rust/clap/v4/crate/examples/derive_ref/flatten_hand_args.rs",
-    "//third_party/rust/clap/v4/crate/examples/derive_ref/hand_subcommand.rs",
-    "//third_party/rust/clap/v4/crate/examples/escaped-positional-derive.rs",
-    "//third_party/rust/clap/v4/crate/examples/escaped-positional.rs",
-    "//third_party/rust/clap/v4/crate/examples/find.rs",
-    "//third_party/rust/clap/v4/crate/examples/git-derive.rs",
-    "//third_party/rust/clap/v4/crate/examples/git.rs",
-    "//third_party/rust/clap/v4/crate/examples/multicall-busybox.rs",
-    "//third_party/rust/clap/v4/crate/examples/multicall-hostname.rs",
-    "//third_party/rust/clap/v4/crate/examples/pacman.rs",
-    "//third_party/rust/clap/v4/crate/examples/repl.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/01_quick.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/02_app_settings.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/02_apps.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/02_crate.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_01_flag_bool.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_01_flag_count.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_02_option.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_02_option_mult.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_03_positional.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_03_positional_mult.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_04_subcommands.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_05_default_values.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_01_enum.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_01_possible.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_02_parse.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_02_validate.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_03_relations.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_04_custom.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/05_01_assert.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/01_quick.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/02_app_settings.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/02_apps.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/02_crate.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_01_flag_bool.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_01_flag_count.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_02_option.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_02_option_mult.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_03_positional.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_03_positional_mult.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_04_subcommands.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_04_subcommands_alt.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_05_default_values.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_01_enum.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_02_parse.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_02_validate.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_03_relations.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_04_custom.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/05_01_assert.rs",
-    "//third_party/rust/clap/v4/crate/examples/typed-derive.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/cargo_example.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/cargo_example_derive.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/escaped_positional.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/escaped_positional_derive.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/find.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/git.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/git_derive.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/mod.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/multicall_busybox.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/multicall_hostname.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/pacman.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/repl.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/typed_derive.rs",
-    "//third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_0.rs",
-    "//third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_1.rs",
-    "//third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_2.rs",
-    "//third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_3.rs",
-    "//third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_4.rs",
-    "//third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_5.rs",
-    "//third_party/rust/clap/v4/crate/src/_derive/_tutorial/mod.rs",
-    "//third_party/rust/clap/v4/crate/src/_derive/mod.rs",
-    "//third_party/rust/clap/v4/crate/src/_faq.rs",
-    "//third_party/rust/clap/v4/crate/src/_features.rs",
-    "//third_party/rust/clap/v4/crate/src/_tutorial/chapter_0.rs",
-    "//third_party/rust/clap/v4/crate/src/_tutorial/chapter_1.rs",
-    "//third_party/rust/clap/v4/crate/src/_tutorial/chapter_2.rs",
-    "//third_party/rust/clap/v4/crate/src/_tutorial/chapter_3.rs",
-    "//third_party/rust/clap/v4/crate/src/_tutorial/chapter_4.rs",
-    "//third_party/rust/clap/v4/crate/src/_tutorial/chapter_5.rs",
-    "//third_party/rust/clap/v4/crate/src/_tutorial/mod.rs",
-    "//third_party/rust/clap/v4/crate/src/bin/stdio-fixture.rs",
-    "//third_party/rust/clap/v4/crate/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/cargo-example-derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/cargo-example.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/demo.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/augment_args.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/augment_subcommands.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/flatten_hand_args.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/hand_subcommand.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/escaped-positional-derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/escaped-positional.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/find.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/git-derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/git.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/multicall-busybox.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/multicall-hostname.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/pacman.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/repl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/01_quick.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_app_settings.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_apps.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_crate.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_01_flag_bool.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_01_flag_count.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_02_option.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_02_option_mult.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_03_positional.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_03_positional_mult.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_04_subcommands.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_05_default_values.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_01_enum.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_01_possible.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_02_parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_02_validate.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_03_relations.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_04_custom.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/05_01_assert.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/01_quick.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_app_settings.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_apps.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_crate.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_01_flag_bool.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_01_flag_count.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_02_option.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_02_option_mult.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_03_positional.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_03_positional_mult.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_04_subcommands.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_04_subcommands_alt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_05_default_values.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_01_enum.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_02_parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_02_validate.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_03_relations.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_04_custom.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/05_01_assert.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/typed-derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/cargo_example.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/cargo_example_derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/escaped_positional.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/escaped_positional_derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/find.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/git.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/git_derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/multicall_busybox.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/multicall_hostname.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/pacman.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/repl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/typed_derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_0.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_1.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_3.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_4.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_5.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_faq.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_features.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_0.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_1.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_3.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_4.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_5.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/bin/stdio-fixture.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/lib.rs",
   ]
   inputs = [
-    "//third_party/rust/clap/v4/crate/README.md",
-    "//third_party/rust/clap/v4/crate/examples/README.md",
-    "//third_party/rust/clap/v4/crate/examples/cargo-example-derive.md",
-    "//third_party/rust/clap/v4/crate/examples/cargo-example.md",
-    "//third_party/rust/clap/v4/crate/examples/demo.md",
-    "//third_party/rust/clap/v4/crate/examples/derive_ref/interop_tests.md",
-    "//third_party/rust/clap/v4/crate/examples/escaped-positional-derive.md",
-    "//third_party/rust/clap/v4/crate/examples/escaped-positional.md",
-    "//third_party/rust/clap/v4/crate/examples/find.md",
-    "//third_party/rust/clap/v4/crate/examples/git-derive.md",
-    "//third_party/rust/clap/v4/crate/examples/git.md",
-    "//third_party/rust/clap/v4/crate/examples/multicall-busybox.md",
-    "//third_party/rust/clap/v4/crate/examples/multicall-hostname.md",
-    "//third_party/rust/clap/v4/crate/examples/pacman.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/01_quick.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/02_app_settings.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/02_apps.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/02_crate.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_01_flag_bool.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_01_flag_count.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_02_option.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_02_option_mult.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_03_positional.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_03_positional_mult.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_04_subcommands.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_05_default_values.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_01_enum.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_01_possible.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_02_parse.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_02_validate.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_03_relations.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_04_custom.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/01_quick.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/02_app_settings.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/02_apps.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/02_crate.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_01_flag_bool.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_01_flag_count.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_02_option.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_02_option_mult.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_03_positional.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_03_positional_mult.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_04_subcommands.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_05_default_values.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_01_enum.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_02_parse.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_02_validate.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_03_relations.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_04_custom.md",
-    "//third_party/rust/clap/v4/crate/examples/typed-derive.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/cargo-example-derive.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/cargo-example.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/demo.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/interop_tests.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/escaped-positional-derive.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/escaped-positional.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/find.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/git-derive.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/git.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/multicall-busybox.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/multicall-hostname.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/pacman.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/01_quick.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_app_settings.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_apps.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_crate.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_01_flag_bool.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_01_flag_count.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_02_option.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_02_option_mult.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_03_positional.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_03_positional_mult.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_04_subcommands.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_05_default_values.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_01_enum.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_01_possible.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_02_parse.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_02_validate.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_03_relations.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_04_custom.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/01_quick.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_app_settings.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_apps.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_crate.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_01_flag_bool.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_01_flag_count.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_02_option.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_02_option_mult.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_03_positional.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_03_positional_mult.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_04_subcommands.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_05_default_values.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_01_enum.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_02_parse.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_02_validate.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_03_relations.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_04_custom.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/typed-derive.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
@@ -178,147 +178,148 @@
   crate_name = "clap"
   epoch = "4"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/lib.rs"
   sources = [
-    "//third_party/rust/clap/v4/crate/examples/cargo-example-derive.rs",
-    "//third_party/rust/clap/v4/crate/examples/cargo-example.rs",
-    "//third_party/rust/clap/v4/crate/examples/demo.rs",
-    "//third_party/rust/clap/v4/crate/examples/derive_ref/augment_args.rs",
-    "//third_party/rust/clap/v4/crate/examples/derive_ref/augment_subcommands.rs",
-    "//third_party/rust/clap/v4/crate/examples/derive_ref/flatten_hand_args.rs",
-    "//third_party/rust/clap/v4/crate/examples/derive_ref/hand_subcommand.rs",
-    "//third_party/rust/clap/v4/crate/examples/escaped-positional-derive.rs",
-    "//third_party/rust/clap/v4/crate/examples/escaped-positional.rs",
-    "//third_party/rust/clap/v4/crate/examples/find.rs",
-    "//third_party/rust/clap/v4/crate/examples/git-derive.rs",
-    "//third_party/rust/clap/v4/crate/examples/git.rs",
-    "//third_party/rust/clap/v4/crate/examples/multicall-busybox.rs",
-    "//third_party/rust/clap/v4/crate/examples/multicall-hostname.rs",
-    "//third_party/rust/clap/v4/crate/examples/pacman.rs",
-    "//third_party/rust/clap/v4/crate/examples/repl.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/01_quick.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/02_app_settings.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/02_apps.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/02_crate.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_01_flag_bool.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_01_flag_count.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_02_option.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_02_option_mult.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_03_positional.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_03_positional_mult.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_04_subcommands.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_05_default_values.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_01_enum.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_01_possible.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_02_parse.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_02_validate.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_03_relations.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_04_custom.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/05_01_assert.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/01_quick.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/02_app_settings.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/02_apps.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/02_crate.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_01_flag_bool.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_01_flag_count.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_02_option.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_02_option_mult.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_03_positional.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_03_positional_mult.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_04_subcommands.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_04_subcommands_alt.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_05_default_values.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_01_enum.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_02_parse.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_02_validate.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_03_relations.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_04_custom.rs",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/05_01_assert.rs",
-    "//third_party/rust/clap/v4/crate/examples/typed-derive.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/cargo_example.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/cargo_example_derive.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/escaped_positional.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/escaped_positional_derive.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/find.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/git.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/git_derive.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/mod.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/multicall_busybox.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/multicall_hostname.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/pacman.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/repl.rs",
-    "//third_party/rust/clap/v4/crate/src/_cookbook/typed_derive.rs",
-    "//third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_0.rs",
-    "//third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_1.rs",
-    "//third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_2.rs",
-    "//third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_3.rs",
-    "//third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_4.rs",
-    "//third_party/rust/clap/v4/crate/src/_derive/_tutorial/chapter_5.rs",
-    "//third_party/rust/clap/v4/crate/src/_derive/_tutorial/mod.rs",
-    "//third_party/rust/clap/v4/crate/src/_derive/mod.rs",
-    "//third_party/rust/clap/v4/crate/src/_faq.rs",
-    "//third_party/rust/clap/v4/crate/src/_features.rs",
-    "//third_party/rust/clap/v4/crate/src/_tutorial/chapter_0.rs",
-    "//third_party/rust/clap/v4/crate/src/_tutorial/chapter_1.rs",
-    "//third_party/rust/clap/v4/crate/src/_tutorial/chapter_2.rs",
-    "//third_party/rust/clap/v4/crate/src/_tutorial/chapter_3.rs",
-    "//third_party/rust/clap/v4/crate/src/_tutorial/chapter_4.rs",
-    "//third_party/rust/clap/v4/crate/src/_tutorial/chapter_5.rs",
-    "//third_party/rust/clap/v4/crate/src/_tutorial/mod.rs",
-    "//third_party/rust/clap/v4/crate/src/bin/stdio-fixture.rs",
-    "//third_party/rust/clap/v4/crate/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/cargo-example-derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/cargo-example.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/demo.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/augment_args.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/augment_subcommands.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/flatten_hand_args.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/hand_subcommand.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/escaped-positional-derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/escaped-positional.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/find.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/git-derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/git.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/multicall-busybox.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/multicall-hostname.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/pacman.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/repl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/01_quick.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_app_settings.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_apps.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_crate.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_01_flag_bool.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_01_flag_count.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_02_option.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_02_option_mult.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_03_positional.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_03_positional_mult.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_04_subcommands.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_05_default_values.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_01_enum.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_01_possible.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_02_parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_02_validate.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_03_relations.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_04_custom.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/05_01_assert.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/01_quick.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_app_settings.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_apps.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_crate.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_01_flag_bool.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_01_flag_count.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_02_option.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_02_option_mult.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_03_positional.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_03_positional_mult.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_04_subcommands.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_04_subcommands_alt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_05_default_values.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_01_enum.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_02_parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_02_validate.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_03_relations.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_04_custom.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/05_01_assert.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/typed-derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/cargo_example.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/cargo_example_derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/escaped_positional.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/escaped_positional_derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/find.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/git.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/git_derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/multicall_busybox.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/multicall_hostname.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/pacman.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/repl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_cookbook/typed_derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_0.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_1.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_3.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_4.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/chapter_5.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/_tutorial/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_derive/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_faq.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_features.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_0.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_1.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_3.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_4.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/chapter_5.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/_tutorial/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/bin/stdio-fixture.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/src/lib.rs",
   ]
   inputs = [
-    "//third_party/rust/clap/v4/crate/README.md",
-    "//third_party/rust/clap/v4/crate/examples/README.md",
-    "//third_party/rust/clap/v4/crate/examples/cargo-example-derive.md",
-    "//third_party/rust/clap/v4/crate/examples/cargo-example.md",
-    "//third_party/rust/clap/v4/crate/examples/demo.md",
-    "//third_party/rust/clap/v4/crate/examples/derive_ref/interop_tests.md",
-    "//third_party/rust/clap/v4/crate/examples/escaped-positional-derive.md",
-    "//third_party/rust/clap/v4/crate/examples/escaped-positional.md",
-    "//third_party/rust/clap/v4/crate/examples/find.md",
-    "//third_party/rust/clap/v4/crate/examples/git-derive.md",
-    "//third_party/rust/clap/v4/crate/examples/git.md",
-    "//third_party/rust/clap/v4/crate/examples/multicall-busybox.md",
-    "//third_party/rust/clap/v4/crate/examples/multicall-hostname.md",
-    "//third_party/rust/clap/v4/crate/examples/pacman.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/01_quick.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/02_app_settings.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/02_apps.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/02_crate.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_01_flag_bool.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_01_flag_count.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_02_option.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_02_option_mult.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_03_positional.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_03_positional_mult.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_04_subcommands.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/03_05_default_values.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_01_enum.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_01_possible.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_02_parse.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_02_validate.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_03_relations.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_builder/04_04_custom.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/01_quick.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/02_app_settings.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/02_apps.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/02_crate.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_01_flag_bool.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_01_flag_count.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_02_option.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_02_option_mult.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_03_positional.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_03_positional_mult.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_04_subcommands.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/03_05_default_values.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_01_enum.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_02_parse.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_02_validate.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_03_relations.md",
-    "//third_party/rust/clap/v4/crate/examples/tutorial_derive/04_04_custom.md",
-    "//third_party/rust/clap/v4/crate/examples/typed-derive.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/cargo-example-derive.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/cargo-example.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/demo.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/derive_ref/interop_tests.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/escaped-positional-derive.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/escaped-positional.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/find.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/git-derive.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/git.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/multicall-busybox.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/multicall-hostname.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/pacman.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/01_quick.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_app_settings.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_apps.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/02_crate.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_01_flag_bool.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_01_flag_count.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_02_option.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_02_option_mult.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_03_positional.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_03_positional_mult.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_04_subcommands.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/03_05_default_values.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_01_enum.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_01_possible.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_02_parse.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_02_validate.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_03_relations.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_builder/04_04_custom.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/01_quick.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_app_settings.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_apps.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/02_crate.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_01_flag_bool.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_01_flag_count.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_02_option.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_02_option_mult.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_03_positional.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_03_positional_mult.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_04_subcommands.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/03_05_default_values.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_01_enum.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_02_parse.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_02_validate.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_03_relations.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/tutorial_derive/04_04_custom.md",
+    "//third_party/rust/chromium_crates_io/vendor/clap-4.4.6/examples/typed-derive.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
diff --git a/third_party/rust/clap_builder/v4/BUILD.gn b/third_party/rust/clap_builder/v4/BUILD.gn
index 17a947f..69586ae 100644
--- a/third_party/rust/clap_builder/v4/BUILD.gn
+++ b/third_party/rust/clap_builder/v4/BUILD.gn
@@ -11,66 +11,68 @@
   crate_name = "clap_builder"
   epoch = "4"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/lib.rs"
   sources = [
-    "//third_party/rust/clap_builder/v4/crate/src/builder/action.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/app_settings.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/arg.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/arg_group.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/arg_predicate.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/arg_settings.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/command.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/debug_asserts.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/ext.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/mod.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/os_str.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/possible_value.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/range.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/resettable.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/str.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/styled_str.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/styling.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/tests.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/value_hint.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/builder/value_parser.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/derive.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/error/context.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/error/format.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/error/kind.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/error/mod.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/lib.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/macros.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/mkeymap.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/output/fmt.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/output/help.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/output/help_template.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/output/mod.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/output/textwrap/core.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/output/textwrap/mod.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/output/textwrap/word_separators.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/output/textwrap/wrap_algorithms.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/output/usage.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/parser/arg_matcher.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/parser/error.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/parser/features/mod.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/parser/features/suggestions.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/parser/matches/arg_matches.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/parser/matches/matched_arg.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/parser/matches/mod.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/parser/matches/value_source.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/parser/mod.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/parser/parser.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/parser/validator.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/util/any_value.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/util/color.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/util/flat_map.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/util/flat_set.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/util/graph.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/util/id.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/util/mod.rs",
-    "//third_party/rust/clap_builder/v4/crate/src/util/str_to_bool.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/action.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/app_settings.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/arg.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/arg_group.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/arg_predicate.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/arg_settings.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/command.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/debug_asserts.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/ext.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/os_str.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/possible_value.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/range.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/resettable.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/str.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/styled_str.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/styling.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/tests.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/value_hint.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/builder/value_parser.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/error/context.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/error/format.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/error/kind.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/error/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/macros.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/mkeymap.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/fmt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/help.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/help_template.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/textwrap/core.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/textwrap/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/textwrap/word_separators.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/textwrap/wrap_algorithms.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/output/usage.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/arg_matcher.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/features/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/features/suggestions.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/matches/arg_matches.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/matches/matched_arg.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/matches/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/matches/value_source.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/parser.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/parser/validator.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/any_value.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/color.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/flat_map.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/flat_set.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/graph.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/id.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/src/util/str_to_bool.rs",
   ]
-  inputs = [ "//third_party/rust/clap_builder/v4/crate/README.md" ]
+  inputs = [
+    "//third_party/rust/chromium_crates_io/vendor/clap_builder-4.4.6/README.md",
+  ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/clap_lex/v0_5/BUILD.gn b/third_party/rust/clap_lex/v0_5/BUILD.gn
index 76101196..9152974 100644
--- a/third_party/rust/clap_lex/v0_5/BUILD.gn
+++ b/third_party/rust/clap_lex/v0_5/BUILD.gn
@@ -11,12 +11,15 @@
   crate_name = "clap_lex"
   epoch = "0.5"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/src/lib.rs"
   sources = [
-    "//third_party/rust/clap_lex/v0_5/crate/src/ext.rs",
-    "//third_party/rust/clap_lex/v0_5/crate/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/src/ext.rs",
+    "//third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/src/lib.rs",
   ]
-  inputs = [ "//third_party/rust/clap_lex/v0_5/crate/README.md" ]
+  inputs = [
+    "//third_party/rust/chromium_crates_io/vendor/clap_lex-0.5.1/README.md",
+  ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/clap_lex/v0_5/crate/LICENSE-APACHE b/third_party/rust/clap_lex/v0_5/crate/LICENSE-APACHE
deleted file mode 100644
index 261eeb9..0000000
--- a/third_party/rust/clap_lex/v0_5/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/third_party/rust/clap_lex/v0_5/crate/LICENSE-MIT b/third_party/rust/clap_lex/v0_5/crate/LICENSE-MIT
deleted file mode 100644
index 7b05b845..0000000
--- a/third_party/rust/clap_lex/v0_5/crate/LICENSE-MIT
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015-2022 Kevin B. Knapp and Clap Contributors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/third_party/rust/codespan_reporting/v0_11/BUILD.gn b/third_party/rust/codespan_reporting/v0_11/BUILD.gn
index bc04f627..50a49bf53 100644
--- a/third_party/rust/codespan_reporting/v0_11/BUILD.gn
+++ b/third_party/rust/codespan_reporting/v0_11/BUILD.gn
@@ -11,25 +11,25 @@
   crate_name = "codespan_reporting"
   epoch = "0.11"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/lib.rs"
   sources = [
-    "//third_party/rust/codespan_reporting/v0_11/crate/examples/custom_files.rs",
-    "//third_party/rust/codespan_reporting/v0_11/crate/examples/peg_calculator.rs",
-    "//third_party/rust/codespan_reporting/v0_11/crate/examples/readme_preview.rs",
-    "//third_party/rust/codespan_reporting/v0_11/crate/examples/reusable_diagnostic.rs",
-    "//third_party/rust/codespan_reporting/v0_11/crate/examples/term.rs",
-    "//third_party/rust/codespan_reporting/v0_11/crate/src/diagnostic.rs",
-    "//third_party/rust/codespan_reporting/v0_11/crate/src/files.rs",
-    "//third_party/rust/codespan_reporting/v0_11/crate/src/lib.rs",
-    "//third_party/rust/codespan_reporting/v0_11/crate/src/term.rs",
-    "//third_party/rust/codespan_reporting/v0_11/crate/src/term/config.rs",
-    "//third_party/rust/codespan_reporting/v0_11/crate/src/term/renderer.rs",
-    "//third_party/rust/codespan_reporting/v0_11/crate/src/term/views.rs",
-    "//third_party/rust/codespan_reporting/v0_11/crate/tests/support/color_buffer.rs",
-    "//third_party/rust/codespan_reporting/v0_11/crate/tests/support/mod.rs",
-    "//third_party/rust/codespan_reporting/v0_11/crate/tests/term.rs",
+    "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/examples/custom_files.rs",
+    "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/examples/peg_calculator.rs",
+    "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/examples/readme_preview.rs",
+    "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/examples/reusable_diagnostic.rs",
+    "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/examples/term.rs",
+    "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/diagnostic.rs",
+    "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/files.rs",
+    "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/term.rs",
+    "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/term/config.rs",
+    "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/term/renderer.rs",
+    "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/src/term/views.rs",
+    "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/support/color_buffer.rs",
+    "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/support/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/tests/term.rs",
   ]
-  inputs = [ "//third_party/rust/codespan_reporting/v0_11/crate/CHANGELOG.md" ]
+  inputs = [ "//third_party/rust/chromium_crates_io/vendor/codespan-reporting-0.11.1/CHANGELOG.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/cxx/v1/BUILD.gn b/third_party/rust/cxx/v1/BUILD.gn
index 77e43522..7000087 100644
--- a/third_party/rust/cxx/v1/BUILD.gn
+++ b/third_party/rust/cxx/v1/BUILD.gn
@@ -11,150 +11,151 @@
   crate_name = "cxx"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/lib.rs"
   sources = [
-    "//third_party/rust/cxx/v1/crate/build.rs",
-    "//third_party/rust/cxx/v1/crate/src/c_char.rs",
-    "//third_party/rust/cxx/v1/crate/src/cxx_string.rs",
-    "//third_party/rust/cxx/v1/crate/src/cxx_vector.rs",
-    "//third_party/rust/cxx/v1/crate/src/exception.rs",
-    "//third_party/rust/cxx/v1/crate/src/extern_type.rs",
-    "//third_party/rust/cxx/v1/crate/src/fmt.rs",
-    "//third_party/rust/cxx/v1/crate/src/function.rs",
-    "//third_party/rust/cxx/v1/crate/src/hash.rs",
-    "//third_party/rust/cxx/v1/crate/src/lib.rs",
-    "//third_party/rust/cxx/v1/crate/src/lossy.rs",
-    "//third_party/rust/cxx/v1/crate/src/macros/assert.rs",
-    "//third_party/rust/cxx/v1/crate/src/macros/mod.rs",
-    "//third_party/rust/cxx/v1/crate/src/memory.rs",
-    "//third_party/rust/cxx/v1/crate/src/opaque.rs",
-    "//third_party/rust/cxx/v1/crate/src/result.rs",
-    "//third_party/rust/cxx/v1/crate/src/rust_slice.rs",
-    "//third_party/rust/cxx/v1/crate/src/rust_str.rs",
-    "//third_party/rust/cxx/v1/crate/src/rust_string.rs",
-    "//third_party/rust/cxx/v1/crate/src/rust_type.rs",
-    "//third_party/rust/cxx/v1/crate/src/rust_vec.rs",
-    "//third_party/rust/cxx/v1/crate/src/shared_ptr.rs",
-    "//third_party/rust/cxx/v1/crate/src/sip.rs",
-    "//third_party/rust/cxx/v1/crate/src/symbols/exception.rs",
-    "//third_party/rust/cxx/v1/crate/src/symbols/mod.rs",
-    "//third_party/rust/cxx/v1/crate/src/symbols/rust_slice.rs",
-    "//third_party/rust/cxx/v1/crate/src/symbols/rust_str.rs",
-    "//third_party/rust/cxx/v1/crate/src/symbols/rust_string.rs",
-    "//third_party/rust/cxx/v1/crate/src/symbols/rust_vec.rs",
-    "//third_party/rust/cxx/v1/crate/src/type_id.rs",
-    "//third_party/rust/cxx/v1/crate/src/unique_ptr.rs",
-    "//third_party/rust/cxx/v1/crate/src/unwind.rs",
-    "//third_party/rust/cxx/v1/crate/src/vector.rs",
-    "//third_party/rust/cxx/v1/crate/src/weak_ptr.rs",
-    "//third_party/rust/cxx/v1/crate/tests/compiletest.rs",
-    "//third_party/rust/cxx/v1/crate/tests/cxx_gen.rs",
-    "//third_party/rust/cxx/v1/crate/tests/cxx_string.rs",
-    "//third_party/rust/cxx/v1/crate/tests/cxx_vector.rs",
-    "//third_party/rust/cxx/v1/crate/tests/test.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/array_len_expr.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/array_len_suffix.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/async_fn.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/bad_explicit_impl.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/by_value_not_supported.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/const_fn.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/data_enums.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/deny_elided_lifetimes.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/deny_missing_docs.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/derive_duplicate.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/derive_noncopy.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/drop_shared.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/empty_enum.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/empty_struct.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/enum_inconsistent.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/enum_match_without_wildcard.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/enum_out_of_bounds.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/enum_overflows.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/enum_receiver.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/enum_unsatisfiable.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/expected_named.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/extern_fn_abi.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/extern_type_bound.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/extern_type_generic.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/extern_type_lifetime_bound.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/fallible_fnptr.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/function_with_body.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/generic_enum.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/impl_trait_for_type.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/include.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/lifetime_extern_cxx.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/lifetime_extern_rust.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/missing_unsafe.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/multiple_parse_error.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/mut_return.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/non_integer_discriminant_enum.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/nonempty_impl_block.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/nonlocal_rust_type.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/opaque_autotraits.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/opaque_not_sized.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/pin_mut_opaque.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/ptr_in_fnptr.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/ptr_missing_unsafe.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/ptr_no_const_mut.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/ptr_unsupported.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/raw_ident_namespace.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/reference_to_reference.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/reserved_lifetime.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/reserved_name.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/result_no_display.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/root_namespace.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/rust_pinned.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/slice_of_type_alias.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/slice_unsupported.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/struct_cycle.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/type_alias_rust.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/unique_ptr_as_mut.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/unique_ptr_to_opaque.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/unique_ptr_twice.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/unnamed_receiver.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/unpin_impl.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/unrecognized_receiver.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/unsupported_elided.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/vec_opaque.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/vector_autotraits.rs",
-    "//third_party/rust/cxx/v1/crate/tests/ui/wrong_type_id.rs",
-    "//third_party/rust/cxx/v1/crate/tests/unique_ptr.rs",
-    "//third_party/rust/cxx/v1/crate/tools/cargo/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/c_char.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/cxx_string.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/cxx_vector.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/exception.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/extern_type.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/fmt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/function.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/hash.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/lossy.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/macros/assert.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/macros/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/memory.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/opaque.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/result.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/rust_slice.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/rust_str.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/rust_string.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/rust_type.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/rust_vec.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/shared_ptr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/sip.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/exception.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/rust_slice.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/rust_str.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/rust_string.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/symbols/rust_vec.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/type_id.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/unique_ptr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/unwind.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/vector.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/src/weak_ptr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/compiletest.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/cxx_gen.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/cxx_string.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/cxx_vector.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/array_len_expr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/array_len_suffix.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/async_fn.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/bad_explicit_impl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/by_value_not_supported.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/const_fn.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/data_enums.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/deny_elided_lifetimes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/deny_missing_docs.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/derive_duplicate.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/derive_noncopy.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/drop_shared.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/empty_enum.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/empty_struct.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_inconsistent.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_match_without_wildcard.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_out_of_bounds.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_overflows.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_receiver.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/enum_unsatisfiable.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/expected_named.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_fn_abi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_type_bound.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_type_generic.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/extern_type_lifetime_bound.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/fallible_fnptr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/function_with_body.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/generic_enum.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/impl_trait_for_type.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/include.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/lifetime_extern_cxx.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/lifetime_extern_rust.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/missing_unsafe.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/multiple_parse_error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/mut_return.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/non_integer_discriminant_enum.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/nonempty_impl_block.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/nonlocal_rust_type.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/opaque_autotraits.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/opaque_not_sized.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/pin_mut_opaque.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_in_fnptr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_missing_unsafe.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_no_const_mut.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/ptr_unsupported.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/raw_ident_namespace.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/reference_to_reference.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/reserved_lifetime.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/reserved_name.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/result_no_display.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/root_namespace.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/rust_pinned.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/slice_of_type_alias.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/slice_unsupported.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/struct_cycle.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/type_alias_rust.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unique_ptr_as_mut.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unique_ptr_to_opaque.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unique_ptr_twice.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unnamed_receiver.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unpin_impl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unrecognized_receiver.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/unsupported_elided.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/vec_opaque.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/vector_autotraits.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/ui/wrong_type_id.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tests/unique_ptr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/tools/cargo/build.rs",
   ]
   inputs = [
-    "//third_party/rust/cxx/v1/crate/README.md",
-    "//third_party/rust/cxx/v1/crate/book/README.md",
-    "//third_party/rust/cxx/v1/crate/book/src/404.md",
-    "//third_party/rust/cxx/v1/crate/book/src/SUMMARY.md",
-    "//third_party/rust/cxx/v1/crate/book/src/async.md",
-    "//third_party/rust/cxx/v1/crate/book/src/attributes.md",
-    "//third_party/rust/cxx/v1/crate/book/src/binding/box.md",
-    "//third_party/rust/cxx/v1/crate/book/src/binding/cxxstring.md",
-    "//third_party/rust/cxx/v1/crate/book/src/binding/cxxvector.md",
-    "//third_party/rust/cxx/v1/crate/book/src/binding/fn.md",
-    "//third_party/rust/cxx/v1/crate/book/src/binding/rawptr.md",
-    "//third_party/rust/cxx/v1/crate/book/src/binding/result.md",
-    "//third_party/rust/cxx/v1/crate/book/src/binding/sharedptr.md",
-    "//third_party/rust/cxx/v1/crate/book/src/binding/slice.md",
-    "//third_party/rust/cxx/v1/crate/book/src/binding/str.md",
-    "//third_party/rust/cxx/v1/crate/book/src/binding/string.md",
-    "//third_party/rust/cxx/v1/crate/book/src/binding/uniqueptr.md",
-    "//third_party/rust/cxx/v1/crate/book/src/binding/vec.md",
-    "//third_party/rust/cxx/v1/crate/book/src/bindings.md",
-    "//third_party/rust/cxx/v1/crate/book/src/build/bazel.md",
-    "//third_party/rust/cxx/v1/crate/book/src/build/cargo.md",
-    "//third_party/rust/cxx/v1/crate/book/src/build/cmake.md",
-    "//third_party/rust/cxx/v1/crate/book/src/build/other.md",
-    "//third_party/rust/cxx/v1/crate/book/src/building.md",
-    "//third_party/rust/cxx/v1/crate/book/src/concepts.md",
-    "//third_party/rust/cxx/v1/crate/book/src/context.md",
-    "//third_party/rust/cxx/v1/crate/book/src/extern-c++.md",
-    "//third_party/rust/cxx/v1/crate/book/src/extern-rust.md",
-    "//third_party/rust/cxx/v1/crate/book/src/index.md",
-    "//third_party/rust/cxx/v1/crate/book/src/reference.md",
-    "//third_party/rust/cxx/v1/crate/book/src/shared.md",
-    "//third_party/rust/cxx/v1/crate/book/src/tutorial.md",
-    "//third_party/rust/cxx/v1/crate/include/cxx.h",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/404.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/SUMMARY.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/async.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/attributes.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/box.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/cxxstring.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/cxxvector.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/fn.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/rawptr.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/result.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/sharedptr.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/slice.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/str.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/string.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/uniqueptr.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/binding/vec.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/bindings.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/build/bazel.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/build/cargo.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/build/cmake.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/build/other.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/building.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/concepts.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/context.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/extern-c++.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/extern-rust.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/index.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/reference.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/shared.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/book/src/tutorial.md",
+    "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/include/cxx.h",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
@@ -176,6 +177,8 @@
     "alloc",
     "std",
   ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root =
+      "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/build.rs"
+  build_sources =
+      [ "//third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/build.rs" ]
 }
diff --git a/third_party/rust/cxx/v1/cxx.h b/third_party/rust/cxx/v1/cxx.h
new file mode 100644
index 0000000..464627a
--- /dev/null
+++ b/third_party/rust/cxx/v1/cxx.h
@@ -0,0 +1,6 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Forwarding header to the specific cxx version header.
+#include "third_party/rust/chromium_crates_io/vendor/cxx-1.0.110/include/cxx.h"
diff --git a/third_party/rust/cxx/v1/patches/0003-Change-cxx-header-include-to-be-an-absolute-path.patch b/third_party/rust/cxx/v1/patches/0003-Change-cxx-header-include-to-be-an-absolute-path.patch
index 3239956c..62d7e2d 100644
--- a/third_party/rust/cxx/v1/patches/0003-Change-cxx-header-include-to-be-an-absolute-path.patch
+++ b/third_party/rust/cxx/v1/patches/0003-Change-cxx-header-include-to-be-an-absolute-path.patch
@@ -14,7 +14,7 @@
 +++ b/third_party/rust/cxx/v1/crate/src/cxx.cc
 @@ -1,4 +1,4 @@
 -#include "../include/cxx.h"
-+#include "third_party/rust/cxx/v1/crate/include/cxx.h"
++#include "third_party/rust/cxx/v1/cxx.h"
  #include <cstdio>
  #include <cstring>
  #include <iostream>
diff --git a/third_party/rust/cxxbridge_cmd/v1/BUILD.gn b/third_party/rust/cxxbridge_cmd/v1/BUILD.gn
index 3bc447b..cb8d4141 100644
--- a/third_party/rust/cxxbridge_cmd/v1/BUILD.gn
+++ b/third_party/rust/cxxbridge_cmd/v1/BUILD.gn
@@ -9,60 +9,60 @@
 
 cargo_crate("cxxbridge") {
   crate_type = "bin"
-  crate_root = "crate/src/main.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/main.rs"
   sources = [
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/app.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/cfg.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/gen/block.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/gen/builtin.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/gen/cfg.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/gen/check.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/gen/error.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/gen/file.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/gen/fs.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/gen/ifndef.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/gen/include.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/gen/mod.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/gen/names.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/gen/namespace.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/gen/nested.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/gen/out.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/gen/write.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/main.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/output.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/atom.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/attrs.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/cfg.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/check.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/derive.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/discriminant.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/doc.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/error.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/file.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/ident.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/impls.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/improper.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/instantiate.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/mangle.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/map.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/mod.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/names.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/namespace.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/parse.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/pod.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/qualified.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/report.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/resolve.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/set.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/symbol.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/tokens.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/toposort.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/trivial.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/types.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/syntax/visit.rs",
-    "//third_party/rust/cxxbridge_cmd/v1/crate/src/test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/app.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/cfg.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/block.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/builtin.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/cfg.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/check.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/file.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/fs.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/ifndef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/include.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/names.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/namespace.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/nested.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/out.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/write.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/main.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/output.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/atom.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/attrs.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/cfg.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/check.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/discriminant.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/doc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/file.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/ident.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/impls.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/improper.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/instantiate.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/mangle.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/map.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/names.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/namespace.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/pod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/qualified.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/report.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/resolve.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/set.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/symbol.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/tokens.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/toposort.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/trivial.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/types.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/syntax/visit.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/test.rs",
   ]
-  inputs = [ "//third_party/rust/cxxbridge_cmd/v1/crate/src/gen/include/cxx.h" ]
+  inputs = [ "//third_party/rust/chromium_crates_io/vendor/cxxbridge-cmd-1.0.110/src/gen/include/cxx.h" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/LICENSE-APACHE b/third_party/rust/cxxbridge_cmd/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 1b5ec8b..0000000
--- a/third_party/rust/cxxbridge_cmd/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,176 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
diff --git a/third_party/rust/cxxbridge_cmd/v1/crate/LICENSE-MIT b/third_party/rust/cxxbridge_cmd/v1/crate/LICENSE-MIT
deleted file mode 100644
index 31aa7938..0000000
--- a/third_party/rust/cxxbridge_cmd/v1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,23 +0,0 @@
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/cxxbridge_macro/v1/BUILD.gn b/third_party/rust/cxxbridge_macro/v1/BUILD.gn
index 333a5904..784a710 100644
--- a/third_party/rust/cxxbridge_macro/v1/BUILD.gn
+++ b/third_party/rust/cxxbridge_macro/v1/BUILD.gn
@@ -11,48 +11,48 @@
   crate_name = "cxxbridge_macro"
   epoch = "1"
   crate_type = "proc-macro"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/lib.rs"
   sources = [
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/clang.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/derive.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/expand.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/generics.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/lib.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/load.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/atom.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/attrs.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/cfg.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/check.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/derive.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/discriminant.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/doc.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/error.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/file.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/ident.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/impls.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/improper.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/instantiate.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/mangle.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/map.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/mod.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/names.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/namespace.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/parse.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/pod.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/qualified.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/report.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/resolve.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/set.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/symbol.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/tokens.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/toposort.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/trivial.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/types.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/syntax/visit.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/tokens.rs",
-    "//third_party/rust/cxxbridge_macro/v1/crate/src/type_id.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/clang.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/expand.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/generics.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/load.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/atom.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/attrs.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/cfg.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/check.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/discriminant.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/doc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/file.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/ident.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/impls.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/improper.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/instantiate.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/mangle.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/map.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/names.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/namespace.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/pod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/qualified.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/report.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/resolve.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/set.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/symbol.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/tokens.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/toposort.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/trivial.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/types.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/syntax/visit.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/tokens.rs",
+    "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/src/type_id.rs",
   ]
-  inputs = [ "//third_party/rust/cxxbridge_macro/v1/crate/README.md" ]
+  inputs = [ "//third_party/rust/chromium_crates_io/vendor/cxxbridge-macro-1.0.110/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/LICENSE-APACHE b/third_party/rust/cxxbridge_macro/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 1b5ec8b..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,176 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/LICENSE-MIT b/third_party/rust/cxxbridge_macro/v1/crate/LICENSE-MIT
deleted file mode 100644
index 31aa7938..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,23 +0,0 @@
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/atom.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/atom.rs
deleted file mode 100644
index 08e04a3..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/atom.rs
+++ /dev/null
@@ -1,103 +0,0 @@
-use crate::syntax::Type;
-use proc_macro2::Ident;
-use std::fmt::{self, Display};
-
-#[derive(Copy, Clone, PartialEq)]
-pub(crate) enum Atom {
-    Bool,
-    Char, // C char, not Rust char
-    U8,
-    U16,
-    U32,
-    U64,
-    Usize,
-    I8,
-    I16,
-    I32,
-    I64,
-    Isize,
-    F32,
-    F64,
-    CxxString,
-    RustString,
-}
-
-impl Atom {
-    pub(crate) fn from(ident: &Ident) -> Option<Self> {
-        Self::from_str(ident.to_string().as_str())
-    }
-
-    pub(crate) fn from_str(s: &str) -> Option<Self> {
-        use self::Atom::*;
-        match s {
-            "bool" => Some(Bool),
-            "c_char" => Some(Char),
-            "u8" => Some(U8),
-            "u16" => Some(U16),
-            "u32" => Some(U32),
-            "u64" => Some(U64),
-            "usize" => Some(Usize),
-            "i8" => Some(I8),
-            "i16" => Some(I16),
-            "i32" => Some(I32),
-            "i64" => Some(I64),
-            "isize" => Some(Isize),
-            "f32" => Some(F32),
-            "f64" => Some(F64),
-            "CxxString" => Some(CxxString),
-            "String" => Some(RustString),
-            _ => None,
-        }
-    }
-}
-
-impl Display for Atom {
-    fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-        formatter.write_str(self.as_ref())
-    }
-}
-
-impl AsRef<str> for Atom {
-    fn as_ref(&self) -> &str {
-        use self::Atom::*;
-        match self {
-            Bool => "bool",
-            Char => "c_char",
-            U8 => "u8",
-            U16 => "u16",
-            U32 => "u32",
-            U64 => "u64",
-            Usize => "usize",
-            I8 => "i8",
-            I16 => "i16",
-            I32 => "i32",
-            I64 => "i64",
-            Isize => "isize",
-            F32 => "f32",
-            F64 => "f64",
-            CxxString => "CxxString",
-            RustString => "String",
-        }
-    }
-}
-
-impl PartialEq<Atom> for Type {
-    fn eq(&self, atom: &Atom) -> bool {
-        match self {
-            Type::Ident(ident) => ident.rust == atom,
-            _ => false,
-        }
-    }
-}
-
-impl PartialEq<Atom> for &Ident {
-    fn eq(&self, atom: &Atom) -> bool {
-        *self == atom
-    }
-}
-
-impl PartialEq<Atom> for &Type {
-    fn eq(&self, atom: &Atom) -> bool {
-        *self == atom
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/attrs.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/attrs.rs
deleted file mode 100644
index 894b82b..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/attrs.rs
+++ /dev/null
@@ -1,312 +0,0 @@
-use crate::syntax::cfg::CfgExpr;
-use crate::syntax::namespace::Namespace;
-use crate::syntax::report::Errors;
-use crate::syntax::Atom::{self, *};
-use crate::syntax::{cfg, Derive, Doc, ForeignName};
-use proc_macro2::{Ident, TokenStream};
-use quote::ToTokens;
-use syn::parse::ParseStream;
-use syn::{Attribute, Error, Expr, Lit, LitStr, Meta, Path, Result, Token};
-
-// Intended usage:
-//
-//     let mut doc = Doc::new();
-//     let mut cxx_name = None;
-//     let mut rust_name = None;
-//     /* ... */
-//     let attrs = attrs::parse(
-//         cx,
-//         item.attrs,
-//         attrs::Parser {
-//             doc: Some(&mut doc),
-//             cxx_name: Some(&mut cxx_name),
-//             rust_name: Some(&mut rust_name),
-//             /* ... */
-//             ..Default::default()
-//         },
-//     );
-//
-#[derive(Default)]
-pub(crate) struct Parser<'a> {
-    pub cfg: Option<&'a mut CfgExpr>,
-    pub doc: Option<&'a mut Doc>,
-    pub derives: Option<&'a mut Vec<Derive>>,
-    pub repr: Option<&'a mut Option<Atom>>,
-    pub namespace: Option<&'a mut Namespace>,
-    pub cxx_name: Option<&'a mut Option<ForeignName>>,
-    pub rust_name: Option<&'a mut Option<Ident>>,
-    pub variants_from_header: Option<&'a mut Option<Attribute>>,
-    pub ignore_unrecognized: bool,
-
-    // Suppress clippy needless_update lint ("struct update has no effect, all
-    // the fields in the struct have already been specified") when preemptively
-    // writing `..Default::default()`.
-    pub(crate) _more: (),
-}
-
-pub(crate) fn parse(cx: &mut Errors, attrs: Vec<Attribute>, mut parser: Parser) -> OtherAttrs {
-    let mut passthrough_attrs = Vec::new();
-    for attr in attrs {
-        let attr_path = attr.path();
-        if attr_path.is_ident("doc") {
-            match parse_doc_attribute(&attr.meta) {
-                Ok(attr) => {
-                    if let Some(doc) = &mut parser.doc {
-                        match attr {
-                            DocAttribute::Doc(lit) => doc.push(lit),
-                            DocAttribute::Hidden => doc.hidden = true,
-                        }
-                        continue;
-                    }
-                }
-                Err(err) => {
-                    cx.push(err);
-                    break;
-                }
-            }
-        } else if attr_path.is_ident("derive") {
-            match attr.parse_args_with(|attr: ParseStream| parse_derive_attribute(cx, attr)) {
-                Ok(attr) => {
-                    if let Some(derives) = &mut parser.derives {
-                        derives.extend(attr);
-                        continue;
-                    }
-                }
-                Err(err) => {
-                    cx.push(err);
-                    break;
-                }
-            }
-        } else if attr_path.is_ident("repr") {
-            match attr.parse_args_with(parse_repr_attribute) {
-                Ok(attr) => {
-                    if let Some(repr) = &mut parser.repr {
-                        **repr = Some(attr);
-                        continue;
-                    }
-                }
-                Err(err) => {
-                    cx.push(err);
-                    break;
-                }
-            }
-        } else if attr_path.is_ident("namespace") {
-            match Namespace::parse_meta(&attr.meta) {
-                Ok(attr) => {
-                    if let Some(namespace) = &mut parser.namespace {
-                        **namespace = attr;
-                        continue;
-                    }
-                }
-                Err(err) => {
-                    cx.push(err);
-                    break;
-                }
-            }
-        } else if attr_path.is_ident("cxx_name") {
-            match parse_cxx_name_attribute(&attr.meta) {
-                Ok(attr) => {
-                    if let Some(cxx_name) = &mut parser.cxx_name {
-                        **cxx_name = Some(attr);
-                        continue;
-                    }
-                }
-                Err(err) => {
-                    cx.push(err);
-                    break;
-                }
-            }
-        } else if attr_path.is_ident("rust_name") {
-            match parse_rust_name_attribute(&attr.meta) {
-                Ok(attr) => {
-                    if let Some(rust_name) = &mut parser.rust_name {
-                        **rust_name = Some(attr);
-                        continue;
-                    }
-                }
-                Err(err) => {
-                    cx.push(err);
-                    break;
-                }
-            }
-        } else if attr_path.is_ident("cfg") {
-            match cfg::parse_attribute(&attr) {
-                Ok(cfg_expr) => {
-                    if let Some(cfg) = &mut parser.cfg {
-                        cfg.merge(cfg_expr);
-                        passthrough_attrs.push(attr);
-                        continue;
-                    }
-                }
-                Err(err) => {
-                    cx.push(err);
-                    break;
-                }
-            }
-        } else if attr_path.is_ident("variants_from_header")
-            && cfg!(feature = "experimental-enum-variants-from-header")
-        {
-            if let Err(err) = attr.meta.require_path_only() {
-                cx.push(err);
-            }
-            if let Some(variants_from_header) = &mut parser.variants_from_header {
-                **variants_from_header = Some(attr);
-                continue;
-            }
-        } else if attr_path.is_ident("allow")
-            || attr_path.is_ident("warn")
-            || attr_path.is_ident("deny")
-            || attr_path.is_ident("forbid")
-            || attr_path.is_ident("deprecated")
-            || attr_path.is_ident("must_use")
-        {
-            // https://doc.rust-lang.org/reference/attributes/diagnostics.html
-            passthrough_attrs.push(attr);
-            continue;
-        } else if attr_path.is_ident("serde") {
-            passthrough_attrs.push(attr);
-            continue;
-        } else if attr_path.segments.len() > 1 {
-            let tool = &attr_path.segments.first().unwrap().ident;
-            if tool == "rustfmt" {
-                // Skip, rustfmt only needs to find it in the pre-expansion source file.
-                continue;
-            } else if tool == "clippy" {
-                passthrough_attrs.push(attr);
-                continue;
-            }
-        }
-        if !parser.ignore_unrecognized {
-            cx.error(attr, "unsupported attribute");
-            break;
-        }
-    }
-    OtherAttrs(passthrough_attrs)
-}
-
-enum DocAttribute {
-    Doc(LitStr),
-    Hidden,
-}
-
-mod kw {
-    syn::custom_keyword!(hidden);
-}
-
-fn parse_doc_attribute(meta: &Meta) -> Result<DocAttribute> {
-    match meta {
-        Meta::NameValue(meta) => {
-            if let Expr::Lit(expr) = &meta.value {
-                if let Lit::Str(lit) = &expr.lit {
-                    return Ok(DocAttribute::Doc(lit.clone()));
-                }
-            }
-        }
-        Meta::List(meta) => {
-            meta.parse_args::<kw::hidden>()?;
-            return Ok(DocAttribute::Hidden);
-        }
-        Meta::Path(_) => {}
-    }
-    Err(Error::new_spanned(meta, "unsupported doc attribute"))
-}
-
-fn parse_derive_attribute(cx: &mut Errors, input: ParseStream) -> Result<Vec<Derive>> {
-    let paths = input.parse_terminated(Path::parse_mod_style, Token![,])?;
-
-    let mut derives = Vec::new();
-    for path in paths {
-        if let Some(ident) = path.get_ident() {
-            if let Some(derive) = Derive::from(ident) {
-                derives.push(derive);
-                continue;
-            }
-        }
-        cx.error(path, "unsupported derive");
-    }
-    Ok(derives)
-}
-
-fn parse_repr_attribute(input: ParseStream) -> Result<Atom> {
-    let begin = input.cursor();
-    let ident: Ident = input.parse()?;
-    if let Some(atom) = Atom::from(&ident) {
-        match atom {
-            U8 | U16 | U32 | U64 | Usize | I8 | I16 | I32 | I64 | Isize if input.is_empty() => {
-                return Ok(atom);
-            }
-            _ => {}
-        }
-    }
-    Err(Error::new_spanned(
-        begin.token_stream(),
-        "unrecognized repr",
-    ))
-}
-
-fn parse_cxx_name_attribute(meta: &Meta) -> Result<ForeignName> {
-    if let Meta::NameValue(meta) = meta {
-        match &meta.value {
-            Expr::Lit(expr) => {
-                if let Lit::Str(lit) = &expr.lit {
-                    return ForeignName::parse(&lit.value(), lit.span());
-                }
-            }
-            Expr::Path(expr) => {
-                if let Some(ident) = expr.path.get_ident() {
-                    return ForeignName::parse(&ident.to_string(), ident.span());
-                }
-            }
-            _ => {}
-        }
-    }
-    Err(Error::new_spanned(meta, "unsupported cxx_name attribute"))
-}
-
-fn parse_rust_name_attribute(meta: &Meta) -> Result<Ident> {
-    if let Meta::NameValue(meta) = meta {
-        match &meta.value {
-            Expr::Lit(expr) => {
-                if let Lit::Str(lit) = &expr.lit {
-                    return lit.parse();
-                }
-            }
-            Expr::Path(expr) => {
-                if let Some(ident) = expr.path.get_ident() {
-                    return Ok(ident.clone());
-                }
-            }
-            _ => {}
-        }
-    }
-    Err(Error::new_spanned(meta, "unsupported rust_name attribute"))
-}
-
-#[derive(Clone)]
-pub(crate) struct OtherAttrs(Vec<Attribute>);
-
-impl OtherAttrs {
-    pub(crate) fn none() -> Self {
-        OtherAttrs(Vec::new())
-    }
-
-    pub(crate) fn extend(&mut self, other: Self) {
-        self.0.extend(other.0);
-    }
-}
-
-impl ToTokens for OtherAttrs {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        for attr in &self.0 {
-            let Attribute {
-                pound_token,
-                style,
-                bracket_token,
-                meta,
-            } = attr;
-            pound_token.to_tokens(tokens);
-            let _ = style; // ignore; render outer and inner attrs both as outer
-            bracket_token.surround(tokens, |tokens| meta.to_tokens(tokens));
-        }
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/cfg.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/cfg.rs
deleted file mode 100644
index 83511d7..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/cfg.rs
+++ /dev/null
@@ -1,77 +0,0 @@
-use proc_macro2::Ident;
-use std::mem;
-use syn::parse::{Error, ParseStream, Result};
-use syn::{parenthesized, token, Attribute, LitStr, Token};
-
-#[derive(Clone)]
-pub(crate) enum CfgExpr {
-    Unconditional,
-    Eq(Ident, Option<LitStr>),
-    All(Vec<CfgExpr>),
-    Any(Vec<CfgExpr>),
-    Not(Box<CfgExpr>),
-}
-
-impl CfgExpr {
-    pub(crate) fn merge(&mut self, expr: CfgExpr) {
-        if let CfgExpr::Unconditional = self {
-            *self = expr;
-        } else if let CfgExpr::All(list) = self {
-            list.push(expr);
-        } else {
-            let prev = mem::replace(self, CfgExpr::Unconditional);
-            *self = CfgExpr::All(vec![prev, expr]);
-        }
-    }
-}
-
-pub(crate) fn parse_attribute(attr: &Attribute) -> Result<CfgExpr> {
-    attr.parse_args_with(|input: ParseStream| {
-        let cfg_expr = input.call(parse_single)?;
-        input.parse::<Option<Token![,]>>()?;
-        Ok(cfg_expr)
-    })
-}
-
-fn parse_single(input: ParseStream) -> Result<CfgExpr> {
-    let ident: Ident = input.parse()?;
-    let lookahead = input.lookahead1();
-    if input.peek(token::Paren) {
-        let content;
-        parenthesized!(content in input);
-        if ident == "all" {
-            let list = content.call(parse_multiple)?;
-            Ok(CfgExpr::All(list))
-        } else if ident == "any" {
-            let list = content.call(parse_multiple)?;
-            Ok(CfgExpr::Any(list))
-        } else if ident == "not" {
-            let expr = content.call(parse_single)?;
-            content.parse::<Option<Token![,]>>()?;
-            Ok(CfgExpr::Not(Box::new(expr)))
-        } else {
-            Err(Error::new(ident.span(), "unrecognized cfg expression"))
-        }
-    } else if lookahead.peek(Token![=]) {
-        input.parse::<Token![=]>()?;
-        let string: LitStr = input.parse()?;
-        Ok(CfgExpr::Eq(ident, Some(string)))
-    } else if lookahead.peek(Token![,]) || input.is_empty() {
-        Ok(CfgExpr::Eq(ident, None))
-    } else {
-        Err(lookahead.error())
-    }
-}
-
-fn parse_multiple(input: ParseStream) -> Result<Vec<CfgExpr>> {
-    let mut vec = Vec::new();
-    while !input.is_empty() {
-        let expr = input.call(parse_single)?;
-        vec.push(expr);
-        if input.is_empty() {
-            break;
-        }
-        input.parse::<Token![,]>()?;
-    }
-    Ok(vec)
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/check.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/check.rs
deleted file mode 100644
index b5fd45e..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/check.rs
+++ /dev/null
@@ -1,740 +0,0 @@
-use crate::syntax::atom::Atom::{self, *};
-use crate::syntax::report::Errors;
-use crate::syntax::visit::{self, Visit};
-use crate::syntax::{
-    error, ident, trivial, Api, Array, Enum, ExternFn, ExternType, Impl, Lang, Lifetimes,
-    NamedType, Ptr, Receiver, Ref, Signature, SliceRef, Struct, Trait, Ty1, Type, TypeAlias, Types,
-};
-use proc_macro2::{Delimiter, Group, Ident, TokenStream};
-use quote::{quote, ToTokens};
-use std::fmt::Display;
-use syn::{GenericParam, Generics, Lifetime};
-
-pub(crate) struct Check<'a> {
-    apis: &'a [Api],
-    types: &'a Types<'a>,
-    errors: &'a mut Errors,
-    generator: Generator,
-}
-
-pub(crate) enum Generator {
-    // cxx-build crate, cxxbridge cli, cxx-gen.
-    #[allow(dead_code)]
-    Build,
-    // cxxbridge-macro. This is relevant in that the macro output is going to
-    // get fed straight to rustc, so for errors that rustc already contains
-    // logic to catch (probably with a better diagnostic than what the proc
-    // macro API is able to produce), we avoid duplicating them in our own
-    // diagnostics.
-    #[allow(dead_code)]
-    Macro,
-}
-
-pub(crate) fn typecheck(cx: &mut Errors, apis: &[Api], types: &Types, generator: Generator) {
-    do_typecheck(&mut Check {
-        apis,
-        types,
-        errors: cx,
-        generator,
-    });
-}
-
-fn do_typecheck(cx: &mut Check) {
-    ident::check_all(cx, cx.apis);
-
-    for ty in cx.types {
-        match ty {
-            Type::Ident(ident) => check_type_ident(cx, ident),
-            Type::RustBox(ptr) => check_type_box(cx, ptr),
-            Type::RustVec(ty) => check_type_rust_vec(cx, ty),
-            Type::UniquePtr(ptr) => check_type_unique_ptr(cx, ptr),
-            Type::SharedPtr(ptr) => check_type_shared_ptr(cx, ptr),
-            Type::WeakPtr(ptr) => check_type_weak_ptr(cx, ptr),
-            Type::CxxVector(ptr) => check_type_cxx_vector(cx, ptr),
-            Type::Ref(ty) => check_type_ref(cx, ty),
-            Type::Ptr(ty) => check_type_ptr(cx, ty),
-            Type::Array(array) => check_type_array(cx, array),
-            Type::Fn(ty) => check_type_fn(cx, ty),
-            Type::SliceRef(ty) => check_type_slice_ref(cx, ty),
-            Type::Str(_) | Type::Void(_) => {}
-        }
-    }
-
-    for api in cx.apis {
-        match api {
-            Api::Include(_) => {}
-            Api::Struct(strct) => check_api_struct(cx, strct),
-            Api::Enum(enm) => check_api_enum(cx, enm),
-            Api::CxxType(ety) | Api::RustType(ety) => check_api_type(cx, ety),
-            Api::CxxFunction(efn) | Api::RustFunction(efn) => check_api_fn(cx, efn),
-            Api::TypeAlias(alias) => check_api_type_alias(cx, alias),
-            Api::Impl(imp) => check_api_impl(cx, imp),
-        }
-    }
-}
-
-impl Check<'_> {
-    pub(crate) fn error(&mut self, sp: impl ToTokens, msg: impl Display) {
-        self.errors.error(sp, msg);
-    }
-}
-
-fn check_type_ident(cx: &mut Check, name: &NamedType) {
-    let ident = &name.rust;
-    if Atom::from(ident).is_none()
-        && !cx.types.structs.contains_key(ident)
-        && !cx.types.enums.contains_key(ident)
-        && !cx.types.cxx.contains(ident)
-        && !cx.types.rust.contains(ident)
-    {
-        let msg = format!("unsupported type: {}", ident);
-        cx.error(ident, msg);
-    }
-}
-
-fn check_type_box(cx: &mut Check, ptr: &Ty1) {
-    if let Type::Ident(ident) = &ptr.inner {
-        if cx.types.cxx.contains(&ident.rust)
-            && !cx.types.aliases.contains_key(&ident.rust)
-            && !cx.types.structs.contains_key(&ident.rust)
-            && !cx.types.enums.contains_key(&ident.rust)
-        {
-            cx.error(ptr, error::BOX_CXX_TYPE.msg);
-        }
-
-        if Atom::from(&ident.rust).is_none() {
-            return;
-        }
-    }
-
-    cx.error(ptr, "unsupported target type of Box");
-}
-
-fn check_type_rust_vec(cx: &mut Check, ty: &Ty1) {
-    match &ty.inner {
-        Type::Ident(ident) => {
-            if cx.types.cxx.contains(&ident.rust)
-                && !cx.types.aliases.contains_key(&ident.rust)
-                && !cx.types.structs.contains_key(&ident.rust)
-                && !cx.types.enums.contains_key(&ident.rust)
-            {
-                cx.error(ty, "Rust Vec containing C++ type is not supported yet");
-                return;
-            }
-
-            match Atom::from(&ident.rust) {
-                None
-                | Some(
-                    Bool | Char | U8 | U16 | U32 | U64 | Usize | I8 | I16 | I32 | I64 | Isize | F32
-                    | F64 | RustString,
-                ) => return,
-                Some(CxxString) => {}
-            }
-        }
-        Type::Str(_) => return,
-        _ => {}
-    }
-
-    cx.error(ty, "unsupported element type of Vec");
-}
-
-fn check_type_unique_ptr(cx: &mut Check, ptr: &Ty1) {
-    if let Type::Ident(ident) = &ptr.inner {
-        if cx.types.rust.contains(&ident.rust) {
-            cx.error(ptr, "unique_ptr of a Rust type is not supported yet");
-            return;
-        }
-
-        match Atom::from(&ident.rust) {
-            None | Some(CxxString) => return,
-            _ => {}
-        }
-    } else if let Type::CxxVector(_) = &ptr.inner {
-        return;
-    }
-
-    cx.error(ptr, "unsupported unique_ptr target type");
-}
-
-fn check_type_shared_ptr(cx: &mut Check, ptr: &Ty1) {
-    if let Type::Ident(ident) = &ptr.inner {
-        if cx.types.rust.contains(&ident.rust) {
-            cx.error(ptr, "shared_ptr of a Rust type is not supported yet");
-            return;
-        }
-
-        match Atom::from(&ident.rust) {
-            None
-            | Some(
-                Bool | U8 | U16 | U32 | U64 | Usize | I8 | I16 | I32 | I64 | Isize | F32 | F64
-                | CxxString,
-            ) => return,
-            Some(Char | RustString) => {}
-        }
-    } else if let Type::CxxVector(_) = &ptr.inner {
-        cx.error(ptr, "std::shared_ptr<std::vector> is not supported yet");
-        return;
-    }
-
-    cx.error(ptr, "unsupported shared_ptr target type");
-}
-
-fn check_type_weak_ptr(cx: &mut Check, ptr: &Ty1) {
-    if let Type::Ident(ident) = &ptr.inner {
-        if cx.types.rust.contains(&ident.rust) {
-            cx.error(ptr, "weak_ptr of a Rust type is not supported yet");
-            return;
-        }
-
-        match Atom::from(&ident.rust) {
-            None
-            | Some(
-                Bool | U8 | U16 | U32 | U64 | Usize | I8 | I16 | I32 | I64 | Isize | F32 | F64
-                | CxxString,
-            ) => return,
-            Some(Char | RustString) => {}
-        }
-    } else if let Type::CxxVector(_) = &ptr.inner {
-        cx.error(ptr, "std::weak_ptr<std::vector> is not supported yet");
-        return;
-    }
-
-    cx.error(ptr, "unsupported weak_ptr target type");
-}
-
-fn check_type_cxx_vector(cx: &mut Check, ptr: &Ty1) {
-    if let Type::Ident(ident) = &ptr.inner {
-        if cx.types.rust.contains(&ident.rust) {
-            cx.error(
-                ptr,
-                "C++ vector containing a Rust type is not supported yet",
-            );
-            return;
-        }
-
-        match Atom::from(&ident.rust) {
-            None
-            | Some(
-                U8 | U16 | U32 | U64 | Usize | I8 | I16 | I32 | I64 | Isize | F32 | F64 | CxxString,
-            ) => return,
-            Some(Char) => { /* todo */ }
-            Some(Bool | RustString) => {}
-        }
-    }
-
-    cx.error(ptr, "unsupported vector element type");
-}
-
-fn check_type_ref(cx: &mut Check, ty: &Ref) {
-    if ty.mutable && !ty.pinned {
-        if let Some(requires_pin) = match &ty.inner {
-            Type::Ident(ident) if ident.rust == CxxString || is_opaque_cxx(cx, &ident.rust) => {
-                Some(ident.rust.to_string())
-            }
-            Type::CxxVector(_) => Some("CxxVector<...>".to_owned()),
-            _ => None,
-        } {
-            cx.error(
-                ty,
-                format!(
-                    "mutable reference to C++ type requires a pin -- use Pin<&mut {}>",
-                    requires_pin,
-                ),
-            );
-        }
-    }
-
-    match ty.inner {
-        Type::Fn(_) | Type::Void(_) => {}
-        Type::Ref(_) => {
-            cx.error(ty, "C++ does not allow references to references");
-            return;
-        }
-        _ => return,
-    }
-
-    cx.error(ty, "unsupported reference type");
-}
-
-fn check_type_ptr(cx: &mut Check, ty: &Ptr) {
-    match ty.inner {
-        Type::Fn(_) | Type::Void(_) => {}
-        Type::Ref(_) => {
-            cx.error(ty, "C++ does not allow pointer to reference as a type");
-            return;
-        }
-        _ => return,
-    }
-
-    cx.error(ty, "unsupported pointer type");
-}
-
-fn check_type_slice_ref(cx: &mut Check, ty: &SliceRef) {
-    let supported = !is_unsized(cx, &ty.inner)
-        || match &ty.inner {
-            Type::Ident(ident) => {
-                cx.types.rust.contains(&ident.rust) || cx.types.aliases.contains_key(&ident.rust)
-            }
-            _ => false,
-        };
-
-    if !supported {
-        let mutable = if ty.mutable { "mut " } else { "" };
-        let mut msg = format!("unsupported &{}[T] element type", mutable);
-        if let Type::Ident(ident) = &ty.inner {
-            if is_opaque_cxx(cx, &ident.rust) {
-                msg += ": opaque C++ type is not supported yet";
-            }
-        }
-        cx.error(ty, msg);
-    }
-}
-
-fn check_type_array(cx: &mut Check, ty: &Array) {
-    let supported = !is_unsized(cx, &ty.inner);
-
-    if !supported {
-        cx.error(ty, "unsupported array element type");
-    }
-}
-
-fn check_type_fn(cx: &mut Check, ty: &Signature) {
-    if ty.throws {
-        cx.error(ty, "function pointer returning Result is not supported yet");
-    }
-
-    for arg in &ty.args {
-        if let Type::Ptr(_) = arg.ty {
-            if ty.unsafety.is_none() {
-                cx.error(
-                    arg,
-                    "pointer argument requires that the function pointer be marked unsafe",
-                );
-            }
-        }
-    }
-}
-
-fn check_api_struct(cx: &mut Check, strct: &Struct) {
-    let name = &strct.name;
-    check_reserved_name(cx, &name.rust);
-    check_lifetimes(cx, &strct.generics);
-
-    if strct.fields.is_empty() {
-        let span = span_for_struct_error(strct);
-        cx.error(span, "structs without any fields are not supported");
-    }
-
-    if cx.types.cxx.contains(&name.rust) {
-        if let Some(ety) = cx.types.untrusted.get(&name.rust) {
-            let msg = "extern shared struct must be declared in an `unsafe extern` block";
-            cx.error(ety, msg);
-        }
-    }
-
-    for derive in &strct.derives {
-        if derive.what == Trait::ExternType {
-            let msg = format!("derive({}) on shared struct is not supported", derive);
-            cx.error(derive, msg);
-        }
-    }
-
-    for field in &strct.fields {
-        if let Type::Fn(_) = field.ty {
-            cx.error(
-                field,
-                "function pointers in a struct field are not implemented yet",
-            );
-        } else if is_unsized(cx, &field.ty) {
-            let desc = describe(cx, &field.ty);
-            let msg = format!("using {} by value is not supported", desc);
-            cx.error(field, msg);
-        }
-    }
-}
-
-fn check_api_enum(cx: &mut Check, enm: &Enum) {
-    check_reserved_name(cx, &enm.name.rust);
-    check_lifetimes(cx, &enm.generics);
-
-    if enm.variants.is_empty() && !enm.explicit_repr && !enm.variants_from_header {
-        let span = span_for_enum_error(enm);
-        cx.error(
-            span,
-            "explicit #[repr(...)] is required for enum without any variants",
-        );
-    }
-
-    for derive in &enm.derives {
-        if derive.what == Trait::Default || derive.what == Trait::ExternType {
-            let msg = format!("derive({}) on shared enum is not supported", derive);
-            cx.error(derive, msg);
-        }
-    }
-}
-
-fn check_api_type(cx: &mut Check, ety: &ExternType) {
-    check_reserved_name(cx, &ety.name.rust);
-    check_lifetimes(cx, &ety.generics);
-
-    for derive in &ety.derives {
-        if derive.what == Trait::ExternType && ety.lang == Lang::Rust {
-            continue;
-        }
-        let lang = match ety.lang {
-            Lang::Rust => "Rust",
-            Lang::Cxx => "C++",
-        };
-        let msg = format!(
-            "derive({}) on opaque {} type is not supported yet",
-            derive, lang,
-        );
-        cx.error(derive, msg);
-    }
-
-    if !ety.bounds.is_empty() {
-        let bounds = &ety.bounds;
-        let span = quote!(#(#bounds)*);
-        cx.error(span, "extern type bounds are not implemented yet");
-    }
-
-    if let Some(reasons) = cx.types.required_trivial.get(&ety.name.rust) {
-        let msg = format!(
-            "needs a cxx::ExternType impl in order to be used as {}",
-            trivial::as_what(&ety.name, reasons),
-        );
-        cx.error(ety, msg);
-    }
-}
-
-fn check_api_fn(cx: &mut Check, efn: &ExternFn) {
-    match efn.lang {
-        Lang::Cxx => {
-            if !efn.generics.params.is_empty() && !efn.trusted {
-                let ref span = span_for_generics_error(efn);
-                cx.error(span, "extern C++ function with lifetimes must be declared in `unsafe extern \"C++\"` block");
-            }
-        }
-        Lang::Rust => {
-            if !efn.generics.params.is_empty() && efn.unsafety.is_none() {
-                let ref span = span_for_generics_error(efn);
-                let message = format!(
-                    "must be `unsafe fn {}` in order to expose explicit lifetimes to C++",
-                    efn.name.rust,
-                );
-                cx.error(span, message);
-            }
-        }
-    }
-
-    check_generics(cx, &efn.sig.generics);
-
-    if let Some(receiver) = &efn.receiver {
-        let ref span = span_for_receiver_error(receiver);
-
-        if receiver.ty.rust == "Self" {
-            let mutability = match receiver.mutable {
-                true => "mut ",
-                false => "",
-            };
-            let msg = format!(
-                "unnamed receiver type is only allowed if the surrounding extern block contains exactly one extern type; use `self: &{mutability}TheType`",
-                mutability = mutability,
-            );
-            cx.error(span, msg);
-        } else if cx.types.enums.contains_key(&receiver.ty.rust) {
-            cx.error(
-                span,
-                "unsupported receiver type; C++ does not allow member functions on enums",
-            );
-        } else if !cx.types.structs.contains_key(&receiver.ty.rust)
-            && !cx.types.cxx.contains(&receiver.ty.rust)
-            && !cx.types.rust.contains(&receiver.ty.rust)
-        {
-            cx.error(span, "unrecognized receiver type");
-        } else if receiver.mutable && !receiver.pinned && is_opaque_cxx(cx, &receiver.ty.rust) {
-            cx.error(
-                span,
-                format!(
-                    "mutable reference to opaque C++ type requires a pin -- use `self: Pin<&mut {}>`",
-                    receiver.ty.rust,
-                ),
-            );
-        }
-    }
-
-    for arg in &efn.args {
-        if let Type::Fn(_) = arg.ty {
-            if efn.lang == Lang::Rust {
-                cx.error(
-                    arg,
-                    "passing a function pointer from C++ to Rust is not implemented yet",
-                );
-            }
-        } else if let Type::Ptr(_) = arg.ty {
-            if efn.sig.unsafety.is_none() {
-                cx.error(
-                    arg,
-                    "pointer argument requires that the function be marked unsafe",
-                );
-            }
-        } else if is_unsized(cx, &arg.ty) {
-            let desc = describe(cx, &arg.ty);
-            let msg = format!("passing {} by value is not supported", desc);
-            cx.error(arg, msg);
-        }
-    }
-
-    if let Some(ty) = &efn.ret {
-        if let Type::Fn(_) = ty {
-            cx.error(ty, "returning a function pointer is not implemented yet");
-        } else if is_unsized(cx, ty) {
-            let desc = describe(cx, ty);
-            let msg = format!("returning {} by value is not supported", desc);
-            cx.error(ty, msg);
-        }
-    }
-
-    if efn.lang == Lang::Cxx {
-        check_mut_return_restriction(cx, efn);
-    }
-}
-
-fn check_api_type_alias(cx: &mut Check, alias: &TypeAlias) {
-    check_lifetimes(cx, &alias.generics);
-
-    for derive in &alias.derives {
-        let msg = format!("derive({}) on extern type alias is not supported", derive);
-        cx.error(derive, msg);
-    }
-}
-
-fn check_api_impl(cx: &mut Check, imp: &Impl) {
-    let ty = &imp.ty;
-
-    check_lifetimes(cx, &imp.impl_generics);
-
-    if let Some(negative) = imp.negative_token {
-        let span = quote!(#negative #ty);
-        cx.error(span, "negative impl is not supported yet");
-        return;
-    }
-
-    match ty {
-        Type::RustBox(ty)
-        | Type::RustVec(ty)
-        | Type::UniquePtr(ty)
-        | Type::SharedPtr(ty)
-        | Type::WeakPtr(ty)
-        | Type::CxxVector(ty) => {
-            if let Type::Ident(inner) = &ty.inner {
-                if Atom::from(&inner.rust).is_none() {
-                    return;
-                }
-            }
-        }
-        _ => {}
-    }
-
-    cx.error(imp, "unsupported Self type of explicit impl");
-}
-
-fn check_mut_return_restriction(cx: &mut Check, efn: &ExternFn) {
-    if efn.sig.unsafety.is_some() {
-        // Unrestricted as long as the function is made unsafe-to-call.
-        return;
-    }
-
-    match &efn.ret {
-        Some(Type::Ref(ty)) if ty.mutable => {}
-        Some(Type::SliceRef(slice)) if slice.mutable => {}
-        _ => return,
-    }
-
-    if let Some(receiver) = &efn.receiver {
-        if receiver.mutable {
-            return;
-        }
-        let resolve = match cx.types.try_resolve(&receiver.ty) {
-            Some(resolve) => resolve,
-            None => return,
-        };
-        if !resolve.generics.lifetimes.is_empty() {
-            return;
-        }
-    }
-
-    struct FindLifetimeMut<'a> {
-        cx: &'a Check<'a>,
-        found: bool,
-    }
-
-    impl<'t, 'a> Visit<'t> for FindLifetimeMut<'a> {
-        fn visit_type(&mut self, ty: &'t Type) {
-            self.found |= match ty {
-                Type::Ref(ty) => ty.mutable,
-                Type::SliceRef(slice) => slice.mutable,
-                Type::Ident(ident) if Atom::from(&ident.rust).is_none() => {
-                    match self.cx.types.try_resolve(ident) {
-                        Some(resolve) => !resolve.generics.lifetimes.is_empty(),
-                        None => true,
-                    }
-                }
-                _ => false,
-            };
-            visit::visit_type(self, ty);
-        }
-    }
-
-    let mut visitor = FindLifetimeMut { cx, found: false };
-
-    for arg in &efn.args {
-        visitor.visit_type(&arg.ty);
-    }
-
-    if visitor.found {
-        return;
-    }
-
-    cx.error(
-        efn,
-        "&mut return type is not allowed unless there is a &mut argument",
-    );
-}
-
-fn check_reserved_name(cx: &mut Check, ident: &Ident) {
-    if ident == "Box"
-        || ident == "UniquePtr"
-        || ident == "SharedPtr"
-        || ident == "WeakPtr"
-        || ident == "Vec"
-        || ident == "CxxVector"
-        || ident == "str"
-        || Atom::from(ident).is_some()
-    {
-        cx.error(ident, "reserved name");
-    }
-}
-
-fn check_reserved_lifetime(cx: &mut Check, lifetime: &Lifetime) {
-    if lifetime.ident == "static" {
-        match cx.generator {
-            Generator::Macro => { /* rustc already reports this */ }
-            Generator::Build => {
-                cx.error(lifetime, error::RESERVED_LIFETIME);
-            }
-        }
-    }
-}
-
-fn check_lifetimes(cx: &mut Check, generics: &Lifetimes) {
-    for lifetime in &generics.lifetimes {
-        check_reserved_lifetime(cx, lifetime);
-    }
-}
-
-fn check_generics(cx: &mut Check, generics: &Generics) {
-    for generic_param in &generics.params {
-        if let GenericParam::Lifetime(def) = generic_param {
-            check_reserved_lifetime(cx, &def.lifetime);
-        }
-    }
-}
-
-fn is_unsized(cx: &mut Check, ty: &Type) -> bool {
-    match ty {
-        Type::Ident(ident) => {
-            let ident = &ident.rust;
-            ident == CxxString || is_opaque_cxx(cx, ident) || cx.types.rust.contains(ident)
-        }
-        Type::Array(array) => is_unsized(cx, &array.inner),
-        Type::CxxVector(_) | Type::Fn(_) | Type::Void(_) => true,
-        Type::RustBox(_)
-        | Type::RustVec(_)
-        | Type::UniquePtr(_)
-        | Type::SharedPtr(_)
-        | Type::WeakPtr(_)
-        | Type::Ref(_)
-        | Type::Ptr(_)
-        | Type::Str(_)
-        | Type::SliceRef(_) => false,
-    }
-}
-
-fn is_opaque_cxx(cx: &mut Check, ty: &Ident) -> bool {
-    cx.types.cxx.contains(ty)
-        && !cx.types.structs.contains_key(ty)
-        && !cx.types.enums.contains_key(ty)
-        && !(cx.types.aliases.contains_key(ty) && cx.types.required_trivial.contains_key(ty))
-}
-
-fn span_for_struct_error(strct: &Struct) -> TokenStream {
-    let struct_token = strct.struct_token;
-    let mut brace_token = Group::new(Delimiter::Brace, TokenStream::new());
-    brace_token.set_span(strct.brace_token.span.join());
-    quote!(#struct_token #brace_token)
-}
-
-fn span_for_enum_error(enm: &Enum) -> TokenStream {
-    let enum_token = enm.enum_token;
-    let mut brace_token = Group::new(Delimiter::Brace, TokenStream::new());
-    brace_token.set_span(enm.brace_token.span.join());
-    quote!(#enum_token #brace_token)
-}
-
-fn span_for_receiver_error(receiver: &Receiver) -> TokenStream {
-    let ampersand = receiver.ampersand;
-    let lifetime = &receiver.lifetime;
-    let mutability = receiver.mutability;
-    if receiver.shorthand {
-        let var = receiver.var;
-        quote!(#ampersand #lifetime #mutability #var)
-    } else {
-        let ty = &receiver.ty;
-        quote!(#ampersand #lifetime #mutability #ty)
-    }
-}
-
-fn span_for_generics_error(efn: &ExternFn) -> TokenStream {
-    let unsafety = efn.unsafety;
-    let fn_token = efn.fn_token;
-    let generics = &efn.generics;
-    quote!(#unsafety #fn_token #generics)
-}
-
-fn describe(cx: &mut Check, ty: &Type) -> String {
-    match ty {
-        Type::Ident(ident) => {
-            if cx.types.structs.contains_key(&ident.rust) {
-                "struct".to_owned()
-            } else if cx.types.enums.contains_key(&ident.rust) {
-                "enum".to_owned()
-            } else if cx.types.aliases.contains_key(&ident.rust) {
-                "C++ type".to_owned()
-            } else if cx.types.cxx.contains(&ident.rust) {
-                "opaque C++ type".to_owned()
-            } else if cx.types.rust.contains(&ident.rust) {
-                "opaque Rust type".to_owned()
-            } else if Atom::from(&ident.rust) == Some(CxxString) {
-                "C++ string".to_owned()
-            } else if Atom::from(&ident.rust) == Some(Char) {
-                "C char".to_owned()
-            } else {
-                ident.rust.to_string()
-            }
-        }
-        Type::RustBox(_) => "Box".to_owned(),
-        Type::RustVec(_) => "Vec".to_owned(),
-        Type::UniquePtr(_) => "unique_ptr".to_owned(),
-        Type::SharedPtr(_) => "shared_ptr".to_owned(),
-        Type::WeakPtr(_) => "weak_ptr".to_owned(),
-        Type::Ref(_) => "reference".to_owned(),
-        Type::Ptr(_) => "raw pointer".to_owned(),
-        Type::Str(_) => "&str".to_owned(),
-        Type::CxxVector(_) => "C++ vector".to_owned(),
-        Type::SliceRef(_) => "slice".to_owned(),
-        Type::Fn(_) => "function pointer".to_owned(),
-        Type::Void(_) => "()".to_owned(),
-        Type::Array(_) => "array".to_owned(),
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/derive.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/derive.rs
deleted file mode 100644
index 9e09461..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/derive.rs
+++ /dev/null
@@ -1,81 +0,0 @@
-use proc_macro2::{Ident, Span};
-use std::fmt::{self, Display};
-
-#[derive(Copy, Clone)]
-pub(crate) struct Derive {
-    pub what: Trait,
-    pub span: Span,
-}
-
-#[derive(Copy, Clone, PartialEq)]
-pub(crate) enum Trait {
-    Clone,
-    Copy,
-    Debug,
-    Default,
-    Eq,
-    ExternType,
-    Hash,
-    Ord,
-    PartialEq,
-    PartialOrd,
-    Serialize,
-    Deserialize,
-}
-
-impl Derive {
-    pub(crate) fn from(ident: &Ident) -> Option<Self> {
-        let what = match ident.to_string().as_str() {
-            "Clone" => Trait::Clone,
-            "Copy" => Trait::Copy,
-            "Debug" => Trait::Debug,
-            "Default" => Trait::Default,
-            "Eq" => Trait::Eq,
-            "ExternType" => Trait::ExternType,
-            "Hash" => Trait::Hash,
-            "Ord" => Trait::Ord,
-            "PartialEq" => Trait::PartialEq,
-            "PartialOrd" => Trait::PartialOrd,
-            "Serialize" => Trait::Serialize,
-            "Deserialize" => Trait::Deserialize,
-            _ => return None,
-        };
-        let span = ident.span();
-        Some(Derive { what, span })
-    }
-}
-
-impl PartialEq<Trait> for Derive {
-    fn eq(&self, other: &Trait) -> bool {
-        self.what == *other
-    }
-}
-
-impl AsRef<str> for Trait {
-    fn as_ref(&self) -> &str {
-        match self {
-            Trait::Clone => "Clone",
-            Trait::Copy => "Copy",
-            Trait::Debug => "Debug",
-            Trait::Default => "Default",
-            Trait::Eq => "Eq",
-            Trait::ExternType => "ExternType",
-            Trait::Hash => "Hash",
-            Trait::Ord => "Ord",
-            Trait::PartialEq => "PartialEq",
-            Trait::PartialOrd => "PartialOrd",
-            Trait::Serialize => "Serialize",
-            Trait::Deserialize => "Deserialize",
-        }
-    }
-}
-
-impl Display for Derive {
-    fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-        formatter.write_str(self.what.as_ref())
-    }
-}
-
-pub(crate) fn contains(derives: &[Derive], query: Trait) -> bool {
-    derives.iter().any(|derive| derive.what == query)
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/discriminant.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/discriminant.rs
deleted file mode 100644
index 775e57bb..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/discriminant.rs
+++ /dev/null
@@ -1,335 +0,0 @@
-use crate::syntax::Atom::{self, *};
-use proc_macro2::{Literal, Span, TokenStream};
-use quote::ToTokens;
-use std::cmp::Ordering;
-use std::collections::BTreeSet;
-use std::fmt::{self, Display};
-use std::str::FromStr;
-use syn::{Error, Expr, Lit, Result, Token, UnOp};
-
-pub(crate) struct DiscriminantSet {
-    repr: Option<Atom>,
-    values: BTreeSet<Discriminant>,
-    previous: Option<Discriminant>,
-}
-
-#[derive(Copy, Clone, Eq, PartialEq)]
-pub(crate) struct Discriminant {
-    sign: Sign,
-    magnitude: u64,
-}
-
-#[derive(Copy, Clone, Eq, PartialEq)]
-enum Sign {
-    Negative,
-    Positive,
-}
-
-impl DiscriminantSet {
-    pub(crate) fn new(repr: Option<Atom>) -> Self {
-        DiscriminantSet {
-            repr,
-            values: BTreeSet::new(),
-            previous: None,
-        }
-    }
-
-    pub(crate) fn insert(&mut self, expr: &Expr) -> Result<Discriminant> {
-        let (discriminant, repr) = expr_to_discriminant(expr)?;
-        match (self.repr, repr) {
-            (None, Some(new_repr)) => {
-                if let Some(limits) = Limits::of(new_repr) {
-                    for &past in &self.values {
-                        if limits.min <= past && past <= limits.max {
-                            continue;
-                        }
-                        let msg = format!(
-                            "discriminant value `{}` is outside the limits of {}",
-                            past, new_repr,
-                        );
-                        return Err(Error::new(Span::call_site(), msg));
-                    }
-                }
-                self.repr = Some(new_repr);
-            }
-            (Some(prev), Some(repr)) if prev != repr => {
-                let msg = format!("expected {}, found {}", prev, repr);
-                return Err(Error::new(Span::call_site(), msg));
-            }
-            _ => {}
-        }
-        insert(self, discriminant)
-    }
-
-    pub(crate) fn insert_next(&mut self) -> Result<Discriminant> {
-        let discriminant = match self.previous {
-            None => Discriminant::zero(),
-            Some(mut discriminant) => match discriminant.sign {
-                Sign::Negative => {
-                    discriminant.magnitude -= 1;
-                    if discriminant.magnitude == 0 {
-                        discriminant.sign = Sign::Positive;
-                    }
-                    discriminant
-                }
-                Sign::Positive => {
-                    if discriminant.magnitude == u64::MAX {
-                        let msg = format!("discriminant overflow on value after {}", u64::MAX);
-                        return Err(Error::new(Span::call_site(), msg));
-                    }
-                    discriminant.magnitude += 1;
-                    discriminant
-                }
-            },
-        };
-        insert(self, discriminant)
-    }
-
-    pub(crate) fn inferred_repr(&self) -> Result<Atom> {
-        if let Some(repr) = self.repr {
-            return Ok(repr);
-        }
-        if self.values.is_empty() {
-            return Ok(U8);
-        }
-        let min = *self.values.iter().next().unwrap();
-        let max = *self.values.iter().next_back().unwrap();
-        for limits in &LIMITS {
-            if limits.min <= min && max <= limits.max {
-                return Ok(limits.repr);
-            }
-        }
-        let msg = "these discriminant values do not fit in any supported enum repr type";
-        Err(Error::new(Span::call_site(), msg))
-    }
-}
-
-fn expr_to_discriminant(expr: &Expr) -> Result<(Discriminant, Option<Atom>)> {
-    match expr {
-        Expr::Lit(expr) => {
-            if let Lit::Int(lit) = &expr.lit {
-                let discriminant = lit.base10_parse::<Discriminant>()?;
-                let repr = parse_int_suffix(lit.suffix())?;
-                return Ok((discriminant, repr));
-            }
-        }
-        Expr::Unary(unary) => {
-            if let UnOp::Neg(_) = unary.op {
-                let (mut discriminant, repr) = expr_to_discriminant(&unary.expr)?;
-                discriminant.sign = match discriminant.sign {
-                    Sign::Positive => Sign::Negative,
-                    Sign::Negative => Sign::Positive,
-                };
-                return Ok((discriminant, repr));
-            }
-        }
-        _ => {}
-    }
-    Err(Error::new_spanned(
-        expr,
-        "enums with non-integer literal discriminants are not supported yet",
-    ))
-}
-
-fn insert(set: &mut DiscriminantSet, discriminant: Discriminant) -> Result<Discriminant> {
-    if let Some(expected_repr) = set.repr {
-        if let Some(limits) = Limits::of(expected_repr) {
-            if discriminant < limits.min || limits.max < discriminant {
-                let msg = format!(
-                    "discriminant value `{}` is outside the limits of {}",
-                    discriminant, expected_repr,
-                );
-                return Err(Error::new(Span::call_site(), msg));
-            }
-        }
-    }
-    set.values.insert(discriminant);
-    set.previous = Some(discriminant);
-    Ok(discriminant)
-}
-
-impl Discriminant {
-    pub(crate) const fn zero() -> Self {
-        Discriminant {
-            sign: Sign::Positive,
-            magnitude: 0,
-        }
-    }
-
-    const fn pos(u: u64) -> Self {
-        Discriminant {
-            sign: Sign::Positive,
-            magnitude: u,
-        }
-    }
-
-    const fn neg(i: i64) -> Self {
-        Discriminant {
-            sign: if i < 0 {
-                Sign::Negative
-            } else {
-                Sign::Positive
-            },
-            // This is `i.abs() as u64` but without overflow on MIN. Uses the
-            // fact that MIN.wrapping_abs() wraps back to MIN whose binary
-            // representation is 1<<63, and thus the `as u64` conversion
-            // produces 1<<63 too which happens to be the correct unsigned
-            // magnitude.
-            magnitude: i.wrapping_abs() as u64,
-        }
-    }
-
-    #[cfg(feature = "experimental-enum-variants-from-header")]
-    pub(crate) const fn checked_succ(self) -> Option<Self> {
-        match self.sign {
-            Sign::Negative => {
-                if self.magnitude == 1 {
-                    Some(Discriminant::zero())
-                } else {
-                    Some(Discriminant {
-                        sign: Sign::Negative,
-                        magnitude: self.magnitude - 1,
-                    })
-                }
-            }
-            Sign::Positive => match self.magnitude.checked_add(1) {
-                Some(magnitude) => Some(Discriminant {
-                    sign: Sign::Positive,
-                    magnitude,
-                }),
-                None => None,
-            },
-        }
-    }
-}
-
-impl Display for Discriminant {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        if self.sign == Sign::Negative {
-            f.write_str("-")?;
-        }
-        write!(f, "{}", self.magnitude)
-    }
-}
-
-impl ToTokens for Discriminant {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        if self.sign == Sign::Negative {
-            Token![-](Span::call_site()).to_tokens(tokens);
-        }
-        Literal::u64_unsuffixed(self.magnitude).to_tokens(tokens);
-    }
-}
-
-impl FromStr for Discriminant {
-    type Err = Error;
-
-    fn from_str(mut s: &str) -> Result<Self> {
-        let sign = if s.starts_with('-') {
-            s = &s[1..];
-            Sign::Negative
-        } else {
-            Sign::Positive
-        };
-        match s.parse::<u64>() {
-            Ok(magnitude) => Ok(Discriminant { sign, magnitude }),
-            Err(_) => Err(Error::new(
-                Span::call_site(),
-                "discriminant value outside of supported range",
-            )),
-        }
-    }
-}
-
-impl Ord for Discriminant {
-    fn cmp(&self, other: &Self) -> Ordering {
-        use self::Sign::{Negative, Positive};
-        match (self.sign, other.sign) {
-            (Negative, Negative) => self.magnitude.cmp(&other.magnitude).reverse(),
-            (Negative, Positive) => Ordering::Less, // negative < positive
-            (Positive, Negative) => Ordering::Greater, // positive > negative
-            (Positive, Positive) => self.magnitude.cmp(&other.magnitude),
-        }
-    }
-}
-
-impl PartialOrd for Discriminant {
-    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
-        Some(self.cmp(other))
-    }
-}
-
-fn parse_int_suffix(suffix: &str) -> Result<Option<Atom>> {
-    if suffix.is_empty() {
-        return Ok(None);
-    }
-    if let Some(atom) = Atom::from_str(suffix) {
-        match atom {
-            U8 | U16 | U32 | U64 | Usize | I8 | I16 | I32 | I64 | Isize => return Ok(Some(atom)),
-            _ => {}
-        }
-    }
-    let msg = format!("unrecognized integer suffix: `{}`", suffix);
-    Err(Error::new(Span::call_site(), msg))
-}
-
-#[derive(Copy, Clone)]
-struct Limits {
-    repr: Atom,
-    min: Discriminant,
-    max: Discriminant,
-}
-
-impl Limits {
-    fn of(repr: Atom) -> Option<Limits> {
-        for limits in &LIMITS {
-            if limits.repr == repr {
-                return Some(*limits);
-            }
-        }
-        None
-    }
-}
-
-const LIMITS: [Limits; 8] = [
-    Limits {
-        repr: U8,
-        min: Discriminant::zero(),
-        max: Discriminant::pos(std::u8::MAX as u64),
-    },
-    Limits {
-        repr: I8,
-        min: Discriminant::neg(std::i8::MIN as i64),
-        max: Discriminant::pos(std::i8::MAX as u64),
-    },
-    Limits {
-        repr: U16,
-        min: Discriminant::zero(),
-        max: Discriminant::pos(std::u16::MAX as u64),
-    },
-    Limits {
-        repr: I16,
-        min: Discriminant::neg(std::i16::MIN as i64),
-        max: Discriminant::pos(std::i16::MAX as u64),
-    },
-    Limits {
-        repr: U32,
-        min: Discriminant::zero(),
-        max: Discriminant::pos(std::u32::MAX as u64),
-    },
-    Limits {
-        repr: I32,
-        min: Discriminant::neg(std::i32::MIN as i64),
-        max: Discriminant::pos(std::i32::MAX as u64),
-    },
-    Limits {
-        repr: U64,
-        min: Discriminant::zero(),
-        max: Discriminant::pos(std::u64::MAX),
-    },
-    Limits {
-        repr: I64,
-        min: Discriminant::neg(std::i64::MIN),
-        max: Discriminant::pos(std::i64::MAX as u64),
-    },
-];
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/doc.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/doc.rs
deleted file mode 100644
index bd8111e..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/doc.rs
+++ /dev/null
@@ -1,46 +0,0 @@
-use proc_macro2::TokenStream;
-use quote::{quote, ToTokens};
-use syn::LitStr;
-
-pub(crate) struct Doc {
-    pub hidden: bool,
-    fragments: Vec<LitStr>,
-}
-
-impl Doc {
-    pub(crate) fn new() -> Self {
-        Doc {
-            hidden: false,
-            fragments: Vec::new(),
-        }
-    }
-
-    pub(crate) fn push(&mut self, lit: LitStr) {
-        self.fragments.push(lit);
-    }
-
-    #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
-    pub(crate) fn is_empty(&self) -> bool {
-        self.fragments.is_empty()
-    }
-
-    #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
-    pub(crate) fn to_string(&self) -> String {
-        let mut doc = String::new();
-        for lit in &self.fragments {
-            doc += &lit.value();
-            doc.push('\n');
-        }
-        doc
-    }
-}
-
-impl ToTokens for Doc {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        let fragments = &self.fragments;
-        tokens.extend(quote! { #(#[doc = #fragments])* });
-        if self.hidden {
-            tokens.extend(quote! { #[doc(hidden)] });
-        }
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/error.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/error.rs
deleted file mode 100644
index 4487693..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/error.rs
+++ /dev/null
@@ -1,100 +0,0 @@
-use std::fmt::{self, Display};
-
-#[derive(Copy, Clone)]
-pub(crate) struct Error {
-    pub msg: &'static str,
-    #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
-    pub label: Option<&'static str>,
-    #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
-    pub note: Option<&'static str>,
-}
-
-impl Display for Error {
-    fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-        self.msg.fmt(formatter)
-    }
-}
-
-pub(crate) static ERRORS: &[Error] = &[
-    BOX_CXX_TYPE,
-    CXXBRIDGE_RESERVED,
-    CXX_STRING_BY_VALUE,
-    CXX_TYPE_BY_VALUE,
-    DISCRIMINANT_OVERFLOW,
-    DOT_INCLUDE,
-    DOUBLE_UNDERSCORE,
-    RESERVED_LIFETIME,
-    RUST_TYPE_BY_VALUE,
-    UNSUPPORTED_TYPE,
-    USE_NOT_ALLOWED,
-];
-
-pub(crate) static BOX_CXX_TYPE: Error = Error {
-    msg: "Box of a C++ type is not supported yet",
-    label: None,
-    note: Some("hint: use UniquePtr<> or SharedPtr<>"),
-};
-
-pub(crate) static CXXBRIDGE_RESERVED: Error = Error {
-    msg: "identifiers starting with cxxbridge are reserved",
-    label: Some("reserved identifier"),
-    note: Some("identifiers starting with cxxbridge are reserved"),
-};
-
-pub(crate) static CXX_STRING_BY_VALUE: Error = Error {
-    msg: "C++ string by value is not supported",
-    label: None,
-    note: Some("hint: wrap it in a UniquePtr<>"),
-};
-
-pub(crate) static CXX_TYPE_BY_VALUE: Error = Error {
-    msg: "C++ type by value is not supported",
-    label: None,
-    note: Some("hint: wrap it in a UniquePtr<> or SharedPtr<>"),
-};
-
-pub(crate) static DISCRIMINANT_OVERFLOW: Error = Error {
-    msg: "discriminant overflow on value after ",
-    label: Some("discriminant overflow"),
-    note: Some("note: explicitly set `= 0` if that is desired outcome"),
-};
-
-pub(crate) static DOT_INCLUDE: Error = Error {
-    msg: "#include relative to `.` or `..` is not supported in Cargo builds",
-    label: Some("#include relative to `.` or `..` is not supported in Cargo builds"),
-    note: Some("note: use a path starting with the crate name"),
-};
-
-pub(crate) static DOUBLE_UNDERSCORE: Error = Error {
-    msg: "identifiers containing double underscore are reserved in C++",
-    label: Some("reserved identifier"),
-    note: Some("identifiers containing double underscore are reserved in C++"),
-};
-
-pub(crate) static RESERVED_LIFETIME: Error = Error {
-    msg: "invalid lifetime parameter name: `'static`",
-    label: Some("'static is a reserved lifetime name"),
-    note: None,
-};
-
-pub(crate) static RUST_TYPE_BY_VALUE: Error = Error {
-    msg: "opaque Rust type by value is not supported",
-    label: None,
-    note: Some("hint: wrap it in a Box<>"),
-};
-
-pub(crate) static UNSUPPORTED_TYPE: Error = Error {
-    msg: "unsupported type: ",
-    label: Some("unsupported type"),
-    note: None,
-};
-
-pub(crate) static USE_NOT_ALLOWED: Error = Error {
-    msg: "`use` items are not allowed within cxx bridge",
-    label: Some("not allowed"),
-    note: Some(
-        "`use` items are not allowed within cxx bridge; only types defined\n\
-         within your bridge, primitive types, or types exported by the cxx\n\
-         crate may be used",
-    ),
-};
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/file.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/file.rs
deleted file mode 100644
index cf6d3e8..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/file.rs
+++ /dev/null
@@ -1,133 +0,0 @@
-use crate::syntax::cfg::CfgExpr;
-use crate::syntax::namespace::Namespace;
-use quote::quote;
-use syn::parse::{Error, Parse, ParseStream, Result};
-use syn::{
-    braced, token, Abi, Attribute, ForeignItem, Ident, Item as RustItem, ItemEnum, ItemImpl,
-    ItemStruct, ItemUse, LitStr, Token, Visibility,
-};
-
-pub(crate) struct Module {
-    #[allow(dead_code)]
-    pub cfg: CfgExpr,
-    pub namespace: Namespace,
-    pub attrs: Vec<Attribute>,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub vis: Visibility,
-    pub unsafety: Option<Token![unsafe]>,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub mod_token: Token![mod],
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub ident: Ident,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub brace_token: token::Brace,
-    pub content: Vec<Item>,
-}
-
-pub(crate) enum Item {
-    Struct(ItemStruct),
-    Enum(ItemEnum),
-    ForeignMod(ItemForeignMod),
-    Use(ItemUse),
-    Impl(ItemImpl),
-    Other(RustItem),
-}
-
-pub(crate) struct ItemForeignMod {
-    pub attrs: Vec<Attribute>,
-    pub unsafety: Option<Token![unsafe]>,
-    pub abi: Abi,
-    #[allow(dead_code)]
-    pub brace_token: token::Brace,
-    pub items: Vec<ForeignItem>,
-}
-
-impl Parse for Module {
-    fn parse(input: ParseStream) -> Result<Self> {
-        let cfg = CfgExpr::Unconditional;
-        let namespace = Namespace::ROOT;
-        let mut attrs = input.call(Attribute::parse_outer)?;
-        let vis: Visibility = input.parse()?;
-        let unsafety: Option<Token![unsafe]> = input.parse()?;
-        let mod_token: Token![mod] = input.parse()?;
-        let ident: Ident = input.parse()?;
-
-        let semi: Option<Token![;]> = input.parse()?;
-        if let Some(semi) = semi {
-            let span = quote!(#vis #mod_token #semi);
-            return Err(Error::new_spanned(
-                span,
-                "#[cxx::bridge] module must have inline contents",
-            ));
-        }
-
-        let content;
-        let brace_token = braced!(content in input);
-        attrs.extend(content.call(Attribute::parse_inner)?);
-
-        let mut items = Vec::new();
-        while !content.is_empty() {
-            items.push(content.parse()?);
-        }
-
-        Ok(Module {
-            cfg,
-            namespace,
-            attrs,
-            vis,
-            unsafety,
-            mod_token,
-            ident,
-            brace_token,
-            content: items,
-        })
-    }
-}
-
-impl Parse for Item {
-    fn parse(input: ParseStream) -> Result<Self> {
-        let attrs = input.call(Attribute::parse_outer)?;
-
-        let ahead = input.fork();
-        let unsafety = if ahead.parse::<Option<Token![unsafe]>>()?.is_some()
-            && ahead.parse::<Option<Token![extern]>>()?.is_some()
-            && ahead.parse::<Option<LitStr>>().is_ok()
-            && ahead.peek(token::Brace)
-        {
-            Some(input.parse()?)
-        } else {
-            None
-        };
-
-        let item = input.parse()?;
-        match item {
-            RustItem::Struct(mut item) => {
-                item.attrs.splice(..0, attrs);
-                Ok(Item::Struct(item))
-            }
-            RustItem::Enum(mut item) => {
-                item.attrs.splice(..0, attrs);
-                Ok(Item::Enum(item))
-            }
-            RustItem::ForeignMod(mut item) => {
-                item.attrs.splice(..0, attrs);
-                Ok(Item::ForeignMod(ItemForeignMod {
-                    attrs: item.attrs,
-                    unsafety,
-                    abi: item.abi,
-                    brace_token: item.brace_token,
-                    items: item.items,
-                }))
-            }
-            RustItem::Impl(mut item) => {
-                item.attrs.splice(..0, attrs);
-                Ok(Item::Impl(item))
-            }
-            RustItem::Use(mut item) => {
-                item.attrs.splice(..0, attrs);
-                Ok(Item::Use(item))
-            }
-            other => Ok(Item::Other(other)),
-        }
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/ident.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/ident.rs
deleted file mode 100644
index bb2281e..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/ident.rs
+++ /dev/null
@@ -1,57 +0,0 @@
-use crate::syntax::check::Check;
-use crate::syntax::{error, Api, Pair};
-
-fn check(cx: &mut Check, name: &Pair) {
-    for segment in &name.namespace {
-        check_cxx_ident(cx, &segment.to_string());
-    }
-    check_cxx_ident(cx, &name.cxx.to_string());
-    check_rust_ident(cx, &name.rust.to_string());
-
-    fn check_cxx_ident(cx: &mut Check, ident: &str) {
-        if ident.starts_with("cxxbridge") {
-            cx.error(ident, error::CXXBRIDGE_RESERVED.msg);
-        }
-        if ident.contains("__") {
-            cx.error(ident, error::DOUBLE_UNDERSCORE.msg);
-        }
-    }
-
-    fn check_rust_ident(cx: &mut Check, ident: &str) {
-        if ident.starts_with("cxxbridge") {
-            cx.error(ident, error::CXXBRIDGE_RESERVED.msg);
-        }
-    }
-}
-
-pub(crate) fn check_all(cx: &mut Check, apis: &[Api]) {
-    for api in apis {
-        match api {
-            Api::Include(_) | Api::Impl(_) => {}
-            Api::Struct(strct) => {
-                check(cx, &strct.name);
-                for field in &strct.fields {
-                    check(cx, &field.name);
-                }
-            }
-            Api::Enum(enm) => {
-                check(cx, &enm.name);
-                for variant in &enm.variants {
-                    check(cx, &variant.name);
-                }
-            }
-            Api::CxxType(ety) | Api::RustType(ety) => {
-                check(cx, &ety.name);
-            }
-            Api::CxxFunction(efn) | Api::RustFunction(efn) => {
-                check(cx, &efn.name);
-                for arg in &efn.args {
-                    check(cx, &arg.name);
-                }
-            }
-            Api::TypeAlias(alias) => {
-                check(cx, &alias.name);
-            }
-        }
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/impls.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/impls.rs
deleted file mode 100644
index 36e1f322..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/impls.rs
+++ /dev/null
@@ -1,450 +0,0 @@
-use crate::syntax::{
-    Array, ExternFn, Include, Lifetimes, Ptr, Receiver, Ref, Signature, SliceRef, Ty1, Type, Var,
-};
-use std::hash::{Hash, Hasher};
-use std::mem;
-use std::ops::{Deref, DerefMut};
-
-impl PartialEq for Include {
-    fn eq(&self, other: &Self) -> bool {
-        let Include {
-            cfg: _,
-            path,
-            kind,
-            begin_span: _,
-            end_span: _,
-        } = self;
-        let Include {
-            cfg: _,
-            path: path2,
-            kind: kind2,
-            begin_span: _,
-            end_span: _,
-        } = other;
-        path == path2 && kind == kind2
-    }
-}
-
-impl Deref for ExternFn {
-    type Target = Signature;
-
-    fn deref(&self) -> &Self::Target {
-        &self.sig
-    }
-}
-
-impl DerefMut for ExternFn {
-    fn deref_mut(&mut self) -> &mut Self::Target {
-        &mut self.sig
-    }
-}
-
-impl Hash for Type {
-    fn hash<H: Hasher>(&self, state: &mut H) {
-        mem::discriminant(self).hash(state);
-        match self {
-            Type::Ident(t) => t.hash(state),
-            Type::RustBox(t) => t.hash(state),
-            Type::UniquePtr(t) => t.hash(state),
-            Type::SharedPtr(t) => t.hash(state),
-            Type::WeakPtr(t) => t.hash(state),
-            Type::Ref(t) => t.hash(state),
-            Type::Ptr(t) => t.hash(state),
-            Type::Str(t) => t.hash(state),
-            Type::RustVec(t) => t.hash(state),
-            Type::CxxVector(t) => t.hash(state),
-            Type::Fn(t) => t.hash(state),
-            Type::SliceRef(t) => t.hash(state),
-            Type::Array(t) => t.hash(state),
-            Type::Void(_) => {}
-        }
-    }
-}
-
-impl Eq for Type {}
-
-impl PartialEq for Type {
-    fn eq(&self, other: &Self) -> bool {
-        match (self, other) {
-            (Type::Ident(lhs), Type::Ident(rhs)) => lhs == rhs,
-            (Type::RustBox(lhs), Type::RustBox(rhs)) => lhs == rhs,
-            (Type::UniquePtr(lhs), Type::UniquePtr(rhs)) => lhs == rhs,
-            (Type::SharedPtr(lhs), Type::SharedPtr(rhs)) => lhs == rhs,
-            (Type::WeakPtr(lhs), Type::WeakPtr(rhs)) => lhs == rhs,
-            (Type::Ref(lhs), Type::Ref(rhs)) => lhs == rhs,
-            (Type::Str(lhs), Type::Str(rhs)) => lhs == rhs,
-            (Type::RustVec(lhs), Type::RustVec(rhs)) => lhs == rhs,
-            (Type::CxxVector(lhs), Type::CxxVector(rhs)) => lhs == rhs,
-            (Type::Fn(lhs), Type::Fn(rhs)) => lhs == rhs,
-            (Type::SliceRef(lhs), Type::SliceRef(rhs)) => lhs == rhs,
-            (Type::Void(_), Type::Void(_)) => true,
-            (_, _) => false,
-        }
-    }
-}
-
-impl Eq for Lifetimes {}
-
-impl PartialEq for Lifetimes {
-    fn eq(&self, other: &Self) -> bool {
-        let Lifetimes {
-            lt_token: _,
-            lifetimes,
-            gt_token: _,
-        } = self;
-        let Lifetimes {
-            lt_token: _,
-            lifetimes: lifetimes2,
-            gt_token: _,
-        } = other;
-        lifetimes.iter().eq(lifetimes2)
-    }
-}
-
-impl Hash for Lifetimes {
-    fn hash<H: Hasher>(&self, state: &mut H) {
-        let Lifetimes {
-            lt_token: _,
-            lifetimes,
-            gt_token: _,
-        } = self;
-        lifetimes.len().hash(state);
-        for lifetime in lifetimes {
-            lifetime.hash(state);
-        }
-    }
-}
-
-impl Eq for Ty1 {}
-
-impl PartialEq for Ty1 {
-    fn eq(&self, other: &Self) -> bool {
-        let Ty1 {
-            name,
-            langle: _,
-            inner,
-            rangle: _,
-        } = self;
-        let Ty1 {
-            name: name2,
-            langle: _,
-            inner: inner2,
-            rangle: _,
-        } = other;
-        name == name2 && inner == inner2
-    }
-}
-
-impl Hash for Ty1 {
-    fn hash<H: Hasher>(&self, state: &mut H) {
-        let Ty1 {
-            name,
-            langle: _,
-            inner,
-            rangle: _,
-        } = self;
-        name.hash(state);
-        inner.hash(state);
-    }
-}
-
-impl Eq for Ref {}
-
-impl PartialEq for Ref {
-    fn eq(&self, other: &Self) -> bool {
-        let Ref {
-            pinned,
-            ampersand: _,
-            lifetime,
-            mutable,
-            inner,
-            pin_tokens: _,
-            mutability: _,
-        } = self;
-        let Ref {
-            pinned: pinned2,
-            ampersand: _,
-            lifetime: lifetime2,
-            mutable: mutable2,
-            inner: inner2,
-            pin_tokens: _,
-            mutability: _,
-        } = other;
-        pinned == pinned2 && lifetime == lifetime2 && mutable == mutable2 && inner == inner2
-    }
-}
-
-impl Hash for Ref {
-    fn hash<H: Hasher>(&self, state: &mut H) {
-        let Ref {
-            pinned,
-            ampersand: _,
-            lifetime,
-            mutable,
-            inner,
-            pin_tokens: _,
-            mutability: _,
-        } = self;
-        pinned.hash(state);
-        lifetime.hash(state);
-        mutable.hash(state);
-        inner.hash(state);
-    }
-}
-
-impl Eq for Ptr {}
-
-impl PartialEq for Ptr {
-    fn eq(&self, other: &Ptr) -> bool {
-        let Ptr {
-            star: _,
-            mutable,
-            inner,
-            mutability: _,
-            constness: _,
-        } = self;
-        let Ptr {
-            star: _,
-            mutable: mutable2,
-            inner: inner2,
-            mutability: _,
-            constness: _,
-        } = other;
-        mutable == mutable2 && inner == inner2
-    }
-}
-
-impl Hash for Ptr {
-    fn hash<H: Hasher>(&self, state: &mut H) {
-        let Ptr {
-            star: _,
-            mutable,
-            inner,
-            mutability: _,
-            constness: _,
-        } = self;
-        mutable.hash(state);
-        inner.hash(state);
-    }
-}
-
-impl Eq for SliceRef {}
-
-impl PartialEq for SliceRef {
-    fn eq(&self, other: &Self) -> bool {
-        let SliceRef {
-            ampersand: _,
-            lifetime,
-            mutable,
-            bracket: _,
-            inner,
-            mutability: _,
-        } = self;
-        let SliceRef {
-            ampersand: _,
-            lifetime: lifetime2,
-            mutable: mutable2,
-            bracket: _,
-            inner: inner2,
-            mutability: _,
-        } = other;
-        lifetime == lifetime2 && mutable == mutable2 && inner == inner2
-    }
-}
-
-impl Hash for SliceRef {
-    fn hash<H: Hasher>(&self, state: &mut H) {
-        let SliceRef {
-            ampersand: _,
-            lifetime,
-            mutable,
-            bracket: _,
-            inner,
-            mutability: _,
-        } = self;
-        lifetime.hash(state);
-        mutable.hash(state);
-        inner.hash(state);
-    }
-}
-
-impl Eq for Array {}
-
-impl PartialEq for Array {
-    fn eq(&self, other: &Self) -> bool {
-        let Array {
-            bracket: _,
-            inner,
-            semi_token: _,
-            len,
-            len_token: _,
-        } = self;
-        let Array {
-            bracket: _,
-            inner: inner2,
-            semi_token: _,
-            len: len2,
-            len_token: _,
-        } = other;
-        inner == inner2 && len == len2
-    }
-}
-
-impl Hash for Array {
-    fn hash<H: Hasher>(&self, state: &mut H) {
-        let Array {
-            bracket: _,
-            inner,
-            semi_token: _,
-            len,
-            len_token: _,
-        } = self;
-        inner.hash(state);
-        len.hash(state);
-    }
-}
-
-impl Eq for Signature {}
-
-impl PartialEq for Signature {
-    fn eq(&self, other: &Self) -> bool {
-        let Signature {
-            asyncness,
-            unsafety,
-            fn_token: _,
-            generics: _,
-            receiver,
-            args,
-            ret,
-            throws,
-            paren_token: _,
-            throws_tokens: _,
-        } = self;
-        let Signature {
-            asyncness: asyncness2,
-            unsafety: unsafety2,
-            fn_token: _,
-            generics: _,
-            receiver: receiver2,
-            args: args2,
-            ret: ret2,
-            throws: throws2,
-            paren_token: _,
-            throws_tokens: _,
-        } = other;
-        asyncness.is_some() == asyncness2.is_some()
-            && unsafety.is_some() == unsafety2.is_some()
-            && receiver == receiver2
-            && ret == ret2
-            && throws == throws2
-            && args.len() == args2.len()
-            && args.iter().zip(args2).all(|(arg, arg2)| {
-                let Var {
-                    cfg: _,
-                    doc: _,
-                    attrs: _,
-                    visibility: _,
-                    name: _,
-                    colon_token: _,
-                    ty,
-                } = arg;
-                let Var {
-                    cfg: _,
-                    doc: _,
-                    attrs: _,
-                    visibility: _,
-                    name: _,
-                    colon_token: _,
-                    ty: ty2,
-                } = arg2;
-                ty == ty2
-            })
-    }
-}
-
-impl Hash for Signature {
-    fn hash<H: Hasher>(&self, state: &mut H) {
-        let Signature {
-            asyncness,
-            unsafety,
-            fn_token: _,
-            generics: _,
-            receiver,
-            args,
-            ret,
-            throws,
-            paren_token: _,
-            throws_tokens: _,
-        } = self;
-        asyncness.is_some().hash(state);
-        unsafety.is_some().hash(state);
-        receiver.hash(state);
-        for arg in args {
-            let Var {
-                cfg: _,
-                doc: _,
-                attrs: _,
-                visibility: _,
-                name: _,
-                colon_token: _,
-                ty,
-            } = arg;
-            ty.hash(state);
-        }
-        ret.hash(state);
-        throws.hash(state);
-    }
-}
-
-impl Eq for Receiver {}
-
-impl PartialEq for Receiver {
-    fn eq(&self, other: &Self) -> bool {
-        let Receiver {
-            pinned,
-            ampersand: _,
-            lifetime,
-            mutable,
-            var: _,
-            colon_token: _,
-            ty,
-            shorthand: _,
-            pin_tokens: _,
-            mutability: _,
-        } = self;
-        let Receiver {
-            pinned: pinned2,
-            ampersand: _,
-            lifetime: lifetime2,
-            mutable: mutable2,
-            var: _,
-            colon_token: _,
-            ty: ty2,
-            shorthand: _,
-            pin_tokens: _,
-            mutability: _,
-        } = other;
-        pinned == pinned2 && lifetime == lifetime2 && mutable == mutable2 && ty == ty2
-    }
-}
-
-impl Hash for Receiver {
-    fn hash<H: Hasher>(&self, state: &mut H) {
-        let Receiver {
-            pinned,
-            ampersand: _,
-            lifetime,
-            mutable,
-            var: _,
-            colon_token: _,
-            ty,
-            shorthand: _,
-            pin_tokens: _,
-            mutability: _,
-        } = self;
-        pinned.hash(state);
-        lifetime.hash(state);
-        mutable.hash(state);
-        ty.hash(state);
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/improper.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/improper.rs
deleted file mode 100644
index a19f5b7d..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/improper.rs
+++ /dev/null
@@ -1,39 +0,0 @@
-use self::ImproperCtype::*;
-use crate::syntax::atom::Atom::{self, *};
-use crate::syntax::{Type, Types};
-use proc_macro2::Ident;
-
-pub(crate) enum ImproperCtype<'a> {
-    Definite(bool),
-    Depends(&'a Ident),
-}
-
-impl<'a> Types<'a> {
-    // yes, no, maybe
-    pub(crate) fn determine_improper_ctype(&self, ty: &Type) -> ImproperCtype<'a> {
-        match ty {
-            Type::Ident(ident) => {
-                let ident = &ident.rust;
-                if let Some(atom) = Atom::from(ident) {
-                    Definite(atom == RustString)
-                } else if let Some(strct) = self.structs.get(ident) {
-                    Depends(&strct.name.rust) // iterate to fixed-point
-                } else {
-                    Definite(self.rust.contains(ident) || self.aliases.contains_key(ident))
-                }
-            }
-            Type::RustBox(_)
-            | Type::RustVec(_)
-            | Type::Str(_)
-            | Type::Fn(_)
-            | Type::Void(_)
-            | Type::SliceRef(_) => Definite(true),
-            Type::UniquePtr(_) | Type::SharedPtr(_) | Type::WeakPtr(_) | Type::CxxVector(_) => {
-                Definite(false)
-            }
-            Type::Ref(ty) => self.determine_improper_ctype(&ty.inner),
-            Type::Ptr(ty) => self.determine_improper_ctype(&ty.inner),
-            Type::Array(ty) => self.determine_improper_ctype(&ty.inner),
-        }
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/instantiate.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/instantiate.rs
deleted file mode 100644
index dda3069..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/instantiate.rs
+++ /dev/null
@@ -1,84 +0,0 @@
-use crate::syntax::{NamedType, Ty1, Type};
-use proc_macro2::{Ident, Span};
-use std::hash::{Hash, Hasher};
-use syn::Token;
-
-#[derive(Copy, Clone, PartialEq, Eq, Hash)]
-pub(crate) enum ImplKey<'a> {
-    RustBox(NamedImplKey<'a>),
-    RustVec(NamedImplKey<'a>),
-    UniquePtr(NamedImplKey<'a>),
-    SharedPtr(NamedImplKey<'a>),
-    WeakPtr(NamedImplKey<'a>),
-    CxxVector(NamedImplKey<'a>),
-}
-
-#[derive(Copy, Clone)]
-pub(crate) struct NamedImplKey<'a> {
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub begin_span: Span,
-    pub rust: &'a Ident,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub lt_token: Option<Token![<]>,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub gt_token: Option<Token![>]>,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub end_span: Span,
-}
-
-impl Type {
-    pub(crate) fn impl_key(&self) -> Option<ImplKey> {
-        if let Type::RustBox(ty) = self {
-            if let Type::Ident(ident) = &ty.inner {
-                return Some(ImplKey::RustBox(NamedImplKey::new(ty, ident)));
-            }
-        } else if let Type::RustVec(ty) = self {
-            if let Type::Ident(ident) = &ty.inner {
-                return Some(ImplKey::RustVec(NamedImplKey::new(ty, ident)));
-            }
-        } else if let Type::UniquePtr(ty) = self {
-            if let Type::Ident(ident) = &ty.inner {
-                return Some(ImplKey::UniquePtr(NamedImplKey::new(ty, ident)));
-            }
-        } else if let Type::SharedPtr(ty) = self {
-            if let Type::Ident(ident) = &ty.inner {
-                return Some(ImplKey::SharedPtr(NamedImplKey::new(ty, ident)));
-            }
-        } else if let Type::WeakPtr(ty) = self {
-            if let Type::Ident(ident) = &ty.inner {
-                return Some(ImplKey::WeakPtr(NamedImplKey::new(ty, ident)));
-            }
-        } else if let Type::CxxVector(ty) = self {
-            if let Type::Ident(ident) = &ty.inner {
-                return Some(ImplKey::CxxVector(NamedImplKey::new(ty, ident)));
-            }
-        }
-        None
-    }
-}
-
-impl<'a> PartialEq for NamedImplKey<'a> {
-    fn eq(&self, other: &Self) -> bool {
-        PartialEq::eq(self.rust, other.rust)
-    }
-}
-
-impl<'a> Eq for NamedImplKey<'a> {}
-
-impl<'a> Hash for NamedImplKey<'a> {
-    fn hash<H: Hasher>(&self, hasher: &mut H) {
-        self.rust.hash(hasher);
-    }
-}
-
-impl<'a> NamedImplKey<'a> {
-    fn new(outer: &Ty1, inner: &'a NamedType) -> Self {
-        NamedImplKey {
-            begin_span: outer.name.span(),
-            rust: &inner.rust,
-            lt_token: inner.generics.lt_token,
-            gt_token: inner.generics.gt_token,
-            end_span: outer.rangle.span,
-        }
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/mangle.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/mangle.rs
deleted file mode 100644
index 6f019657..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/mangle.rs
+++ /dev/null
@@ -1,120 +0,0 @@
-// Mangled symbol arrangements:
-//
-//   (a) One-off internal symbol.
-//          pattern:  {CXXBRIDGE} $ {NAME}
-//          examples:
-//             - cxxbridge1$exception
-//          defining characteristics:
-//             - 2 segments
-//             - starts with cxxbridge
-//
-//   (b) Behavior on a builtin binding without generic parameter.
-//          pattern:  {CXXBRIDGE} $ {TYPE} $ {NAME}
-//          examples:
-//             - cxxbridge1$string$len
-//          defining characteristics:
-//             - 3 segments
-//             - starts with cxxbridge
-//
-//   (c) Behavior on a builtin binding with generic parameter.
-//          pattern:  {CXXBRIDGE} $ {TYPE} $ {PARAM...} $ {NAME}
-//          examples:
-//             - cxxbridge1$box$org$rust$Struct$alloc
-//             - cxxbridge1$unique_ptr$std$vector$u8$drop
-//          defining characteristics:
-//             - 4+ segments
-//             - starts with cxxbridge
-//
-//   (d) User-defined extern function.
-//          pattern:  {NAMESPACE...} $ {CXXBRIDGE} $ {NAME}
-//          examples:
-//             - cxxbridge1$new_client
-//             - org$rust$cxxbridge1$new_client
-//          defining characteristics:
-//             - cxxbridge is second from end
-//          FIXME: conflict with (a) if they collide with one of our one-off symbol names in the global namespace
-//
-//   (e) User-defined extern member function.
-//          pattern:  {NAMESPACE...} $ {CXXBRIDGE} $ {TYPE} $ {NAME}
-//          examples:
-//             - org$cxxbridge1$Struct$get
-//          defining characteristics:
-//             - cxxbridge is third from end
-//          FIXME: conflict with (b) if e.g. user binds a type in global namespace that collides with our builtin type names
-//
-//   (f) Operator overload.
-//          pattern:  {NAMESPACE...} $ {CXXBRIDGE} $ {TYPE} $ operator $ {NAME}
-//          examples:
-//             - org$rust$cxxbridge1$Struct$operator$eq
-//          defining characteristics:
-//             - second segment from end is `operator` (not possible in type or namespace names)
-//
-//   (g) Closure trampoline.
-//          pattern:  {NAMESPACE...} $ {CXXBRIDGE} $ {TYPE?} $ {NAME} $ {ARGUMENT} $ {DIRECTION}
-//          examples:
-//             - org$rust$cxxbridge1$Struct$invoke$f$0
-//          defining characteristics:
-//             - last symbol is `0` (C half) or `1` (Rust half) which are not legal identifiers on their own
-//
-//
-// Mangled preprocessor variable arrangements:
-//
-//   (A) One-off internal variable.
-//          pattern:  {CXXBRIDGE} _ {NAME}
-//          examples:
-//             - CXXBRIDGE1_PANIC
-//             - CXXBRIDGE1_RUST_STRING
-//          defining characteristics:
-//             - NAME does not begin with STRUCT or ENUM
-//
-//   (B) Guard around user-defined type.
-//          pattern:  {CXXBRIDGE} _ {STRUCT or ENUM} _ {NAMESPACE...} $ {TYPE}
-//          examples:
-//             - CXXBRIDGE1_STRUCT_org$rust$Struct
-//             - CXXBRIDGE1_ENUM_Enabled
-
-use crate::syntax::symbol::{self, Symbol};
-use crate::syntax::{ExternFn, Pair, Types};
-
-const CXXBRIDGE: &str = "cxxbridge1";
-
-macro_rules! join {
-    ($($segment:expr),+ $(,)?) => {
-        symbol::join(&[$(&$segment),+])
-    };
-}
-
-pub(crate) fn extern_fn(efn: &ExternFn, types: &Types) -> Symbol {
-    match &efn.receiver {
-        Some(receiver) => {
-            let receiver_ident = types.resolve(&receiver.ty);
-            join!(
-                efn.name.namespace,
-                CXXBRIDGE,
-                receiver_ident.name.cxx,
-                efn.name.rust,
-            )
-        }
-        None => join!(efn.name.namespace, CXXBRIDGE, efn.name.rust),
-    }
-}
-
-pub(crate) fn operator(receiver: &Pair, operator: &'static str) -> Symbol {
-    join!(
-        receiver.namespace,
-        CXXBRIDGE,
-        receiver.cxx,
-        "operator",
-        operator,
-    )
-}
-
-// The C half of a function pointer trampoline.
-pub(crate) fn c_trampoline(efn: &ExternFn, var: &Pair, types: &Types) -> Symbol {
-    join!(extern_fn(efn, types), var.rust, 0)
-}
-
-// The Rust half of a function pointer trampoline.
-pub(crate) fn r_trampoline(efn: &ExternFn, var: &Pair, types: &Types) -> Symbol {
-    join!(extern_fn(efn, types), var.rust, 1)
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/map.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/map.rs
deleted file mode 100644
index 4a2db0b..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/map.rs
+++ /dev/null
@@ -1,172 +0,0 @@
-use std::borrow::Borrow;
-use std::hash::Hash;
-use std::ops::Index;
-use std::slice;
-
-pub(crate) use self::ordered::OrderedMap;
-pub(crate) use self::unordered::UnorderedMap;
-pub(crate) use std::collections::hash_map::Entry;
-
-mod ordered {
-    use super::{Entry, Iter, UnorderedMap};
-    use std::borrow::Borrow;
-    use std::hash::Hash;
-    use std::mem;
-
-    pub(crate) struct OrderedMap<K, V> {
-        map: UnorderedMap<K, usize>,
-        vec: Vec<(K, V)>,
-    }
-
-    impl<K, V> OrderedMap<K, V> {
-        pub(crate) fn new() -> Self {
-            OrderedMap {
-                map: UnorderedMap::new(),
-                vec: Vec::new(),
-            }
-        }
-
-        pub(crate) fn iter(&self) -> Iter<K, V> {
-            Iter(self.vec.iter())
-        }
-
-        #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
-        pub(crate) fn keys(&self) -> impl Iterator<Item = &K> {
-            self.vec.iter().map(|(k, _v)| k)
-        }
-    }
-
-    impl<K, V> OrderedMap<K, V>
-    where
-        K: Copy + Hash + Eq,
-    {
-        pub(crate) fn insert(&mut self, key: K, value: V) -> Option<V> {
-            match self.map.entry(key) {
-                Entry::Occupied(entry) => {
-                    let i = &mut self.vec[*entry.get()];
-                    Some(mem::replace(&mut i.1, value))
-                }
-                Entry::Vacant(entry) => {
-                    entry.insert(self.vec.len());
-                    self.vec.push((key, value));
-                    None
-                }
-            }
-        }
-
-        pub(crate) fn contains_key<Q>(&self, key: &Q) -> bool
-        where
-            K: Borrow<Q>,
-            Q: ?Sized + Hash + Eq,
-        {
-            self.map.contains_key(key)
-        }
-    }
-
-    impl<'a, K, V> IntoIterator for &'a OrderedMap<K, V> {
-        type Item = (&'a K, &'a V);
-        type IntoIter = Iter<'a, K, V>;
-        fn into_iter(self) -> Self::IntoIter {
-            self.iter()
-        }
-    }
-}
-
-mod unordered {
-    use crate::syntax::set::UnorderedSet;
-    use std::borrow::Borrow;
-    use std::collections::hash_map::{Entry, HashMap};
-    use std::hash::Hash;
-
-    // Wrapper prohibits accidentally introducing iteration over the map, which
-    // could lead to nondeterministic generated code.
-    pub(crate) struct UnorderedMap<K, V>(HashMap<K, V>);
-
-    impl<K, V> UnorderedMap<K, V> {
-        pub(crate) fn new() -> Self {
-            UnorderedMap(HashMap::new())
-        }
-    }
-
-    impl<K, V> UnorderedMap<K, V>
-    where
-        K: Hash + Eq,
-    {
-        pub(crate) fn insert(&mut self, key: K, value: V) -> Option<V> {
-            self.0.insert(key, value)
-        }
-
-        pub(crate) fn contains_key<Q>(&self, key: &Q) -> bool
-        where
-            K: Borrow<Q>,
-            Q: ?Sized + Hash + Eq,
-        {
-            self.0.contains_key(key)
-        }
-
-        pub(crate) fn get<Q>(&self, key: &Q) -> Option<&V>
-        where
-            K: Borrow<Q>,
-            Q: ?Sized + Hash + Eq,
-        {
-            self.0.get(key)
-        }
-
-        pub(crate) fn entry(&mut self, key: K) -> Entry<K, V> {
-            self.0.entry(key)
-        }
-
-        #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
-        pub(crate) fn remove<Q>(&mut self, key: &Q) -> Option<V>
-        where
-            K: Borrow<Q>,
-            Q: ?Sized + Hash + Eq,
-        {
-            self.0.remove(key)
-        }
-
-        pub(crate) fn keys(&self) -> UnorderedSet<K>
-        where
-            K: Copy,
-        {
-            let mut set = UnorderedSet::new();
-            for key in self.0.keys() {
-                set.insert(*key);
-            }
-            set
-        }
-    }
-}
-
-pub(crate) struct Iter<'a, K, V>(slice::Iter<'a, (K, V)>);
-
-impl<'a, K, V> Iterator for Iter<'a, K, V> {
-    type Item = (&'a K, &'a V);
-
-    fn next(&mut self) -> Option<Self::Item> {
-        let (k, v) = self.0.next()?;
-        Some((k, v))
-    }
-
-    fn size_hint(&self) -> (usize, Option<usize>) {
-        self.0.size_hint()
-    }
-}
-
-impl<K, V> Default for UnorderedMap<K, V> {
-    fn default() -> Self {
-        UnorderedMap::new()
-    }
-}
-
-impl<Q, K, V> Index<&Q> for UnorderedMap<K, V>
-where
-    K: Borrow<Q> + Hash + Eq,
-    Q: ?Sized + Hash + Eq,
-{
-    type Output = V;
-
-    fn index(&self, key: &Q) -> &V {
-        self.get(key).unwrap()
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/mod.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/mod.rs
deleted file mode 100644
index 5ff343b..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/mod.rs
+++ /dev/null
@@ -1,342 +0,0 @@
-// Functionality that is shared between the cxxbridge macro and the cmd.
-
-pub(crate) mod atom;
-pub(crate) mod attrs;
-pub(crate) mod cfg;
-pub(crate) mod check;
-pub(crate) mod derive;
-mod discriminant;
-mod doc;
-pub(crate) mod error;
-pub(crate) mod file;
-pub(crate) mod ident;
-mod impls;
-mod improper;
-pub(crate) mod instantiate;
-pub(crate) mod mangle;
-pub(crate) mod map;
-mod names;
-pub(crate) mod namespace;
-mod parse;
-mod pod;
-pub(crate) mod qualified;
-pub(crate) mod report;
-pub(crate) mod resolve;
-pub(crate) mod set;
-pub(crate) mod symbol;
-mod tokens;
-mod toposort;
-pub(crate) mod trivial;
-pub(crate) mod types;
-mod visit;
-
-use self::attrs::OtherAttrs;
-use self::cfg::CfgExpr;
-use self::namespace::Namespace;
-use self::parse::kw;
-use self::symbol::Symbol;
-use proc_macro2::{Ident, Span};
-use syn::punctuated::Punctuated;
-use syn::token::{Brace, Bracket, Paren};
-use syn::{Attribute, Expr, Generics, Lifetime, LitInt, Token, Type as RustType};
-
-pub(crate) use self::atom::Atom;
-pub(crate) use self::derive::{Derive, Trait};
-pub(crate) use self::discriminant::Discriminant;
-pub(crate) use self::doc::Doc;
-pub(crate) use self::names::ForeignName;
-pub(crate) use self::parse::parse_items;
-pub(crate) use self::types::Types;
-
-pub(crate) enum Api {
-    Include(Include),
-    Struct(Struct),
-    Enum(Enum),
-    CxxType(ExternType),
-    CxxFunction(ExternFn),
-    RustType(ExternType),
-    RustFunction(ExternFn),
-    TypeAlias(TypeAlias),
-    Impl(Impl),
-}
-
-pub(crate) struct Include {
-    pub cfg: CfgExpr,
-    pub path: String,
-    pub kind: IncludeKind,
-    #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
-    pub begin_span: Span,
-    #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
-    pub end_span: Span,
-}
-
-/// Whether to emit `#include "path"` or `#include <path>`.
-#[derive(Copy, Clone, PartialEq, Debug)]
-pub enum IncludeKind {
-    /// `#include "quoted/path/to"`
-    Quoted,
-    /// `#include <bracketed/path/to>`
-    Bracketed,
-}
-
-pub(crate) struct ExternType {
-    #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
-    pub cfg: CfgExpr,
-    pub lang: Lang,
-    pub doc: Doc,
-    pub derives: Vec<Derive>,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub attrs: OtherAttrs,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub visibility: Token![pub],
-    pub type_token: Token![type],
-    pub name: Pair,
-    pub generics: Lifetimes,
-    #[allow(dead_code)]
-    pub colon_token: Option<Token![:]>,
-    pub bounds: Vec<Derive>,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub semi_token: Token![;],
-    pub trusted: bool,
-}
-
-pub(crate) struct Struct {
-    #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
-    pub cfg: CfgExpr,
-    pub doc: Doc,
-    pub derives: Vec<Derive>,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub attrs: OtherAttrs,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub visibility: Token![pub],
-    pub struct_token: Token![struct],
-    pub name: Pair,
-    pub generics: Lifetimes,
-    pub brace_token: Brace,
-    pub fields: Vec<Var>,
-}
-
-pub(crate) struct Enum {
-    #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
-    pub cfg: CfgExpr,
-    pub doc: Doc,
-    pub derives: Vec<Derive>,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub attrs: OtherAttrs,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub visibility: Token![pub],
-    pub enum_token: Token![enum],
-    pub name: Pair,
-    pub generics: Lifetimes,
-    pub brace_token: Brace,
-    pub variants: Vec<Variant>,
-    pub variants_from_header: bool,
-    #[allow(dead_code)]
-    pub variants_from_header_attr: Option<Attribute>,
-    pub repr: EnumRepr,
-    pub explicit_repr: bool,
-}
-
-pub(crate) enum EnumRepr {
-    Native {
-        atom: Atom,
-        repr_type: Type,
-    },
-    #[cfg(feature = "experimental-enum-variants-from-header")]
-    Foreign {
-        rust_type: syn::Path,
-    },
-}
-
-pub(crate) struct ExternFn {
-    #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
-    pub cfg: CfgExpr,
-    pub lang: Lang,
-    pub doc: Doc,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub attrs: OtherAttrs,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub visibility: Token![pub],
-    pub name: Pair,
-    pub sig: Signature,
-    pub semi_token: Token![;],
-    pub trusted: bool,
-}
-
-pub(crate) struct TypeAlias {
-    #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
-    pub cfg: CfgExpr,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub doc: Doc,
-    pub derives: Vec<Derive>,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub attrs: OtherAttrs,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub visibility: Token![pub],
-    pub type_token: Token![type],
-    pub name: Pair,
-    pub generics: Lifetimes,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub eq_token: Token![=],
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub ty: RustType,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub semi_token: Token![;],
-}
-
-pub(crate) struct Impl {
-    #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
-    pub cfg: CfgExpr,
-    pub impl_token: Token![impl],
-    pub impl_generics: Lifetimes,
-    #[allow(dead_code)]
-    pub negative: bool,
-    pub ty: Type,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub ty_generics: Lifetimes,
-    pub brace_token: Brace,
-    pub negative_token: Option<Token![!]>,
-}
-
-#[derive(Clone, Default)]
-pub(crate) struct Lifetimes {
-    pub lt_token: Option<Token![<]>,
-    pub lifetimes: Punctuated<Lifetime, Token![,]>,
-    pub gt_token: Option<Token![>]>,
-}
-
-pub(crate) struct Signature {
-    pub asyncness: Option<Token![async]>,
-    pub unsafety: Option<Token![unsafe]>,
-    pub fn_token: Token![fn],
-    pub generics: Generics,
-    pub receiver: Option<Receiver>,
-    pub args: Punctuated<Var, Token![,]>,
-    pub ret: Option<Type>,
-    pub throws: bool,
-    pub paren_token: Paren,
-    pub throws_tokens: Option<(kw::Result, Token![<], Token![>])>,
-}
-
-pub(crate) struct Var {
-    #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
-    pub cfg: CfgExpr,
-    pub doc: Doc,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub attrs: OtherAttrs,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub visibility: Token![pub],
-    pub name: Pair,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub colon_token: Token![:],
-    pub ty: Type,
-}
-
-pub(crate) struct Receiver {
-    pub pinned: bool,
-    pub ampersand: Token![&],
-    pub lifetime: Option<Lifetime>,
-    pub mutable: bool,
-    pub var: Token![self],
-    pub ty: NamedType,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub colon_token: Token![:],
-    pub shorthand: bool,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub pin_tokens: Option<(kw::Pin, Token![<], Token![>])>,
-    pub mutability: Option<Token![mut]>,
-}
-
-pub(crate) struct Variant {
-    #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
-    pub cfg: CfgExpr,
-    pub doc: Doc,
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub attrs: OtherAttrs,
-    pub name: Pair,
-    pub discriminant: Discriminant,
-    #[allow(dead_code)]
-    pub expr: Option<Expr>,
-}
-
-pub(crate) enum Type {
-    Ident(NamedType),
-    RustBox(Box<Ty1>),
-    RustVec(Box<Ty1>),
-    UniquePtr(Box<Ty1>),
-    SharedPtr(Box<Ty1>),
-    WeakPtr(Box<Ty1>),
-    Ref(Box<Ref>),
-    Ptr(Box<Ptr>),
-    Str(Box<Ref>),
-    CxxVector(Box<Ty1>),
-    Fn(Box<Signature>),
-    Void(Span),
-    SliceRef(Box<SliceRef>),
-    Array(Box<Array>),
-}
-
-pub(crate) struct Ty1 {
-    pub name: Ident,
-    pub langle: Token![<],
-    pub inner: Type,
-    pub rangle: Token![>],
-}
-
-pub(crate) struct Ref {
-    pub pinned: bool,
-    pub ampersand: Token![&],
-    pub lifetime: Option<Lifetime>,
-    pub mutable: bool,
-    pub inner: Type,
-    pub pin_tokens: Option<(kw::Pin, Token![<], Token![>])>,
-    pub mutability: Option<Token![mut]>,
-}
-
-pub(crate) struct Ptr {
-    pub star: Token![*],
-    pub mutable: bool,
-    pub inner: Type,
-    pub mutability: Option<Token![mut]>,
-    pub constness: Option<Token![const]>,
-}
-
-pub(crate) struct SliceRef {
-    pub ampersand: Token![&],
-    pub lifetime: Option<Lifetime>,
-    pub mutable: bool,
-    pub bracket: Bracket,
-    pub inner: Type,
-    pub mutability: Option<Token![mut]>,
-}
-
-pub(crate) struct Array {
-    pub bracket: Bracket,
-    pub inner: Type,
-    pub semi_token: Token![;],
-    pub len: usize,
-    pub len_token: LitInt,
-}
-
-#[derive(Copy, Clone, PartialEq)]
-pub(crate) enum Lang {
-    Cxx,
-    Rust,
-}
-
-// An association of a defined Rust name with a fully resolved, namespace
-// qualified C++ name.
-#[derive(Clone)]
-pub(crate) struct Pair {
-    pub namespace: Namespace,
-    pub cxx: ForeignName,
-    pub rust: Ident,
-}
-
-// Wrapper for a type which needs to be resolved before it can be printed in
-// C++.
-#[derive(PartialEq, Eq, Hash)]
-pub(crate) struct NamedType {
-    pub rust: Ident,
-    pub generics: Lifetimes,
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/names.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/names.rs
deleted file mode 100644
index 7afa5a9e..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/names.rs
+++ /dev/null
@@ -1,61 +0,0 @@
-use crate::syntax::symbol::Segment;
-use crate::syntax::{Lifetimes, NamedType, Pair, Symbol};
-use proc_macro2::{Ident, Span};
-use std::fmt::{self, Display};
-use std::iter;
-use syn::ext::IdentExt;
-use syn::parse::{Error, Parser, Result};
-use syn::punctuated::Punctuated;
-
-#[derive(Clone)]
-pub(crate) struct ForeignName {
-    text: String,
-}
-
-impl Pair {
-    pub(crate) fn to_symbol(&self) -> Symbol {
-        let segments = self
-            .namespace
-            .iter()
-            .map(|ident| ident as &dyn Segment)
-            .chain(iter::once(&self.cxx as &dyn Segment));
-        Symbol::from_idents(segments)
-    }
-}
-
-impl NamedType {
-    pub(crate) fn new(rust: Ident) -> Self {
-        let generics = Lifetimes {
-            lt_token: None,
-            lifetimes: Punctuated::new(),
-            gt_token: None,
-        };
-        NamedType { rust, generics }
-    }
-}
-
-impl ForeignName {
-    pub(crate) fn parse(text: &str, span: Span) -> Result<Self> {
-        // TODO: support C++ names containing whitespace (`unsigned int`) or
-        // non-alphanumeric characters (`operator++`).
-        match Ident::parse_any.parse_str(text) {
-            Ok(ident) => {
-                let text = ident.to_string();
-                Ok(ForeignName { text })
-            }
-            Err(err) => Err(Error::new(span, err)),
-        }
-    }
-}
-
-impl Display for ForeignName {
-    fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-        formatter.write_str(&self.text)
-    }
-}
-
-impl PartialEq<str> for ForeignName {
-    fn eq(&self, rhs: &str) -> bool {
-        self.text == rhs
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/namespace.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/namespace.rs
deleted file mode 100644
index 417fb34..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/namespace.rs
+++ /dev/null
@@ -1,115 +0,0 @@
-use crate::syntax::qualified::QualifiedName;
-use quote::IdentFragment;
-use std::fmt::{self, Display};
-use std::slice::Iter;
-use syn::parse::{Error, Parse, ParseStream, Result};
-use syn::{Expr, Ident, Lit, Meta, Token};
-
-mod kw {
-    syn::custom_keyword!(namespace);
-}
-
-#[derive(Clone, Default)]
-pub(crate) struct Namespace {
-    segments: Vec<Ident>,
-}
-
-impl Namespace {
-    pub(crate) const ROOT: Self = Namespace {
-        segments: Vec::new(),
-    };
-
-    pub(crate) fn iter(&self) -> Iter<Ident> {
-        self.segments.iter()
-    }
-
-    pub(crate) fn parse_bridge_attr_namespace(input: ParseStream) -> Result<Self> {
-        if input.is_empty() {
-            return Ok(Namespace::ROOT);
-        }
-
-        input.parse::<kw::namespace>()?;
-        input.parse::<Token![=]>()?;
-        let namespace = input.parse::<Namespace>()?;
-        input.parse::<Option<Token![,]>>()?;
-        Ok(namespace)
-    }
-
-    pub(crate) fn parse_meta(meta: &Meta) -> Result<Self> {
-        if let Meta::NameValue(meta) = meta {
-            match &meta.value {
-                Expr::Lit(expr) => {
-                    if let Lit::Str(lit) = &expr.lit {
-                        let segments = QualifiedName::parse_quoted(lit)?.segments;
-                        return Ok(Namespace { segments });
-                    }
-                }
-                Expr::Path(expr)
-                    if expr.qself.is_none()
-                        && expr
-                            .path
-                            .segments
-                            .iter()
-                            .all(|segment| segment.arguments.is_none()) =>
-                {
-                    let segments = expr
-                        .path
-                        .segments
-                        .iter()
-                        .map(|segment| segment.ident.clone())
-                        .collect();
-                    return Ok(Namespace { segments });
-                }
-                _ => {}
-            }
-        }
-        Err(Error::new_spanned(meta, "unsupported namespace attribute"))
-    }
-}
-
-impl Default for &Namespace {
-    fn default() -> Self {
-        const ROOT: &Namespace = &Namespace::ROOT;
-        ROOT
-    }
-}
-
-impl Parse for Namespace {
-    fn parse(input: ParseStream) -> Result<Self> {
-        let segments = QualifiedName::parse_quoted_or_unquoted(input)?.segments;
-        Ok(Namespace { segments })
-    }
-}
-
-impl Display for Namespace {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        for segment in self {
-            write!(f, "{}$", segment)?;
-        }
-        Ok(())
-    }
-}
-
-impl IdentFragment for Namespace {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        Display::fmt(self, f)
-    }
-}
-
-impl<'a> IntoIterator for &'a Namespace {
-    type Item = &'a Ident;
-    type IntoIter = Iter<'a, Ident>;
-    fn into_iter(self) -> Self::IntoIter {
-        self.iter()
-    }
-}
-
-impl<'a> FromIterator<&'a Ident> for Namespace {
-    fn from_iter<I>(idents: I) -> Self
-    where
-        I: IntoIterator<Item = &'a Ident>,
-    {
-        let segments = idents.into_iter().cloned().collect();
-        Namespace { segments }
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/parse.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/parse.rs
deleted file mode 100644
index 850dcc8d..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/parse.rs
+++ /dev/null
@@ -1,1488 +0,0 @@
-use crate::syntax::attrs::OtherAttrs;
-use crate::syntax::cfg::CfgExpr;
-use crate::syntax::discriminant::DiscriminantSet;
-use crate::syntax::file::{Item, ItemForeignMod};
-use crate::syntax::report::Errors;
-use crate::syntax::Atom::*;
-use crate::syntax::{
-    attrs, error, Api, Array, Derive, Doc, Enum, EnumRepr, ExternFn, ExternType, ForeignName, Impl,
-    Include, IncludeKind, Lang, Lifetimes, NamedType, Namespace, Pair, Ptr, Receiver, Ref,
-    Signature, SliceRef, Struct, Ty1, Type, TypeAlias, Var, Variant,
-};
-use proc_macro2::{Delimiter, Group, Span, TokenStream, TokenTree};
-use quote::{format_ident, quote, quote_spanned};
-use std::mem;
-use syn::parse::{ParseStream, Parser};
-use syn::punctuated::Punctuated;
-use syn::{
-    Abi, Attribute, Error, Expr, Fields, FnArg, ForeignItem, ForeignItemFn, ForeignItemType,
-    GenericArgument, GenericParam, Generics, Ident, ItemEnum, ItemImpl, ItemStruct, Lit, LitStr,
-    Pat, PathArguments, Result, ReturnType, Signature as RustSignature, Token, TraitBound,
-    TraitBoundModifier, Type as RustType, TypeArray, TypeBareFn, TypeParamBound, TypePath, TypePtr,
-    TypeReference, Variant as RustVariant, Visibility,
-};
-
-pub(crate) mod kw {
-    syn::custom_keyword!(Pin);
-    syn::custom_keyword!(Result);
-}
-
-pub(crate) fn parse_items(
-    cx: &mut Errors,
-    items: Vec<Item>,
-    trusted: bool,
-    namespace: &Namespace,
-) -> Vec<Api> {
-    let mut apis = Vec::new();
-    for item in items {
-        match item {
-            Item::Struct(item) => match parse_struct(cx, item, namespace) {
-                Ok(strct) => apis.push(strct),
-                Err(err) => cx.push(err),
-            },
-            Item::Enum(item) => apis.push(parse_enum(cx, item, namespace)),
-            Item::ForeignMod(foreign_mod) => {
-                parse_foreign_mod(cx, foreign_mod, &mut apis, trusted, namespace);
-            }
-            Item::Impl(item) => match parse_impl(cx, item) {
-                Ok(imp) => apis.push(imp),
-                Err(err) => cx.push(err),
-            },
-            Item::Use(item) => cx.error(item, error::USE_NOT_ALLOWED),
-            Item::Other(item) => cx.error(item, "unsupported item"),
-        }
-    }
-    apis
-}
-
-fn parse_struct(cx: &mut Errors, mut item: ItemStruct, namespace: &Namespace) -> Result<Api> {
-    let mut cfg = CfgExpr::Unconditional;
-    let mut doc = Doc::new();
-    let mut derives = Vec::new();
-    let mut namespace = namespace.clone();
-    let mut cxx_name = None;
-    let mut rust_name = None;
-    let attrs = attrs::parse(
-        cx,
-        mem::take(&mut item.attrs),
-        attrs::Parser {
-            cfg: Some(&mut cfg),
-            doc: Some(&mut doc),
-            derives: Some(&mut derives),
-            namespace: Some(&mut namespace),
-            cxx_name: Some(&mut cxx_name),
-            rust_name: Some(&mut rust_name),
-            ..Default::default()
-        },
-    );
-
-    let named_fields = match item.fields {
-        Fields::Named(fields) => fields,
-        Fields::Unit => return Err(Error::new_spanned(item, "unit structs are not supported")),
-        Fields::Unnamed(_) => {
-            return Err(Error::new_spanned(item, "tuple structs are not supported"));
-        }
-    };
-
-    let mut lifetimes = Punctuated::new();
-    let mut has_unsupported_generic_param = false;
-    for pair in item.generics.params.into_pairs() {
-        let (param, punct) = pair.into_tuple();
-        match param {
-            GenericParam::Lifetime(param) => {
-                if !param.bounds.is_empty() && !has_unsupported_generic_param {
-                    let msg = "lifetime parameter with bounds is not supported yet";
-                    cx.error(&param, msg);
-                    has_unsupported_generic_param = true;
-                }
-                lifetimes.push_value(param.lifetime);
-                if let Some(punct) = punct {
-                    lifetimes.push_punct(punct);
-                }
-            }
-            GenericParam::Type(param) => {
-                if !has_unsupported_generic_param {
-                    let msg = "struct with generic type parameter is not supported yet";
-                    cx.error(&param, msg);
-                    has_unsupported_generic_param = true;
-                }
-            }
-            GenericParam::Const(param) => {
-                if !has_unsupported_generic_param {
-                    let msg = "struct with const generic parameter is not supported yet";
-                    cx.error(&param, msg);
-                    has_unsupported_generic_param = true;
-                }
-            }
-        }
-    }
-
-    if let Some(where_clause) = &item.generics.where_clause {
-        cx.error(
-            where_clause,
-            "struct with where-clause is not supported yet",
-        );
-    }
-
-    let mut fields = Vec::new();
-    for field in named_fields.named {
-        let ident = field.ident.unwrap();
-        let mut cfg = CfgExpr::Unconditional;
-        let mut doc = Doc::new();
-        let mut cxx_name = None;
-        let mut rust_name = None;
-        let attrs = attrs::parse(
-            cx,
-            field.attrs,
-            attrs::Parser {
-                cfg: Some(&mut cfg),
-                doc: Some(&mut doc),
-                cxx_name: Some(&mut cxx_name),
-                rust_name: Some(&mut rust_name),
-                ..Default::default()
-            },
-        );
-        let ty = match parse_type(&field.ty) {
-            Ok(ty) => ty,
-            Err(err) => {
-                cx.push(err);
-                continue;
-            }
-        };
-        let visibility = visibility_pub(&field.vis, ident.span());
-        let name = pair(Namespace::default(), &ident, cxx_name, rust_name);
-        let colon_token = field.colon_token.unwrap();
-        fields.push(Var {
-            cfg,
-            doc,
-            attrs,
-            visibility,
-            name,
-            colon_token,
-            ty,
-        });
-    }
-
-    let struct_token = item.struct_token;
-    let visibility = visibility_pub(&item.vis, struct_token.span);
-    let name = pair(namespace, &item.ident, cxx_name, rust_name);
-    let generics = Lifetimes {
-        lt_token: item.generics.lt_token,
-        lifetimes,
-        gt_token: item.generics.gt_token,
-    };
-    let brace_token = named_fields.brace_token;
-
-    Ok(Api::Struct(Struct {
-        cfg,
-        doc,
-        derives,
-        attrs,
-        visibility,
-        struct_token,
-        name,
-        generics,
-        brace_token,
-        fields,
-    }))
-}
-
-fn parse_enum(cx: &mut Errors, item: ItemEnum, namespace: &Namespace) -> Api {
-    let mut cfg = CfgExpr::Unconditional;
-    let mut doc = Doc::new();
-    let mut derives = Vec::new();
-    let mut repr = None;
-    let mut namespace = namespace.clone();
-    let mut cxx_name = None;
-    let mut rust_name = None;
-    let mut variants_from_header = None;
-    let attrs = attrs::parse(
-        cx,
-        item.attrs,
-        attrs::Parser {
-            cfg: Some(&mut cfg),
-            doc: Some(&mut doc),
-            derives: Some(&mut derives),
-            repr: Some(&mut repr),
-            namespace: Some(&mut namespace),
-            cxx_name: Some(&mut cxx_name),
-            rust_name: Some(&mut rust_name),
-            variants_from_header: Some(&mut variants_from_header),
-            ..Default::default()
-        },
-    );
-
-    if !item.generics.params.is_empty() {
-        let vis = &item.vis;
-        let enum_token = item.enum_token;
-        let ident = &item.ident;
-        let generics = &item.generics;
-        let span = quote!(#vis #enum_token #ident #generics);
-        cx.error(span, "enum with generic parameters is not supported");
-    } else if let Some(where_clause) = &item.generics.where_clause {
-        cx.error(where_clause, "enum with where-clause is not supported");
-    }
-
-    let mut variants = Vec::new();
-    let mut discriminants = DiscriminantSet::new(repr);
-    for variant in item.variants {
-        match parse_variant(cx, variant, &mut discriminants) {
-            Ok(variant) => variants.push(variant),
-            Err(err) => cx.push(err),
-        }
-    }
-
-    let enum_token = item.enum_token;
-    let visibility = visibility_pub(&item.vis, enum_token.span);
-    let brace_token = item.brace_token;
-
-    let explicit_repr = repr.is_some();
-    let mut repr = U8;
-    match discriminants.inferred_repr() {
-        Ok(inferred) => repr = inferred,
-        Err(err) => {
-            let span = quote_spanned!(brace_token.span=> #enum_token {});
-            cx.error(span, err);
-            variants.clear();
-        }
-    }
-
-    let name = pair(namespace, &item.ident, cxx_name, rust_name);
-    let repr_ident = Ident::new(repr.as_ref(), Span::call_site());
-    let repr_type = Type::Ident(NamedType::new(repr_ident));
-    let repr = EnumRepr::Native {
-        atom: repr,
-        repr_type,
-    };
-    let generics = Lifetimes {
-        lt_token: None,
-        lifetimes: Punctuated::new(),
-        gt_token: None,
-    };
-    let variants_from_header_attr = variants_from_header;
-    let variants_from_header = variants_from_header_attr.is_some();
-
-    Api::Enum(Enum {
-        cfg,
-        doc,
-        derives,
-        attrs,
-        visibility,
-        enum_token,
-        name,
-        generics,
-        brace_token,
-        variants,
-        variants_from_header,
-        variants_from_header_attr,
-        repr,
-        explicit_repr,
-    })
-}
-
-fn parse_variant(
-    cx: &mut Errors,
-    mut variant: RustVariant,
-    discriminants: &mut DiscriminantSet,
-) -> Result<Variant> {
-    let mut cfg = CfgExpr::Unconditional;
-    let mut doc = Doc::new();
-    let mut cxx_name = None;
-    let mut rust_name = None;
-    let attrs = attrs::parse(
-        cx,
-        mem::take(&mut variant.attrs),
-        attrs::Parser {
-            cfg: Some(&mut cfg),
-            doc: Some(&mut doc),
-            cxx_name: Some(&mut cxx_name),
-            rust_name: Some(&mut rust_name),
-            ..Default::default()
-        },
-    );
-
-    match variant.fields {
-        Fields::Unit => {}
-        _ => {
-            let msg = "enums with data are not supported yet";
-            return Err(Error::new_spanned(variant, msg));
-        }
-    }
-
-    let expr = variant.discriminant.as_ref().map(|(_, expr)| expr);
-    let try_discriminant = match &expr {
-        Some(lit) => discriminants.insert(lit),
-        None => discriminants.insert_next(),
-    };
-    let discriminant = match try_discriminant {
-        Ok(discriminant) => discriminant,
-        Err(err) => return Err(Error::new_spanned(variant, err)),
-    };
-
-    let name = pair(Namespace::ROOT, &variant.ident, cxx_name, rust_name);
-    let expr = variant.discriminant.map(|(_, expr)| expr);
-
-    Ok(Variant {
-        cfg,
-        doc,
-        attrs,
-        name,
-        discriminant,
-        expr,
-    })
-}
-
-fn parse_foreign_mod(
-    cx: &mut Errors,
-    foreign_mod: ItemForeignMod,
-    out: &mut Vec<Api>,
-    trusted: bool,
-    namespace: &Namespace,
-) {
-    let lang = match parse_lang(&foreign_mod.abi) {
-        Ok(lang) => lang,
-        Err(err) => return cx.push(err),
-    };
-
-    match lang {
-        Lang::Rust => {
-            if foreign_mod.unsafety.is_some() {
-                let unsafety = foreign_mod.unsafety;
-                let abi = &foreign_mod.abi;
-                let span = quote!(#unsafety #abi);
-                cx.error(span, "extern \"Rust\" block does not need to be unsafe");
-            }
-        }
-        Lang::Cxx => {}
-    }
-
-    let trusted = trusted || foreign_mod.unsafety.is_some();
-
-    let mut cfg = CfgExpr::Unconditional;
-    let mut namespace = namespace.clone();
-    let attrs = attrs::parse(
-        cx,
-        foreign_mod.attrs,
-        attrs::Parser {
-            cfg: Some(&mut cfg),
-            namespace: Some(&mut namespace),
-            ..Default::default()
-        },
-    );
-
-    let mut items = Vec::new();
-    for foreign in foreign_mod.items {
-        match foreign {
-            ForeignItem::Type(foreign) => {
-                let ety = parse_extern_type(cx, foreign, lang, trusted, &cfg, &namespace, &attrs);
-                items.push(ety);
-            }
-            ForeignItem::Fn(foreign) => {
-                match parse_extern_fn(cx, foreign, lang, trusted, &cfg, &namespace, &attrs) {
-                    Ok(efn) => items.push(efn),
-                    Err(err) => cx.push(err),
-                }
-            }
-            ForeignItem::Macro(foreign) if foreign.mac.path.is_ident("include") => {
-                match foreign.mac.parse_body_with(parse_include) {
-                    Ok(mut include) => {
-                        include.cfg = cfg.clone();
-                        items.push(Api::Include(include));
-                    }
-                    Err(err) => cx.push(err),
-                }
-            }
-            ForeignItem::Verbatim(tokens) => {
-                match parse_extern_verbatim(cx, tokens, lang, trusted, &cfg, &namespace, &attrs) {
-                    Ok(api) => items.push(api),
-                    Err(err) => cx.push(err),
-                }
-            }
-            _ => cx.error(foreign, "unsupported foreign item"),
-        }
-    }
-
-    if !trusted
-        && items.iter().any(|api| match api {
-            Api::CxxFunction(efn) => efn.unsafety.is_none(),
-            _ => false,
-        })
-    {
-        cx.error(
-            foreign_mod.abi,
-            "block must be declared `unsafe extern \"C++\"` if it contains any safe-to-call C++ functions",
-        );
-    }
-
-    let mut types = items.iter().filter_map(|item| match item {
-        Api::CxxType(ety) | Api::RustType(ety) => Some(&ety.name),
-        Api::TypeAlias(alias) => Some(&alias.name),
-        _ => None,
-    });
-    if let (Some(single_type), None) = (types.next(), types.next()) {
-        let single_type = single_type.clone();
-        for item in &mut items {
-            if let Api::CxxFunction(efn) | Api::RustFunction(efn) = item {
-                if let Some(receiver) = &mut efn.receiver {
-                    if receiver.ty.rust == "Self" {
-                        receiver.ty.rust = single_type.rust.clone();
-                    }
-                }
-            }
-        }
-    }
-
-    out.extend(items);
-}
-
-fn parse_lang(abi: &Abi) -> Result<Lang> {
-    let name = match &abi.name {
-        Some(name) => name,
-        None => {
-            return Err(Error::new_spanned(
-                abi,
-                "ABI name is required, extern \"C++\" or extern \"Rust\"",
-            ));
-        }
-    };
-
-    match name.value().as_str() {
-        "C++" => Ok(Lang::Cxx),
-        "Rust" => Ok(Lang::Rust),
-        _ => Err(Error::new_spanned(
-            abi,
-            "unrecognized ABI, requires either \"C++\" or \"Rust\"",
-        )),
-    }
-}
-
-fn parse_extern_type(
-    cx: &mut Errors,
-    foreign_type: ForeignItemType,
-    lang: Lang,
-    trusted: bool,
-    extern_block_cfg: &CfgExpr,
-    namespace: &Namespace,
-    attrs: &OtherAttrs,
-) -> Api {
-    let mut cfg = extern_block_cfg.clone();
-    let mut doc = Doc::new();
-    let mut derives = Vec::new();
-    let mut namespace = namespace.clone();
-    let mut cxx_name = None;
-    let mut rust_name = None;
-    let mut attrs = attrs.clone();
-    attrs.extend(attrs::parse(
-        cx,
-        foreign_type.attrs,
-        attrs::Parser {
-            cfg: Some(&mut cfg),
-            doc: Some(&mut doc),
-            derives: Some(&mut derives),
-            namespace: Some(&mut namespace),
-            cxx_name: Some(&mut cxx_name),
-            rust_name: Some(&mut rust_name),
-            ..Default::default()
-        },
-    ));
-
-    let type_token = foreign_type.type_token;
-    let visibility = visibility_pub(&foreign_type.vis, type_token.span);
-    let name = pair(namespace, &foreign_type.ident, cxx_name, rust_name);
-    let generics = extern_type_lifetimes(cx, foreign_type.generics);
-    let colon_token = None;
-    let bounds = Vec::new();
-    let semi_token = foreign_type.semi_token;
-
-    (match lang {
-        Lang::Cxx => Api::CxxType,
-        Lang::Rust => Api::RustType,
-    })(ExternType {
-        cfg,
-        lang,
-        doc,
-        derives,
-        attrs,
-        visibility,
-        type_token,
-        name,
-        generics,
-        colon_token,
-        bounds,
-        semi_token,
-        trusted,
-    })
-}
-
-fn parse_extern_fn(
-    cx: &mut Errors,
-    mut foreign_fn: ForeignItemFn,
-    lang: Lang,
-    trusted: bool,
-    extern_block_cfg: &CfgExpr,
-    namespace: &Namespace,
-    attrs: &OtherAttrs,
-) -> Result<Api> {
-    let mut cfg = extern_block_cfg.clone();
-    let mut doc = Doc::new();
-    let mut namespace = namespace.clone();
-    let mut cxx_name = None;
-    let mut rust_name = None;
-    let mut attrs = attrs.clone();
-    attrs.extend(attrs::parse(
-        cx,
-        mem::take(&mut foreign_fn.attrs),
-        attrs::Parser {
-            cfg: Some(&mut cfg),
-            doc: Some(&mut doc),
-            namespace: Some(&mut namespace),
-            cxx_name: Some(&mut cxx_name),
-            rust_name: Some(&mut rust_name),
-            ..Default::default()
-        },
-    ));
-
-    let generics = &foreign_fn.sig.generics;
-    if generics.where_clause.is_some()
-        || generics.params.iter().any(|param| match param {
-            GenericParam::Lifetime(lifetime) => !lifetime.bounds.is_empty(),
-            GenericParam::Type(_) | GenericParam::Const(_) => true,
-        })
-    {
-        return Err(Error::new_spanned(
-            foreign_fn,
-            "extern function with generic parameters is not supported yet",
-        ));
-    }
-
-    if let Some(variadic) = &foreign_fn.sig.variadic {
-        return Err(Error::new_spanned(
-            variadic,
-            "variadic function is not supported yet",
-        ));
-    }
-
-    if foreign_fn.sig.asyncness.is_some() && !cfg!(feature = "experimental-async-fn") {
-        return Err(Error::new_spanned(
-            foreign_fn,
-            "async function is not directly supported yet, but see https://cxx.rs/async.html \
-            for a working approach, and https://github.com/pcwalton/cxx-async for some helpers; \
-            eventually what you wrote will work but it isn't integrated into the cxx::bridge \
-            macro yet",
-        ));
-    }
-
-    if foreign_fn.sig.constness.is_some() {
-        return Err(Error::new_spanned(
-            foreign_fn,
-            "const extern function is not supported",
-        ));
-    }
-
-    if let Some(abi) = &foreign_fn.sig.abi {
-        return Err(Error::new_spanned(
-            abi,
-            "explicit ABI on extern function is not supported",
-        ));
-    }
-
-    let mut receiver = None;
-    let mut args = Punctuated::new();
-    for arg in foreign_fn.sig.inputs.pairs() {
-        let (arg, comma) = arg.into_tuple();
-        match arg {
-            FnArg::Receiver(arg) => {
-                if let Some((ampersand, lifetime)) = &arg.reference {
-                    receiver = Some(Receiver {
-                        pinned: false,
-                        ampersand: *ampersand,
-                        lifetime: lifetime.clone(),
-                        mutable: arg.mutability.is_some(),
-                        var: arg.self_token,
-                        colon_token: Token![:](arg.self_token.span),
-                        ty: NamedType::new(Ident::new("Self", arg.self_token.span)),
-                        shorthand: true,
-                        pin_tokens: None,
-                        mutability: arg.mutability,
-                    });
-                    continue;
-                }
-                if let Some(colon_token) = arg.colon_token {
-                    let ty = parse_type(&arg.ty)?;
-                    if let Type::Ref(reference) = ty {
-                        if let Type::Ident(ident) = reference.inner {
-                            receiver = Some(Receiver {
-                                pinned: reference.pinned,
-                                ampersand: reference.ampersand,
-                                lifetime: reference.lifetime,
-                                mutable: reference.mutable,
-                                var: Token![self](ident.rust.span()),
-                                colon_token,
-                                ty: ident,
-                                shorthand: false,
-                                pin_tokens: reference.pin_tokens,
-                                mutability: reference.mutability,
-                            });
-                            continue;
-                        }
-                    }
-                }
-                return Err(Error::new_spanned(arg, "unsupported method receiver"));
-            }
-            FnArg::Typed(arg) => {
-                let ident = match arg.pat.as_ref() {
-                    Pat::Ident(pat) => pat.ident.clone(),
-                    Pat::Wild(pat) => {
-                        Ident::new(&format!("arg{}", args.len()), pat.underscore_token.span)
-                    }
-                    _ => return Err(Error::new_spanned(arg, "unsupported signature")),
-                };
-                let ty = parse_type(&arg.ty)?;
-                let cfg = CfgExpr::Unconditional;
-                let doc = Doc::new();
-                let attrs = OtherAttrs::none();
-                let visibility = Token![pub](ident.span());
-                let name = pair(Namespace::default(), &ident, None, None);
-                let colon_token = arg.colon_token;
-                args.push_value(Var {
-                    cfg,
-                    doc,
-                    attrs,
-                    visibility,
-                    name,
-                    colon_token,
-                    ty,
-                });
-                if let Some(comma) = comma {
-                    args.push_punct(*comma);
-                }
-            }
-        }
-    }
-
-    let mut throws_tokens = None;
-    let ret = parse_return_type(&foreign_fn.sig.output, &mut throws_tokens)?;
-    let throws = throws_tokens.is_some();
-    let asyncness = foreign_fn.sig.asyncness;
-    let unsafety = foreign_fn.sig.unsafety;
-    let fn_token = foreign_fn.sig.fn_token;
-    let inherited_span = unsafety.map_or(fn_token.span, |unsafety| unsafety.span);
-    let visibility = visibility_pub(&foreign_fn.vis, inherited_span);
-    let name = pair(namespace, &foreign_fn.sig.ident, cxx_name, rust_name);
-    let generics = generics.clone();
-    let paren_token = foreign_fn.sig.paren_token;
-    let semi_token = foreign_fn.semi_token;
-
-    Ok(match lang {
-        Lang::Cxx => Api::CxxFunction,
-        Lang::Rust => Api::RustFunction,
-    }(ExternFn {
-        cfg,
-        lang,
-        doc,
-        attrs,
-        visibility,
-        name,
-        sig: Signature {
-            asyncness,
-            unsafety,
-            fn_token,
-            generics,
-            receiver,
-            args,
-            ret,
-            throws,
-            paren_token,
-            throws_tokens,
-        },
-        semi_token,
-        trusted,
-    }))
-}
-
-fn parse_extern_verbatim(
-    cx: &mut Errors,
-    tokens: TokenStream,
-    lang: Lang,
-    trusted: bool,
-    extern_block_cfg: &CfgExpr,
-    namespace: &Namespace,
-    attrs: &OtherAttrs,
-) -> Result<Api> {
-    |input: ParseStream| -> Result<Api> {
-        let unparsed_attrs = input.call(Attribute::parse_outer)?;
-        let visibility: Visibility = input.parse()?;
-        if input.peek(Token![type]) {
-            parse_extern_verbatim_type(
-                cx,
-                unparsed_attrs,
-                visibility,
-                input,
-                lang,
-                trusted,
-                extern_block_cfg,
-                namespace,
-                attrs,
-            )
-        } else if input.peek(Token![fn]) {
-            parse_extern_verbatim_fn(input)
-        } else {
-            let span = input.cursor().token_stream();
-            Err(Error::new_spanned(
-                span,
-                "unsupported foreign item, expected `type` or `fn`",
-            ))
-        }
-    }
-    .parse2(tokens)
-}
-
-fn parse_extern_verbatim_type(
-    cx: &mut Errors,
-    unparsed_attrs: Vec<Attribute>,
-    visibility: Visibility,
-    input: ParseStream,
-    lang: Lang,
-    trusted: bool,
-    extern_block_cfg: &CfgExpr,
-    namespace: &Namespace,
-    attrs: &OtherAttrs,
-) -> Result<Api> {
-    let type_token: Token![type] = input.parse()?;
-    let ident: Ident = input.parse()?;
-    let generics: Generics = input.parse()?;
-    let lifetimes = extern_type_lifetimes(cx, generics);
-    let lookahead = input.lookahead1();
-    if lookahead.peek(Token![=]) {
-        // type Alias = crate::path::to::Type;
-        parse_type_alias(
-            cx,
-            unparsed_attrs,
-            visibility,
-            type_token,
-            ident,
-            lifetimes,
-            input,
-            lang,
-            extern_block_cfg,
-            namespace,
-            attrs,
-        )
-    } else if lookahead.peek(Token![:]) {
-        // type Opaque: Bound2 + Bound2;
-        parse_extern_type_bounded(
-            cx,
-            unparsed_attrs,
-            visibility,
-            type_token,
-            ident,
-            lifetimes,
-            input,
-            lang,
-            trusted,
-            extern_block_cfg,
-            namespace,
-            attrs,
-        )
-    } else {
-        Err(lookahead.error())
-    }
-}
-
-fn extern_type_lifetimes(cx: &mut Errors, generics: Generics) -> Lifetimes {
-    let mut lifetimes = Punctuated::new();
-    let mut has_unsupported_generic_param = false;
-    for pair in generics.params.into_pairs() {
-        let (param, punct) = pair.into_tuple();
-        match param {
-            GenericParam::Lifetime(param) => {
-                if !param.bounds.is_empty() && !has_unsupported_generic_param {
-                    let msg = "lifetime parameter with bounds is not supported yet";
-                    cx.error(&param, msg);
-                    has_unsupported_generic_param = true;
-                }
-                lifetimes.push_value(param.lifetime);
-                if let Some(punct) = punct {
-                    lifetimes.push_punct(punct);
-                }
-            }
-            GenericParam::Type(param) => {
-                if !has_unsupported_generic_param {
-                    let msg = "extern type with generic type parameter is not supported yet";
-                    cx.error(&param, msg);
-                    has_unsupported_generic_param = true;
-                }
-            }
-            GenericParam::Const(param) => {
-                if !has_unsupported_generic_param {
-                    let msg = "extern type with const generic parameter is not supported yet";
-                    cx.error(&param, msg);
-                    has_unsupported_generic_param = true;
-                }
-            }
-        }
-    }
-    Lifetimes {
-        lt_token: generics.lt_token,
-        lifetimes,
-        gt_token: generics.gt_token,
-    }
-}
-
-fn parse_extern_verbatim_fn(input: ParseStream) -> Result<Api> {
-    input.parse::<RustSignature>()?;
-    input.parse::<Token![;]>()?;
-    unreachable!()
-}
-
-fn parse_type_alias(
-    cx: &mut Errors,
-    unparsed_attrs: Vec<Attribute>,
-    visibility: Visibility,
-    type_token: Token![type],
-    ident: Ident,
-    generics: Lifetimes,
-    input: ParseStream,
-    lang: Lang,
-    extern_block_cfg: &CfgExpr,
-    namespace: &Namespace,
-    attrs: &OtherAttrs,
-) -> Result<Api> {
-    let eq_token: Token![=] = input.parse()?;
-    let ty: RustType = input.parse()?;
-    let semi_token: Token![;] = input.parse()?;
-
-    let mut cfg = extern_block_cfg.clone();
-    let mut doc = Doc::new();
-    let mut derives = Vec::new();
-    let mut namespace = namespace.clone();
-    let mut cxx_name = None;
-    let mut rust_name = None;
-    let mut attrs = attrs.clone();
-    attrs.extend(attrs::parse(
-        cx,
-        unparsed_attrs,
-        attrs::Parser {
-            cfg: Some(&mut cfg),
-            doc: Some(&mut doc),
-            derives: Some(&mut derives),
-            namespace: Some(&mut namespace),
-            cxx_name: Some(&mut cxx_name),
-            rust_name: Some(&mut rust_name),
-            ..Default::default()
-        },
-    ));
-
-    if lang == Lang::Rust {
-        let span = quote!(#type_token #semi_token);
-        let msg = "type alias in extern \"Rust\" block is not supported";
-        return Err(Error::new_spanned(span, msg));
-    }
-
-    let visibility = visibility_pub(&visibility, type_token.span);
-    let name = pair(namespace, &ident, cxx_name, rust_name);
-
-    Ok(Api::TypeAlias(TypeAlias {
-        cfg,
-        doc,
-        derives,
-        attrs,
-        visibility,
-        type_token,
-        name,
-        generics,
-        eq_token,
-        ty,
-        semi_token,
-    }))
-}
-
-fn parse_extern_type_bounded(
-    cx: &mut Errors,
-    unparsed_attrs: Vec<Attribute>,
-    visibility: Visibility,
-    type_token: Token![type],
-    ident: Ident,
-    generics: Lifetimes,
-    input: ParseStream,
-    lang: Lang,
-    trusted: bool,
-    extern_block_cfg: &CfgExpr,
-    namespace: &Namespace,
-    attrs: &OtherAttrs,
-) -> Result<Api> {
-    let mut bounds = Vec::new();
-    let colon_token: Option<Token![:]> = input.parse()?;
-    if colon_token.is_some() {
-        loop {
-            match input.parse()? {
-                TypeParamBound::Trait(TraitBound {
-                    paren_token: None,
-                    modifier: TraitBoundModifier::None,
-                    lifetimes: None,
-                    path,
-                }) if if let Some(derive) = path.get_ident().and_then(Derive::from) {
-                    bounds.push(derive);
-                    true
-                } else {
-                    false
-                } => {}
-                bound => cx.error(bound, "unsupported trait"),
-            }
-
-            let lookahead = input.lookahead1();
-            if lookahead.peek(Token![+]) {
-                input.parse::<Token![+]>()?;
-            } else if lookahead.peek(Token![;]) {
-                break;
-            } else {
-                return Err(lookahead.error());
-            }
-        }
-    }
-    let semi_token: Token![;] = input.parse()?;
-
-    let mut cfg = extern_block_cfg.clone();
-    let mut doc = Doc::new();
-    let mut derives = Vec::new();
-    let mut namespace = namespace.clone();
-    let mut cxx_name = None;
-    let mut rust_name = None;
-    let mut attrs = attrs.clone();
-    attrs.extend(attrs::parse(
-        cx,
-        unparsed_attrs,
-        attrs::Parser {
-            cfg: Some(&mut cfg),
-            doc: Some(&mut doc),
-            derives: Some(&mut derives),
-            namespace: Some(&mut namespace),
-            cxx_name: Some(&mut cxx_name),
-            rust_name: Some(&mut rust_name),
-            ..Default::default()
-        },
-    ));
-
-    let visibility = visibility_pub(&visibility, type_token.span);
-    let name = pair(namespace, &ident, cxx_name, rust_name);
-
-    Ok(match lang {
-        Lang::Cxx => Api::CxxType,
-        Lang::Rust => Api::RustType,
-    }(ExternType {
-        cfg,
-        lang,
-        doc,
-        derives,
-        attrs,
-        visibility,
-        type_token,
-        name,
-        generics,
-        colon_token,
-        bounds,
-        semi_token,
-        trusted,
-    }))
-}
-
-fn parse_impl(cx: &mut Errors, imp: ItemImpl) -> Result<Api> {
-    let impl_token = imp.impl_token;
-
-    let mut cfg = CfgExpr::Unconditional;
-    attrs::parse(
-        cx,
-        imp.attrs,
-        attrs::Parser {
-            cfg: Some(&mut cfg),
-            ..Default::default()
-        },
-    );
-
-    if !imp.items.is_empty() {
-        let mut span = Group::new(Delimiter::Brace, TokenStream::new());
-        span.set_span(imp.brace_token.span.join());
-        return Err(Error::new_spanned(span, "expected an empty impl block"));
-    }
-
-    if let Some((bang, path, for_token)) = &imp.trait_ {
-        let self_ty = &imp.self_ty;
-        let span = quote!(#bang #path #for_token #self_ty);
-        return Err(Error::new_spanned(
-            span,
-            "unexpected impl, expected something like `impl UniquePtr<T> {}`",
-        ));
-    }
-
-    if let Some(where_clause) = imp.generics.where_clause {
-        return Err(Error::new_spanned(
-            where_clause,
-            "where-clause on an impl is not supported yet",
-        ));
-    }
-    let mut impl_generics = Lifetimes {
-        lt_token: imp.generics.lt_token,
-        lifetimes: Punctuated::new(),
-        gt_token: imp.generics.gt_token,
-    };
-    for pair in imp.generics.params.into_pairs() {
-        let (param, punct) = pair.into_tuple();
-        match param {
-            GenericParam::Lifetime(def) if def.bounds.is_empty() => {
-                impl_generics.lifetimes.push_value(def.lifetime);
-                if let Some(punct) = punct {
-                    impl_generics.lifetimes.push_punct(punct);
-                }
-            }
-            _ => {
-                let span = quote!(#impl_token #impl_generics);
-                return Err(Error::new_spanned(
-                    span,
-                    "generic parameter on an impl is not supported yet",
-                ));
-            }
-        }
-    }
-
-    let mut negative_token = None;
-    let mut self_ty = *imp.self_ty;
-    if let RustType::Verbatim(ty) = &self_ty {
-        let mut iter = ty.clone().into_iter();
-        if let Some(TokenTree::Punct(punct)) = iter.next() {
-            if punct.as_char() == '!' {
-                let ty = iter.collect::<TokenStream>();
-                if !ty.is_empty() {
-                    negative_token = Some(Token![!](punct.span()));
-                    self_ty = syn::parse2(ty)?;
-                }
-            }
-        }
-    }
-
-    let ty = parse_type(&self_ty)?;
-    let ty_generics = match &ty {
-        Type::RustBox(ty)
-        | Type::RustVec(ty)
-        | Type::UniquePtr(ty)
-        | Type::SharedPtr(ty)
-        | Type::WeakPtr(ty)
-        | Type::CxxVector(ty) => match &ty.inner {
-            Type::Ident(ident) => ident.generics.clone(),
-            _ => Lifetimes::default(),
-        },
-        Type::Ident(_)
-        | Type::Ref(_)
-        | Type::Ptr(_)
-        | Type::Str(_)
-        | Type::Fn(_)
-        | Type::Void(_)
-        | Type::SliceRef(_)
-        | Type::Array(_) => Lifetimes::default(),
-    };
-
-    let negative = negative_token.is_some();
-    let brace_token = imp.brace_token;
-
-    Ok(Api::Impl(Impl {
-        cfg,
-        impl_token,
-        impl_generics,
-        negative,
-        ty,
-        ty_generics,
-        brace_token,
-        negative_token,
-    }))
-}
-
-fn parse_include(input: ParseStream) -> Result<Include> {
-    if input.peek(LitStr) {
-        let lit: LitStr = input.parse()?;
-        let span = lit.span();
-        return Ok(Include {
-            cfg: CfgExpr::Unconditional,
-            path: lit.value(),
-            kind: IncludeKind::Quoted,
-            begin_span: span,
-            end_span: span,
-        });
-    }
-
-    if input.peek(Token![<]) {
-        let mut path = String::new();
-
-        let langle: Token![<] = input.parse()?;
-        while !input.is_empty() && !input.peek(Token![>]) {
-            let token: TokenTree = input.parse()?;
-            match token {
-                TokenTree::Ident(token) => path += &token.to_string(),
-                TokenTree::Literal(token)
-                    if token
-                        .to_string()
-                        .starts_with(|ch: char| ch.is_ascii_digit()) =>
-                {
-                    path += &token.to_string();
-                }
-                TokenTree::Punct(token) => path.push(token.as_char()),
-                _ => return Err(Error::new(token.span(), "unexpected token in include path")),
-            }
-        }
-        let rangle: Token![>] = input.parse()?;
-
-        return Ok(Include {
-            cfg: CfgExpr::Unconditional,
-            path,
-            kind: IncludeKind::Bracketed,
-            begin_span: langle.span,
-            end_span: rangle.span,
-        });
-    }
-
-    Err(input.error("expected \"quoted/path/to\" or <bracketed/path/to>"))
-}
-
-fn parse_type(ty: &RustType) -> Result<Type> {
-    match ty {
-        RustType::Reference(ty) => parse_type_reference(ty),
-        RustType::Ptr(ty) => parse_type_ptr(ty),
-        RustType::Path(ty) => parse_type_path(ty),
-        RustType::Array(ty) => parse_type_array(ty),
-        RustType::BareFn(ty) => parse_type_fn(ty),
-        RustType::Tuple(ty) if ty.elems.is_empty() => Ok(Type::Void(ty.paren_token.span.join())),
-        _ => Err(Error::new_spanned(ty, "unsupported type")),
-    }
-}
-
-fn parse_type_reference(ty: &TypeReference) -> Result<Type> {
-    let ampersand = ty.and_token;
-    let lifetime = ty.lifetime.clone();
-    let mutable = ty.mutability.is_some();
-    let mutability = ty.mutability;
-
-    if let RustType::Slice(slice) = ty.elem.as_ref() {
-        let inner = parse_type(&slice.elem)?;
-        let bracket = slice.bracket_token;
-        return Ok(Type::SliceRef(Box::new(SliceRef {
-            ampersand,
-            lifetime,
-            mutable,
-            bracket,
-            inner,
-            mutability,
-        })));
-    }
-
-    let inner = parse_type(&ty.elem)?;
-    let pinned = false;
-    let pin_tokens = None;
-
-    Ok(match &inner {
-        Type::Ident(ident) if ident.rust == "str" => {
-            if ty.mutability.is_some() {
-                return Err(Error::new_spanned(ty, "unsupported type"));
-            } else {
-                Type::Str
-            }
-        }
-        _ => Type::Ref,
-    }(Box::new(Ref {
-        pinned,
-        ampersand,
-        lifetime,
-        mutable,
-        inner,
-        pin_tokens,
-        mutability,
-    })))
-}
-
-fn parse_type_ptr(ty: &TypePtr) -> Result<Type> {
-    let star = ty.star_token;
-    let mutable = ty.mutability.is_some();
-    let constness = ty.const_token;
-    let mutability = ty.mutability;
-
-    let inner = parse_type(&ty.elem)?;
-
-    Ok(Type::Ptr(Box::new(Ptr {
-        star,
-        mutable,
-        inner,
-        mutability,
-        constness,
-    })))
-}
-
-fn parse_type_path(ty: &TypePath) -> Result<Type> {
-    let path = &ty.path;
-    if ty.qself.is_none() && path.leading_colon.is_none() && path.segments.len() == 1 {
-        let segment = &path.segments[0];
-        let ident = segment.ident.clone();
-        match &segment.arguments {
-            PathArguments::None => return Ok(Type::Ident(NamedType::new(ident))),
-            PathArguments::AngleBracketed(generic) => {
-                if ident == "UniquePtr" && generic.args.len() == 1 {
-                    if let GenericArgument::Type(arg) = &generic.args[0] {
-                        let inner = parse_type(arg)?;
-                        return Ok(Type::UniquePtr(Box::new(Ty1 {
-                            name: ident,
-                            langle: generic.lt_token,
-                            inner,
-                            rangle: generic.gt_token,
-                        })));
-                    }
-                } else if ident == "SharedPtr" && generic.args.len() == 1 {
-                    if let GenericArgument::Type(arg) = &generic.args[0] {
-                        let inner = parse_type(arg)?;
-                        return Ok(Type::SharedPtr(Box::new(Ty1 {
-                            name: ident,
-                            langle: generic.lt_token,
-                            inner,
-                            rangle: generic.gt_token,
-                        })));
-                    }
-                } else if ident == "WeakPtr" && generic.args.len() == 1 {
-                    if let GenericArgument::Type(arg) = &generic.args[0] {
-                        let inner = parse_type(arg)?;
-                        return Ok(Type::WeakPtr(Box::new(Ty1 {
-                            name: ident,
-                            langle: generic.lt_token,
-                            inner,
-                            rangle: generic.gt_token,
-                        })));
-                    }
-                } else if ident == "CxxVector" && generic.args.len() == 1 {
-                    if let GenericArgument::Type(arg) = &generic.args[0] {
-                        let inner = parse_type(arg)?;
-                        return Ok(Type::CxxVector(Box::new(Ty1 {
-                            name: ident,
-                            langle: generic.lt_token,
-                            inner,
-                            rangle: generic.gt_token,
-                        })));
-                    }
-                } else if ident == "Box" && generic.args.len() == 1 {
-                    if let GenericArgument::Type(arg) = &generic.args[0] {
-                        let inner = parse_type(arg)?;
-                        return Ok(Type::RustBox(Box::new(Ty1 {
-                            name: ident,
-                            langle: generic.lt_token,
-                            inner,
-                            rangle: generic.gt_token,
-                        })));
-                    }
-                } else if ident == "Vec" && generic.args.len() == 1 {
-                    if let GenericArgument::Type(arg) = &generic.args[0] {
-                        let inner = parse_type(arg)?;
-                        return Ok(Type::RustVec(Box::new(Ty1 {
-                            name: ident,
-                            langle: generic.lt_token,
-                            inner,
-                            rangle: generic.gt_token,
-                        })));
-                    }
-                } else if ident == "Pin" && generic.args.len() == 1 {
-                    if let GenericArgument::Type(arg) = &generic.args[0] {
-                        let inner = parse_type(arg)?;
-                        let pin_token = kw::Pin(ident.span());
-                        if let Type::Ref(mut inner) = inner {
-                            inner.pinned = true;
-                            inner.pin_tokens =
-                                Some((pin_token, generic.lt_token, generic.gt_token));
-                            return Ok(Type::Ref(inner));
-                        }
-                    }
-                } else {
-                    let mut lifetimes = Punctuated::new();
-                    let mut only_lifetimes = true;
-                    for pair in generic.args.pairs() {
-                        let (param, punct) = pair.into_tuple();
-                        if let GenericArgument::Lifetime(param) = param {
-                            lifetimes.push_value(param.clone());
-                            if let Some(punct) = punct {
-                                lifetimes.push_punct(*punct);
-                            }
-                        } else {
-                            only_lifetimes = false;
-                            break;
-                        }
-                    }
-                    if only_lifetimes {
-                        return Ok(Type::Ident(NamedType {
-                            rust: ident,
-                            generics: Lifetimes {
-                                lt_token: Some(generic.lt_token),
-                                lifetimes,
-                                gt_token: Some(generic.gt_token),
-                            },
-                        }));
-                    }
-                }
-            }
-            PathArguments::Parenthesized(_) => {}
-        }
-    }
-
-    Err(Error::new_spanned(ty, "unsupported type"))
-}
-
-fn parse_type_array(ty: &TypeArray) -> Result<Type> {
-    let inner = parse_type(&ty.elem)?;
-
-    let len_expr = if let Expr::Lit(lit) = &ty.len {
-        lit
-    } else {
-        let msg = "unsupported expression, array length must be an integer literal";
-        return Err(Error::new_spanned(&ty.len, msg));
-    };
-
-    let len_token = if let Lit::Int(int) = &len_expr.lit {
-        int.clone()
-    } else {
-        let msg = "array length must be an integer literal";
-        return Err(Error::new_spanned(len_expr, msg));
-    };
-
-    let len = len_token.base10_parse::<usize>()?;
-    if len == 0 {
-        let msg = "array with zero size is not supported";
-        return Err(Error::new_spanned(ty, msg));
-    }
-
-    let bracket = ty.bracket_token;
-    let semi_token = ty.semi_token;
-
-    Ok(Type::Array(Box::new(Array {
-        bracket,
-        inner,
-        semi_token,
-        len,
-        len_token,
-    })))
-}
-
-fn parse_type_fn(ty: &TypeBareFn) -> Result<Type> {
-    if ty.lifetimes.is_some() {
-        return Err(Error::new_spanned(
-            ty,
-            "function pointer with lifetime parameters is not supported yet",
-        ));
-    }
-
-    if ty.variadic.is_some() {
-        return Err(Error::new_spanned(
-            ty,
-            "variadic function pointer is not supported yet",
-        ));
-    }
-
-    let args = ty
-        .inputs
-        .iter()
-        .enumerate()
-        .map(|(i, arg)| {
-            let (ident, colon_token) = match &arg.name {
-                Some((ident, colon_token)) => (ident.clone(), *colon_token),
-                None => {
-                    let fn_span = ty.paren_token.span.join();
-                    let ident = format_ident!("arg{}", i, span = fn_span);
-                    let colon_token = Token![:](fn_span);
-                    (ident, colon_token)
-                }
-            };
-            let ty = parse_type(&arg.ty)?;
-            let cfg = CfgExpr::Unconditional;
-            let doc = Doc::new();
-            let attrs = OtherAttrs::none();
-            let visibility = Token![pub](ident.span());
-            let name = pair(Namespace::default(), &ident, None, None);
-            Ok(Var {
-                cfg,
-                doc,
-                attrs,
-                visibility,
-                name,
-                colon_token,
-                ty,
-            })
-        })
-        .collect::<Result<_>>()?;
-
-    let mut throws_tokens = None;
-    let ret = parse_return_type(&ty.output, &mut throws_tokens)?;
-    let throws = throws_tokens.is_some();
-
-    let asyncness = None;
-    let unsafety = ty.unsafety;
-    let fn_token = ty.fn_token;
-    let generics = Generics::default();
-    let receiver = None;
-    let paren_token = ty.paren_token;
-
-    Ok(Type::Fn(Box::new(Signature {
-        asyncness,
-        unsafety,
-        fn_token,
-        generics,
-        receiver,
-        args,
-        ret,
-        throws,
-        paren_token,
-        throws_tokens,
-    })))
-}
-
-fn parse_return_type(
-    ty: &ReturnType,
-    throws_tokens: &mut Option<(kw::Result, Token![<], Token![>])>,
-) -> Result<Option<Type>> {
-    let mut ret = match ty {
-        ReturnType::Default => return Ok(None),
-        ReturnType::Type(_, ret) => ret.as_ref(),
-    };
-
-    if let RustType::Path(ty) = ret {
-        let path = &ty.path;
-        if ty.qself.is_none() && path.leading_colon.is_none() && path.segments.len() == 1 {
-            let segment = &path.segments[0];
-            let ident = segment.ident.clone();
-            if let PathArguments::AngleBracketed(generic) = &segment.arguments {
-                if ident == "Result" && generic.args.len() == 1 {
-                    if let GenericArgument::Type(arg) = &generic.args[0] {
-                        ret = arg;
-                        *throws_tokens =
-                            Some((kw::Result(ident.span()), generic.lt_token, generic.gt_token));
-                    }
-                }
-            }
-        }
-    }
-
-    match parse_type(ret)? {
-        Type::Void(_) => Ok(None),
-        ty => Ok(Some(ty)),
-    }
-}
-
-fn visibility_pub(vis: &Visibility, inherited: Span) -> Token![pub] {
-    Token![pub](match vis {
-        Visibility::Public(vis) => vis.span,
-        Visibility::Restricted(vis) => vis.pub_token.span,
-        Visibility::Inherited => inherited,
-    })
-}
-
-fn pair(
-    namespace: Namespace,
-    default: &Ident,
-    cxx: Option<ForeignName>,
-    rust: Option<Ident>,
-) -> Pair {
-    Pair {
-        namespace,
-        cxx: cxx
-            .unwrap_or_else(|| ForeignName::parse(&default.to_string(), default.span()).unwrap()),
-        rust: rust.unwrap_or_else(|| default.clone()),
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/pod.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/pod.rs
deleted file mode 100644
index 506e53c..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/pod.rs
+++ /dev/null
@@ -1,36 +0,0 @@
-use crate::syntax::atom::Atom::{self, *};
-use crate::syntax::{derive, Trait, Type, Types};
-
-impl<'a> Types<'a> {
-    pub(crate) fn is_guaranteed_pod(&self, ty: &Type) -> bool {
-        match ty {
-            Type::Ident(ident) => {
-                let ident = &ident.rust;
-                if let Some(atom) = Atom::from(ident) {
-                    match atom {
-                        Bool | Char | U8 | U16 | U32 | U64 | Usize | I8 | I16 | I32 | I64
-                        | Isize | F32 | F64 => true,
-                        CxxString | RustString => false,
-                    }
-                } else if let Some(strct) = self.structs.get(ident) {
-                    derive::contains(&strct.derives, Trait::Copy)
-                        || strct
-                            .fields
-                            .iter()
-                            .all(|field| self.is_guaranteed_pod(&field.ty))
-                } else {
-                    self.enums.contains_key(ident)
-                }
-            }
-            Type::RustBox(_)
-            | Type::RustVec(_)
-            | Type::UniquePtr(_)
-            | Type::SharedPtr(_)
-            | Type::WeakPtr(_)
-            | Type::CxxVector(_)
-            | Type::Void(_) => false,
-            Type::Ref(_) | Type::Str(_) | Type::Fn(_) | Type::SliceRef(_) | Type::Ptr(_) => true,
-            Type::Array(array) => self.is_guaranteed_pod(&array.inner),
-        }
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/qualified.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/qualified.rs
deleted file mode 100644
index 07c9908c..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/qualified.rs
+++ /dev/null
@@ -1,63 +0,0 @@
-use syn::ext::IdentExt;
-use syn::parse::{Error, ParseStream, Result};
-use syn::{Ident, LitStr, Token};
-
-pub(crate) struct QualifiedName {
-    pub segments: Vec<Ident>,
-}
-
-impl QualifiedName {
-    pub(crate) fn parse_quoted(lit: &LitStr) -> Result<Self> {
-        if lit.value().is_empty() {
-            let segments = Vec::new();
-            Ok(QualifiedName { segments })
-        } else {
-            lit.parse_with(|input: ParseStream| {
-                let allow_raw = false;
-                parse_unquoted(input, allow_raw)
-            })
-        }
-    }
-
-    pub(crate) fn parse_unquoted(input: ParseStream) -> Result<Self> {
-        let allow_raw = true;
-        parse_unquoted(input, allow_raw)
-    }
-
-    pub(crate) fn parse_quoted_or_unquoted(input: ParseStream) -> Result<Self> {
-        if input.peek(LitStr) {
-            let lit: LitStr = input.parse()?;
-            Self::parse_quoted(&lit)
-        } else {
-            Self::parse_unquoted(input)
-        }
-    }
-}
-
-fn parse_unquoted(input: ParseStream, allow_raw: bool) -> Result<QualifiedName> {
-    let mut segments = Vec::new();
-    let mut trailing_punct = true;
-    let leading_colons: Option<Token![::]> = input.parse()?;
-    while trailing_punct && input.peek(Ident::peek_any) {
-        let mut ident = Ident::parse_any(input)?;
-        if let Some(unraw) = ident.to_string().strip_prefix("r#") {
-            if !allow_raw {
-                let msg = format!(
-                    "raw identifier `{}` is not allowed in a quoted namespace; use `{}`, or remove quotes",
-                    ident, unraw,
-                );
-                return Err(Error::new(ident.span(), msg));
-            }
-            ident = Ident::new(unraw, ident.span());
-        }
-        segments.push(ident);
-        let colons: Option<Token![::]> = input.parse()?;
-        trailing_punct = colons.is_some();
-    }
-    if segments.is_empty() && leading_colons.is_none() {
-        return Err(input.error("expected path"));
-    } else if trailing_punct {
-        return Err(input.error("expected path segment"));
-    }
-    Ok(QualifiedName { segments })
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/report.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/report.rs
deleted file mode 100644
index 1997182..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/report.rs
+++ /dev/null
@@ -1,33 +0,0 @@
-use quote::ToTokens;
-use std::fmt::Display;
-use syn::{Error, Result};
-
-pub(crate) struct Errors {
-    errors: Vec<Error>,
-}
-
-impl Errors {
-    pub(crate) fn new() -> Self {
-        Errors { errors: Vec::new() }
-    }
-
-    pub(crate) fn error(&mut self, sp: impl ToTokens, msg: impl Display) {
-        self.errors.push(Error::new_spanned(sp, msg));
-    }
-
-    pub(crate) fn push(&mut self, error: Error) {
-        self.errors.push(error);
-    }
-
-    pub(crate) fn propagate(&mut self) -> Result<()> {
-        let mut iter = self.errors.drain(..);
-        let mut all_errors = match iter.next() {
-            Some(err) => err,
-            None => return Ok(()),
-        };
-        for err in iter {
-            all_errors.combine(err);
-        }
-        Err(all_errors)
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/resolve.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/resolve.rs
deleted file mode 100644
index b0a4782..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/resolve.rs
+++ /dev/null
@@ -1,46 +0,0 @@
-use crate::syntax::instantiate::NamedImplKey;
-use crate::syntax::{Lifetimes, NamedType, Pair, Types};
-use proc_macro2::Ident;
-
-#[derive(Copy, Clone)]
-pub(crate) struct Resolution<'a> {
-    pub name: &'a Pair,
-    pub generics: &'a Lifetimes,
-}
-
-impl<'a> Types<'a> {
-    pub(crate) fn resolve(&self, ident: &impl UnresolvedName) -> Resolution<'a> {
-        let ident = ident.ident();
-        match self.try_resolve(ident) {
-            Some(resolution) => resolution,
-            None => panic!("Unable to resolve type `{}`", ident),
-        }
-    }
-
-    pub(crate) fn try_resolve(&self, ident: &impl UnresolvedName) -> Option<Resolution<'a>> {
-        let ident = ident.ident();
-        self.resolutions.get(ident).copied()
-    }
-}
-
-pub(crate) trait UnresolvedName {
-    fn ident(&self) -> &Ident;
-}
-
-impl UnresolvedName for Ident {
-    fn ident(&self) -> &Ident {
-        self
-    }
-}
-
-impl UnresolvedName for NamedType {
-    fn ident(&self) -> &Ident {
-        &self.rust
-    }
-}
-
-impl<'a> UnresolvedName for NamedImplKey<'a> {
-    fn ident(&self) -> &Ident {
-        self.rust
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/set.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/set.rs
deleted file mode 100644
index 0907834b5..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/set.rs
+++ /dev/null
@@ -1,120 +0,0 @@
-use std::fmt::{self, Debug};
-use std::slice;
-
-pub(crate) use self::ordered::OrderedSet;
-pub(crate) use self::unordered::UnorderedSet;
-
-mod ordered {
-    use super::{Iter, UnorderedSet};
-    use std::hash::Hash;
-
-    pub(crate) struct OrderedSet<T> {
-        set: UnorderedSet<T>,
-        vec: Vec<T>,
-    }
-
-    impl<'a, T> OrderedSet<&'a T>
-    where
-        T: Hash + Eq,
-    {
-        pub(crate) fn new() -> Self {
-            OrderedSet {
-                set: UnorderedSet::new(),
-                vec: Vec::new(),
-            }
-        }
-
-        pub(crate) fn insert(&mut self, value: &'a T) -> bool {
-            let new = self.set.insert(value);
-            if new {
-                self.vec.push(value);
-            }
-            new
-        }
-    }
-
-    impl<'a, T> OrderedSet<&'a T> {
-        pub(crate) fn is_empty(&self) -> bool {
-            self.vec.is_empty()
-        }
-
-        pub(crate) fn iter(&self) -> Iter<'_, 'a, T> {
-            Iter(self.vec.iter())
-        }
-    }
-
-    impl<'s, 'a, T> IntoIterator for &'s OrderedSet<&'a T> {
-        type Item = &'a T;
-        type IntoIter = Iter<'s, 'a, T>;
-        fn into_iter(self) -> Self::IntoIter {
-            self.iter()
-        }
-    }
-}
-
-mod unordered {
-    use std::borrow::Borrow;
-    use std::collections::HashSet;
-    use std::hash::Hash;
-
-    // Wrapper prohibits accidentally introducing iteration over the set, which
-    // could lead to nondeterministic generated code.
-    pub(crate) struct UnorderedSet<T>(HashSet<T>);
-
-    impl<T> UnorderedSet<T>
-    where
-        T: Hash + Eq,
-    {
-        pub(crate) fn new() -> Self {
-            UnorderedSet(HashSet::new())
-        }
-
-        pub(crate) fn insert(&mut self, value: T) -> bool {
-            self.0.insert(value)
-        }
-
-        pub(crate) fn contains<Q>(&self, value: &Q) -> bool
-        where
-            T: Borrow<Q>,
-            Q: ?Sized + Hash + Eq,
-        {
-            self.0.contains(value)
-        }
-
-        #[allow(dead_code)] // only used by cxx-build, not cxxbridge-cmd
-        pub(crate) fn get<Q>(&self, value: &Q) -> Option<&T>
-        where
-            T: Borrow<Q>,
-            Q: ?Sized + Hash + Eq,
-        {
-            self.0.get(value)
-        }
-
-        pub(crate) fn retain(&mut self, f: impl FnMut(&T) -> bool) {
-            self.0.retain(f);
-        }
-    }
-}
-
-pub(crate) struct Iter<'s, 'a, T>(slice::Iter<'s, &'a T>);
-
-impl<'s, 'a, T> Iterator for Iter<'s, 'a, T> {
-    type Item = &'a T;
-
-    fn next(&mut self) -> Option<Self::Item> {
-        self.0.next().copied()
-    }
-
-    fn size_hint(&self) -> (usize, Option<usize>) {
-        self.0.size_hint()
-    }
-}
-
-impl<'a, T> Debug for OrderedSet<&'a T>
-where
-    T: Debug,
-{
-    fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-        formatter.debug_set().entries(self).finish()
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/symbol.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/symbol.rs
deleted file mode 100644
index f9fd32c5..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/symbol.rs
+++ /dev/null
@@ -1,110 +0,0 @@
-use crate::syntax::namespace::Namespace;
-use crate::syntax::{ForeignName, Pair};
-use proc_macro2::{Ident, TokenStream};
-use quote::ToTokens;
-use std::fmt::{self, Display, Write};
-
-// A mangled symbol consisting of segments separated by '$'.
-// For example: cxxbridge1$string$new
-pub(crate) struct Symbol(String);
-
-impl Display for Symbol {
-    fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-        Display::fmt(&self.0, formatter)
-    }
-}
-
-impl ToTokens for Symbol {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        ToTokens::to_tokens(&self.0, tokens);
-    }
-}
-
-impl Symbol {
-    fn push(&mut self, segment: &dyn Display) {
-        let len_before = self.0.len();
-        if !self.0.is_empty() {
-            self.0.push('$');
-        }
-        self.0.write_fmt(format_args!("{}", segment)).unwrap();
-        assert!(self.0.len() > len_before);
-    }
-
-    pub(crate) fn from_idents<'a>(it: impl Iterator<Item = &'a dyn Segment>) -> Self {
-        let mut symbol = Symbol(String::new());
-        for segment in it {
-            segment.write(&mut symbol);
-        }
-        assert!(!symbol.0.is_empty());
-        symbol
-    }
-}
-
-pub(crate) trait Segment {
-    fn write(&self, symbol: &mut Symbol);
-}
-
-impl Segment for str {
-    fn write(&self, symbol: &mut Symbol) {
-        symbol.push(&self);
-    }
-}
-
-impl Segment for usize {
-    fn write(&self, symbol: &mut Symbol) {
-        symbol.push(&self);
-    }
-}
-
-impl Segment for Ident {
-    fn write(&self, symbol: &mut Symbol) {
-        symbol.push(&self);
-    }
-}
-
-impl Segment for Symbol {
-    fn write(&self, symbol: &mut Symbol) {
-        symbol.push(&self);
-    }
-}
-
-impl Segment for Namespace {
-    fn write(&self, symbol: &mut Symbol) {
-        for segment in self {
-            symbol.push(segment);
-        }
-    }
-}
-
-impl Segment for Pair {
-    fn write(&self, symbol: &mut Symbol) {
-        self.namespace.write(symbol);
-        self.cxx.write(symbol);
-    }
-}
-
-impl Segment for ForeignName {
-    fn write(&self, symbol: &mut Symbol) {
-        // TODO: support C++ names containing whitespace (`unsigned int`) or
-        // non-alphanumeric characters (`operator++`).
-        self.to_string().write(symbol);
-    }
-}
-
-impl<T> Segment for &'_ T
-where
-    T: ?Sized + Segment + Display,
-{
-    fn write(&self, symbol: &mut Symbol) {
-        (**self).write(symbol);
-    }
-}
-
-pub(crate) fn join(segments: &[&dyn Segment]) -> Symbol {
-    let mut symbol = Symbol(String::new());
-    for segment in segments {
-        segment.write(&mut symbol);
-    }
-    assert!(!symbol.0.is_empty());
-    symbol
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/tokens.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/tokens.rs
deleted file mode 100644
index 05eddc70..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/tokens.rs
+++ /dev/null
@@ -1,308 +0,0 @@
-use crate::syntax::atom::Atom::*;
-use crate::syntax::{
-    Array, Atom, Derive, Enum, EnumRepr, ExternFn, ExternType, Impl, Lifetimes, NamedType, Ptr,
-    Ref, Signature, SliceRef, Struct, Ty1, Type, TypeAlias, Var,
-};
-use proc_macro2::{Ident, Span, TokenStream};
-use quote::{quote_spanned, ToTokens};
-use syn::{token, Token};
-
-impl ToTokens for Type {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        match self {
-            Type::Ident(ident) => {
-                if ident.rust == Char {
-                    let span = ident.rust.span();
-                    tokens.extend(quote_spanned!(span=> ::cxx::private::));
-                } else if ident.rust == CxxString {
-                    let span = ident.rust.span();
-                    tokens.extend(quote_spanned!(span=> ::cxx::));
-                } else if ident.rust == RustString {
-                    let span = ident.rust.span();
-                    tokens.extend(quote_spanned!(span=> ::cxx::alloc::string::));
-                }
-                ident.to_tokens(tokens);
-            }
-            Type::RustBox(ty)
-            | Type::UniquePtr(ty)
-            | Type::SharedPtr(ty)
-            | Type::WeakPtr(ty)
-            | Type::CxxVector(ty)
-            | Type::RustVec(ty) => ty.to_tokens(tokens),
-            Type::Ref(r) | Type::Str(r) => r.to_tokens(tokens),
-            Type::Ptr(p) => p.to_tokens(tokens),
-            Type::Array(a) => a.to_tokens(tokens),
-            Type::Fn(f) => f.to_tokens(tokens),
-            Type::Void(span) => tokens.extend(quote_spanned!(*span=> ())),
-            Type::SliceRef(r) => r.to_tokens(tokens),
-        }
-    }
-}
-
-impl ToTokens for Var {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        let Var {
-            cfg: _,
-            doc: _,
-            attrs: _,
-            visibility: _,
-            name,
-            colon_token: _,
-            ty,
-        } = self;
-        name.rust.to_tokens(tokens);
-        Token![:](name.rust.span()).to_tokens(tokens);
-        ty.to_tokens(tokens);
-    }
-}
-
-impl ToTokens for Ty1 {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        let Ty1 {
-            name,
-            langle,
-            inner,
-            rangle,
-        } = self;
-        let span = name.span();
-        match name.to_string().as_str() {
-            "UniquePtr" | "SharedPtr" | "WeakPtr" | "CxxVector" => {
-                tokens.extend(quote_spanned!(span=> ::cxx::));
-            }
-            "Box" => {
-                tokens.extend(quote_spanned!(span=> ::cxx::alloc::boxed::));
-            }
-            "Vec" => {
-                tokens.extend(quote_spanned!(span=> ::cxx::alloc::vec::));
-            }
-            _ => {}
-        }
-        name.to_tokens(tokens);
-        langle.to_tokens(tokens);
-        inner.to_tokens(tokens);
-        rangle.to_tokens(tokens);
-    }
-}
-
-impl ToTokens for Ref {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        let Ref {
-            pinned: _,
-            ampersand,
-            lifetime,
-            mutable: _,
-            inner,
-            pin_tokens,
-            mutability,
-        } = self;
-        if let Some((pin, langle, _rangle)) = pin_tokens {
-            tokens.extend(quote_spanned!(pin.span=> ::cxx::core::pin::Pin));
-            langle.to_tokens(tokens);
-        }
-        ampersand.to_tokens(tokens);
-        lifetime.to_tokens(tokens);
-        mutability.to_tokens(tokens);
-        inner.to_tokens(tokens);
-        if let Some((_pin, _langle, rangle)) = pin_tokens {
-            rangle.to_tokens(tokens);
-        }
-    }
-}
-
-impl ToTokens for Ptr {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        let Ptr {
-            star,
-            mutable: _,
-            inner,
-            mutability,
-            constness,
-        } = self;
-        star.to_tokens(tokens);
-        mutability.to_tokens(tokens);
-        constness.to_tokens(tokens);
-        inner.to_tokens(tokens);
-    }
-}
-
-impl ToTokens for SliceRef {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        let SliceRef {
-            ampersand,
-            lifetime,
-            mutable: _,
-            bracket,
-            inner,
-            mutability,
-        } = self;
-        ampersand.to_tokens(tokens);
-        lifetime.to_tokens(tokens);
-        mutability.to_tokens(tokens);
-        bracket.surround(tokens, |tokens| {
-            inner.to_tokens(tokens);
-        });
-    }
-}
-
-impl ToTokens for Array {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        let Array {
-            bracket,
-            inner,
-            semi_token,
-            len: _,
-            len_token,
-        } = self;
-        bracket.surround(tokens, |tokens| {
-            inner.to_tokens(tokens);
-            semi_token.to_tokens(tokens);
-            len_token.to_tokens(tokens);
-        });
-    }
-}
-
-impl ToTokens for Atom {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        Ident::new(self.as_ref(), Span::call_site()).to_tokens(tokens);
-    }
-}
-
-impl ToTokens for Derive {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        Ident::new(self.what.as_ref(), self.span).to_tokens(tokens);
-    }
-}
-
-impl ToTokens for ExternType {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        // Notional token range for error reporting purposes.
-        self.type_token.to_tokens(tokens);
-        self.name.rust.to_tokens(tokens);
-        self.generics.to_tokens(tokens);
-    }
-}
-
-impl ToTokens for TypeAlias {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        // Notional token range for error reporting purposes.
-        self.type_token.to_tokens(tokens);
-        self.name.rust.to_tokens(tokens);
-        self.generics.to_tokens(tokens);
-    }
-}
-
-impl ToTokens for Struct {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        // Notional token range for error reporting purposes.
-        self.struct_token.to_tokens(tokens);
-        self.name.rust.to_tokens(tokens);
-        self.generics.to_tokens(tokens);
-    }
-}
-
-impl ToTokens for Enum {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        // Notional token range for error reporting purposes.
-        self.enum_token.to_tokens(tokens);
-        self.name.rust.to_tokens(tokens);
-        self.generics.to_tokens(tokens);
-    }
-}
-
-impl ToTokens for ExternFn {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        // Notional token range for error reporting purposes.
-        self.unsafety.to_tokens(tokens);
-        self.sig.fn_token.to_tokens(tokens);
-        self.semi_token.to_tokens(tokens);
-    }
-}
-
-impl ToTokens for Impl {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        let Impl {
-            cfg: _,
-            impl_token,
-            impl_generics,
-            negative: _,
-            ty,
-            ty_generics: _,
-            brace_token,
-            negative_token,
-        } = self;
-        impl_token.to_tokens(tokens);
-        impl_generics.to_tokens(tokens);
-        negative_token.to_tokens(tokens);
-        ty.to_tokens(tokens);
-        brace_token.surround(tokens, |_tokens| {});
-    }
-}
-
-impl ToTokens for Lifetimes {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        let Lifetimes {
-            lt_token,
-            lifetimes,
-            gt_token,
-        } = self;
-        lt_token.to_tokens(tokens);
-        lifetimes.to_tokens(tokens);
-        gt_token.to_tokens(tokens);
-    }
-}
-
-impl ToTokens for Signature {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        let Signature {
-            asyncness: _,
-            unsafety: _,
-            fn_token,
-            generics: _,
-            receiver: _,
-            args,
-            ret,
-            throws: _,
-            paren_token,
-            throws_tokens,
-        } = self;
-        fn_token.to_tokens(tokens);
-        paren_token.surround(tokens, |tokens| {
-            args.to_tokens(tokens);
-        });
-        if let Some(ret) = ret {
-            Token![->](paren_token.span.join()).to_tokens(tokens);
-            if let Some((result, langle, rangle)) = throws_tokens {
-                result.to_tokens(tokens);
-                langle.to_tokens(tokens);
-                ret.to_tokens(tokens);
-                rangle.to_tokens(tokens);
-            } else {
-                ret.to_tokens(tokens);
-            }
-        } else if let Some((result, langle, rangle)) = throws_tokens {
-            Token![->](paren_token.span.join()).to_tokens(tokens);
-            result.to_tokens(tokens);
-            langle.to_tokens(tokens);
-            token::Paren(langle.span).surround(tokens, |_| ());
-            rangle.to_tokens(tokens);
-        }
-    }
-}
-
-impl ToTokens for EnumRepr {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        match self {
-            EnumRepr::Native { atom, repr_type: _ } => atom.to_tokens(tokens),
-            #[cfg(feature = "experimental-enum-variants-from-header")]
-            EnumRepr::Foreign { rust_type } => rust_type.to_tokens(tokens),
-        }
-    }
-}
-
-impl ToTokens for NamedType {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        let NamedType { rust, generics } = self;
-        rust.to_tokens(tokens);
-        generics.to_tokens(tokens);
-    }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/toposort.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/toposort.rs
deleted file mode 100644
index 9c97eb1..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/toposort.rs
+++ /dev/null
@@ -1,51 +0,0 @@
-use crate::syntax::map::{Entry, UnorderedMap as Map};
-use crate::syntax::report::Errors;
-use crate::syntax::{Api, Struct, Type, Types};
-
-enum Mark {
-    Visiting,
-    Visited,
-}
-
-pub(crate) fn sort<'a>(cx: &mut Errors, apis: &'a [Api], types: &Types<'a>) -> Vec<&'a Struct> {
-    let mut sorted = Vec::new();
-    let ref mut marks = Map::new();
-    for api in apis {
-        if let Api::Struct(strct) = api {
-            let _ = visit(cx, strct, &mut sorted, marks, types);
-        }
-    }
-    sorted
-}
-
-fn visit<'a>(
-    cx: &mut Errors,
-    strct: &'a Struct,
-    sorted: &mut Vec<&'a Struct>,
-    marks: &mut Map<*const Struct, Mark>,
-    types: &Types<'a>,
-) -> Result<(), ()> {
-    match marks.entry(strct) {
-        Entry::Occupied(entry) => match entry.get() {
-            Mark::Visiting => return Err(()), // not a DAG
-            Mark::Visited => return Ok(()),
-        },
-        Entry::Vacant(entry) => {
-            entry.insert(Mark::Visiting);
-        }
-    }
-    let mut result = Ok(());
-    for field in &strct.fields {
-        if let Type::Ident(ident) = &field.ty {
-            if let Some(inner) = types.structs.get(&ident.rust) {
-                if visit(cx, inner, sorted, marks, types).is_err() {
-                    cx.error(field, "unsupported cyclic data structure");
-                    result = Err(());
-                }
-            }
-        }
-    }
-    marks.insert(strct, Mark::Visited);
-    sorted.push(strct);
-    result
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/trivial.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/trivial.rs
deleted file mode 100644
index 9533400..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/trivial.rs
+++ /dev/null
@@ -1,312 +0,0 @@
-use crate::syntax::map::UnorderedMap;
-use crate::syntax::set::{OrderedSet as Set, UnorderedSet};
-use crate::syntax::{Api, Enum, ExternFn, NamedType, Pair, Struct, Type};
-use proc_macro2::Ident;
-use std::fmt::{self, Display};
-
-#[derive(Copy, Clone)]
-pub(crate) enum TrivialReason<'a> {
-    StructField(&'a Struct),
-    FunctionArgument(&'a ExternFn),
-    FunctionReturn(&'a ExternFn),
-    BoxTarget,
-    VecElement,
-    SliceElement { mutable: bool },
-    UnpinnedMut(&'a ExternFn),
-}
-
-pub(crate) fn required_trivial_reasons<'a>(
-    apis: &'a [Api],
-    all: &Set<&'a Type>,
-    structs: &UnorderedMap<&'a Ident, &'a Struct>,
-    enums: &UnorderedMap<&'a Ident, &'a Enum>,
-    cxx: &UnorderedSet<&'a Ident>,
-) -> UnorderedMap<&'a Ident, Vec<TrivialReason<'a>>> {
-    let mut required_trivial = UnorderedMap::new();
-
-    let mut insist_extern_types_are_trivial = |ident: &'a NamedType, reason| {
-        if cxx.contains(&ident.rust)
-            && !structs.contains_key(&ident.rust)
-            && !enums.contains_key(&ident.rust)
-        {
-            required_trivial
-                .entry(&ident.rust)
-                .or_insert_with(Vec::new)
-                .push(reason);
-        }
-    };
-
-    for api in apis {
-        match api {
-            Api::Struct(strct) => {
-                for field in &strct.fields {
-                    if let Type::Ident(ident) = &field.ty {
-                        let reason = TrivialReason::StructField(strct);
-                        insist_extern_types_are_trivial(ident, reason);
-                    }
-                }
-            }
-            Api::CxxFunction(efn) | Api::RustFunction(efn) => {
-                if let Some(receiver) = &efn.receiver {
-                    if receiver.mutable && !receiver.pinned {
-                        let reason = TrivialReason::UnpinnedMut(efn);
-                        insist_extern_types_are_trivial(&receiver.ty, reason);
-                    }
-                }
-                for arg in &efn.args {
-                    match &arg.ty {
-                        Type::Ident(ident) => {
-                            let reason = TrivialReason::FunctionArgument(efn);
-                            insist_extern_types_are_trivial(ident, reason);
-                        }
-                        Type::Ref(ty) => {
-                            if ty.mutable && !ty.pinned {
-                                if let Type::Ident(ident) = &ty.inner {
-                                    let reason = TrivialReason::UnpinnedMut(efn);
-                                    insist_extern_types_are_trivial(ident, reason);
-                                }
-                            }
-                        }
-                        _ => {}
-                    }
-                }
-                if let Some(ret) = &efn.ret {
-                    match ret {
-                        Type::Ident(ident) => {
-                            let reason = TrivialReason::FunctionReturn(efn);
-                            insist_extern_types_are_trivial(ident, reason);
-                        }
-                        Type::Ref(ty) => {
-                            if ty.mutable && !ty.pinned {
-                                if let Type::Ident(ident) = &ty.inner {
-                                    let reason = TrivialReason::UnpinnedMut(efn);
-                                    insist_extern_types_are_trivial(ident, reason);
-                                }
-                            }
-                        }
-                        _ => {}
-                    }
-                }
-            }
-            _ => {}
-        }
-    }
-
-    for ty in all {
-        match ty {
-            Type::RustBox(ty) => {
-                if let Type::Ident(ident) = &ty.inner {
-                    let reason = TrivialReason::BoxTarget;
-                    insist_extern_types_are_trivial(ident, reason);
-                }
-            }
-            Type::RustVec(ty) => {
-                if let Type::Ident(ident) = &ty.inner {
-                    let reason = TrivialReason::VecElement;
-                    insist_extern_types_are_trivial(ident, reason);
-                }
-            }
-            Type::SliceRef(ty) => {
-                if let Type::Ident(ident) = &ty.inner {
-                    let reason = TrivialReason::SliceElement {
-                        mutable: ty.mutable,
-                    };
-                    insist_extern_types_are_trivial(ident, reason);
-                }
-            }
-            _ => {}
-        }
-    }
-
-    required_trivial
-}
-
-// Context:
-// "type {type} should be trivially move constructible and trivially destructible in C++ to be used as {what} in Rust"
-// "needs a cxx::ExternType impl in order to be used as {what}"
-pub(crate) fn as_what<'a>(name: &'a Pair, reasons: &'a [TrivialReason]) -> impl Display + 'a {
-    struct Description<'a> {
-        name: &'a Pair,
-        reasons: &'a [TrivialReason<'a>],
-    }
-
-    impl<'a> Display for Description<'a> {
-        fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-            let mut field_of = Set::new();
-            let mut argument_of = Set::new();
-            let mut return_of = Set::new();
-            let mut box_target = false;
-            let mut vec_element = false;
-            let mut slice_shared_element = false;
-            let mut slice_mut_element = false;
-            let mut unpinned_mut = Set::new();
-
-            for reason in self.reasons {
-                match reason {
-                    TrivialReason::StructField(strct) => {
-                        field_of.insert(&strct.name.rust);
-                    }
-                    TrivialReason::FunctionArgument(efn) => {
-                        argument_of.insert(&efn.name.rust);
-                    }
-                    TrivialReason::FunctionReturn(efn) => {
-                        return_of.insert(&efn.name.rust);
-                    }
-                    TrivialReason::BoxTarget => box_target = true,
-                    TrivialReason::VecElement => vec_element = true,
-                    TrivialReason::SliceElement { mutable } => {
-                        if *mutable {
-                            slice_mut_element = true;
-                        } else {
-                            slice_shared_element = true;
-                        }
-                    }
-                    TrivialReason::UnpinnedMut(efn) => {
-                        unpinned_mut.insert(&efn.name.rust);
-                    }
-                }
-            }
-
-            let mut clauses = Vec::new();
-            if !field_of.is_empty() {
-                clauses.push(Clause::Set {
-                    article: "a",
-                    desc: "field of",
-                    set: &field_of,
-                });
-            }
-            if !argument_of.is_empty() {
-                clauses.push(Clause::Set {
-                    article: "an",
-                    desc: "argument of",
-                    set: &argument_of,
-                });
-            }
-            if !return_of.is_empty() {
-                clauses.push(Clause::Set {
-                    article: "a",
-                    desc: "return value of",
-                    set: &return_of,
-                });
-            }
-            if box_target {
-                clauses.push(Clause::Ty1 {
-                    article: "type",
-                    desc: "Box",
-                    param: self.name,
-                });
-            }
-            if vec_element {
-                clauses.push(Clause::Ty1 {
-                    article: "a",
-                    desc: "vector element in Vec",
-                    param: self.name,
-                });
-            }
-            if slice_shared_element || slice_mut_element {
-                clauses.push(Clause::Slice {
-                    article: "a",
-                    desc: "slice element in",
-                    shared: slice_shared_element,
-                    mutable: slice_mut_element,
-                    param: self.name,
-                });
-            }
-            if !unpinned_mut.is_empty() {
-                clauses.push(Clause::Set {
-                    article: "a",
-                    desc: "non-pinned mutable reference in signature of",
-                    set: &unpinned_mut,
-                });
-            }
-
-            for (i, clause) in clauses.iter().enumerate() {
-                if i == 0 {
-                    write!(f, "{} ", clause.article())?;
-                } else if i + 1 < clauses.len() {
-                    write!(f, ", ")?;
-                } else {
-                    write!(f, " or ")?;
-                }
-                clause.fmt(f)?;
-            }
-
-            Ok(())
-        }
-    }
-
-    enum Clause<'a> {
-        Set {
-            article: &'a str,
-            desc: &'a str,
-            set: &'a Set<&'a Ident>,
-        },
-        Ty1 {
-            article: &'a str,
-            desc: &'a str,
-            param: &'a Pair,
-        },
-        Slice {
-            article: &'a str,
-            desc: &'a str,
-            shared: bool,
-            mutable: bool,
-            param: &'a Pair,
-        },
-    }
-
-    impl<'a> Clause<'a> {
-        fn article(&self) -> &'a str {
-            match self {
-                Clause::Set { article, .. }
-                | Clause::Ty1 { article, .. }
-                | Clause::Slice { article, .. } => article,
-            }
-        }
-
-        fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-            match self {
-                Clause::Set {
-                    article: _,
-                    desc,
-                    set,
-                } => {
-                    write!(f, "{} ", desc)?;
-                    for (i, ident) in set.iter().take(3).enumerate() {
-                        if i > 0 {
-                            write!(f, ", ")?;
-                        }
-                        write!(f, "`{}`", ident)?;
-                    }
-                    Ok(())
-                }
-                Clause::Ty1 {
-                    article: _,
-                    desc,
-                    param,
-                } => write!(f, "{}<{}>", desc, param.rust),
-                Clause::Slice {
-                    article: _,
-                    desc,
-                    shared,
-                    mutable,
-                    param,
-                } => {
-                    write!(f, "{} ", desc)?;
-                    if *shared {
-                        write!(f, "&[{}]", param.rust)?;
-                    }
-                    if *shared && *mutable {
-                        write!(f, " and ")?;
-                    }
-                    if *mutable {
-                        write!(f, "&mut [{}]", param.rust)?;
-                    }
-                    Ok(())
-                }
-            }
-        }
-    }
-
-    Description { name, reasons }
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/types.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/types.rs
deleted file mode 100644
index 623a8b8..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/types.rs
+++ /dev/null
@@ -1,286 +0,0 @@
-use crate::syntax::improper::ImproperCtype;
-use crate::syntax::instantiate::ImplKey;
-use crate::syntax::map::{OrderedMap, UnorderedMap};
-use crate::syntax::report::Errors;
-use crate::syntax::resolve::Resolution;
-use crate::syntax::set::{OrderedSet, UnorderedSet};
-use crate::syntax::trivial::{self, TrivialReason};
-use crate::syntax::visit::{self, Visit};
-use crate::syntax::{
-    toposort, Api, Atom, Enum, EnumRepr, ExternType, Impl, Lifetimes, Pair, Struct, Type, TypeAlias,
-};
-use proc_macro2::Ident;
-use quote::ToTokens;
-
-pub(crate) struct Types<'a> {
-    pub all: OrderedSet<&'a Type>,
-    pub structs: UnorderedMap<&'a Ident, &'a Struct>,
-    pub enums: UnorderedMap<&'a Ident, &'a Enum>,
-    pub cxx: UnorderedSet<&'a Ident>,
-    pub rust: UnorderedSet<&'a Ident>,
-    pub aliases: UnorderedMap<&'a Ident, &'a TypeAlias>,
-    pub untrusted: UnorderedMap<&'a Ident, &'a ExternType>,
-    pub required_trivial: UnorderedMap<&'a Ident, Vec<TrivialReason<'a>>>,
-    pub impls: OrderedMap<ImplKey<'a>, Option<&'a Impl>>,
-    pub resolutions: UnorderedMap<&'a Ident, Resolution<'a>>,
-    pub struct_improper_ctypes: UnorderedSet<&'a Ident>,
-    pub toposorted_structs: Vec<&'a Struct>,
-}
-
-impl<'a> Types<'a> {
-    pub(crate) fn collect(cx: &mut Errors, apis: &'a [Api]) -> Self {
-        let mut all = OrderedSet::new();
-        let mut structs = UnorderedMap::new();
-        let mut enums = UnorderedMap::new();
-        let mut cxx = UnorderedSet::new();
-        let mut rust = UnorderedSet::new();
-        let mut aliases = UnorderedMap::new();
-        let mut untrusted = UnorderedMap::new();
-        let mut impls = OrderedMap::new();
-        let mut resolutions = UnorderedMap::new();
-        let struct_improper_ctypes = UnorderedSet::new();
-        let toposorted_structs = Vec::new();
-
-        fn visit<'a>(all: &mut OrderedSet<&'a Type>, ty: &'a Type) {
-            struct CollectTypes<'s, 'a>(&'s mut OrderedSet<&'a Type>);
-
-            impl<'s, 'a> Visit<'a> for CollectTypes<'s, 'a> {
-                fn visit_type(&mut self, ty: &'a Type) {
-                    self.0.insert(ty);
-                    visit::visit_type(self, ty);
-                }
-            }
-
-            CollectTypes(all).visit_type(ty);
-        }
-
-        let mut add_resolution = |name: &'a Pair, generics: &'a Lifetimes| {
-            resolutions.insert(&name.rust, Resolution { name, generics });
-        };
-
-        let mut type_names = UnorderedSet::new();
-        let mut function_names = UnorderedSet::new();
-        for api in apis {
-            // The same identifier is permitted to be declared as both a shared
-            // enum and extern C++ type, or shared struct and extern C++ type.
-            // That indicates to not emit the C++ enum/struct definition because
-            // it's defined by the included headers already.
-            //
-            // All other cases of duplicate identifiers are reported as an error.
-            match api {
-                Api::Include(_) => {}
-                Api::Struct(strct) => {
-                    let ident = &strct.name.rust;
-                    if !type_names.insert(ident)
-                        && (!cxx.contains(ident)
-                            || structs.contains_key(ident)
-                            || enums.contains_key(ident))
-                    {
-                        // If already declared as a struct or enum, or if
-                        // colliding with something other than an extern C++
-                        // type, then error.
-                        duplicate_name(cx, strct, ident);
-                    }
-                    structs.insert(&strct.name.rust, strct);
-                    for field in &strct.fields {
-                        visit(&mut all, &field.ty);
-                    }
-                    add_resolution(&strct.name, &strct.generics);
-                }
-                Api::Enum(enm) => {
-                    match &enm.repr {
-                        EnumRepr::Native { atom: _, repr_type } => {
-                            all.insert(repr_type);
-                        }
-                        #[cfg(feature = "experimental-enum-variants-from-header")]
-                        EnumRepr::Foreign { rust_type: _ } => {}
-                    }
-                    let ident = &enm.name.rust;
-                    if !type_names.insert(ident)
-                        && (!cxx.contains(ident)
-                            || structs.contains_key(ident)
-                            || enums.contains_key(ident))
-                    {
-                        // If already declared as a struct or enum, or if
-                        // colliding with something other than an extern C++
-                        // type, then error.
-                        duplicate_name(cx, enm, ident);
-                    }
-                    enums.insert(ident, enm);
-                    if enm.variants_from_header {
-                        // #![variants_from_header] enums are implicitly extern
-                        // C++ type.
-                        cxx.insert(&enm.name.rust);
-                    }
-                    add_resolution(&enm.name, &enm.generics);
-                }
-                Api::CxxType(ety) => {
-                    let ident = &ety.name.rust;
-                    if !type_names.insert(ident)
-                        && (cxx.contains(ident)
-                            || !structs.contains_key(ident) && !enums.contains_key(ident))
-                    {
-                        // If already declared as an extern C++ type, or if
-                        // colliding with something which is neither struct nor
-                        // enum, then error.
-                        duplicate_name(cx, ety, ident);
-                    }
-                    cxx.insert(ident);
-                    if !ety.trusted {
-                        untrusted.insert(ident, ety);
-                    }
-                    add_resolution(&ety.name, &ety.generics);
-                }
-                Api::RustType(ety) => {
-                    let ident = &ety.name.rust;
-                    if !type_names.insert(ident) {
-                        duplicate_name(cx, ety, ident);
-                    }
-                    rust.insert(ident);
-                    add_resolution(&ety.name, &ety.generics);
-                }
-                Api::CxxFunction(efn) | Api::RustFunction(efn) => {
-                    // Note: duplication of the C++ name is fine because C++ has
-                    // function overloading.
-                    if !function_names.insert((&efn.receiver, &efn.name.rust)) {
-                        duplicate_name(cx, efn, &efn.name.rust);
-                    }
-                    for arg in &efn.args {
-                        visit(&mut all, &arg.ty);
-                    }
-                    if let Some(ret) = &efn.ret {
-                        visit(&mut all, ret);
-                    }
-                }
-                Api::TypeAlias(alias) => {
-                    let ident = &alias.name.rust;
-                    if !type_names.insert(ident) {
-                        duplicate_name(cx, alias, ident);
-                    }
-                    cxx.insert(ident);
-                    aliases.insert(ident, alias);
-                    add_resolution(&alias.name, &alias.generics);
-                }
-                Api::Impl(imp) => {
-                    visit(&mut all, &imp.ty);
-                    if let Some(key) = imp.ty.impl_key() {
-                        impls.insert(key, Some(imp));
-                    }
-                }
-            }
-        }
-
-        for ty in &all {
-            let impl_key = match ty.impl_key() {
-                Some(impl_key) => impl_key,
-                None => continue,
-            };
-            let implicit_impl = match impl_key {
-                ImplKey::RustBox(ident)
-                | ImplKey::RustVec(ident)
-                | ImplKey::UniquePtr(ident)
-                | ImplKey::SharedPtr(ident)
-                | ImplKey::WeakPtr(ident)
-                | ImplKey::CxxVector(ident) => {
-                    Atom::from(ident.rust).is_none() && !aliases.contains_key(ident.rust)
-                }
-            };
-            if implicit_impl && !impls.contains_key(&impl_key) {
-                impls.insert(impl_key, None);
-            }
-        }
-
-        // All these APIs may contain types passed by value. We need to ensure
-        // we check that this is permissible. We do this _after_ scanning all
-        // the APIs above, in case some function or struct references a type
-        // which is declared subsequently.
-        let required_trivial =
-            trivial::required_trivial_reasons(apis, &all, &structs, &enums, &cxx);
-
-        let mut types = Types {
-            all,
-            structs,
-            enums,
-            cxx,
-            rust,
-            aliases,
-            untrusted,
-            required_trivial,
-            impls,
-            resolutions,
-            struct_improper_ctypes,
-            toposorted_structs,
-        };
-
-        types.toposorted_structs = toposort::sort(cx, apis, &types);
-
-        let mut unresolved_structs = types.structs.keys();
-        let mut new_information = true;
-        while new_information {
-            new_information = false;
-            unresolved_structs.retain(|ident| {
-                let mut retain = false;
-                for var in &types.structs[ident].fields {
-                    if match types.determine_improper_ctype(&var.ty) {
-                        ImproperCtype::Depends(inner) => {
-                            retain = true;
-                            types.struct_improper_ctypes.contains(inner)
-                        }
-                        ImproperCtype::Definite(improper) => improper,
-                    } {
-                        types.struct_improper_ctypes.insert(ident);
-                        new_information = true;
-                        return false;
-                    }
-                }
-                // If all fields definite false, remove from unresolved_structs.
-                retain
-            });
-        }
-
-        types
-    }
-
-    pub(crate) fn needs_indirect_abi(&self, ty: &Type) -> bool {
-        match ty {
-            Type::RustBox(_) | Type::UniquePtr(_) => false,
-            Type::Array(_) => true,
-            _ => !self.is_guaranteed_pod(ty),
-        }
-    }
-
-    // Types that trigger rustc's default #[warn(improper_ctypes)] lint, even if
-    // they may be otherwise unproblematic to mention in an extern signature.
-    // For example in a signature like `extern "C" fn(*const String)`, rustc
-    // refuses to believe that C could know how to supply us with a pointer to a
-    // Rust String, even though C could easily have obtained that pointer
-    // legitimately from a Rust call.
-    #[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
-    pub(crate) fn is_considered_improper_ctype(&self, ty: &Type) -> bool {
-        match self.determine_improper_ctype(ty) {
-            ImproperCtype::Definite(improper) => improper,
-            ImproperCtype::Depends(ident) => self.struct_improper_ctypes.contains(ident),
-        }
-    }
-
-    // Types which we need to assume could possibly exist by value on the Rust
-    // side.
-    pub(crate) fn is_maybe_trivial(&self, ty: &Ident) -> bool {
-        self.structs.contains_key(ty)
-            || self.enums.contains_key(ty)
-            || self.aliases.contains_key(ty)
-    }
-}
-
-impl<'t, 'a> IntoIterator for &'t Types<'a> {
-    type Item = &'a Type;
-    type IntoIter = crate::syntax::set::Iter<'t, 'a, Type>;
-    fn into_iter(self) -> Self::IntoIter {
-        self.all.into_iter()
-    }
-}
-
-fn duplicate_name(cx: &mut Errors, sp: impl ToTokens, ident: &Ident) {
-    let msg = format!("the name `{}` is defined multiple times", ident);
-    cx.error(sp, msg);
-}
diff --git a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/visit.rs b/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/visit.rs
deleted file mode 100644
index e31b8c4..0000000
--- a/third_party/rust/cxxbridge_macro/v1/crate/src/syntax/visit.rs
+++ /dev/null
@@ -1,34 +0,0 @@
-use crate::syntax::Type;
-
-pub(crate) trait Visit<'a> {
-    fn visit_type(&mut self, ty: &'a Type) {
-        visit_type(self, ty);
-    }
-}
-
-pub(crate) fn visit_type<'a, V>(visitor: &mut V, ty: &'a Type)
-where
-    V: Visit<'a> + ?Sized,
-{
-    match ty {
-        Type::Ident(_) | Type::Str(_) | Type::Void(_) => {}
-        Type::RustBox(ty)
-        | Type::UniquePtr(ty)
-        | Type::SharedPtr(ty)
-        | Type::WeakPtr(ty)
-        | Type::CxxVector(ty)
-        | Type::RustVec(ty) => visitor.visit_type(&ty.inner),
-        Type::Ref(r) => visitor.visit_type(&r.inner),
-        Type::Ptr(p) => visitor.visit_type(&p.inner),
-        Type::Array(a) => visitor.visit_type(&a.inner),
-        Type::SliceRef(s) => visitor.visit_type(&s.inner),
-        Type::Fn(fun) => {
-            if let Some(ret) = &fun.ret {
-                visitor.visit_type(ret);
-            }
-            for arg in &fun.args {
-                visitor.visit_type(&arg.ty);
-            }
-        }
-    }
-}
diff --git a/third_party/rust/font_types/v0_4/BUILD.gn b/third_party/rust/font_types/v0_4/BUILD.gn
index 84f139c..06689e9 100644
--- a/third_party/rust/font_types/v0_4/BUILD.gn
+++ b/third_party/rust/font_types/v0_4/BUILD.gn
@@ -11,25 +11,28 @@
   crate_name = "font_types"
   epoch = "0.4"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/lib.rs"
   sources = [
-    "//third_party/rust/font_types/v0_4/crate/src/bbox.rs",
-    "//third_party/rust/font_types/v0_4/crate/src/fixed.rs",
-    "//third_party/rust/font_types/v0_4/crate/src/fword.rs",
-    "//third_party/rust/font_types/v0_4/crate/src/glyph_id.rs",
-    "//third_party/rust/font_types/v0_4/crate/src/lib.rs",
-    "//third_party/rust/font_types/v0_4/crate/src/longdatetime.rs",
-    "//third_party/rust/font_types/v0_4/crate/src/name_id.rs",
-    "//third_party/rust/font_types/v0_4/crate/src/offset.rs",
-    "//third_party/rust/font_types/v0_4/crate/src/pen.rs",
-    "//third_party/rust/font_types/v0_4/crate/src/point.rs",
-    "//third_party/rust/font_types/v0_4/crate/src/raw.rs",
-    "//third_party/rust/font_types/v0_4/crate/src/serde_test.rs",
-    "//third_party/rust/font_types/v0_4/crate/src/tag.rs",
-    "//third_party/rust/font_types/v0_4/crate/src/uint24.rs",
-    "//third_party/rust/font_types/v0_4/crate/src/version.rs",
+    "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/bbox.rs",
+    "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/fixed.rs",
+    "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/fword.rs",
+    "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/glyph_id.rs",
+    "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/longdatetime.rs",
+    "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/name_id.rs",
+    "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/offset.rs",
+    "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/pen.rs",
+    "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/point.rs",
+    "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/raw.rs",
+    "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/serde_test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/tag.rs",
+    "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/uint24.rs",
+    "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/src/version.rs",
   ]
-  inputs = [ "//third_party/rust/font_types/v0_4/crate/README.md" ]
+  inputs = [
+    "//third_party/rust/chromium_crates_io/vendor/font-types-0.4.0/README.md",
+  ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/getrandom/v0_2/BUILD.gn b/third_party/rust/getrandom/v0_2/BUILD.gn
index 0cf273e..7279358 100644
--- a/third_party/rust/getrandom/v0_2/BUILD.gn
+++ b/third_party/rust/getrandom/v0_2/BUILD.gn
@@ -11,42 +11,43 @@
   crate_name = "getrandom"
   epoch = "0.2"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/lib.rs"
   sources = [
-    "//third_party/rust/getrandom/v0_2/crate/benches/buffer.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/3ds.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/apple-other.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/bsd_arandom.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/custom.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/dragonfly.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/emscripten.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/error.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/error_impls.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/espidf.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/fuchsia.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/hermit.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/js.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/lib.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/linux_android.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/macos.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/openbsd.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/rdrand.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/solaris_illumos.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/solid.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/use_file.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/util.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/util_libc.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/vxworks.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/wasi.rs",
-    "//third_party/rust/getrandom/v0_2/crate/src/windows.rs",
-    "//third_party/rust/getrandom/v0_2/crate/tests/common/mod.rs",
-    "//third_party/rust/getrandom/v0_2/crate/tests/custom.rs",
-    "//third_party/rust/getrandom/v0_2/crate/tests/normal.rs",
-    "//third_party/rust/getrandom/v0_2/crate/tests/rdrand.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/benches/buffer.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/3ds.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/apple-other.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/bsd_arandom.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/custom.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/dragonfly.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/emscripten.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/error_impls.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/espidf.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/fuchsia.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/hermit.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/js.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/linux_android.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/macos.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/openbsd.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/rdrand.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/solaris_illumos.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/solid.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/use_file.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/util.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/util_libc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/vxworks.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/wasi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/src/windows.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/tests/common/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/tests/custom.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/tests/normal.rs",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/tests/rdrand.rs",
   ]
   inputs = [
-    "//third_party/rust/getrandom/v0_2/crate/CHANGELOG.md",
-    "//third_party/rust/getrandom/v0_2/crate/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/CHANGELOG.md",
+    "//third_party/rust/chromium_crates_io/vendor/getrandom-0.2.9/README.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
diff --git a/third_party/rust/hex/v0_4/BUILD.gn b/third_party/rust/hex/v0_4/BUILD.gn
index 460cffc..10e06c7d 100644
--- a/third_party/rust/hex/v0_4/BUILD.gn
+++ b/third_party/rust/hex/v0_4/BUILD.gn
@@ -11,16 +11,18 @@
   crate_name = "hex"
   epoch = "0.4"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/hex-0.4.3/src/lib.rs"
   sources = [
-    "//third_party/rust/hex/v0_4/crate/benches/hex.rs",
-    "//third_party/rust/hex/v0_4/crate/src/error.rs",
-    "//third_party/rust/hex/v0_4/crate/src/lib.rs",
-    "//third_party/rust/hex/v0_4/crate/src/serde.rs",
-    "//third_party/rust/hex/v0_4/crate/tests/serde.rs",
-    "//third_party/rust/hex/v0_4/crate/tests/version-number.rs",
+    "//third_party/rust/chromium_crates_io/vendor/hex-0.4.3/benches/hex.rs",
+    "//third_party/rust/chromium_crates_io/vendor/hex-0.4.3/src/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/hex-0.4.3/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/hex-0.4.3/src/serde.rs",
+    "//third_party/rust/chromium_crates_io/vendor/hex-0.4.3/tests/serde.rs",
+    "//third_party/rust/chromium_crates_io/vendor/hex-0.4.3/tests/version-number.rs",
   ]
-  inputs = [ "//third_party/rust/hex/v0_4/crate/README.md" ]
+  inputs =
+      [ "//third_party/rust/chromium_crates_io/vendor/hex-0.4.3/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/hex/v0_4/crate/LICENSE-APACHE b/third_party/rust/hex/v0_4/crate/LICENSE-APACHE
deleted file mode 100644
index 8f71f43..0000000
--- a/third_party/rust/hex/v0_4/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,202 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "{}"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright {yyyy} {name of copyright owner}
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
diff --git a/third_party/rust/hex_literal/v0_4/BUILD.gn b/third_party/rust/hex_literal/v0_4/BUILD.gn
index 6830d7b..a8ddaf4 100644
--- a/third_party/rust/hex_literal/v0_4/BUILD.gn
+++ b/third_party/rust/hex_literal/v0_4/BUILD.gn
@@ -11,14 +11,14 @@
   crate_name = "hex_literal"
   epoch = "0.4"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/src/lib.rs"
   sources = [
-    "//third_party/rust/hex_literal/v0_4/crate/src/lib.rs",
-    "//third_party/rust/hex_literal/v0_4/crate/tests/basic.rs",
+    "//third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/tests/basic.rs",
   ]
   inputs = [
-    "//third_party/rust/hex_literal/v0_4/crate/CHANGELOG.md",
-    "//third_party/rust/hex_literal/v0_4/crate/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/CHANGELOG.md",
+    "//third_party/rust/chromium_crates_io/vendor/hex-literal-0.4.1/README.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
diff --git a/third_party/rust/itoa/v1/BUILD.gn b/third_party/rust/itoa/v1/BUILD.gn
index 8cf912f..4bdaf3f 100644
--- a/third_party/rust/itoa/v1/BUILD.gn
+++ b/third_party/rust/itoa/v1/BUILD.gn
@@ -11,14 +11,16 @@
   crate_name = "itoa"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/src/lib.rs"
   sources = [
-    "//third_party/rust/itoa/v1/crate/benches/bench.rs",
-    "//third_party/rust/itoa/v1/crate/src/lib.rs",
-    "//third_party/rust/itoa/v1/crate/src/udiv128.rs",
-    "//third_party/rust/itoa/v1/crate/tests/test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/benches/bench.rs",
+    "//third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/src/udiv128.rs",
+    "//third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/tests/test.rs",
   ]
-  inputs = [ "//third_party/rust/itoa/v1/crate/README.md" ]
+  inputs =
+      [ "//third_party/rust/chromium_crates_io/vendor/itoa-1.0.1/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/itoa/v1/crate/.github/FUNDING.yml b/third_party/rust/itoa/v1/crate/.github/FUNDING.yml
deleted file mode 100644
index 7507077..0000000
--- a/third_party/rust/itoa/v1/crate/.github/FUNDING.yml
+++ /dev/null
@@ -1 +0,0 @@
-github: dtolnay
diff --git a/third_party/rust/itoa/v1/crate/.gitignore b/third_party/rust/itoa/v1/crate/.gitignore
deleted file mode 100644
index a9d37c56..0000000
--- a/third_party/rust/itoa/v1/crate/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-target
-Cargo.lock
diff --git a/third_party/rust/itoa/v1/crate/LICENSE-APACHE b/third_party/rust/itoa/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 16fe87b..0000000
--- a/third_party/rust/itoa/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/third_party/rust/itoa/v1/crate/LICENSE-MIT b/third_party/rust/itoa/v1/crate/LICENSE-MIT
deleted file mode 100644
index 31aa7938..0000000
--- a/third_party/rust/itoa/v1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,23 +0,0 @@
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/lazy_static/v1/BUILD.gn b/third_party/rust/lazy_static/v1/BUILD.gn
index 496f2ad..390666e 100644
--- a/third_party/rust/lazy_static/v1/BUILD.gn
+++ b/third_party/rust/lazy_static/v1/BUILD.gn
@@ -11,15 +11,17 @@
   crate_name = "lazy_static"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/src/lib.rs"
   sources = [
-    "//third_party/rust/lazy_static/v1/crate/src/core_lazy.rs",
-    "//third_party/rust/lazy_static/v1/crate/src/inline_lazy.rs",
-    "//third_party/rust/lazy_static/v1/crate/src/lib.rs",
-    "//third_party/rust/lazy_static/v1/crate/tests/no_std.rs",
-    "//third_party/rust/lazy_static/v1/crate/tests/test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/src/core_lazy.rs",
+    "//third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/src/inline_lazy.rs",
+    "//third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/tests/no_std.rs",
+    "//third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/tests/test.rs",
   ]
-  inputs = [ "//third_party/rust/lazy_static/v1/crate/README.md" ]
+  inputs = [
+    "//third_party/rust/chromium_crates_io/vendor/lazy_static-1.4.0/README.md",
+  ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/lazy_static/v1/crate/LICENSE-APACHE b/third_party/rust/lazy_static/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 16fe87b..0000000
--- a/third_party/rust/lazy_static/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/third_party/rust/libc/v0_2/BUILD.gn b/third_party/rust/libc/v0_2/BUILD.gn
index d447331..40aea99 100644
--- a/third_party/rust/libc/v0_2/BUILD.gn
+++ b/third_party/rust/libc/v0_2/BUILD.gn
@@ -11,235 +11,236 @@
   crate_name = "libc"
   epoch = "0.2"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/lib.rs"
   sources = [
-    "//third_party/rust/libc/v0_2/crate/build.rs",
-    "//third_party/rust/libc/v0_2/crate/src/fixed_width_ints.rs",
-    "//third_party/rust/libc/v0_2/crate/src/fuchsia/aarch64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/fuchsia/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/fuchsia/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/fuchsia/no_align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/fuchsia/riscv64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/fuchsia/x86_64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/hermit/aarch64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/hermit/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/hermit/x86_64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/lib.rs",
-    "//third_party/rust/libc/v0_2/crate/src/macros.rs",
-    "//third_party/rust/libc/v0_2/crate/src/psp.rs",
-    "//third_party/rust/libc/v0_2/crate/src/sgx.rs",
-    "//third_party/rust/libc/v0_2/crate/src/solid/aarch64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/solid/arm.rs",
-    "//third_party/rust/libc/v0_2/crate/src/solid/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/switch.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/aix/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/aix/powerpc64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b32/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b32/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/aarch64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/aarch64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/x86_64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/b64/x86_64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/long_array.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/apple/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/dragonfly/errno.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/dragonfly/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/aarch64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/arm.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd12/b64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd12/x86_64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd13/b64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd13/x86_64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd14/b64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/freebsd14/x86_64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/powerpc.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/riscv64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/x86.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/x86_64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/freebsd/x86_64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/freebsdlike/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/aarch64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/arm.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/powerpc.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/sparc64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/x86.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/netbsd/x86_64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/aarch64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/arm.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/mips64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/powerpc.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/powerpc64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/riscv64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/sparc64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/x86.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/bsd/netbsdlike/openbsd/x86_64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/haiku/b32.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/haiku/b64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/haiku/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/haiku/native.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/haiku/x86_64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/hermit/aarch64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/hermit/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/hermit/x86_64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b32/arm.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b32/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b32/x86/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b32/x86/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/aarch64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/aarch64/int128.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/aarch64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/riscv64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/riscv64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/x86_64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/b64/x86_64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/android/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/emscripten/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/emscripten/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/emscripten/no_align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/arch/generic/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/arch/mips/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/arch/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/arch/powerpc/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/arch/sparc/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/arm/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/arm/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/m68k/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/mips/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/mips/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/powerpc.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/riscv32/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/sparc/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/x86/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b32/x86/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/aarch64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/aarch64/ilp32.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/aarch64/int128.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/aarch64/lp64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/loongarch64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/mips64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/powerpc64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/riscv64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/s390x.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/sparc64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/x86_64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/gnu/no_align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/arm/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/arm/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/hexagon.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/mips/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/mips/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/powerpc.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/riscv32/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/riscv32/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/x86/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b32/x86/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/aarch64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/aarch64/int128.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/mips64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/powerpc64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/riscv64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/s390x.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/x86_64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/musl/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/no_align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/non_exhaustive.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/arm/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/arm/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/arm/no_align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips32/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips32/no_align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips64/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mips64/no_align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mips/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/no_align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/x86_64/l4re.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/x86_64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/linux/uclibc/x86_64/other.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/linux_like/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/newlib/aarch64/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/newlib/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/newlib/arm/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/newlib/espidf/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/newlib/generic.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/newlib/horizon/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/newlib/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/newlib/no_align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/newlib/powerpc/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/newlib/vita/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/no_align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/nto/aarch64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/nto/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/nto/neutrino.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/nto/x86_64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/redox/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/solarish/compat.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/solarish/illumos.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/solarish/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/solarish/solaris.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/solarish/x86.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/solarish/x86_64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/unix/solarish/x86_common.rs",
-    "//third_party/rust/libc/v0_2/crate/src/vxworks/aarch64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/vxworks/arm.rs",
-    "//third_party/rust/libc/v0_2/crate/src/vxworks/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/vxworks/powerpc.rs",
-    "//third_party/rust/libc/v0_2/crate/src/vxworks/powerpc64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/vxworks/x86.rs",
-    "//third_party/rust/libc/v0_2/crate/src/vxworks/x86_64.rs",
-    "//third_party/rust/libc/v0_2/crate/src/wasi.rs",
-    "//third_party/rust/libc/v0_2/crate/src/windows/gnu/align.rs",
-    "//third_party/rust/libc/v0_2/crate/src/windows/gnu/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/windows/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/windows/msvc/mod.rs",
-    "//third_party/rust/libc/v0_2/crate/src/xous.rs",
-    "//third_party/rust/libc/v0_2/crate/tests/const_fn.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fixed_width_ints.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/aarch64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/no_align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/riscv64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/fuchsia/x86_64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/hermit/aarch64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/hermit/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/hermit/x86_64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/macros.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/psp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/sgx.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/solid/aarch64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/solid/arm.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/solid/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/switch.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/aix/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/aix/powerpc64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b32/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b32/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/aarch64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/aarch64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/x86_64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/b64/x86_64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/long_array.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/apple/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/dragonfly/errno.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/dragonfly/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/aarch64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/arm.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd12/b64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd12/x86_64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd13/b64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd13/x86_64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd14/b64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/freebsd14/x86_64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/powerpc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/riscv64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/x86.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/x86_64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/freebsd/x86_64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/freebsdlike/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/aarch64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/arm.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/powerpc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/sparc64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/x86.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/netbsd/x86_64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/aarch64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/arm.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/mips64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/powerpc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/powerpc64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/riscv64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/sparc64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/x86.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/bsd/netbsdlike/openbsd/x86_64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/haiku/b32.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/haiku/b64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/haiku/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/haiku/native.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/haiku/x86_64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/hermit/aarch64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/hermit/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/hermit/x86_64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b32/arm.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b32/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b32/x86/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b32/x86/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/aarch64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/aarch64/int128.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/aarch64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/riscv64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/riscv64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/x86_64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/b64/x86_64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/android/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/emscripten/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/emscripten/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/emscripten/no_align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/arch/generic/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/arch/mips/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/arch/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/arch/powerpc/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/arch/sparc/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/arm/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/arm/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/m68k/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/mips/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/mips/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/powerpc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/riscv32/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/sparc/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/x86/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b32/x86/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/aarch64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/aarch64/ilp32.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/aarch64/int128.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/aarch64/lp64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/loongarch64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/mips64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/powerpc64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/riscv64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/s390x.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/sparc64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/x86_64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/gnu/no_align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/arm/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/arm/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/hexagon.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/mips/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/mips/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/powerpc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/riscv32/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/riscv32/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/x86/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b32/x86/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/aarch64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/aarch64/int128.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/mips64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/powerpc64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/riscv64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/s390x.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/x86_64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/musl/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/no_align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/non_exhaustive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/arm/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/arm/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/arm/no_align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips32/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips32/no_align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips64/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mips64/no_align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mips/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/no_align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/x86_64/l4re.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/x86_64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/linux/uclibc/x86_64/other.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/linux_like/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/aarch64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/arm/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/espidf/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/generic.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/horizon/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/no_align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/powerpc/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/newlib/vita/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/no_align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/nto/aarch64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/nto/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/nto/neutrino.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/nto/x86_64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/redox/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/compat.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/illumos.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/solaris.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/x86.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/x86_64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/unix/solarish/x86_common.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/aarch64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/arm.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/powerpc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/powerpc64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/x86.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/vxworks/x86_64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/wasi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/windows/gnu/align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/windows/gnu/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/windows/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/windows/msvc/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/src/xous.rs",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/tests/const_fn.rs",
   ]
   inputs = [
-    "//third_party/rust/libc/v0_2/crate/CONTRIBUTING.md",
-    "//third_party/rust/libc/v0_2/crate/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/CONTRIBUTING.md",
+    "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/README.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
@@ -253,8 +254,10 @@
   library_configs += [ "//build/config/compiler:no_chromium_code" ]
   executable_configs -= [ "//build/config/compiler:chromium_code" ]
   executable_configs += [ "//build/config/compiler:no_chromium_code" ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root =
+      "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/build.rs"
+  build_sources =
+      [ "//third_party/rust/chromium_crates_io/vendor/libc-0.2.144/build.rs" ]
 
   # Only for usage from third-party crates. Add the crate to
   # third_party.toml to use it from first-party code.
diff --git a/third_party/rust/libc/v0_2/crate/LICENSE-APACHE b/third_party/rust/libc/v0_2/crate/LICENSE-APACHE
deleted file mode 100644
index 1b5ec8b..0000000
--- a/third_party/rust/libc/v0_2/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,176 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
diff --git a/third_party/rust/link_cplusplus/v1/BUILD.gn b/third_party/rust/link_cplusplus/v1/BUILD.gn
index a8075e6..a2737a29 100644
--- a/third_party/rust/link_cplusplus/v1/BUILD.gn
+++ b/third_party/rust/link_cplusplus/v1/BUILD.gn
@@ -11,12 +11,12 @@
   crate_name = "link_cplusplus"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/src/lib.rs"
   sources = [
-    "//third_party/rust/link_cplusplus/v1/crate/build.rs",
-    "//third_party/rust/link_cplusplus/v1/crate/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/src/lib.rs",
   ]
-  inputs = [ "//third_party/rust/link_cplusplus/v1/crate/README.md" ]
+  inputs = [ "//third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
@@ -29,8 +29,8 @@
   library_configs += [ "//build/config/compiler:no_chromium_code" ]
   executable_configs -= [ "//build/config/compiler:chromium_code" ]
   executable_configs += [ "//build/config/compiler:no_chromium_code" ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root = "//third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/build.rs"
+  build_sources = [ "//third_party/rust/chromium_crates_io/vendor/link-cplusplus-1.0.9/build.rs" ]
 
   # Only for usage from third-party crates. Add the crate to
   # third_party.toml to use it from first-party code.
diff --git a/third_party/rust/link_cplusplus/v1/crate/.github/FUNDING.yml b/third_party/rust/link_cplusplus/v1/crate/.github/FUNDING.yml
deleted file mode 100644
index 7507077..0000000
--- a/third_party/rust/link_cplusplus/v1/crate/.github/FUNDING.yml
+++ /dev/null
@@ -1 +0,0 @@
-github: dtolnay
diff --git a/third_party/rust/link_cplusplus/v1/crate/LICENSE-APACHE b/third_party/rust/link_cplusplus/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 1b5ec8b..0000000
--- a/third_party/rust/link_cplusplus/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,176 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
diff --git a/third_party/rust/link_cplusplus/v1/crate/LICENSE-MIT b/third_party/rust/link_cplusplus/v1/crate/LICENSE-MIT
deleted file mode 100644
index 31aa7938..0000000
--- a/third_party/rust/link_cplusplus/v1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,23 +0,0 @@
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/log/v0_4/BUILD.gn b/third_party/rust/log/v0_4/BUILD.gn
index 5cc83080..3a38dd5 100644
--- a/third_party/rust/log/v0_4/BUILD.gn
+++ b/third_party/rust/log/v0_4/BUILD.gn
@@ -11,22 +11,23 @@
   crate_name = "log"
   epoch = "0.4"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/lib.rs"
   sources = [
-    "//third_party/rust/log/v0_4/crate/benches/value.rs",
-    "//third_party/rust/log/v0_4/crate/build.rs",
-    "//third_party/rust/log/v0_4/crate/src/kv/error.rs",
-    "//third_party/rust/log/v0_4/crate/src/kv/key.rs",
-    "//third_party/rust/log/v0_4/crate/src/kv/mod.rs",
-    "//third_party/rust/log/v0_4/crate/src/kv/source.rs",
-    "//third_party/rust/log/v0_4/crate/src/kv/value.rs",
-    "//third_party/rust/log/v0_4/crate/src/lib.rs",
-    "//third_party/rust/log/v0_4/crate/src/macros.rs",
-    "//third_party/rust/log/v0_4/crate/src/serde.rs",
+    "//third_party/rust/chromium_crates_io/vendor/log-0.4.17/benches/value.rs",
+    "//third_party/rust/chromium_crates_io/vendor/log-0.4.17/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/kv/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/kv/key.rs",
+    "//third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/kv/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/kv/source.rs",
+    "//third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/kv/value.rs",
+    "//third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/macros.rs",
+    "//third_party/rust/chromium_crates_io/vendor/log-0.4.17/src/serde.rs",
   ]
   inputs = [
-    "//third_party/rust/log/v0_4/crate/CHANGELOG.md",
-    "//third_party/rust/log/v0_4/crate/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/log-0.4.17/CHANGELOG.md",
+    "//third_party/rust/chromium_crates_io/vendor/log-0.4.17/README.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
@@ -41,8 +42,10 @@
   executable_configs -= [ "//build/config/compiler:chromium_code" ]
   executable_configs += [ "//build/config/compiler:no_chromium_code" ]
   deps = [ "//third_party/rust/cfg_if/v1:lib" ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root =
+      "//third_party/rust/chromium_crates_io/vendor/log-0.4.17/build.rs"
+  build_sources =
+      [ "//third_party/rust/chromium_crates_io/vendor/log-0.4.17/build.rs" ]
 
   # Only for usage from third-party crates. Add the crate to
   # third_party.toml to use it from first-party code.
diff --git a/third_party/rust/memchr/v2/BUILD.gn b/third_party/rust/memchr/v2/BUILD.gn
index cfed85e..4c6981b 100644
--- a/third_party/rust/memchr/v2/BUILD.gn
+++ b/third_party/rust/memchr/v2/BUILD.gn
@@ -11,45 +11,47 @@
   crate_name = "memchr"
   epoch = "2"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/lib.rs"
   sources = [
-    "//third_party/rust/memchr/v2/crate/build.rs",
-    "//third_party/rust/memchr/v2/crate/src/cow.rs",
-    "//third_party/rust/memchr/v2/crate/src/lib.rs",
-    "//third_party/rust/memchr/v2/crate/src/memchr/c.rs",
-    "//third_party/rust/memchr/v2/crate/src/memchr/fallback.rs",
-    "//third_party/rust/memchr/v2/crate/src/memchr/iter.rs",
-    "//third_party/rust/memchr/v2/crate/src/memchr/mod.rs",
-    "//third_party/rust/memchr/v2/crate/src/memchr/naive.rs",
-    "//third_party/rust/memchr/v2/crate/src/memchr/x86/avx.rs",
-    "//third_party/rust/memchr/v2/crate/src/memchr/x86/mod.rs",
-    "//third_party/rust/memchr/v2/crate/src/memchr/x86/sse2.rs",
-    "//third_party/rust/memchr/v2/crate/src/memchr/x86/sse42.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/byte_frequencies.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/genericsimd.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/mod.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/prefilter/fallback.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/prefilter/genericsimd.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/prefilter/mod.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/prefilter/x86/avx.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/prefilter/x86/mod.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/prefilter/x86/sse.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/rabinkarp.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/rarebytes.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/twoway.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/util.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/vector.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/x86/avx.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/x86/mod.rs",
-    "//third_party/rust/memchr/v2/crate/src/memmem/x86/sse.rs",
-    "//third_party/rust/memchr/v2/crate/src/tests/memchr/iter.rs",
-    "//third_party/rust/memchr/v2/crate/src/tests/memchr/memchr.rs",
-    "//third_party/rust/memchr/v2/crate/src/tests/memchr/mod.rs",
-    "//third_party/rust/memchr/v2/crate/src/tests/memchr/simple.rs",
-    "//third_party/rust/memchr/v2/crate/src/tests/memchr/testdata.rs",
-    "//third_party/rust/memchr/v2/crate/src/tests/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/cow.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/c.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/fallback.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/iter.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/naive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/x86/avx.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/x86/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/x86/sse2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memchr/x86/sse42.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/byte_frequencies.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/genericsimd.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/fallback.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/genericsimd.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/x86/avx.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/x86/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/prefilter/x86/sse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/rabinkarp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/rarebytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/twoway.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/util.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/vector.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/x86/avx.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/x86/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/memmem/x86/sse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/memchr/iter.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/memchr/memchr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/memchr/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/memchr/simple.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/memchr/testdata.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/src/tests/mod.rs",
   ]
-  inputs = [ "//third_party/rust/memchr/v2/crate/README.md" ]
+  inputs =
+      [ "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
@@ -63,8 +65,10 @@
   executable_configs -= [ "//build/config/compiler:chromium_code" ]
   executable_configs += [ "//build/config/compiler:no_chromium_code" ]
   features = [ "std" ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root =
+      "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/build.rs"
+  build_sources =
+      [ "//third_party/rust/chromium_crates_io/vendor/memchr-2.4.1/build.rs" ]
 
   # Only for usage from third-party crates. Add the crate to
   # third_party.toml to use it from first-party code.
diff --git a/third_party/rust/memchr/v2/crate/COPYING b/third_party/rust/memchr/v2/crate/COPYING
deleted file mode 100644
index bb9c20a0..0000000
--- a/third_party/rust/memchr/v2/crate/COPYING
+++ /dev/null
@@ -1,3 +0,0 @@
-This project is dual-licensed under the Unlicense and MIT licenses.
-
-You may use this code under the terms of either license.
diff --git a/third_party/rust/memchr/v2/crate/LICENSE-MIT b/third_party/rust/memchr/v2/crate/LICENSE-MIT
deleted file mode 100644
index 3b0a5dc..0000000
--- a/third_party/rust/memchr/v2/crate/LICENSE-MIT
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Andrew Gallant
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/third_party/rust/memchr/v2/crate/UNLICENSE b/third_party/rust/memchr/v2/crate/UNLICENSE
deleted file mode 100644
index 68a49da..0000000
--- a/third_party/rust/memchr/v2/crate/UNLICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-This is free and unencumbered software released into the public domain.
-
-Anyone is free to copy, modify, publish, use, compile, sell, or
-distribute this software, either in source code form or as a compiled
-binary, for any purpose, commercial or non-commercial, and by any
-means.
-
-In jurisdictions that recognize copyright laws, the author or authors
-of this software dedicate any and all copyright interest in the
-software to the public domain. We make this dedication for the benefit
-of the public at large and to the detriment of our heirs and
-successors. We intend this dedication to be an overt act of
-relinquishment in perpetuity of all present and future rights to this
-software under copyright law.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-For more information, please refer to <http://unlicense.org/>
diff --git a/third_party/rust/memchr/v2/crate/rustfmt.toml b/third_party/rust/memchr/v2/crate/rustfmt.toml
deleted file mode 100644
index aa37a218..0000000
--- a/third_party/rust/memchr/v2/crate/rustfmt.toml
+++ /dev/null
@@ -1,2 +0,0 @@
-max_width = 79
-use_small_heuristics = "max"
diff --git a/third_party/rust/memoffset/v0_6/BUILD.gn b/third_party/rust/memoffset/v0_6/BUILD.gn
index e773f6a6..0b27fb15 100644
--- a/third_party/rust/memoffset/v0_6/BUILD.gn
+++ b/third_party/rust/memoffset/v0_6/BUILD.gn
@@ -11,15 +11,18 @@
   crate_name = "memoffset"
   epoch = "0.6"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/src/lib.rs"
   sources = [
-    "//third_party/rust/memoffset/v0_6/crate/build.rs",
-    "//third_party/rust/memoffset/v0_6/crate/src/lib.rs",
-    "//third_party/rust/memoffset/v0_6/crate/src/offset_of.rs",
-    "//third_party/rust/memoffset/v0_6/crate/src/raw_field.rs",
-    "//third_party/rust/memoffset/v0_6/crate/src/span_of.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/src/offset_of.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/src/raw_field.rs",
+    "//third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/src/span_of.rs",
   ]
-  inputs = [ "//third_party/rust/memoffset/v0_6/crate/README.md" ]
+  inputs = [
+    "//third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/README.md",
+  ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
@@ -34,6 +37,9 @@
   executable_configs += [ "//build/config/compiler:no_chromium_code" ]
   build_deps = [ "//third_party/rust/autocfg/v1:buildrs_support" ]
   features = [ "unstable_const" ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root =
+      "//third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/build.rs"
+  build_sources = [
+    "//third_party/rust/chromium_crates_io/vendor/memoffset-0.6.5/build.rs",
+  ]
 }
diff --git a/third_party/rust/ppv_lite86/v0_2/BUILD.gn b/third_party/rust/ppv_lite86/v0_2/BUILD.gn
index da46714..4c210e3 100644
--- a/third_party/rust/ppv_lite86/v0_2/BUILD.gn
+++ b/third_party/rust/ppv_lite86/v0_2/BUILD.gn
@@ -11,16 +11,16 @@
   crate_name = "ppv_lite86"
   epoch = "0.2"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/lib.rs"
   sources = [
-    "//third_party/rust/ppv_lite86/v0_2/crate/src/generic.rs",
-    "//third_party/rust/ppv_lite86/v0_2/crate/src/lib.rs",
-    "//third_party/rust/ppv_lite86/v0_2/crate/src/soft.rs",
-    "//third_party/rust/ppv_lite86/v0_2/crate/src/types.rs",
-    "//third_party/rust/ppv_lite86/v0_2/crate/src/x86_64/mod.rs",
-    "//third_party/rust/ppv_lite86/v0_2/crate/src/x86_64/sse2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/generic.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/soft.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/types.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/x86_64/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/src/x86_64/sse2.rs",
   ]
-  inputs = [ "//third_party/rust/ppv_lite86/v0_2/crate/CHANGELOG.md" ]
+  inputs = [ "//third_party/rust/chromium_crates_io/vendor/ppv-lite86-0.2.17/CHANGELOG.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/proc_macro2/v1/BUILD.gn b/third_party/rust/proc_macro2/v1/BUILD.gn
index b2142ecf..0958102 100644
--- a/third_party/rust/proc_macro2/v1/BUILD.gn
+++ b/third_party/rust/proc_macro2/v1/BUILD.gn
@@ -11,26 +11,28 @@
   crate_name = "proc_macro2"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/lib.rs"
   sources = [
-    "//third_party/rust/proc_macro2/v1/crate/build.rs",
-    "//third_party/rust/proc_macro2/v1/crate/src/detection.rs",
-    "//third_party/rust/proc_macro2/v1/crate/src/extra.rs",
-    "//third_party/rust/proc_macro2/v1/crate/src/fallback.rs",
-    "//third_party/rust/proc_macro2/v1/crate/src/lib.rs",
-    "//third_party/rust/proc_macro2/v1/crate/src/location.rs",
-    "//third_party/rust/proc_macro2/v1/crate/src/marker.rs",
-    "//third_party/rust/proc_macro2/v1/crate/src/parse.rs",
-    "//third_party/rust/proc_macro2/v1/crate/src/rcvec.rs",
-    "//third_party/rust/proc_macro2/v1/crate/src/wrapper.rs",
-    "//third_party/rust/proc_macro2/v1/crate/tests/comments.rs",
-    "//third_party/rust/proc_macro2/v1/crate/tests/features.rs",
-    "//third_party/rust/proc_macro2/v1/crate/tests/marker.rs",
-    "//third_party/rust/proc_macro2/v1/crate/tests/test.rs",
-    "//third_party/rust/proc_macro2/v1/crate/tests/test_fmt.rs",
-    "//third_party/rust/proc_macro2/v1/crate/tests/test_size.rs",
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/detection.rs",
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/extra.rs",
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/fallback.rs",
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/location.rs",
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/marker.rs",
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/rcvec.rs",
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/src/wrapper.rs",
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/comments.rs",
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/features.rs",
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/marker.rs",
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/test_fmt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/tests/test_size.rs",
   ]
-  inputs = [ "//third_party/rust/proc_macro2/v1/crate/README.md" ]
+  inputs = [
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/README.md",
+  ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
@@ -49,6 +51,9 @@
     "proc-macro",
     "span-locations",
   ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root =
+      "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/build.rs"
+  build_sources = [
+    "//third_party/rust/chromium_crates_io/vendor/proc-macro2-1.0.66/build.rs",
+  ]
 }
diff --git a/third_party/rust/proc_macro2/v1/crate/.github/FUNDING.yml b/third_party/rust/proc_macro2/v1/crate/.github/FUNDING.yml
deleted file mode 100644
index 7507077..0000000
--- a/third_party/rust/proc_macro2/v1/crate/.github/FUNDING.yml
+++ /dev/null
@@ -1 +0,0 @@
-github: dtolnay
diff --git a/third_party/rust/proc_macro2/v1/crate/.gitignore b/third_party/rust/proc_macro2/v1/crate/.gitignore
deleted file mode 100644
index 6936990..0000000
--- a/third_party/rust/proc_macro2/v1/crate/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-/target
-**/*.rs.bk
-Cargo.lock
diff --git a/third_party/rust/proc_macro2/v1/crate/LICENSE-APACHE b/third_party/rust/proc_macro2/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 1b5ec8b..0000000
--- a/third_party/rust/proc_macro2/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,176 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
diff --git a/third_party/rust/proc_macro2/v1/crate/LICENSE-MIT b/third_party/rust/proc_macro2/v1/crate/LICENSE-MIT
deleted file mode 100644
index 31aa7938..0000000
--- a/third_party/rust/proc_macro2/v1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,23 +0,0 @@
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/qr_code/v2/BUILD.gn b/third_party/rust/qr_code/v2/BUILD.gn
index 1ec4ab3..8ca9681 100644
--- a/third_party/rust/qr_code/v2/BUILD.gn
+++ b/third_party/rust/qr_code/v2/BUILD.gn
@@ -11,29 +11,30 @@
   crate_name = "qr_code"
   epoch = "2"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/lib.rs"
   sources = [
-    "//third_party/rust/qr_code/v2/crate/examples/decode_bmp.rs",
-    "//third_party/rust/qr_code/v2/crate/examples/encode_bmp.rs",
-    "//third_party/rust/qr_code/v2/crate/examples/encode_string.rs",
-    "//third_party/rust/qr_code/v2/crate/src/bits.rs",
-    "//third_party/rust/qr_code/v2/crate/src/canvas.rs",
-    "//third_party/rust/qr_code/v2/crate/src/cast.rs",
-    "//third_party/rust/qr_code/v2/crate/src/decode/bmp_grid.rs",
-    "//third_party/rust/qr_code/v2/crate/src/decode/decode.rs",
-    "//third_party/rust/qr_code/v2/crate/src/decode/mod.rs",
-    "//third_party/rust/qr_code/v2/crate/src/decode/version_db.rs",
-    "//third_party/rust/qr_code/v2/crate/src/ec.rs",
-    "//third_party/rust/qr_code/v2/crate/src/fuzz.rs",
-    "//third_party/rust/qr_code/v2/crate/src/lib.rs",
-    "//third_party/rust/qr_code/v2/crate/src/optimize.rs",
-    "//third_party/rust/qr_code/v2/crate/src/render.rs",
-    "//third_party/rust/qr_code/v2/crate/src/structured.rs",
-    "//third_party/rust/qr_code/v2/crate/src/types.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/examples/decode_bmp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/examples/encode_bmp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/examples/encode_string.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/bits.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/canvas.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/cast.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/decode/bmp_grid.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/decode/decode.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/decode/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/decode/version_db.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/ec.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/fuzz.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/optimize.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/render.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/structured.rs",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/src/types.rs",
   ]
   inputs = [
-    "//third_party/rust/qr_code/v2/crate/README.md",
-    "//third_party/rust/qr_code/v2/crate/test_data/large_base64.md",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/qr_code-2.0.0/test_data/large_base64.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
diff --git a/third_party/rust/quote/v1/BUILD.gn b/third_party/rust/quote/v1/BUILD.gn
index 7c0f270..1d0616fa 100644
--- a/third_party/rust/quote/v1/BUILD.gn
+++ b/third_party/rust/quote/v1/BUILD.gn
@@ -11,26 +11,28 @@
   crate_name = "quote"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/lib.rs"
   sources = [
-    "//third_party/rust/quote/v1/crate/src/ext.rs",
-    "//third_party/rust/quote/v1/crate/src/format.rs",
-    "//third_party/rust/quote/v1/crate/src/ident_fragment.rs",
-    "//third_party/rust/quote/v1/crate/src/lib.rs",
-    "//third_party/rust/quote/v1/crate/src/runtime.rs",
-    "//third_party/rust/quote/v1/crate/src/spanned.rs",
-    "//third_party/rust/quote/v1/crate/src/to_tokens.rs",
-    "//third_party/rust/quote/v1/crate/tests/compiletest.rs",
-    "//third_party/rust/quote/v1/crate/tests/test.rs",
-    "//third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter-interpolated-dup.rs",
-    "//third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter-interpolated.rs",
-    "//third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter-separated.rs",
-    "//third_party/rust/quote/v1/crate/tests/ui/does-not-have-iter.rs",
-    "//third_party/rust/quote/v1/crate/tests/ui/not-quotable.rs",
-    "//third_party/rust/quote/v1/crate/tests/ui/not-repeatable.rs",
-    "//third_party/rust/quote/v1/crate/tests/ui/wrong-type-span.rs",
+    "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/ext.rs",
+    "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/format.rs",
+    "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/ident_fragment.rs",
+    "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/runtime.rs",
+    "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/spanned.rs",
+    "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/src/to_tokens.rs",
+    "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/compiletest.rs",
+    "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter-interpolated-dup.rs",
+    "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter-interpolated.rs",
+    "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter-separated.rs",
+    "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/does-not-have-iter.rs",
+    "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/not-quotable.rs",
+    "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/not-repeatable.rs",
+    "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/tests/ui/wrong-type-span.rs",
   ]
-  inputs = [ "//third_party/rust/quote/v1/crate/README.md" ]
+  inputs =
+      [ "//third_party/rust/chromium_crates_io/vendor/quote-1.0.33/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/quote/v1/crate/.github/FUNDING.yml b/third_party/rust/quote/v1/crate/.github/FUNDING.yml
deleted file mode 100644
index 7507077..0000000
--- a/third_party/rust/quote/v1/crate/.github/FUNDING.yml
+++ /dev/null
@@ -1 +0,0 @@
-github: dtolnay
diff --git a/third_party/rust/quote/v1/crate/LICENSE-APACHE b/third_party/rust/quote/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 1b5ec8b..0000000
--- a/third_party/rust/quote/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,176 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
diff --git a/third_party/rust/quote/v1/crate/LICENSE-MIT b/third_party/rust/quote/v1/crate/LICENSE-MIT
deleted file mode 100644
index 31aa7938..0000000
--- a/third_party/rust/quote/v1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,23 +0,0 @@
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/quote/v1/crate/rust-toolchain.toml b/third_party/rust/quote/v1/crate/rust-toolchain.toml
deleted file mode 100644
index 20fe888..0000000
--- a/third_party/rust/quote/v1/crate/rust-toolchain.toml
+++ /dev/null
@@ -1,2 +0,0 @@
-[toolchain]
-components = ["rust-src"]
diff --git a/third_party/rust/quote/v1/crate/tests/compiletest.rs b/third_party/rust/quote/v1/crate/tests/compiletest.rs
deleted file mode 100644
index 7974a62..0000000
--- a/third_party/rust/quote/v1/crate/tests/compiletest.rs
+++ /dev/null
@@ -1,7 +0,0 @@
-#[rustversion::attr(not(nightly), ignore)]
-#[cfg_attr(miri, ignore)]
-#[test]
-fn ui() {
-    let t = trybuild::TestCases::new();
-    t.compile_fail("tests/ui/*.rs");
-}
diff --git a/third_party/rust/rand/v0_8/BUILD.gn b/third_party/rust/rand/v0_8/BUILD.gn
index bea7ba93..ea1d147 100644
--- a/third_party/rust/rand/v0_8/BUILD.gn
+++ b/third_party/rust/rand/v0_8/BUILD.gn
@@ -11,38 +11,39 @@
   crate_name = "rand"
   epoch = "0.8"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/lib.rs"
   sources = [
-    "//third_party/rust/rand/v0_8/crate/src/distributions/bernoulli.rs",
-    "//third_party/rust/rand/v0_8/crate/src/distributions/distribution.rs",
-    "//third_party/rust/rand/v0_8/crate/src/distributions/float.rs",
-    "//third_party/rust/rand/v0_8/crate/src/distributions/integer.rs",
-    "//third_party/rust/rand/v0_8/crate/src/distributions/mod.rs",
-    "//third_party/rust/rand/v0_8/crate/src/distributions/other.rs",
-    "//third_party/rust/rand/v0_8/crate/src/distributions/slice.rs",
-    "//third_party/rust/rand/v0_8/crate/src/distributions/uniform.rs",
-    "//third_party/rust/rand/v0_8/crate/src/distributions/utils.rs",
-    "//third_party/rust/rand/v0_8/crate/src/distributions/weighted.rs",
-    "//third_party/rust/rand/v0_8/crate/src/distributions/weighted_index.rs",
-    "//third_party/rust/rand/v0_8/crate/src/lib.rs",
-    "//third_party/rust/rand/v0_8/crate/src/prelude.rs",
-    "//third_party/rust/rand/v0_8/crate/src/rng.rs",
-    "//third_party/rust/rand/v0_8/crate/src/rngs/adapter/mod.rs",
-    "//third_party/rust/rand/v0_8/crate/src/rngs/adapter/read.rs",
-    "//third_party/rust/rand/v0_8/crate/src/rngs/adapter/reseeding.rs",
-    "//third_party/rust/rand/v0_8/crate/src/rngs/mock.rs",
-    "//third_party/rust/rand/v0_8/crate/src/rngs/mod.rs",
-    "//third_party/rust/rand/v0_8/crate/src/rngs/small.rs",
-    "//third_party/rust/rand/v0_8/crate/src/rngs/std.rs",
-    "//third_party/rust/rand/v0_8/crate/src/rngs/thread.rs",
-    "//third_party/rust/rand/v0_8/crate/src/rngs/xoshiro128plusplus.rs",
-    "//third_party/rust/rand/v0_8/crate/src/rngs/xoshiro256plusplus.rs",
-    "//third_party/rust/rand/v0_8/crate/src/seq/index.rs",
-    "//third_party/rust/rand/v0_8/crate/src/seq/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/bernoulli.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/distribution.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/float.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/integer.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/other.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/slice.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/uniform.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/utils.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/weighted.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/distributions/weighted_index.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/prelude.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rng.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/adapter/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/adapter/read.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/adapter/reseeding.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/mock.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/small.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/std.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/thread.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/xoshiro128plusplus.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/rngs/xoshiro256plusplus.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/seq/index.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/src/seq/mod.rs",
   ]
   inputs = [
-    "//third_party/rust/rand/v0_8/crate/CHANGELOG.md",
-    "//third_party/rust/rand/v0_8/crate/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/CHANGELOG.md",
+    "//third_party/rust/chromium_crates_io/vendor/rand-0.8.5/README.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
diff --git a/third_party/rust/rand/v0_8/crate/LICENSE-MIT b/third_party/rust/rand/v0_8/crate/LICENSE-MIT
deleted file mode 100644
index d93b5ba..0000000
--- a/third_party/rust/rand/v0_8/crate/LICENSE-MIT
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright 2018 Developers of the Rand project
-Copyright (c) 2014 The Rust Project Developers
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/rand_chacha/v0_3/BUILD.gn b/third_party/rust/rand_chacha/v0_3/BUILD.gn
index 6dd3e74..32cb8b1 100644
--- a/third_party/rust/rand_chacha/v0_3/BUILD.gn
+++ b/third_party/rust/rand_chacha/v0_3/BUILD.gn
@@ -11,15 +11,15 @@
   crate_name = "rand_chacha"
   epoch = "0.3"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/src/lib.rs"
   sources = [
-    "//third_party/rust/rand_chacha/v0_3/crate/src/chacha.rs",
-    "//third_party/rust/rand_chacha/v0_3/crate/src/guts.rs",
-    "//third_party/rust/rand_chacha/v0_3/crate/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/src/chacha.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/src/guts.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/src/lib.rs",
   ]
   inputs = [
-    "//third_party/rust/rand_chacha/v0_3/crate/CHANGELOG.md",
-    "//third_party/rust/rand_chacha/v0_3/crate/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/CHANGELOG.md",
+    "//third_party/rust/chromium_crates_io/vendor/rand_chacha-0.3.1/README.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
diff --git a/third_party/rust/rand_chacha/v0_3/crate/COPYRIGHT b/third_party/rust/rand_chacha/v0_3/crate/COPYRIGHT
deleted file mode 100644
index 468d907..0000000
--- a/third_party/rust/rand_chacha/v0_3/crate/COPYRIGHT
+++ /dev/null
@@ -1,12 +0,0 @@
-Copyrights in the Rand project are retained by their contributors. No
-copyright assignment is required to contribute to the Rand project.
-
-For full authorship information, see the version control history.
-
-Except as otherwise noted (below and/or in individual files), Rand is
-licensed under the Apache License, Version 2.0 <LICENSE-APACHE> or
-<http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-<LICENSE-MIT> or <http://opensource.org/licenses/MIT>, at your option.
-
-The Rand project includes code from the Rust project
-published under these same licenses.
diff --git a/third_party/rust/rand_chacha/v0_3/crate/LICENSE-APACHE b/third_party/rust/rand_chacha/v0_3/crate/LICENSE-APACHE
deleted file mode 100644
index 17d7468..0000000
--- a/third_party/rust/rand_chacha/v0_3/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     https://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	https://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/third_party/rust/rand_chacha/v0_3/crate/LICENSE-MIT b/third_party/rust/rand_chacha/v0_3/crate/LICENSE-MIT
deleted file mode 100644
index d93b5ba..0000000
--- a/third_party/rust/rand_chacha/v0_3/crate/LICENSE-MIT
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright 2018 Developers of the Rand project
-Copyright (c) 2014 The Rust Project Developers
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/rand_core/v0_6/BUILD.gn b/third_party/rust/rand_core/v0_6/BUILD.gn
index cd71c85..96c52c4 100644
--- a/third_party/rust/rand_core/v0_6/BUILD.gn
+++ b/third_party/rust/rand_core/v0_6/BUILD.gn
@@ -11,18 +11,19 @@
   crate_name = "rand_core"
   epoch = "0.6"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/lib.rs"
   sources = [
-    "//third_party/rust/rand_core/v0_6/crate/src/block.rs",
-    "//third_party/rust/rand_core/v0_6/crate/src/error.rs",
-    "//third_party/rust/rand_core/v0_6/crate/src/impls.rs",
-    "//third_party/rust/rand_core/v0_6/crate/src/le.rs",
-    "//third_party/rust/rand_core/v0_6/crate/src/lib.rs",
-    "//third_party/rust/rand_core/v0_6/crate/src/os.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/block.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/impls.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/le.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/src/os.rs",
   ]
   inputs = [
-    "//third_party/rust/rand_core/v0_6/crate/CHANGELOG.md",
-    "//third_party/rust/rand_core/v0_6/crate/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/CHANGELOG.md",
+    "//third_party/rust/chromium_crates_io/vendor/rand_core-0.6.4/README.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
diff --git a/third_party/rust/rand_core/v0_6/crate/COPYRIGHT b/third_party/rust/rand_core/v0_6/crate/COPYRIGHT
deleted file mode 100644
index 468d907..0000000
--- a/third_party/rust/rand_core/v0_6/crate/COPYRIGHT
+++ /dev/null
@@ -1,12 +0,0 @@
-Copyrights in the Rand project are retained by their contributors. No
-copyright assignment is required to contribute to the Rand project.
-
-For full authorship information, see the version control history.
-
-Except as otherwise noted (below and/or in individual files), Rand is
-licensed under the Apache License, Version 2.0 <LICENSE-APACHE> or
-<http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-<LICENSE-MIT> or <http://opensource.org/licenses/MIT>, at your option.
-
-The Rand project includes code from the Rust project
-published under these same licenses.
diff --git a/third_party/rust/rand_core/v0_6/crate/LICENSE-MIT b/third_party/rust/rand_core/v0_6/crate/LICENSE-MIT
deleted file mode 100644
index d93b5ba..0000000
--- a/third_party/rust/rand_core/v0_6/crate/LICENSE-MIT
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright 2018 Developers of the Rand project
-Copyright (c) 2014 The Rust Project Developers
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/rand_pcg/v0_3/BUILD.gn b/third_party/rust/rand_pcg/v0_3/BUILD.gn
index 309a1b8..07b2a9e 100644
--- a/third_party/rust/rand_pcg/v0_3/BUILD.gn
+++ b/third_party/rust/rand_pcg/v0_3/BUILD.gn
@@ -11,18 +11,19 @@
   crate_name = "rand_pcg"
   epoch = "0.3"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/src/lib.rs"
   sources = [
-    "//third_party/rust/rand_pcg/v0_3/crate/src/lib.rs",
-    "//third_party/rust/rand_pcg/v0_3/crate/src/pcg128.rs",
-    "//third_party/rust/rand_pcg/v0_3/crate/src/pcg64.rs",
-    "//third_party/rust/rand_pcg/v0_3/crate/tests/lcg128xsl64.rs",
-    "//third_party/rust/rand_pcg/v0_3/crate/tests/lcg64xsh32.rs",
-    "//third_party/rust/rand_pcg/v0_3/crate/tests/mcg128xsl64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/src/pcg128.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/src/pcg64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/tests/lcg128xsl64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/tests/lcg64xsh32.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/tests/mcg128xsl64.rs",
   ]
   inputs = [
-    "//third_party/rust/rand_pcg/v0_3/crate/CHANGELOG.md",
-    "//third_party/rust/rand_pcg/v0_3/crate/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/CHANGELOG.md",
+    "//third_party/rust/chromium_crates_io/vendor/rand_pcg-0.3.1/README.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
diff --git a/third_party/rust/rand_pcg/v0_3/crate/COPYRIGHT b/third_party/rust/rand_pcg/v0_3/crate/COPYRIGHT
deleted file mode 100644
index 468d907..0000000
--- a/third_party/rust/rand_pcg/v0_3/crate/COPYRIGHT
+++ /dev/null
@@ -1,12 +0,0 @@
-Copyrights in the Rand project are retained by their contributors. No
-copyright assignment is required to contribute to the Rand project.
-
-For full authorship information, see the version control history.
-
-Except as otherwise noted (below and/or in individual files), Rand is
-licensed under the Apache License, Version 2.0 <LICENSE-APACHE> or
-<http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-<LICENSE-MIT> or <http://opensource.org/licenses/MIT>, at your option.
-
-The Rand project includes code from the Rust project
-published under these same licenses.
diff --git a/third_party/rust/rand_pcg/v0_3/crate/LICENSE-APACHE b/third_party/rust/rand_pcg/v0_3/crate/LICENSE-APACHE
deleted file mode 100644
index 17d7468..0000000
--- a/third_party/rust/rand_pcg/v0_3/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     https://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	https://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/third_party/rust/read_fonts/v0_11/BUILD.gn b/third_party/rust/read_fonts/v0_11/BUILD.gn
index 3923b53..7c3bcd78 100644
--- a/third_party/rust/read_fonts/v0_11/BUILD.gn
+++ b/third_party/rust/read_fonts/v0_11/BUILD.gn
@@ -11,102 +11,104 @@
   crate_name = "read_fonts"
   epoch = "0.11"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/lib.rs"
   sources = [
-    "//third_party/rust/read_fonts/v0_11/crate/generated/font.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_avar.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_base.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_cff.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_cff2.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_cmap.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_colr.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_cpal.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_fvar.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_gdef.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_glyf.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_gpos.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_gsub.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_gvar.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_head.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_hhea.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_hmtx.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_hvar.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_layout.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_maxp.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_mvar.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_name.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_os2.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_post.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_postscript.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_stat.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_test_enum.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_test_flags.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_test_formats.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_test_offsets_arrays.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_test_records.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_variations.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_vhea.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_vmtx.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/generated/generated_vvar.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/array.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/codegen_test.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/font_data.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/lib.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/offset.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/offset_array.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/read.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/scaler_test.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/table_provider.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/table_ref.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/avar.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/base.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/cff.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/cff2.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/cmap.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/colr.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/cpal.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/fvar.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/gdef.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/glyf.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/gpos.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/gsub.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/gvar.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/head.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/hhea.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/hmtx.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/hvar.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/instance_record.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/layout.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/loca.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/lookupflag.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/maxp.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/mvar.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/name.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/os2.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/post.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/postscript.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/blend.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/charstring.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/dict.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/fd_select.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/index.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/stack.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/postscript/string.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/stat.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/value_record.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/variations.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/vhea.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/vmtx.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tables/vvar.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tests/gpos.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tests/layout.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tests/test_gdef.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tests/test_gsub.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/tests/test_helpers.rs",
-    "//third_party/rust/read_fonts/v0_11/crate/src/traversal.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/font.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_avar.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_base.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_cff.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_cff2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_cmap.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_colr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_cpal.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_fvar.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_gdef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_glyf.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_gpos.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_gsub.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_gvar.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_head.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_hhea.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_hmtx.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_hvar.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_layout.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_maxp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_mvar.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_name.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_os2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_post.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_postscript.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_stat.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_test_enum.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_test_flags.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_test_formats.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_test_offsets_arrays.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_test_records.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_variations.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_vhea.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_vmtx.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/generated/generated_vvar.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/array.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/codegen_test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/font_data.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/offset.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/offset_array.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/read.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/scaler_test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/table_provider.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/table_ref.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/avar.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/base.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/cff.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/cff2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/cmap.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/colr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/cpal.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/fvar.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/gdef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/glyf.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/gpos.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/gsub.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/gvar.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/head.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/hhea.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/hmtx.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/hvar.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/instance_record.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/layout.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/loca.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/lookupflag.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/maxp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/mvar.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/name.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/os2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/post.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/blend.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/charstring.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/dict.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/fd_select.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/index.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/stack.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/postscript/string.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/stat.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/value_record.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/variations.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/vhea.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/vmtx.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tables/vvar.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tests/gpos.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tests/layout.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tests/test_gdef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tests/test_gsub.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/tests/test_helpers.rs",
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/src/traversal.rs",
   ]
-  inputs = [ "//third_party/rust/read_fonts/v0_11/crate/README.md" ]
+  inputs = [
+    "//third_party/rust/chromium_crates_io/vendor/read-fonts-0.11.0/README.md",
+  ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/regex/v1/BUILD.gn b/third_party/rust/regex/v1/BUILD.gn
index 3ad7a88..a0a7cb75 100644
--- a/third_party/rust/regex/v1/BUILD.gn
+++ b/third_party/rust/regex/v1/BUILD.gn
@@ -11,78 +11,79 @@
   crate_name = "regex"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/lib.rs"
   sources = [
-    "//third_party/rust/regex/v1/crate/examples/shootout-regex-dna-bytes.rs",
-    "//third_party/rust/regex/v1/crate/examples/shootout-regex-dna-cheat.rs",
-    "//third_party/rust/regex/v1/crate/examples/shootout-regex-dna-replace.rs",
-    "//third_party/rust/regex/v1/crate/examples/shootout-regex-dna-single-cheat.rs",
-    "//third_party/rust/regex/v1/crate/examples/shootout-regex-dna-single.rs",
-    "//third_party/rust/regex/v1/crate/examples/shootout-regex-dna.rs",
-    "//third_party/rust/regex/v1/crate/src/backtrack.rs",
-    "//third_party/rust/regex/v1/crate/src/compile.rs",
-    "//third_party/rust/regex/v1/crate/src/dfa.rs",
-    "//third_party/rust/regex/v1/crate/src/error.rs",
-    "//third_party/rust/regex/v1/crate/src/exec.rs",
-    "//third_party/rust/regex/v1/crate/src/expand.rs",
-    "//third_party/rust/regex/v1/crate/src/find_byte.rs",
-    "//third_party/rust/regex/v1/crate/src/freqs.rs",
-    "//third_party/rust/regex/v1/crate/src/input.rs",
-    "//third_party/rust/regex/v1/crate/src/lib.rs",
-    "//third_party/rust/regex/v1/crate/src/literal/imp.rs",
-    "//third_party/rust/regex/v1/crate/src/literal/mod.rs",
-    "//third_party/rust/regex/v1/crate/src/pattern.rs",
-    "//third_party/rust/regex/v1/crate/src/pikevm.rs",
-    "//third_party/rust/regex/v1/crate/src/pool.rs",
-    "//third_party/rust/regex/v1/crate/src/prog.rs",
-    "//third_party/rust/regex/v1/crate/src/re_builder.rs",
-    "//third_party/rust/regex/v1/crate/src/re_bytes.rs",
-    "//third_party/rust/regex/v1/crate/src/re_set.rs",
-    "//third_party/rust/regex/v1/crate/src/re_trait.rs",
-    "//third_party/rust/regex/v1/crate/src/re_unicode.rs",
-    "//third_party/rust/regex/v1/crate/src/sparse.rs",
-    "//third_party/rust/regex/v1/crate/src/utf8.rs",
-    "//third_party/rust/regex/v1/crate/tests/api.rs",
-    "//third_party/rust/regex/v1/crate/tests/api_str.rs",
-    "//third_party/rust/regex/v1/crate/tests/bytes.rs",
-    "//third_party/rust/regex/v1/crate/tests/consistent.rs",
-    "//third_party/rust/regex/v1/crate/tests/crates_regex.rs",
-    "//third_party/rust/regex/v1/crate/tests/crazy.rs",
-    "//third_party/rust/regex/v1/crate/tests/flags.rs",
-    "//third_party/rust/regex/v1/crate/tests/fowler.rs",
-    "//third_party/rust/regex/v1/crate/tests/macros.rs",
-    "//third_party/rust/regex/v1/crate/tests/macros_bytes.rs",
-    "//third_party/rust/regex/v1/crate/tests/macros_str.rs",
-    "//third_party/rust/regex/v1/crate/tests/misc.rs",
-    "//third_party/rust/regex/v1/crate/tests/multiline.rs",
-    "//third_party/rust/regex/v1/crate/tests/noparse.rs",
-    "//third_party/rust/regex/v1/crate/tests/regression.rs",
-    "//third_party/rust/regex/v1/crate/tests/regression_fuzz.rs",
-    "//third_party/rust/regex/v1/crate/tests/replace.rs",
-    "//third_party/rust/regex/v1/crate/tests/searcher.rs",
-    "//third_party/rust/regex/v1/crate/tests/set.rs",
-    "//third_party/rust/regex/v1/crate/tests/shortest_match.rs",
-    "//third_party/rust/regex/v1/crate/tests/suffix_reverse.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_backtrack.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_backtrack_bytes.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_backtrack_utf8bytes.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_crates_regex.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_default.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_default_bytes.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_nfa.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_nfa_bytes.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_nfa_utf8bytes.rs",
-    "//third_party/rust/regex/v1/crate/tests/unicode.rs",
-    "//third_party/rust/regex/v1/crate/tests/word_boundary.rs",
-    "//third_party/rust/regex/v1/crate/tests/word_boundary_ascii.rs",
-    "//third_party/rust/regex/v1/crate/tests/word_boundary_unicode.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-cheat.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-replace.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-single-cheat.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-single.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/backtrack.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/compile.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/dfa.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/exec.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/expand.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/find_byte.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/freqs.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/input.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/literal/imp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/literal/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/pattern.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/pikevm.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/pool.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/prog.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_builder.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_set.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_trait.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_unicode.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/sparse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/utf8.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/api.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/api_str.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/consistent.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/crates_regex.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/crazy.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/flags.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/fowler.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/macros.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/macros_bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/macros_str.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/misc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/multiline.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/noparse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/regression.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/regression_fuzz.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/replace.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/searcher.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/set.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/shortest_match.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/suffix_reverse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_backtrack.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_backtrack_bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_backtrack_utf8bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_crates_regex.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_default.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_default_bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_nfa.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_nfa_bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_nfa_utf8bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/unicode.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/word_boundary.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/word_boundary_ascii.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/word_boundary_unicode.rs",
   ]
   inputs = [
-    "//third_party/rust/regex/v1/crate/CHANGELOG.md",
-    "//third_party/rust/regex/v1/crate/HACKING.md",
-    "//third_party/rust/regex/v1/crate/PERFORMANCE.md",
-    "//third_party/rust/regex/v1/crate/README.md",
-    "//third_party/rust/regex/v1/crate/UNICODE.md",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/CHANGELOG.md",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/HACKING.md",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/PERFORMANCE.md",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/UNICODE.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
@@ -132,78 +133,79 @@
   crate_name = "regex"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/lib.rs"
   sources = [
-    "//third_party/rust/regex/v1/crate/examples/shootout-regex-dna-bytes.rs",
-    "//third_party/rust/regex/v1/crate/examples/shootout-regex-dna-cheat.rs",
-    "//third_party/rust/regex/v1/crate/examples/shootout-regex-dna-replace.rs",
-    "//third_party/rust/regex/v1/crate/examples/shootout-regex-dna-single-cheat.rs",
-    "//third_party/rust/regex/v1/crate/examples/shootout-regex-dna-single.rs",
-    "//third_party/rust/regex/v1/crate/examples/shootout-regex-dna.rs",
-    "//third_party/rust/regex/v1/crate/src/backtrack.rs",
-    "//third_party/rust/regex/v1/crate/src/compile.rs",
-    "//third_party/rust/regex/v1/crate/src/dfa.rs",
-    "//third_party/rust/regex/v1/crate/src/error.rs",
-    "//third_party/rust/regex/v1/crate/src/exec.rs",
-    "//third_party/rust/regex/v1/crate/src/expand.rs",
-    "//third_party/rust/regex/v1/crate/src/find_byte.rs",
-    "//third_party/rust/regex/v1/crate/src/freqs.rs",
-    "//third_party/rust/regex/v1/crate/src/input.rs",
-    "//third_party/rust/regex/v1/crate/src/lib.rs",
-    "//third_party/rust/regex/v1/crate/src/literal/imp.rs",
-    "//third_party/rust/regex/v1/crate/src/literal/mod.rs",
-    "//third_party/rust/regex/v1/crate/src/pattern.rs",
-    "//third_party/rust/regex/v1/crate/src/pikevm.rs",
-    "//third_party/rust/regex/v1/crate/src/pool.rs",
-    "//third_party/rust/regex/v1/crate/src/prog.rs",
-    "//third_party/rust/regex/v1/crate/src/re_builder.rs",
-    "//third_party/rust/regex/v1/crate/src/re_bytes.rs",
-    "//third_party/rust/regex/v1/crate/src/re_set.rs",
-    "//third_party/rust/regex/v1/crate/src/re_trait.rs",
-    "//third_party/rust/regex/v1/crate/src/re_unicode.rs",
-    "//third_party/rust/regex/v1/crate/src/sparse.rs",
-    "//third_party/rust/regex/v1/crate/src/utf8.rs",
-    "//third_party/rust/regex/v1/crate/tests/api.rs",
-    "//third_party/rust/regex/v1/crate/tests/api_str.rs",
-    "//third_party/rust/regex/v1/crate/tests/bytes.rs",
-    "//third_party/rust/regex/v1/crate/tests/consistent.rs",
-    "//third_party/rust/regex/v1/crate/tests/crates_regex.rs",
-    "//third_party/rust/regex/v1/crate/tests/crazy.rs",
-    "//third_party/rust/regex/v1/crate/tests/flags.rs",
-    "//third_party/rust/regex/v1/crate/tests/fowler.rs",
-    "//third_party/rust/regex/v1/crate/tests/macros.rs",
-    "//third_party/rust/regex/v1/crate/tests/macros_bytes.rs",
-    "//third_party/rust/regex/v1/crate/tests/macros_str.rs",
-    "//third_party/rust/regex/v1/crate/tests/misc.rs",
-    "//third_party/rust/regex/v1/crate/tests/multiline.rs",
-    "//third_party/rust/regex/v1/crate/tests/noparse.rs",
-    "//third_party/rust/regex/v1/crate/tests/regression.rs",
-    "//third_party/rust/regex/v1/crate/tests/regression_fuzz.rs",
-    "//third_party/rust/regex/v1/crate/tests/replace.rs",
-    "//third_party/rust/regex/v1/crate/tests/searcher.rs",
-    "//third_party/rust/regex/v1/crate/tests/set.rs",
-    "//third_party/rust/regex/v1/crate/tests/shortest_match.rs",
-    "//third_party/rust/regex/v1/crate/tests/suffix_reverse.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_backtrack.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_backtrack_bytes.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_backtrack_utf8bytes.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_crates_regex.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_default.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_default_bytes.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_nfa.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_nfa_bytes.rs",
-    "//third_party/rust/regex/v1/crate/tests/test_nfa_utf8bytes.rs",
-    "//third_party/rust/regex/v1/crate/tests/unicode.rs",
-    "//third_party/rust/regex/v1/crate/tests/word_boundary.rs",
-    "//third_party/rust/regex/v1/crate/tests/word_boundary_ascii.rs",
-    "//third_party/rust/regex/v1/crate/tests/word_boundary_unicode.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-cheat.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-replace.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-single-cheat.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna-single.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/examples/shootout-regex-dna.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/backtrack.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/compile.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/dfa.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/exec.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/expand.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/find_byte.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/freqs.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/input.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/literal/imp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/literal/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/pattern.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/pikevm.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/pool.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/prog.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_builder.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_set.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_trait.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/re_unicode.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/sparse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/src/utf8.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/api.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/api_str.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/consistent.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/crates_regex.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/crazy.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/flags.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/fowler.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/macros.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/macros_bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/macros_str.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/misc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/multiline.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/noparse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/regression.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/regression_fuzz.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/replace.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/searcher.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/set.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/shortest_match.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/suffix_reverse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_backtrack.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_backtrack_bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_backtrack_utf8bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_crates_regex.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_default.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_default_bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_nfa.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_nfa_bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/test_nfa_utf8bytes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/unicode.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/word_boundary.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/word_boundary_ascii.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/tests/word_boundary_unicode.rs",
   ]
   inputs = [
-    "//third_party/rust/regex/v1/crate/CHANGELOG.md",
-    "//third_party/rust/regex/v1/crate/HACKING.md",
-    "//third_party/rust/regex/v1/crate/PERFORMANCE.md",
-    "//third_party/rust/regex/v1/crate/README.md",
-    "//third_party/rust/regex/v1/crate/UNICODE.md",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/CHANGELOG.md",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/HACKING.md",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/PERFORMANCE.md",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/regex-1.6.0/UNICODE.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
diff --git a/third_party/rust/regex/v1/crate/LICENSE-APACHE b/third_party/rust/regex/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 16fe87b..0000000
--- a/third_party/rust/regex/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/third_party/rust/regex/v1/crate/LICENSE-MIT b/third_party/rust/regex/v1/crate/LICENSE-MIT
deleted file mode 100644
index 39d4bdb..0000000
--- a/third_party/rust/regex/v1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,25 +0,0 @@
-Copyright (c) 2014 The Rust Project Developers
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/regex/v1/crate/rustfmt.toml b/third_party/rust/regex/v1/crate/rustfmt.toml
deleted file mode 100644
index aa37a218..0000000
--- a/third_party/rust/regex/v1/crate/rustfmt.toml
+++ /dev/null
@@ -1,2 +0,0 @@
-max_width = 79
-use_small_heuristics = "max"
diff --git a/third_party/rust/regex_syntax/v0_6/BUILD.gn b/third_party/rust/regex_syntax/v0_6/BUILD.gn
index 36b2574..a50a096 100644
--- a/third_party/rust/regex_syntax/v0_6/BUILD.gn
+++ b/third_party/rust/regex_syntax/v0_6/BUILD.gn
@@ -11,42 +11,42 @@
   crate_name = "regex_syntax"
   epoch = "0.6"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/lib.rs"
   sources = [
-    "//third_party/rust/regex_syntax/v0_6/crate/benches/bench.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/ast/mod.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/ast/parse.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/ast/print.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/ast/visitor.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/either.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/error.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/hir/interval.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/hir/literal/mod.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/hir/mod.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/hir/print.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/hir/translate.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/hir/visitor.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/lib.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/parser.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/unicode.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/age.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/case_folding_simple.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/general_category.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/grapheme_cluster_break.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/mod.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/perl_decimal.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/perl_space.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/perl_word.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/property_bool.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/property_names.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/property_values.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/script.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/script_extension.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/sentence_break.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/unicode_tables/word_break.rs",
-    "//third_party/rust/regex_syntax/v0_6/crate/src/utf8.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/benches/bench.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/ast/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/ast/parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/ast/print.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/ast/visitor.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/either.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/interval.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/literal/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/print.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/translate.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/hir/visitor.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/parser.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/age.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/case_folding_simple.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/general_category.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/grapheme_cluster_break.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/perl_decimal.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/perl_space.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/perl_word.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/property_bool.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/property_names.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/property_values.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/script.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/script_extension.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/sentence_break.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/unicode_tables/word_break.rs",
+    "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/src/utf8.rs",
   ]
-  inputs = [ "//third_party/rust/regex_syntax/v0_6/crate/README.md" ]
+  inputs = [ "//third_party/rust/chromium_crates_io/vendor/regex-syntax-0.6.27/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/regex_syntax/v0_6/crate/LICENSE-APACHE b/third_party/rust/regex_syntax/v0_6/crate/LICENSE-APACHE
deleted file mode 100644
index 16fe87b..0000000
--- a/third_party/rust/regex_syntax/v0_6/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/third_party/rust/regex_syntax/v0_6/crate/LICENSE-MIT b/third_party/rust/regex_syntax/v0_6/crate/LICENSE-MIT
deleted file mode 100644
index 39d4bdb..0000000
--- a/third_party/rust/regex_syntax/v0_6/crate/LICENSE-MIT
+++ /dev/null
@@ -1,25 +0,0 @@
-Copyright (c) 2014 The Rust Project Developers
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/rstest/v0_17/BUILD.gn b/third_party/rust/rstest/v0_17/BUILD.gn
index fedd1982..acc8beb 100644
--- a/third_party/rust/rstest/v0_17/BUILD.gn
+++ b/third_party/rust/rstest/v0_17/BUILD.gn
@@ -11,89 +11,91 @@
   crate_name = "rstest"
   epoch = "0.17"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/src/lib.rs"
   sources = [
-    "//third_party/rust/rstest/v0_17/crate/src/lib.rs",
-    "//third_party/rust/rstest/v0_17/crate/src/magic_conversion.rs",
-    "//third_party/rust/rstest/v0_17/crate/src/timeout.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/fixture/mod.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/integration.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/async_fixture.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/await_complete_fixture.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/await_partial_fixture.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/clean_up_default_generics.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/default.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/default_conversion.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/default_in_attrs.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/defined_return_type.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/dyn.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/errors.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/fixture_struct.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/from_other_module.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/impl.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/no_warning.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/once.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/once_defined_type.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/once_no_return.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/partial.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/partial_in_attr.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/rename.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/resolve.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/fixture/simple_injection.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/args_with_no_cases.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/async.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/async_awt.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/async_awt_global.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/case_attributes.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/case_with_wrong_args.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/description.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/dump_just_one_case.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/inject.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/missed_argument.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/missed_some_arguments.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/partial.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/simple.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/cases/use_attr.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/convert_string_literal.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_debug.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_debug_compact.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_exclude_some_inputs.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_exclude_some_inputs_compact.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_not_debug.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/dump_not_debug_compact.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/errors.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/generic.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/happy_path.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/ignore_args.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/impl_param.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/async.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/async_awt.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/async_awt_global.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/inject.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/partial.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/simple.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/matrix/use_attr.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/mut.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/panic.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/reject_no_item_function.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/remove_underscore.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/rename.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/return_result.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/async.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/async_awt.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/async_awt_global.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/dump_debug.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/inject.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/partial.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/resolve.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/single/simple.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/timeout.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/timeout_async.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/use_mutable_fixture_in_parametric_argumnts.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/resources/rstest/values_tests_name.rs",
-    "//third_party/rust/rstest/v0_17/crate/tests/rstest/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/src/magic_conversion.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/src/timeout.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/fixture/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/integration.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/async_fixture.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/await_complete_fixture.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/await_partial_fixture.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/clean_up_default_generics.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/default.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/default_conversion.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/default_in_attrs.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/defined_return_type.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/dyn.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/errors.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/fixture_struct.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/from_other_module.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/impl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/no_warning.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/once.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/once_defined_type.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/once_no_return.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/partial.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/partial_in_attr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/rename.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/resolve.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/fixture/simple_injection.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/args_with_no_cases.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/async.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/async_awt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/async_awt_global.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/case_attributes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/case_with_wrong_args.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/description.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/dump_just_one_case.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/inject.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/missed_argument.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/missed_some_arguments.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/partial.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/simple.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/cases/use_attr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/convert_string_literal.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_debug.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_debug_compact.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_exclude_some_inputs.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_exclude_some_inputs_compact.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_not_debug.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/dump_not_debug_compact.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/errors.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/generic.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/happy_path.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/ignore_args.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/impl_param.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/async.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/async_awt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/async_awt_global.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/inject.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/partial.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/simple.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/matrix/use_attr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/mut.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/panic.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/reject_no_item_function.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/remove_underscore.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/rename.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/return_result.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/async.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/async_awt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/async_awt_global.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/dump_debug.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/inject.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/partial.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/resolve.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/single/simple.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/timeout.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/timeout_async.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/use_mutable_fixture_in_parametric_argumnts.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/resources/rstest/values_tests_name.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/tests/rstest/mod.rs",
   ]
-  inputs = [ "//third_party/rust/rstest/v0_17/crate/README.md" ]
+  inputs =
+      [ "//third_party/rust/chromium_crates_io/vendor/rstest-0.17.0/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/rstest_macros/v0_17/BUILD.gn b/third_party/rust/rstest_macros/v0_17/BUILD.gn
index b9f1c52..83410eb6 100644
--- a/third_party/rust/rstest_macros/v0_17/BUILD.gn
+++ b/third_party/rust/rstest_macros/v0_17/BUILD.gn
@@ -11,31 +11,31 @@
   crate_name = "rstest_macros"
   epoch = "0.17"
   crate_type = "proc-macro"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/lib.rs"
   sources = [
-    "//third_party/rust/rstest_macros/v0_17/crate/build.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/error.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/lib.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/parse/expressions.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/parse/fixture.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/parse/future.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/parse/macros.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/parse/mod.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/parse/rstest.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/parse/testcase.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/parse/vlist.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/refident.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/render/apply_argumets.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/render/fixture.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/render/inject.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/render/mod.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/render/test.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/render/wrapper.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/resolver.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/test.rs",
-    "//third_party/rust/rstest_macros/v0_17/crate/src/utils.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/expressions.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/fixture.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/future.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/macros.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/rstest.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/testcase.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/parse/vlist.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/refident.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/apply_argumets.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/fixture.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/inject.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/render/wrapper.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/resolver.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/src/utils.rs",
   ]
-  inputs = [ "//third_party/rust/rstest_macros/v0_17/crate/README.md" ]
+  inputs = [ "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
@@ -56,8 +56,8 @@
     "//third_party/rust/unicode_ident/v1:lib",
   ]
   build_deps = [ "//third_party/rust/rustc_version/v0_4:buildrs_support" ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root = "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/build.rs"
+  build_sources = [ "//third_party/rust/chromium_crates_io/vendor/rstest_macros-0.17.0/build.rs" ]
 
   # Only for usage from third-party crates. Add the crate to
   # third_party.toml to use it from first-party code.
diff --git a/third_party/rust/rstest_reuse/v0_5/BUILD.gn b/third_party/rust/rstest_reuse/v0_5/BUILD.gn
index 02170d1..f63f83d 100644
--- a/third_party/rust/rstest_reuse/v0_5/BUILD.gn
+++ b/third_party/rust/rstest_reuse/v0_5/BUILD.gn
@@ -11,28 +11,28 @@
   crate_name = "rstest_reuse"
   epoch = "0.5"
   crate_type = "proc-macro"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/src/lib.rs"
   sources = [
-    "//third_party/rust/rstest_reuse/v0_5/crate/build.rs",
-    "//third_party/rust/rstest_reuse/v0_5/crate/src/lib.rs",
-    "//third_party/rust/rstest_reuse/v0_5/crate/tests/acceptance.rs",
-    "//third_party/rust/rstest_reuse/v0_5/crate/tests/resources/copy_args_attributes_from_template.rs",
-    "//third_party/rust/rstest_reuse/v0_5/crate/tests/resources/deny_docs.rs",
-    "//third_party/rust/rstest_reuse/v0_5/crate/tests/resources/export_not_used.rs",
-    "//third_party/rust/rstest_reuse/v0_5/crate/tests/resources/export_template.rs",
-    "//third_party/rust/rstest_reuse/v0_5/crate/tests/resources/export_template_root.rs",
-    "//third_party/rust/rstest_reuse/v0_5/crate/tests/resources/import_template.rs",
-    "//third_party/rust/rstest_reuse/v0_5/crate/tests/resources/in_mod.rs",
-    "//third_party/rust/rstest_reuse/v0_5/crate/tests/resources/no_local_macro_should_not_compile.rs",
-    "//third_party/rust/rstest_reuse/v0_5/crate/tests/resources/not_used.rs",
-    "//third_party/rust/rstest_reuse/v0_5/crate/tests/resources/qualify_template_use.rs",
-    "//third_party/rust/rstest_reuse/v0_5/crate/tests/resources/simple_example.rs",
-    "//third_party/rust/rstest_reuse/v0_5/crate/tests/resources/templates_with_same_name.rs",
-    "//third_party/rust/rstest_reuse/v0_5/crate/tests/resources/use_before_define.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/acceptance.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/copy_args_attributes_from_template.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/deny_docs.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/export_not_used.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/export_template.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/export_template_root.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/import_template.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/in_mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/no_local_macro_should_not_compile.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/not_used.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/qualify_template_use.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/simple_example.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/templates_with_same_name.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/tests/resources/use_before_define.rs",
   ]
   inputs = [
-    "//third_party/rust/rstest_reuse/v0_5/crate/README.md",
-    "//third_party/rust/rstest_reuse/v0_5/crate/checkoutlist.md",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/checkoutlist.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
@@ -52,8 +52,11 @@
     "//third_party/rust/syn/v1:lib",
   ]
   build_deps = [ "//third_party/rust/rustc_version/v0_4:buildrs_support" ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root =
+      "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/build.rs"
+  build_sources = [
+    "//third_party/rust/chromium_crates_io/vendor/rstest_reuse-0.5.0/build.rs",
+  ]
 
   # Only for usage from third-party crates. Add the crate to
   # third_party.toml to use it from first-party code.
diff --git a/third_party/rust/rustc_demangle/v0_1/BUILD.gn b/third_party/rust/rustc_demangle/v0_1/BUILD.gn
index 66bdad8..56f094f3 100644
--- a/third_party/rust/rustc_demangle/v0_1/BUILD.gn
+++ b/third_party/rust/rustc_demangle/v0_1/BUILD.gn
@@ -11,13 +11,13 @@
   crate_name = "rustc_demangle"
   epoch = "0.1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/src/lib.rs"
   sources = [
-    "//third_party/rust/rustc_demangle/v0_1/crate/src/legacy.rs",
-    "//third_party/rust/rustc_demangle/v0_1/crate/src/lib.rs",
-    "//third_party/rust/rustc_demangle/v0_1/crate/src/v0.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/src/legacy.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/src/v0.rs",
   ]
-  inputs = [ "//third_party/rust/rustc_demangle/v0_1/crate/README.md" ]
+  inputs = [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-0.1.23/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/rustc_demangle/v0_1/crate/.gitignore b/third_party/rust/rustc_demangle/v0_1/crate/.gitignore
deleted file mode 100644
index a9d37c56..0000000
--- a/third_party/rust/rustc_demangle/v0_1/crate/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-target
-Cargo.lock
diff --git a/third_party/rust/rustc_demangle/v0_1/crate/LICENSE-APACHE b/third_party/rust/rustc_demangle/v0_1/crate/LICENSE-APACHE
deleted file mode 100644
index 16fe87b..0000000
--- a/third_party/rust/rustc_demangle/v0_1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/third_party/rust/rustc_demangle/v0_1/crate/LICENSE-MIT b/third_party/rust/rustc_demangle/v0_1/crate/LICENSE-MIT
deleted file mode 100644
index 39e0ed6..0000000
--- a/third_party/rust/rustc_demangle/v0_1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,25 +0,0 @@
-Copyright (c) 2014 Alex Crichton
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/rustc_demangle_capi/v0_1/BUILD.gn b/third_party/rust/rustc_demangle_capi/v0_1/BUILD.gn
index 24090a27..2a7447c 100644
--- a/third_party/rust/rustc_demangle_capi/v0_1/BUILD.gn
+++ b/third_party/rust/rustc_demangle_capi/v0_1/BUILD.gn
@@ -11,9 +11,9 @@
   crate_name = "rustc_demangle_capi"
   epoch = "0.1"
   crate_type = "cdylib"
-  crate_root = "crate/src/lib.rs"
-  sources = [ "//third_party/rust/rustc_demangle_capi/v0_1/crate/src/lib.rs" ]
-  inputs = [ "//third_party/rust/rustc_demangle_capi/v0_1/crate/include/rustc_demangle.h" ]
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/src/lib.rs"
+  sources = [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/src/lib.rs" ]
+  inputs = [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include/rustc_demangle.h" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/rustc_version/v0_4/BUILD.gn b/third_party/rust/rustc_version/v0_4/BUILD.gn
index 8c489f83..34f2756 100644
--- a/third_party/rust/rustc_version/v0_4/BUILD.gn
+++ b/third_party/rust/rustc_version/v0_4/BUILD.gn
@@ -11,12 +11,12 @@
   crate_name = "rustc_version"
   epoch = "0.4"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/src/lib.rs"
   sources = [
-    "//third_party/rust/rustc_version/v0_4/crate/src/lib.rs",
-    "//third_party/rust/rustc_version/v0_4/crate/tests/all.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/tests/all.rs",
   ]
-  inputs = [ "//third_party/rust/rustc_version/v0_4/crate/README.md" ]
+  inputs = [ "//third_party/rust/chromium_crates_io/vendor/rustc_version-0.4.0/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/rustc_version/v0_4/crate/LICENSE-APACHE b/third_party/rust/rustc_version/v0_4/crate/LICENSE-APACHE
deleted file mode 100644
index 16fe87b..0000000
--- a/third_party/rust/rustc_version/v0_4/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/third_party/rust/rustversion/v1/BUILD.gn b/third_party/rust/rustversion/v1/BUILD.gn
index d837a19..a12199c 100644
--- a/third_party/rust/rustversion/v1/BUILD.gn
+++ b/third_party/rust/rustversion/v1/BUILD.gn
@@ -11,34 +11,36 @@
   crate_name = "rustversion"
   epoch = "1"
   crate_type = "proc-macro"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/lib.rs"
   sources = [
-    "//third_party/rust/rustversion/v1/crate/build/build.rs",
-    "//third_party/rust/rustversion/v1/crate/build/rustc.rs",
-    "//third_party/rust/rustversion/v1/crate/src/attr.rs",
-    "//third_party/rust/rustversion/v1/crate/src/bound.rs",
-    "//third_party/rust/rustversion/v1/crate/src/constfn.rs",
-    "//third_party/rust/rustversion/v1/crate/src/date.rs",
-    "//third_party/rust/rustversion/v1/crate/src/error.rs",
-    "//third_party/rust/rustversion/v1/crate/src/expand.rs",
-    "//third_party/rust/rustversion/v1/crate/src/expr.rs",
-    "//third_party/rust/rustversion/v1/crate/src/iter.rs",
-    "//third_party/rust/rustversion/v1/crate/src/lib.rs",
-    "//third_party/rust/rustversion/v1/crate/src/release.rs",
-    "//third_party/rust/rustversion/v1/crate/src/time.rs",
-    "//third_party/rust/rustversion/v1/crate/src/token.rs",
-    "//third_party/rust/rustversion/v1/crate/src/version.rs",
-    "//third_party/rust/rustversion/v1/crate/tests/compiletest.rs",
-    "//third_party/rust/rustversion/v1/crate/tests/test_const.rs",
-    "//third_party/rust/rustversion/v1/crate/tests/test_eval.rs",
-    "//third_party/rust/rustversion/v1/crate/tests/test_parse.rs",
-    "//third_party/rust/rustversion/v1/crate/tests/ui/bad-bound.rs",
-    "//third_party/rust/rustversion/v1/crate/tests/ui/bad-date.rs",
-    "//third_party/rust/rustversion/v1/crate/tests/ui/bad-not.rs",
-    "//third_party/rust/rustversion/v1/crate/tests/ui/bad-version.rs",
-    "//third_party/rust/rustversion/v1/crate/tests/ui/const-not-fn.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/build/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/build/rustc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/attr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/bound.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/constfn.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/date.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/expand.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/expr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/iter.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/release.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/time.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/token.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/src/version.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/compiletest.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/test_const.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/test_eval.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/test_parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-bound.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-date.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-not.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/bad-version.rs",
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/tests/ui/const-not-fn.rs",
   ]
-  inputs = [ "//third_party/rust/rustversion/v1/crate/README.md" ]
+  inputs = [
+    "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/README.md",
+  ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
@@ -52,8 +54,8 @@
   library_configs += [ "//build/config/compiler:no_chromium_code" ]
   executable_configs -= [ "//build/config/compiler:chromium_code" ]
   executable_configs += [ "//build/config/compiler:no_chromium_code" ]
-  build_root = "crate/build/build.rs"
-  build_sources = [ "crate/build/build.rs" ]
+  build_root = "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/build/build.rs"
+  build_sources = [ "//third_party/rust/chromium_crates_io/vendor/rustversion-1.0.6/build/build.rs" ]
   build_script_outputs = [ "version.rs" ]
 
   # Only for usage from third-party crates. Add the crate to
diff --git a/third_party/rust/rustversion/v1/crate/.gitignore b/third_party/rust/rustversion/v1/crate/.gitignore
deleted file mode 100644
index 6936990..0000000
--- a/third_party/rust/rustversion/v1/crate/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-/target
-**/*.rs.bk
-Cargo.lock
diff --git a/third_party/rust/rustversion/v1/crate/LICENSE-APACHE b/third_party/rust/rustversion/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 16fe87b..0000000
--- a/third_party/rust/rustversion/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/third_party/rust/rustversion/v1/crate/LICENSE-MIT b/third_party/rust/rustversion/v1/crate/LICENSE-MIT
deleted file mode 100644
index 31aa7938..0000000
--- a/third_party/rust/rustversion/v1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,23 +0,0 @@
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/ryu/v1/BUILD.gn b/third_party/rust/ryu/v1/BUILD.gn
index 4502314..e2975cf 100644
--- a/third_party/rust/ryu/v1/BUILD.gn
+++ b/third_party/rust/ryu/v1/BUILD.gn
@@ -11,37 +11,39 @@
   crate_name = "ryu"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/lib.rs"
   sources = [
-    "//third_party/rust/ryu/v1/crate/benches/bench.rs",
-    "//third_party/rust/ryu/v1/crate/build.rs",
-    "//third_party/rust/ryu/v1/crate/examples/upstream_benchmark.rs",
-    "//third_party/rust/ryu/v1/crate/src/buffer/mod.rs",
-    "//third_party/rust/ryu/v1/crate/src/common.rs",
-    "//third_party/rust/ryu/v1/crate/src/d2s.rs",
-    "//third_party/rust/ryu/v1/crate/src/d2s_full_table.rs",
-    "//third_party/rust/ryu/v1/crate/src/d2s_intrinsics.rs",
-    "//third_party/rust/ryu/v1/crate/src/d2s_small_table.rs",
-    "//third_party/rust/ryu/v1/crate/src/digit_table.rs",
-    "//third_party/rust/ryu/v1/crate/src/f2s.rs",
-    "//third_party/rust/ryu/v1/crate/src/f2s_intrinsics.rs",
-    "//third_party/rust/ryu/v1/crate/src/lib.rs",
-    "//third_party/rust/ryu/v1/crate/src/parse.rs",
-    "//third_party/rust/ryu/v1/crate/src/pretty/exponent.rs",
-    "//third_party/rust/ryu/v1/crate/src/pretty/mantissa.rs",
-    "//third_party/rust/ryu/v1/crate/src/pretty/mod.rs",
-    "//third_party/rust/ryu/v1/crate/src/s2d.rs",
-    "//third_party/rust/ryu/v1/crate/src/s2f.rs",
-    "//third_party/rust/ryu/v1/crate/tests/common_test.rs",
-    "//third_party/rust/ryu/v1/crate/tests/d2s_table_test.rs",
-    "//third_party/rust/ryu/v1/crate/tests/d2s_test.rs",
-    "//third_party/rust/ryu/v1/crate/tests/exhaustive.rs",
-    "//third_party/rust/ryu/v1/crate/tests/f2s_test.rs",
-    "//third_party/rust/ryu/v1/crate/tests/macros/mod.rs",
-    "//third_party/rust/ryu/v1/crate/tests/s2d_test.rs",
-    "//third_party/rust/ryu/v1/crate/tests/s2f_test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/benches/bench.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/examples/upstream_benchmark.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/buffer/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/common.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/d2s.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/d2s_full_table.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/d2s_intrinsics.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/d2s_small_table.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/digit_table.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/f2s.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/f2s_intrinsics.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/pretty/exponent.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/pretty/mantissa.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/pretty/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/s2d.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/src/s2f.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/common_test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/d2s_table_test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/d2s_test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/exhaustive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/f2s_test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/macros/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/s2d_test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/tests/s2f_test.rs",
   ]
-  inputs = [ "//third_party/rust/ryu/v1/crate/README.md" ]
+  inputs =
+      [ "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
@@ -54,8 +56,9 @@
   library_configs += [ "//build/config/compiler:no_chromium_code" ]
   executable_configs -= [ "//build/config/compiler:chromium_code" ]
   executable_configs += [ "//build/config/compiler:no_chromium_code" ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root = "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/build.rs"
+  build_sources =
+      [ "//third_party/rust/chromium_crates_io/vendor/ryu-1.0.5/build.rs" ]
 
   # Only for usage from third-party crates. Add the crate to
   # third_party.toml to use it from first-party code.
diff --git a/third_party/rust/ryu/v1/crate/LICENSE-APACHE b/third_party/rust/ryu/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 261eeb9..0000000
--- a/third_party/rust/ryu/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/third_party/rust/semver/v1/BUILD.gn b/third_party/rust/semver/v1/BUILD.gn
index e0ed8ef..85d7c92c 100644
--- a/third_party/rust/semver/v1/BUILD.gn
+++ b/third_party/rust/semver/v1/BUILD.gn
@@ -11,26 +11,28 @@
   crate_name = "semver"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/lib.rs"
   sources = [
-    "//third_party/rust/semver/v1/crate/benches/parse.rs",
-    "//third_party/rust/semver/v1/crate/build.rs",
-    "//third_party/rust/semver/v1/crate/src/backport.rs",
-    "//third_party/rust/semver/v1/crate/src/display.rs",
-    "//third_party/rust/semver/v1/crate/src/error.rs",
-    "//third_party/rust/semver/v1/crate/src/eval.rs",
-    "//third_party/rust/semver/v1/crate/src/identifier.rs",
-    "//third_party/rust/semver/v1/crate/src/impls.rs",
-    "//third_party/rust/semver/v1/crate/src/lib.rs",
-    "//third_party/rust/semver/v1/crate/src/parse.rs",
-    "//third_party/rust/semver/v1/crate/src/serde.rs",
-    "//third_party/rust/semver/v1/crate/tests/node/mod.rs",
-    "//third_party/rust/semver/v1/crate/tests/test_identifier.rs",
-    "//third_party/rust/semver/v1/crate/tests/test_version.rs",
-    "//third_party/rust/semver/v1/crate/tests/test_version_req.rs",
-    "//third_party/rust/semver/v1/crate/tests/util/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/benches/parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/backport.rs",
+    "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/display.rs",
+    "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/eval.rs",
+    "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/identifier.rs",
+    "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/impls.rs",
+    "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/src/serde.rs",
+    "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/tests/node/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/tests/test_identifier.rs",
+    "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/tests/test_version.rs",
+    "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/tests/test_version_req.rs",
+    "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/tests/util/mod.rs",
   ]
-  inputs = [ "//third_party/rust/semver/v1/crate/README.md" ]
+  inputs =
+      [ "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
@@ -45,8 +47,10 @@
   executable_configs -= [ "//build/config/compiler:chromium_code" ]
   executable_configs += [ "//build/config/compiler:no_chromium_code" ]
   features = [ "std" ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root =
+      "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/build.rs"
+  build_sources =
+      [ "//third_party/rust/chromium_crates_io/vendor/semver-1.0.4/build.rs" ]
 
   # Only for usage from third-party crates. Add the crate to
   # third_party.toml to use it from first-party code.
diff --git a/third_party/rust/semver/v1/crate/.clippy.toml b/third_party/rust/semver/v1/crate/.clippy.toml
deleted file mode 100644
index 3d30690..0000000
--- a/third_party/rust/semver/v1/crate/.clippy.toml
+++ /dev/null
@@ -1 +0,0 @@
-msrv = "1.31.0"
diff --git a/third_party/rust/semver/v1/crate/LICENSE-APACHE b/third_party/rust/semver/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 16fe87b..0000000
--- a/third_party/rust/semver/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/third_party/rust/semver/v1/crate/LICENSE-MIT b/third_party/rust/semver/v1/crate/LICENSE-MIT
deleted file mode 100644
index 31aa7938..0000000
--- a/third_party/rust/semver/v1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,23 +0,0 @@
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/serde/v1/BUILD.gn b/third_party/rust/serde/v1/BUILD.gn
index 911bd0ed..a4020d3 100644
--- a/third_party/rust/serde/v1/BUILD.gn
+++ b/third_party/rust/serde/v1/BUILD.gn
@@ -11,32 +11,33 @@
   crate_name = "serde"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/lib.rs"
   sources = [
-    "//third_party/rust/serde/v1/crate/build.rs",
-    "//third_party/rust/serde/v1/crate/src/de/format.rs",
-    "//third_party/rust/serde/v1/crate/src/de/ignored_any.rs",
-    "//third_party/rust/serde/v1/crate/src/de/impls.rs",
-    "//third_party/rust/serde/v1/crate/src/de/mod.rs",
-    "//third_party/rust/serde/v1/crate/src/de/seed.rs",
-    "//third_party/rust/serde/v1/crate/src/de/size_hint.rs",
-    "//third_party/rust/serde/v1/crate/src/de/value.rs",
-    "//third_party/rust/serde/v1/crate/src/integer128.rs",
-    "//third_party/rust/serde/v1/crate/src/lib.rs",
-    "//third_party/rust/serde/v1/crate/src/macros.rs",
-    "//third_party/rust/serde/v1/crate/src/private/de.rs",
-    "//third_party/rust/serde/v1/crate/src/private/doc.rs",
-    "//third_party/rust/serde/v1/crate/src/private/mod.rs",
-    "//third_party/rust/serde/v1/crate/src/private/ser.rs",
-    "//third_party/rust/serde/v1/crate/src/ser/fmt.rs",
-    "//third_party/rust/serde/v1/crate/src/ser/impls.rs",
-    "//third_party/rust/serde/v1/crate/src/ser/impossible.rs",
-    "//third_party/rust/serde/v1/crate/src/ser/mod.rs",
-    "//third_party/rust/serde/v1/crate/src/std_error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/format.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/ignored_any.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/impls.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/seed.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/size_hint.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/de/value.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/integer128.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/macros.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/private/de.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/private/doc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/private/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/private/ser.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/ser/fmt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/ser/impls.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/ser/impossible.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/ser/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/src/std_error.rs",
   ]
   inputs = [
-    "//third_party/rust/serde/v1/crate/README.md",
-    "//third_party/rust/serde/v1/crate/crates-io.md",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/crates-io.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
@@ -56,6 +57,8 @@
     "serde_derive",
     "std",
   ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root =
+      "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/build.rs"
+  build_sources =
+      [ "//third_party/rust/chromium_crates_io/vendor/serde-1.0.188/build.rs" ]
 }
diff --git a/third_party/rust/serde/v1/crate/LICENSE-APACHE b/third_party/rust/serde/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 1b5ec8b..0000000
--- a/third_party/rust/serde/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,176 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
diff --git a/third_party/rust/serde/v1/crate/LICENSE-MIT b/third_party/rust/serde/v1/crate/LICENSE-MIT
deleted file mode 100644
index 31aa7938..0000000
--- a/third_party/rust/serde/v1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,23 +0,0 @@
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/serde_derive/v1/BUILD.gn b/third_party/rust/serde_derive/v1/BUILD.gn
index f47f198..72130ec 100644
--- a/third_party/rust/serde_derive/v1/BUILD.gn
+++ b/third_party/rust/serde_derive/v1/BUILD.gn
@@ -11,29 +11,29 @@
   crate_name = "serde_derive"
   epoch = "1"
   crate_type = "proc-macro"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/lib.rs"
   sources = [
-    "//third_party/rust/serde_derive/v1/crate/src/bound.rs",
-    "//third_party/rust/serde_derive/v1/crate/src/de.rs",
-    "//third_party/rust/serde_derive/v1/crate/src/dummy.rs",
-    "//third_party/rust/serde_derive/v1/crate/src/fragment.rs",
-    "//third_party/rust/serde_derive/v1/crate/src/internals/ast.rs",
-    "//third_party/rust/serde_derive/v1/crate/src/internals/attr.rs",
-    "//third_party/rust/serde_derive/v1/crate/src/internals/case.rs",
-    "//third_party/rust/serde_derive/v1/crate/src/internals/check.rs",
-    "//third_party/rust/serde_derive/v1/crate/src/internals/ctxt.rs",
-    "//third_party/rust/serde_derive/v1/crate/src/internals/mod.rs",
-    "//third_party/rust/serde_derive/v1/crate/src/internals/receiver.rs",
-    "//third_party/rust/serde_derive/v1/crate/src/internals/respan.rs",
-    "//third_party/rust/serde_derive/v1/crate/src/internals/symbol.rs",
-    "//third_party/rust/serde_derive/v1/crate/src/lib.rs",
-    "//third_party/rust/serde_derive/v1/crate/src/pretend.rs",
-    "//third_party/rust/serde_derive/v1/crate/src/ser.rs",
-    "//third_party/rust/serde_derive/v1/crate/src/this.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/bound.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/de.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/dummy.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/fragment.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/ast.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/attr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/case.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/check.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/ctxt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/receiver.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/respan.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/internals/symbol.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/pretend.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/ser.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/src/this.rs",
   ]
   inputs = [
-    "//third_party/rust/serde_derive/v1/crate/README.md",
-    "//third_party/rust/serde_derive/v1/crate/crates-io.md",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/serde_derive-1.0.188/crates-io.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
diff --git a/third_party/rust/serde_derive/v1/crate/LICENSE-APACHE b/third_party/rust/serde_derive/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 1b5ec8b..0000000
--- a/third_party/rust/serde_derive/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,176 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
diff --git a/third_party/rust/serde_derive/v1/crate/LICENSE-MIT b/third_party/rust/serde_derive/v1/crate/LICENSE-MIT
deleted file mode 100644
index 31aa7938..0000000
--- a/third_party/rust/serde_derive/v1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,23 +0,0 @@
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/serde_derive/v1/crate/README.md b/third_party/rust/serde_derive/v1/crate/README.md
deleted file mode 100644
index 477fd36..0000000
--- a/third_party/rust/serde_derive/v1/crate/README.md
+++ /dev/null
@@ -1,114 +0,0 @@
-# Serde &emsp; [![Build Status]][actions] [![Latest Version]][crates.io] [![serde: rustc 1.31+]][Rust 1.31] [![serde_derive: rustc 1.56+]][Rust 1.56]
-
-[Build Status]: https://img.shields.io/github/actions/workflow/status/serde-rs/serde/ci.yml?branch=master
-[actions]: https://github.com/serde-rs/serde/actions?query=branch%3Amaster
-[Latest Version]: https://img.shields.io/crates/v/serde.svg
-[crates.io]: https://crates.io/crates/serde
-[serde: rustc 1.31+]: https://img.shields.io/badge/serde-rustc_1.31+-lightgray.svg
-[serde_derive: rustc 1.56+]: https://img.shields.io/badge/serde_derive-rustc_1.56+-lightgray.svg
-[Rust 1.31]: https://blog.rust-lang.org/2018/12/06/Rust-1.31-and-rust-2018.html
-[Rust 1.56]: https://blog.rust-lang.org/2021/10/21/Rust-1.56.0.html
-
-**Serde is a framework for *ser*ializing and *de*serializing Rust data structures efficiently and generically.**
-
----
-
-You may be looking for:
-
-- [An overview of Serde](https://serde.rs/)
-- [Data formats supported by Serde](https://serde.rs/#data-formats)
-- [Setting up `#[derive(Serialize, Deserialize)]`](https://serde.rs/derive.html)
-- [Examples](https://serde.rs/examples.html)
-- [API documentation](https://docs.rs/serde)
-- [Release notes](https://github.com/serde-rs/serde/releases)
-
-## Serde in action
-
-<details>
-<summary>
-Click to show Cargo.toml.
-<a href="https://play.rust-lang.org/?edition=2018&gist=72755f28f99afc95e01d63174b28c1f5" target="_blank">Run this code in the playground.</a>
-</summary>
-
-```toml
-[dependencies]
-
-# The core APIs, including the Serialize and Deserialize traits. Always
-# required when using Serde. The "derive" feature is only required when
-# using #[derive(Serialize, Deserialize)] to make Serde work with structs
-# and enums defined in your crate.
-serde = { version = "1.0", features = ["derive"] }
-
-# Each data format lives in its own crate; the sample code below uses JSON
-# but you may be using a different one.
-serde_json = "1.0"
-```
-
-</details>
-<p></p>
-
-```rust
-use serde::{Deserialize, Serialize};
-
-#[derive(Serialize, Deserialize, Debug)]
-struct Point {
-    x: i32,
-    y: i32,
-}
-
-fn main() {
-    let point = Point { x: 1, y: 2 };
-
-    // Convert the Point to a JSON string.
-    let serialized = serde_json::to_string(&point).unwrap();
-
-    // Prints serialized = {"x":1,"y":2}
-    println!("serialized = {}", serialized);
-
-    // Convert the JSON string back to a Point.
-    let deserialized: Point = serde_json::from_str(&serialized).unwrap();
-
-    // Prints deserialized = Point { x: 1, y: 2 }
-    println!("deserialized = {:?}", deserialized);
-}
-```
-
-## Getting help
-
-Serde is one of the most widely used Rust libraries so any place that Rustaceans
-congregate will be able to help you out. For chat, consider trying the
-[#rust-questions] or [#rust-beginners] channels of the unofficial community
-Discord (invite: <https://discord.gg/rust-lang-community>), the [#rust-usage] or
-[#beginners] channels of the official Rust Project Discord (invite:
-<https://discord.gg/rust-lang>), or the [#general][zulip] stream in Zulip. For
-asynchronous, consider the [\[rust\] tag on StackOverflow][stackoverflow], the
-[/r/rust] subreddit which has a pinned weekly easy questions post, or the Rust
-[Discourse forum][discourse]. It's acceptable to file a support issue in this
-repo but they tend not to get as many eyes as any of the above and may get
-closed without a response after some time.
-
-[#rust-questions]: https://discord.com/channels/273534239310479360/274215136414400513
-[#rust-beginners]: https://discord.com/channels/273534239310479360/273541522815713281
-[#rust-usage]: https://discord.com/channels/442252698964721669/443150878111694848
-[#beginners]: https://discord.com/channels/442252698964721669/448238009733742612
-[zulip]: https://rust-lang.zulipchat.com/#narrow/stream/122651-general
-[stackoverflow]: https://stackoverflow.com/questions/tagged/rust
-[/r/rust]: https://www.reddit.com/r/rust
-[discourse]: https://users.rust-lang.org
-
-<br>
-
-#### License
-
-<sup>
-Licensed under either of <a href="LICENSE-APACHE">Apache License, Version
-2.0</a> or <a href="LICENSE-MIT">MIT license</a> at your option.
-</sup>
-
-<br>
-
-<sub>
-Unless you explicitly state otherwise, any contribution intentionally submitted
-for inclusion in Serde by you, as defined in the Apache-2.0 license, shall be
-dual licensed as above, without any additional terms or conditions.
-</sub>
diff --git a/third_party/rust/serde_derive/v1/crate/crates-io.md b/third_party/rust/serde_derive/v1/crate/crates-io.md
deleted file mode 100644
index 18710035..0000000
--- a/third_party/rust/serde_derive/v1/crate/crates-io.md
+++ /dev/null
@@ -1,65 +0,0 @@
-<!-- Serde readme rendered on crates.io -->
-
-**Serde is a framework for *ser*ializing and *de*serializing Rust data structures efficiently and generically.**
-
----
-
-You may be looking for:
-
-- [An overview of Serde](https://serde.rs/)
-- [Data formats supported by Serde](https://serde.rs/#data-formats)
-- [Setting up `#[derive(Serialize, Deserialize)]`](https://serde.rs/derive.html)
-- [Examples](https://serde.rs/examples.html)
-- [API documentation](https://docs.rs/serde)
-- [Release notes](https://github.com/serde-rs/serde/releases)
-
-## Serde in action
-
-```rust
-use serde::{Deserialize, Serialize};
-
-#[derive(Serialize, Deserialize, Debug)]
-struct Point {
-    x: i32,
-    y: i32,
-}
-
-fn main() {
-    let point = Point { x: 1, y: 2 };
-
-    // Convert the Point to a JSON string.
-    let serialized = serde_json::to_string(&point).unwrap();
-
-    // Prints serialized = {"x":1,"y":2}
-    println!("serialized = {}", serialized);
-
-    // Convert the JSON string back to a Point.
-    let deserialized: Point = serde_json::from_str(&serialized).unwrap();
-
-    // Prints deserialized = Point { x: 1, y: 2 }
-    println!("deserialized = {:?}", deserialized);
-}
-```
-
-## Getting help
-
-Serde is one of the most widely used Rust libraries so any place that Rustaceans
-congregate will be able to help you out. For chat, consider trying the
-[#rust-questions] or [#rust-beginners] channels of the unofficial community
-Discord (invite: <https://discord.gg/rust-lang-community>, the [#rust-usage] or
-[#beginners] channels of the official Rust Project Discord (invite:
-<https://discord.gg/rust-lang>), or the [#general][zulip] stream in Zulip. For
-asynchronous, consider the [\[rust\] tag on StackOverflow][stackoverflow], the
-[/r/rust] subreddit which has a pinned weekly easy questions post, or the Rust
-[Discourse forum][discourse]. It's acceptable to file a support issue in this
-repo but they tend not to get as many eyes as any of the above and may get
-closed without a response after some time.
-
-[#rust-questions]: https://discord.com/channels/273534239310479360/274215136414400513
-[#rust-beginners]: https://discord.com/channels/273534239310479360/273541522815713281
-[#rust-usage]: https://discord.com/channels/442252698964721669/443150878111694848
-[#beginners]: https://discord.com/channels/442252698964721669/448238009733742612
-[zulip]: https://rust-lang.zulipchat.com/#narrow/stream/122651-general
-[stackoverflow]: https://stackoverflow.com/questions/tagged/rust
-[/r/rust]: https://www.reddit.com/r/rust
-[discourse]: https://users.rust-lang.org
diff --git a/third_party/rust/serde_json/v1/BUILD.gn b/third_party/rust/serde_json/v1/BUILD.gn
index 63f3c2d..c14a40e 100644
--- a/third_party/rust/serde_json/v1/BUILD.gn
+++ b/third_party/rust/serde_json/v1/BUILD.gn
@@ -11,80 +11,80 @@
   crate_name = "serde_json"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lib.rs"
   sources = [
-    "//third_party/rust/serde_json/v1/crate/build.rs",
-    "//third_party/rust/serde_json/v1/crate/src/de.rs",
-    "//third_party/rust/serde_json/v1/crate/src/error.rs",
-    "//third_party/rust/serde_json/v1/crate/src/features_check/error.rs",
-    "//third_party/rust/serde_json/v1/crate/src/features_check/mod.rs",
-    "//third_party/rust/serde_json/v1/crate/src/io/core.rs",
-    "//third_party/rust/serde_json/v1/crate/src/io/mod.rs",
-    "//third_party/rust/serde_json/v1/crate/src/iter.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/algorithm.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/bhcomp.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/bignum.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/cached.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/cached_float80.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/digit.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/errors.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/exponent.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/float.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/large_powers.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/large_powers32.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/large_powers64.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/math.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/mod.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/num.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/parse.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/rounding.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/shift.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lexical/small_powers.rs",
-    "//third_party/rust/serde_json/v1/crate/src/lib.rs",
-    "//third_party/rust/serde_json/v1/crate/src/macros.rs",
-    "//third_party/rust/serde_json/v1/crate/src/map.rs",
-    "//third_party/rust/serde_json/v1/crate/src/number.rs",
-    "//third_party/rust/serde_json/v1/crate/src/raw.rs",
-    "//third_party/rust/serde_json/v1/crate/src/read.rs",
-    "//third_party/rust/serde_json/v1/crate/src/ser.rs",
-    "//third_party/rust/serde_json/v1/crate/src/value/de.rs",
-    "//third_party/rust/serde_json/v1/crate/src/value/from.rs",
-    "//third_party/rust/serde_json/v1/crate/src/value/index.rs",
-    "//third_party/rust/serde_json/v1/crate/src/value/mod.rs",
-    "//third_party/rust/serde_json/v1/crate/src/value/partial_eq.rs",
-    "//third_party/rust/serde_json/v1/crate/src/value/ser.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/compiletest.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/debug.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/lexical.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/lexical/algorithm.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/lexical/exponent.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/lexical/float.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/lexical/math.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/lexical/num.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/lexical/parse.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/lexical/rounding.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/macros/mod.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/map.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/regression.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/regression/issue520.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/regression/issue795.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/regression/issue845.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/stream.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/test.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/ui/missing_colon.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/ui/missing_comma.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/ui/missing_value.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/ui/not_found.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/ui/parse_expr.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/ui/parse_key.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/ui/unexpected_after_array_element.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/ui/unexpected_after_map_entry.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/ui/unexpected_colon.rs",
-    "//third_party/rust/serde_json/v1/crate/tests/ui/unexpected_comma.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/de.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/features_check/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/features_check/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/io/core.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/io/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/iter.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/algorithm.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/bhcomp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/bignum.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/cached.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/cached_float80.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/digit.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/errors.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/exponent.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/float.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/large_powers.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/large_powers32.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/large_powers64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/math.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/num.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/rounding.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/shift.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lexical/small_powers.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/macros.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/map.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/number.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/raw.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/read.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/ser.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/de.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/from.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/index.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/partial_eq.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/src/value/ser.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/compiletest.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/debug.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/algorithm.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/exponent.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/float.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/math.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/num.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/lexical/rounding.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/macros/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/map.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/regression.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/regression/issue520.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/regression/issue795.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/regression/issue845.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/stream.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/test.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/missing_colon.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/missing_comma.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/missing_value.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/not_found.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/parse_expr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/parse_key.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_after_array_element.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_after_map_entry.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_colon.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/tests/ui/unexpected_comma.rs",
   ]
   inputs = [
-    "//third_party/rust/serde_json/v1/crate/CONTRIBUTING.md",
-    "//third_party/rust/serde_json/v1/crate/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/CONTRIBUTING.md",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/README.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
@@ -104,8 +104,11 @@
     "//third_party/rust/serde/v1:lib",
   ]
   features = [ "std" ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root =
+      "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/build.rs"
+  build_sources = [
+    "//third_party/rust/chromium_crates_io/vendor/serde_json-1.0.78/build.rs",
+  ]
 
   # Only for usage from third-party crates. Add the crate to
   # third_party.toml to use it from first-party code.
diff --git a/third_party/rust/serde_json/v1/crate/LICENSE-APACHE b/third_party/rust/serde_json/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 16fe87b..0000000
--- a/third_party/rust/serde_json/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/third_party/rust/serde_json/v1/crate/LICENSE-MIT b/third_party/rust/serde_json/v1/crate/LICENSE-MIT
deleted file mode 100644
index 31aa7938..0000000
--- a/third_party/rust/serde_json/v1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,23 +0,0 @@
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/serde_json/v1/crate/tests/compiletest.rs b/third_party/rust/serde_json/v1/crate/tests/compiletest.rs
deleted file mode 100644
index 7974a62..0000000
--- a/third_party/rust/serde_json/v1/crate/tests/compiletest.rs
+++ /dev/null
@@ -1,7 +0,0 @@
-#[rustversion::attr(not(nightly), ignore)]
-#[cfg_attr(miri, ignore)]
-#[test]
-fn ui() {
-    let t = trybuild::TestCases::new();
-    t.compile_fail("tests/ui/*.rs");
-}
diff --git a/third_party/rust/serde_json_lenient/v0_1/BUILD.gn b/third_party/rust/serde_json_lenient/v0_1/BUILD.gn
index 225dbe3..5a584ee 100644
--- a/third_party/rust/serde_json_lenient/v0_1/BUILD.gn
+++ b/third_party/rust/serde_json_lenient/v0_1/BUILD.gn
@@ -11,52 +11,52 @@
   crate_name = "serde_json_lenient"
   epoch = "0.1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lib.rs"
   sources = [
-    "//third_party/rust/serde_json_lenient/v0_1/crate/build.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/de.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/error.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/features_check/error.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/features_check/mod.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/io/core.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/io/mod.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/iter.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/algorithm.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/bhcomp.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/bignum.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/cached.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/cached_float80.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/digit.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/errors.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/exponent.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/float.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/large_powers.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/large_powers32.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/large_powers64.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/math.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/mod.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/num.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/parse.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/rounding.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/shift.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/small_powers.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/lib.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/macros.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/map.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/number.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/raw.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/read.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/ser.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/value/de.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/value/from.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/value/index.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/value/mod.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/value/partial_eq.rs",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/src/value/ser.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/de.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/features_check/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/features_check/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/io/core.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/io/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/iter.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/algorithm.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/bhcomp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/bignum.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/cached.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/cached_float80.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/digit.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/errors.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/exponent.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/float.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/large_powers.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/large_powers32.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/large_powers64.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/math.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/num.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/rounding.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/shift.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lexical/small_powers.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/macros.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/map.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/number.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/raw.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/read.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/ser.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/de.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/from.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/index.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/partial_eq.rs",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/src/value/ser.rs",
   ]
   inputs = [
-    "//third_party/rust/serde_json_lenient/v0_1/crate/README.md",
-    "//third_party/rust/serde_json_lenient/v0_1/crate/tests/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/tests/README.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
@@ -80,6 +80,6 @@
     "std",
     "unbounded_depth",
   ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root = "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/build.rs"
+  build_sources = [ "//third_party/rust/chromium_crates_io/vendor/serde_json_lenient-0.1.8/build.rs" ]
 }
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/LICENSE-APACHE b/third_party/rust/serde_json_lenient/v0_1/crate/LICENSE-APACHE
deleted file mode 100644
index 1b5ec8b..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,176 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/LICENSE-MIT b/third_party/rust/serde_json_lenient/v0_1/crate/LICENSE-MIT
deleted file mode 100644
index 31aa7938..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,23 +0,0 @@
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/features_check/error.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/features_check/error.rs
deleted file mode 100644
index 22e5823..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/features_check/error.rs
+++ /dev/null
@@ -1 +0,0 @@
-"serde_json requires that either `std` (default) or `alloc` feature is enabled"
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/features_check/mod.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/features_check/mod.rs
deleted file mode 100644
index d12032ce..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/features_check/mod.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-//! Shows a user-friendly compiler error on incompatible selected features.
-
-#[allow(unused_macros)]
-macro_rules! hide_from_rustfmt {
-    ($mod:item) => {
-        $mod
-    };
-}
-
-#[cfg(not(any(feature = "std", feature = "alloc")))]
-hide_from_rustfmt! {
-    mod error;
-}
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/io/mod.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/io/mod.rs
deleted file mode 100644
index 9dee4a0..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/io/mod.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-//! A tiny, `no_std`-friendly facade around `std::io`.
-//! Reexports types from `std` when available; otherwise reimplements and
-//! provides some of the core logic.
-//!
-//! The main reason that `std::io` hasn't found itself reexported as part of
-//! the `core` crate is the `std::io::{Read, Write}` traits' reliance on
-//! `std::io::Error`, which may contain internally a heap-allocated `Box<Error>`
-//! and/or now relying on OS-specific `std::backtrace::Backtrace`.
-
-pub use self::imp::{Error, ErrorKind, Result, Write};
-
-#[cfg(not(feature = "std"))]
-#[path = "core.rs"]
-mod imp;
-
-#[cfg(feature = "std")]
-use std::io as imp;
-
-#[cfg(feature = "std")]
-pub use std::io::{Bytes, Read};
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/iter.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/iter.rs
deleted file mode 100644
index 9792916d..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/iter.rs
+++ /dev/null
@@ -1,70 +0,0 @@
-use crate::io;
-
-pub struct LineColIterator<I> {
-    iter: I,
-
-    /// Index of the current line. Characters in the first line of the input
-    /// (before the first newline character) are in line 1.
-    line: usize,
-
-    /// Index of the current column. The first character in the input and any
-    /// characters immediately following a newline character are in column 1.
-    /// The column is 0 immediately after a newline character has been read.
-    col: usize,
-
-    /// Byte offset of the start of the current line. This is the sum of lengths
-    /// of all previous lines. Keeping track of things this way allows efficient
-    /// computation of the current line, column, and byte offset while only
-    /// updating one of the counters in `next()` in the common case.
-    start_of_line: usize,
-}
-
-impl<I> LineColIterator<I>
-where
-    I: Iterator<Item = io::Result<u8>>,
-{
-    pub fn new(iter: I) -> LineColIterator<I> {
-        LineColIterator {
-            iter,
-            line: 1,
-            col: 0,
-            start_of_line: 0,
-        }
-    }
-
-    pub fn line(&self) -> usize {
-        self.line
-    }
-
-    pub fn col(&self) -> usize {
-        self.col
-    }
-
-    pub fn byte_offset(&self) -> usize {
-        self.start_of_line + self.col
-    }
-}
-
-impl<I> Iterator for LineColIterator<I>
-where
-    I: Iterator<Item = io::Result<u8>>,
-{
-    type Item = io::Result<u8>;
-
-    fn next(&mut self) -> Option<io::Result<u8>> {
-        match self.iter.next() {
-            None => None,
-            Some(Ok(b'\n')) => {
-                self.start_of_line += self.col + 1;
-                self.line += 1;
-                self.col = 0;
-                Some(Ok(b'\n'))
-            }
-            Some(Ok(c)) => {
-                self.col += 1;
-                Some(Ok(c))
-            }
-            Some(Err(e)) => Some(Err(e)),
-        }
-    }
-}
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/bhcomp.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/bhcomp.rs
deleted file mode 100644
index 1f2a7bbd..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/bhcomp.rs
+++ /dev/null
@@ -1,218 +0,0 @@
-// Adapted from https://github.com/Alexhuszagh/rust-lexical.
-
-//! Compare the mantissa to the halfway representation of the float.
-//!
-//! Compares the actual significant digits of the mantissa to the
-//! theoretical digits from `b+h`, scaled into the proper range.
-
-use super::bignum::*;
-use super::digit::*;
-use super::exponent::*;
-use super::float::*;
-use super::math::*;
-use super::num::*;
-use super::rounding::*;
-use core::{cmp, mem};
-
-// MANTISSA
-
-/// Parse the full mantissa into a big integer.
-///
-/// Max digits is the maximum number of digits plus one.
-fn parse_mantissa<F>(integer: &[u8], fraction: &[u8]) -> Bigint
-where
-    F: Float,
-{
-    // Main loop
-    let small_powers = POW10_LIMB;
-    let step = small_powers.len() - 2;
-    let max_digits = F::MAX_DIGITS - 1;
-    let mut counter = 0;
-    let mut value: Limb = 0;
-    let mut i: usize = 0;
-    let mut result = Bigint::default();
-
-    // Iteratively process all the data in the mantissa.
-    for &digit in integer.iter().chain(fraction) {
-        // We've parsed the max digits using small values, add to bignum
-        if counter == step {
-            result.imul_small(small_powers[counter]);
-            result.iadd_small(value);
-            counter = 0;
-            value = 0;
-        }
-
-        value *= 10;
-        value += as_limb(to_digit(digit).unwrap());
-
-        i += 1;
-        counter += 1;
-        if i == max_digits {
-            break;
-        }
-    }
-
-    // We will always have a remainder, as long as we entered the loop
-    // once, or counter % step is 0.
-    if counter != 0 {
-        result.imul_small(small_powers[counter]);
-        result.iadd_small(value);
-    }
-
-    // If we have any remaining digits after the last value, we need
-    // to add a 1 after the rest of the array, it doesn't matter where,
-    // just move it up. This is good for the worst-possible float
-    // representation. We also need to return an index.
-    // Since we already trimmed trailing zeros, we know there has
-    // to be a non-zero digit if there are any left.
-    if i < integer.len() + fraction.len() {
-        result.imul_small(10);
-        result.iadd_small(1);
-    }
-
-    result
-}
-
-// FLOAT OPS
-
-/// Calculate `b` from a a representation of `b` as a float.
-#[inline]
-pub(super) fn b_extended<F: Float>(f: F) -> ExtendedFloat {
-    ExtendedFloat::from_float(f)
-}
-
-/// Calculate `b+h` from a a representation of `b` as a float.
-#[inline]
-pub(super) fn bh_extended<F: Float>(f: F) -> ExtendedFloat {
-    // None of these can overflow.
-    let b = b_extended(f);
-    ExtendedFloat {
-        mant: (b.mant << 1) + 1,
-        exp: b.exp - 1,
-    }
-}
-
-// ROUNDING
-
-/// Custom round-nearest, tie-event algorithm for bhcomp.
-#[inline]
-fn round_nearest_tie_even(fp: &mut ExtendedFloat, shift: i32, is_truncated: bool) {
-    let (mut is_above, mut is_halfway) = round_nearest(fp, shift);
-    if is_halfway && is_truncated {
-        is_above = true;
-        is_halfway = false;
-    }
-    tie_even(fp, is_above, is_halfway);
-}
-
-// BHCOMP
-
-/// Calculate the mantissa for a big integer with a positive exponent.
-fn large_atof<F>(mantissa: Bigint, exponent: i32) -> F
-where
-    F: Float,
-{
-    let bits = mem::size_of::<u64>() * 8;
-
-    // Simple, we just need to multiply by the power of the radix.
-    // Now, we can calculate the mantissa and the exponent from this.
-    // The binary exponent is the binary exponent for the mantissa
-    // shifted to the hidden bit.
-    let mut bigmant = mantissa;
-    bigmant.imul_pow10(exponent as u32);
-
-    // Get the exact representation of the float from the big integer.
-    let (mant, is_truncated) = bigmant.hi64();
-    let exp = bigmant.bit_length() as i32 - bits as i32;
-    let mut fp = ExtendedFloat { mant, exp };
-    fp.round_to_native::<F, _>(|fp, shift| round_nearest_tie_even(fp, shift, is_truncated));
-    into_float(fp)
-}
-
-/// Calculate the mantissa for a big integer with a negative exponent.
-///
-/// This invokes the comparison with `b+h`.
-fn small_atof<F>(mantissa: Bigint, exponent: i32, f: F) -> F
-where
-    F: Float,
-{
-    // Get the significant digits and radix exponent for the real digits.
-    let mut real_digits = mantissa;
-    let real_exp = exponent;
-    debug_assert!(real_exp < 0);
-
-    // Get the significant digits and the binary exponent for `b+h`.
-    let theor = bh_extended(f);
-    let mut theor_digits = Bigint::from_u64(theor.mant);
-    let theor_exp = theor.exp;
-
-    // We need to scale the real digits and `b+h` digits to be the same
-    // order. We currently have `real_exp`, in `radix`, that needs to be
-    // shifted to `theor_digits` (since it is negative), and `theor_exp`
-    // to either `theor_digits` or `real_digits` as a power of 2 (since it
-    // may be positive or negative). Try to remove as many powers of 2
-    // as possible. All values are relative to `theor_digits`, that is,
-    // reflect the power you need to multiply `theor_digits` by.
-
-    // Can remove a power-of-two, since the radix is 10.
-    // Both are on opposite-sides of equation, can factor out a
-    // power of two.
-    //
-    // Example: 10^-10, 2^-10   -> ( 0, 10, 0)
-    // Example: 10^-10, 2^-15   -> (-5, 10, 0)
-    // Example: 10^-10, 2^-5    -> ( 5, 10, 0)
-    // Example: 10^-10, 2^5 -> (15, 10, 0)
-    let binary_exp = theor_exp - real_exp;
-    let halfradix_exp = -real_exp;
-    let radix_exp = 0;
-
-    // Carry out our multiplication.
-    if halfradix_exp != 0 {
-        theor_digits.imul_pow5(halfradix_exp as u32);
-    }
-    if radix_exp != 0 {
-        theor_digits.imul_pow10(radix_exp as u32);
-    }
-    if binary_exp > 0 {
-        theor_digits.imul_pow2(binary_exp as u32);
-    } else if binary_exp < 0 {
-        real_digits.imul_pow2(-binary_exp as u32);
-    }
-
-    // Compare real digits to theoretical digits and round the float.
-    match real_digits.compare(&theor_digits) {
-        cmp::Ordering::Greater => f.next_positive(),
-        cmp::Ordering::Less => f,
-        cmp::Ordering::Equal => f.round_positive_even(),
-    }
-}
-
-/// Calculate the exact value of the float.
-///
-/// Note: fraction must not have trailing zeros.
-pub(crate) fn bhcomp<F>(b: F, integer: &[u8], mut fraction: &[u8], exponent: i32) -> F
-where
-    F: Float,
-{
-    // Calculate the number of integer digits and use that to determine
-    // where the significant digits start in the fraction.
-    let integer_digits = integer.len();
-    let fraction_digits = fraction.len();
-    let digits_start = if integer_digits == 0 {
-        let start = fraction.iter().take_while(|&x| *x == b'0').count();
-        fraction = &fraction[start..];
-        start
-    } else {
-        0
-    };
-    let sci_exp = scientific_exponent(exponent, integer_digits, digits_start);
-    let count = F::MAX_DIGITS.min(integer_digits + fraction_digits - digits_start);
-    let scaled_exponent = sci_exp + 1 - count as i32;
-
-    let mantissa = parse_mantissa::<F>(integer, fraction);
-    if scaled_exponent >= 0 {
-        large_atof(mantissa, scaled_exponent)
-    } else {
-        small_atof(mantissa, scaled_exponent, b)
-    }
-}
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/bignum.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/bignum.rs
deleted file mode 100644
index f9551f5..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/bignum.rs
+++ /dev/null
@@ -1,33 +0,0 @@
-// Adapted from https://github.com/Alexhuszagh/rust-lexical.
-
-//! Big integer type definition.
-
-use super::math::*;
-use alloc::vec::Vec;
-
-/// Storage for a big integer type.
-#[derive(Clone, PartialEq, Eq)]
-pub(crate) struct Bigint {
-    /// Internal storage for the Bigint, in little-endian order.
-    pub(crate) data: Vec<Limb>,
-}
-
-impl Default for Bigint {
-    fn default() -> Self {
-        Bigint {
-            data: Vec::with_capacity(20),
-        }
-    }
-}
-
-impl Math for Bigint {
-    #[inline]
-    fn data(&self) -> &Vec<Limb> {
-        &self.data
-    }
-
-    #[inline]
-    fn data_mut(&mut self) -> &mut Vec<Limb> {
-        &mut self.data
-    }
-}
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/cached.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/cached.rs
deleted file mode 100644
index ef5a9fe..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/cached.rs
+++ /dev/null
@@ -1,82 +0,0 @@
-// Adapted from https://github.com/Alexhuszagh/rust-lexical.
-
-//! Cached powers trait for extended-precision floats.
-
-use super::cached_float80;
-use super::float::ExtendedFloat;
-
-// POWERS
-
-/// Precalculated powers that uses two-separate arrays for memory-efficiency.
-#[doc(hidden)]
-pub(crate) struct ExtendedFloatArray {
-    // Pre-calculated mantissa for the powers.
-    pub mant: &'static [u64],
-    // Pre-calculated binary exponents for the powers.
-    pub exp: &'static [i32],
-}
-
-/// Allow indexing of values without bounds checking
-impl ExtendedFloatArray {
-    #[inline]
-    pub fn get_extended_float(&self, index: usize) -> ExtendedFloat {
-        let mant = self.mant[index];
-        let exp = self.exp[index];
-        ExtendedFloat { mant, exp }
-    }
-
-    #[inline]
-    pub fn len(&self) -> usize {
-        self.mant.len()
-    }
-}
-
-// MODERATE PATH POWERS
-
-/// Precalculated powers of base N for the moderate path.
-#[doc(hidden)]
-pub(crate) struct ModeratePathPowers {
-    // Pre-calculated small powers.
-    pub small: ExtendedFloatArray,
-    // Pre-calculated large powers.
-    pub large: ExtendedFloatArray,
-    /// Pre-calculated small powers as 64-bit integers
-    pub small_int: &'static [u64],
-    // Step between large powers and number of small powers.
-    pub step: i32,
-    // Exponent bias for the large powers.
-    pub bias: i32,
-}
-
-/// Allow indexing of values without bounds checking
-impl ModeratePathPowers {
-    #[inline]
-    pub fn get_small(&self, index: usize) -> ExtendedFloat {
-        self.small.get_extended_float(index)
-    }
-
-    #[inline]
-    pub fn get_large(&self, index: usize) -> ExtendedFloat {
-        self.large.get_extended_float(index)
-    }
-
-    #[inline]
-    pub fn get_small_int(&self, index: usize) -> u64 {
-        self.small_int[index]
-    }
-}
-
-// CACHED EXTENDED POWERS
-
-/// Cached powers as a trait for a floating-point type.
-pub(crate) trait ModeratePathCache {
-    /// Get cached powers.
-    fn get_powers() -> &'static ModeratePathPowers;
-}
-
-impl ModeratePathCache for ExtendedFloat {
-    #[inline]
-    fn get_powers() -> &'static ModeratePathPowers {
-        cached_float80::get_powers()
-    }
-}
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/cached_float80.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/cached_float80.rs
deleted file mode 100644
index 9beda3d..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/cached_float80.rs
+++ /dev/null
@@ -1,206 +0,0 @@
-// Adapted from https://github.com/Alexhuszagh/rust-lexical.
-
-//! Cached exponents for basen values with 80-bit extended floats.
-//!
-//! Exact versions of base**n as an extended-precision float, with both
-//! large and small powers. Use the large powers to minimize the amount
-//! of compounded error.
-//!
-//! These values were calculated using Python, using the arbitrary-precision
-//! integer to calculate exact extended-representation of each value.
-//! These values are all normalized.
-
-use super::cached::{ExtendedFloatArray, ModeratePathPowers};
-
-// LOW-LEVEL
-// ---------
-
-// BASE10
-
-const BASE10_SMALL_MANTISSA: [u64; 10] = [
-    9223372036854775808,  // 10^0
-    11529215046068469760, // 10^1
-    14411518807585587200, // 10^2
-    18014398509481984000, // 10^3
-    11258999068426240000, // 10^4
-    14073748835532800000, // 10^5
-    17592186044416000000, // 10^6
-    10995116277760000000, // 10^7
-    13743895347200000000, // 10^8
-    17179869184000000000, // 10^9
-];
-const BASE10_SMALL_EXPONENT: [i32; 10] = [
-    -63, // 10^0
-    -60, // 10^1
-    -57, // 10^2
-    -54, // 10^3
-    -50, // 10^4
-    -47, // 10^5
-    -44, // 10^6
-    -40, // 10^7
-    -37, // 10^8
-    -34, // 10^9
-];
-const BASE10_LARGE_MANTISSA: [u64; 66] = [
-    11555125961253852697, // 10^-350
-    13451937075301367670, // 10^-340
-    15660115838168849784, // 10^-330
-    18230774251475056848, // 10^-320
-    10611707258198326947, // 10^-310
-    12353653155963782858, // 10^-300
-    14381545078898527261, // 10^-290
-    16742321987285426889, // 10^-280
-    9745314011399999080,  // 10^-270
-    11345038669416679861, // 10^-260
-    13207363278391631158, // 10^-250
-    15375394465392026070, // 10^-240
-    17899314949046850752, // 10^-230
-    10418772551374772303, // 10^-220
-    12129047596099288555, // 10^-210
-    14120069793541087484, // 10^-200
-    16437924692338667210, // 10^-190
-    9568131466127621947,  // 10^-180
-    11138771039116687545, // 10^-170
-    12967236152753102995, // 10^-160
-    15095849699286165408, // 10^-150
-    17573882009934360870, // 10^-140
-    10229345649675443343, // 10^-130
-    11908525658859223294, // 10^-120
-    13863348470604074297, // 10^-110
-    16139061738043178685, // 10^-100
-    9394170331095332911,  // 10^-90
-    10936253623915059621, // 10^-80
-    12731474852090538039, // 10^-70
-    14821387422376473014, // 10^-60
-    17254365866976409468, // 10^-50
-    10043362776618689222, // 10^-40
-    11692013098647223345, // 10^-30
-    13611294676837538538, // 10^-20
-    15845632502852867518, // 10^-10
-    9223372036854775808,  // 10^0
-    10737418240000000000, // 10^10
-    12500000000000000000, // 10^20
-    14551915228366851806, // 10^30
-    16940658945086006781, // 10^40
-    9860761315262647567,  // 10^50
-    11479437019748901445, // 10^60
-    13363823550460978230, // 10^70
-    15557538194652854267, // 10^80
-    18111358157653424735, // 10^90
-    10542197943230523224, // 10^100
-    12272733663244316382, // 10^110
-    14287342391028437277, // 10^120
-    16632655625031838749, // 10^130
-    9681479787123295682,  // 10^140
-    11270725851789228247, // 10^150
-    13120851772591970218, // 10^160
-    15274681817498023410, // 10^170
-    17782069995880619867, // 10^180
-    10350527006597618960, // 10^190
-    12049599325514420588, // 10^200
-    14027579833653779454, // 10^210
-    16330252207878254650, // 10^220
-    9505457831475799117,  // 10^230
-    11065809325636130661, // 10^240
-    12882297539194266616, // 10^250
-    14996968138956309548, // 10^260
-    17458768723248864463, // 10^270
-    10162340898095201970, // 10^280
-    11830521861667747109, // 10^290
-    13772540099066387756, // 10^300
-];
-const BASE10_LARGE_EXPONENT: [i32; 66] = [
-    -1226, // 10^-350
-    -1193, // 10^-340
-    -1160, // 10^-330
-    -1127, // 10^-320
-    -1093, // 10^-310
-    -1060, // 10^-300
-    -1027, // 10^-290
-    -994,  // 10^-280
-    -960,  // 10^-270
-    -927,  // 10^-260
-    -894,  // 10^-250
-    -861,  // 10^-240
-    -828,  // 10^-230
-    -794,  // 10^-220
-    -761,  // 10^-210
-    -728,  // 10^-200
-    -695,  // 10^-190
-    -661,  // 10^-180
-    -628,  // 10^-170
-    -595,  // 10^-160
-    -562,  // 10^-150
-    -529,  // 10^-140
-    -495,  // 10^-130
-    -462,  // 10^-120
-    -429,  // 10^-110
-    -396,  // 10^-100
-    -362,  // 10^-90
-    -329,  // 10^-80
-    -296,  // 10^-70
-    -263,  // 10^-60
-    -230,  // 10^-50
-    -196,  // 10^-40
-    -163,  // 10^-30
-    -130,  // 10^-20
-    -97,   // 10^-10
-    -63,   // 10^0
-    -30,   // 10^10
-    3,     // 10^20
-    36,    // 10^30
-    69,    // 10^40
-    103,   // 10^50
-    136,   // 10^60
-    169,   // 10^70
-    202,   // 10^80
-    235,   // 10^90
-    269,   // 10^100
-    302,   // 10^110
-    335,   // 10^120
-    368,   // 10^130
-    402,   // 10^140
-    435,   // 10^150
-    468,   // 10^160
-    501,   // 10^170
-    534,   // 10^180
-    568,   // 10^190
-    601,   // 10^200
-    634,   // 10^210
-    667,   // 10^220
-    701,   // 10^230
-    734,   // 10^240
-    767,   // 10^250
-    800,   // 10^260
-    833,   // 10^270
-    867,   // 10^280
-    900,   // 10^290
-    933,   // 10^300
-];
-const BASE10_SMALL_INT_POWERS: [u64; 10] = [
-    1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000,
-];
-const BASE10_STEP: i32 = 10;
-const BASE10_BIAS: i32 = 350;
-
-// HIGH LEVEL
-// ----------
-
-const BASE10_POWERS: ModeratePathPowers = ModeratePathPowers {
-    small: ExtendedFloatArray {
-        mant: &BASE10_SMALL_MANTISSA,
-        exp: &BASE10_SMALL_EXPONENT,
-    },
-    large: ExtendedFloatArray {
-        mant: &BASE10_LARGE_MANTISSA,
-        exp: &BASE10_LARGE_EXPONENT,
-    },
-    small_int: &BASE10_SMALL_INT_POWERS,
-    step: BASE10_STEP,
-    bias: BASE10_BIAS,
-};
-
-/// Get powers from base.
-pub(crate) fn get_powers() -> &'static ModeratePathPowers {
-    &BASE10_POWERS
-}
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/exponent.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/exponent.rs
deleted file mode 100644
index 6fc5197..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/exponent.rs
+++ /dev/null
@@ -1,50 +0,0 @@
-// Adapted from https://github.com/Alexhuszagh/rust-lexical.
-
-//! Utilities to calculate exponents.
-
-/// Convert usize into i32 without overflow.
-///
-/// This is needed to ensure when adjusting the exponent relative to
-/// the mantissa we do not overflow for comically-long exponents.
-#[inline]
-fn into_i32(value: usize) -> i32 {
-    if value > i32::max_value() as usize {
-        i32::max_value()
-    } else {
-        value as i32
-    }
-}
-
-// EXPONENT CALCULATION
-
-// Calculate the scientific notation exponent without overflow.
-//
-// For example, 0.1 would be -1, and 10 would be 1 in base 10.
-#[inline]
-pub(crate) fn scientific_exponent(
-    exponent: i32,
-    integer_digits: usize,
-    fraction_start: usize,
-) -> i32 {
-    if integer_digits == 0 {
-        let fraction_start = into_i32(fraction_start);
-        exponent.saturating_sub(fraction_start).saturating_sub(1)
-    } else {
-        let integer_shift = into_i32(integer_digits - 1);
-        exponent.saturating_add(integer_shift)
-    }
-}
-
-// Calculate the mantissa exponent without overflow.
-//
-// Remove the number of digits that contributed to the mantissa past
-// the dot, and add the number of truncated digits from the mantissa,
-// to calculate the scaling factor for the mantissa from a raw exponent.
-#[inline]
-pub(crate) fn mantissa_exponent(exponent: i32, fraction_digits: usize, truncated: usize) -> i32 {
-    if fraction_digits > truncated {
-        exponent.saturating_sub(into_i32(fraction_digits - truncated))
-    } else {
-        exponent.saturating_add(into_i32(truncated - fraction_digits))
-    }
-}
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/float.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/float.rs
deleted file mode 100644
index 2d434a2..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/float.rs
+++ /dev/null
@@ -1,183 +0,0 @@
-// Adapted from https://github.com/Alexhuszagh/rust-lexical.
-
-// FLOAT TYPE
-
-use super::num::*;
-use super::rounding::*;
-use super::shift::*;
-
-/// Extended precision floating-point type.
-///
-/// Private implementation, exposed only for testing purposes.
-#[doc(hidden)]
-#[derive(Clone, Copy, Debug, PartialEq, Eq)]
-pub(crate) struct ExtendedFloat {
-    /// Mantissa for the extended-precision float.
-    pub mant: u64,
-    /// Binary exponent for the extended-precision float.
-    pub exp: i32,
-}
-
-impl ExtendedFloat {
-    // PROPERTIES
-
-    // OPERATIONS
-
-    /// Multiply two normalized extended-precision floats, as if by `a*b`.
-    ///
-    /// The precision is maximal when the numbers are normalized, however,
-    /// decent precision will occur as long as both values have high bits
-    /// set. The result is not normalized.
-    ///
-    /// Algorithm:
-    ///     1. Non-signed multiplication of mantissas (requires 2x as many bits as input).
-    ///     2. Normalization of the result (not done here).
-    ///     3. Addition of exponents.
-    pub(crate) fn mul(&self, b: &ExtendedFloat) -> ExtendedFloat {
-        // Logic check, values must be decently normalized prior to multiplication.
-        debug_assert!((self.mant & u64::HIMASK != 0) && (b.mant & u64::HIMASK != 0));
-
-        // Extract high-and-low masks.
-        let ah = self.mant >> u64::HALF;
-        let al = self.mant & u64::LOMASK;
-        let bh = b.mant >> u64::HALF;
-        let bl = b.mant & u64::LOMASK;
-
-        // Get our products
-        let ah_bl = ah * bl;
-        let al_bh = al * bh;
-        let al_bl = al * bl;
-        let ah_bh = ah * bh;
-
-        let mut tmp = (ah_bl & u64::LOMASK) + (al_bh & u64::LOMASK) + (al_bl >> u64::HALF);
-        // round up
-        tmp += 1 << (u64::HALF - 1);
-
-        ExtendedFloat {
-            mant: ah_bh + (ah_bl >> u64::HALF) + (al_bh >> u64::HALF) + (tmp >> u64::HALF),
-            exp: self.exp + b.exp + u64::FULL,
-        }
-    }
-
-    /// Multiply in-place, as if by `a*b`.
-    ///
-    /// The result is not normalized.
-    #[inline]
-    pub(crate) fn imul(&mut self, b: &ExtendedFloat) {
-        *self = self.mul(b);
-    }
-
-    // NORMALIZE
-
-    /// Normalize float-point number.
-    ///
-    /// Shift the mantissa so the number of leading zeros is 0, or the value
-    /// itself is 0.
-    ///
-    /// Get the number of bytes shifted.
-    #[inline]
-    pub(crate) fn normalize(&mut self) -> u32 {
-        // Note:
-        // Using the cltz intrinsic via leading_zeros is way faster (~10x)
-        // than shifting 1-bit at a time, via while loop, and also way
-        // faster (~2x) than an unrolled loop that checks at 32, 16, 4,
-        // 2, and 1 bit.
-        //
-        // Using a modulus of pow2 (which will get optimized to a bitwise
-        // and with 0x3F or faster) is slightly slower than an if/then,
-        // however, removing the if/then will likely optimize more branched
-        // code as it removes conditional logic.
-
-        // Calculate the number of leading zeros, and then zero-out
-        // any overflowing bits, to avoid shl overflow when self.mant == 0.
-        let shift = if self.mant == 0 {
-            0
-        } else {
-            self.mant.leading_zeros()
-        };
-        shl(self, shift as i32);
-        shift
-    }
-
-    // ROUND
-
-    /// Lossy round float-point number to native mantissa boundaries.
-    #[inline]
-    pub(crate) fn round_to_native<F, Algorithm>(&mut self, algorithm: Algorithm)
-    where
-        F: Float,
-        Algorithm: FnOnce(&mut ExtendedFloat, i32),
-    {
-        round_to_native::<F, _>(self, algorithm);
-    }
-
-    // FROM
-
-    /// Create extended float from native float.
-    #[inline]
-    pub fn from_float<F: Float>(f: F) -> ExtendedFloat {
-        from_float(f)
-    }
-
-    // INTO
-
-    /// Convert into default-rounded, lower-precision native float.
-    #[inline]
-    pub(crate) fn into_float<F: Float>(mut self) -> F {
-        self.round_to_native::<F, _>(round_nearest_tie_even);
-        into_float(self)
-    }
-
-    /// Convert into downward-rounded, lower-precision native float.
-    #[inline]
-    pub(crate) fn into_downward_float<F: Float>(mut self) -> F {
-        self.round_to_native::<F, _>(round_downward);
-        into_float(self)
-    }
-}
-
-// FROM FLOAT
-
-// Import ExtendedFloat from native float.
-#[inline]
-pub(crate) fn from_float<F>(f: F) -> ExtendedFloat
-where
-    F: Float,
-{
-    ExtendedFloat {
-        mant: u64::as_cast(f.mantissa()),
-        exp: f.exponent(),
-    }
-}
-
-// INTO FLOAT
-
-// Export extended-precision float to native float.
-//
-// The extended-precision float must be in native float representation,
-// with overflow/underflow appropriately handled.
-#[inline]
-pub(crate) fn into_float<F>(fp: ExtendedFloat) -> F
-where
-    F: Float,
-{
-    // Export floating-point number.
-    if fp.mant == 0 || fp.exp < F::DENORMAL_EXPONENT {
-        // sub-denormal, underflow
-        F::ZERO
-    } else if fp.exp >= F::MAX_EXPONENT {
-        // overflow
-        F::from_bits(F::INFINITY_BITS)
-    } else {
-        // calculate the exp and fraction bits, and return a float from bits.
-        let exp: u64;
-        if (fp.exp == F::DENORMAL_EXPONENT) && (fp.mant & F::HIDDEN_BIT_MASK.as_u64()) == 0 {
-            exp = 0;
-        } else {
-            exp = (fp.exp + F::EXPONENT_BIAS) as u64;
-        }
-        let exp = exp << F::MANTISSA_SIZE;
-        let mant = fp.mant & F::MANTISSA_MASK.as_u64();
-        F::from_bits(F::Unsigned::as_cast(mant | exp))
-    }
-}
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/large_powers.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/large_powers.rs
deleted file mode 100644
index c63ce1c..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/large_powers.rs
+++ /dev/null
@@ -1,9 +0,0 @@
-// Adapted from https://github.com/Alexhuszagh/rust-lexical.
-
-//! Precalculated large powers for limbs.
-
-#[cfg(limb_width_32)]
-pub(crate) use super::large_powers32::*;
-
-#[cfg(limb_width_64)]
-pub(crate) use super::large_powers64::*;
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/large_powers32.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/large_powers32.rs
deleted file mode 100644
index 79911972..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/large_powers32.rs
+++ /dev/null
@@ -1,183 +0,0 @@
-// Adapted from https://github.com/Alexhuszagh/rust-lexical.
-
-//! Precalculated large powers for 32-bit limbs.
-
-/// Large powers (&[u32]) for base5 operations.
-const POW5_1: [u32; 1] = [5];
-const POW5_2: [u32; 1] = [25];
-const POW5_3: [u32; 1] = [625];
-const POW5_4: [u32; 1] = [390625];
-const POW5_5: [u32; 2] = [2264035265, 35];
-const POW5_6: [u32; 3] = [2242703233, 762134875, 1262];
-const POW5_7: [u32; 5] = [3211403009, 1849224548, 3668416493, 3913284084, 1593091];
-const POW5_8: [u32; 10] = [
-    781532673, 64985353, 253049085, 594863151, 3553621484, 3288652808, 3167596762, 2788392729,
-    3911132675, 590,
-];
-const POW5_9: [u32; 19] = [
-    2553183233, 3201533787, 3638140786, 303378311, 1809731782, 3477761648, 3583367183, 649228654,
-    2915460784, 487929380, 1011012442, 1677677582, 3428152256, 1710878487, 1438394610, 2161952759,
-    4100910556, 1608314830, 349175,
-];
-const POW5_10: [u32; 38] = [
-    4234999809, 2012377703, 2408924892, 1570150255, 3090844311, 3273530073, 1187251475, 2498123591,
-    3364452033, 1148564857, 687371067, 2854068671, 1883165473, 505794538, 2988060450, 3159489326,
-    2531348317, 3215191468, 849106862, 3892080979, 3288073877, 2242451748, 4183778142, 2995818208,
-    2477501924, 325481258, 2487842652, 1774082830, 1933815724, 2962865281, 1168579910, 2724829000,
-    2360374019, 2315984659, 2360052375, 3251779801, 1664357844, 28,
-];
-const POW5_11: [u32; 75] = [
-    689565697, 4116392818, 1853628763, 516071302, 2568769159, 365238920, 336250165, 1283268122,
-    3425490969, 248595470, 2305176814, 2111925499, 507770399, 2681111421, 589114268, 591287751,
-    1708941527, 4098957707, 475844916, 3378731398, 2452339615, 2817037361, 2678008327, 1656645978,
-    2383430340, 73103988, 448667107, 2329420453, 3124020241, 3625235717, 3208634035, 2412059158,
-    2981664444, 4117622508, 838560765, 3069470027, 270153238, 1802868219, 3692709886, 2161737865,
-    2159912357, 2585798786, 837488486, 4237238160, 2540319504, 3798629246, 3748148874, 1021550776,
-    2386715342, 1973637538, 1823520457, 1146713475, 833971519, 3277251466, 905620390, 26278816,
-    2680483154, 2294040859, 373297482, 5996609, 4109575006, 512575049, 917036550, 1942311753,
-    2816916778, 3248920332, 1192784020, 3537586671, 2456567643, 2925660628, 759380297, 888447942,
-    3559939476, 3654687237, 805,
-];
-const POW5_12: [u32; 149] = [
-    322166785, 3809044581, 2994556223, 1239584207, 3962455841, 4001882964, 3053876612, 915114683,
-    2783289745, 785739093, 4253185907, 3931164994, 1370983858, 2553556126, 3360742076, 2255410929,
-    422849554, 2457422215, 3539495362, 1720790602, 1908931983, 1470596141, 592794347, 4219465164,
-    4085652704, 941661409, 2534650953, 885063988, 2355909854, 2812815516, 767256131, 3821757683,
-    2155151105, 3817418473, 281116564, 2834395026, 2821201622, 2524625843, 1511330880, 2572352493,
-    330571332, 2951088579, 2730271766, 4044456479, 4212286644, 2444937588, 3603420843, 2387148597,
-    1142537539, 3299235429, 1751012624, 861228086, 2873722519, 230498814, 1023297821, 2553128038,
-    3421129895, 2651917435, 2042981258, 1606787143, 2228751918, 447345732, 1930371132, 1784132011,
-    3612538790, 2275925090, 2487567871, 1080427616, 2009179183, 3383506781, 3899054063, 1950782960,
-    2168622213, 2717674390, 3616636027, 2079341593, 1530129217, 1461057425, 2406264415, 3674671357,
-    2972036238, 2019354295, 1455849819, 1866918619, 1324269294, 424891864, 2722422332, 2641594816,
-    1400249021, 3482963993, 3734946379, 225889849, 1891545473, 777383150, 3589824633, 4117601611,
-    4220028667, 334453379, 1083130821, 1060342180, 4208163139, 1489826908, 4163762246, 1096580926,
-    689301528, 2336054516, 1782865703, 4175148410, 3398369392, 2329412588, 3001580596, 59740741,
-    3202189932, 3351895776, 246185302, 718535188, 3772647488, 4151666556, 4055698133, 2461934110,
-    2281316281, 3466396836, 3536023465, 1064267812, 2955456354, 2423805422, 3627960790, 1325057500,
-    3876919979, 2009959531, 175455101, 184092852, 2358785571, 3842977831, 2485266289, 487121622,
-    4159252710, 4075707558, 459389244, 300652075, 2521346588, 3458976673, 888631636, 2076098096,
-    3844514585, 2363697580, 3729421522, 3051115477, 649395,
-];
-const POW5_13: [u32; 298] = [
-    711442433, 3564261005, 2399042279, 4170849936, 4010295575, 1423987028, 330414929, 1349249065,
-    4213813618, 3852031822, 4040843590, 2154565331, 3094013374, 1159028371, 3227065538, 2115927092,
-    2085102554, 488590542, 2609619432, 3602898805, 3812736528, 3269439096, 23816114, 253984538,
-    1035905997, 2942969204, 3400787671, 338562688, 1637191975, 740509713, 2264962817, 3410753922,
-    4162231428, 2282041228, 1759373012, 3155367777, 4278913285, 1420532801, 1981002276, 438054990,
-    1006507643, 1142697287, 1332538012, 2029019521, 3949305784, 818392641, 2491288846, 2716584663,
-    3648886102, 556814413, 444795339, 4071412999, 1066321706, 4253169466, 2510832316, 672091442,
-    4083256000, 2165985028, 1841538484, 3549854235, 364431512, 3707648143, 1162785440, 2268641545,
-    281340310, 735693841, 848809228, 1700785200, 2919703985, 4094234344, 58530286, 965505005,
-    1000010347, 3381961808, 3040089923, 1973852082, 2890971585, 1019960210, 4292895237, 2821887841,
-    3756675650, 3951282907, 3885870583, 1008791145, 503998487, 1881258362, 1949332730, 392996726,
-    2012973814, 3970014187, 2461725150, 2942547730, 3728066699, 2766901132, 3778532841, 1085564064,
-    2278673896, 1116879805, 3448726271, 774279411, 157211670, 1506320155, 531168605, 1362654525,
-    956967721, 2148871960, 769186085, 4186232894, 2055679604, 3248365487, 3981268013, 3975787984,
-    2489510517, 3309046495, 212771124, 933418041, 3371839114, 562115198, 1853601831, 757336096,
-    1354633440, 1486083256, 2872126393, 522920738, 1141587749, 3210903262, 1926940553, 3054024853,
-    2021162538, 2262742000, 1877899947, 3147002868, 669840763, 4158174590, 4238502559, 1023731922,
-    3386840011, 829588074, 3449720188, 2835142880, 2999162007, 813056473, 482949569, 638108879,
-    3067201471, 1026714238, 4004452838, 2383667807, 3999477803, 771648919, 630660440, 3827121348,
-    176185980, 2878191002, 2666149832, 3909811063, 2429163983, 2665690412, 907266128, 4269332098,
-    2022665808, 1527122180, 3072053668, 1072477492, 3006022924, 549664855, 2800340954, 37352654,
-    1212772743, 2711280533, 3029527946, 2511120040, 1305308377, 3474662224, 4226330922, 442988428,
-    954940108, 3274548099, 4212288177, 2688499880, 3982226758, 3922609956, 1279948029, 1939943640,
-    3650489901, 2733364929, 2494263275, 1864579964, 1225941120, 2390465139, 1267503249, 3533240729,
-    904410805, 2842550015, 2517736241, 1796069820, 3335274381, 673539835, 1924694759, 3598098235,
-    2792633405, 16535707, 3703535497, 3592841791, 2929082877, 1317622811, 294990855, 1396706563,
-    2383271770, 3853857605, 277813677, 277580220, 1101318484, 3761974115, 1132150143, 2544692622,
-    3419825776, 743770306, 1695464553, 1548693232, 2421159615, 2575672031, 2678971806, 1591267897,
-    626546738, 3823443129, 267710932, 1455435162, 2353985540, 3248523795, 335348168, 3872552561,
-    2814522612, 2634118860, 3503767026, 1301019273, 1414467789, 722985138, 3070909565, 4253482569,
-    3744939841, 558142907, 2229819389, 13833173, 77003966, 2763671364, 3905603970, 2931990126,
-    2280419384, 1879090457, 2934846267, 4284933164, 2331863845, 62191163, 3178861020, 1522063815,
-    785672270, 1215568492, 2936443917, 802972489, 2956820173, 3916732783, 2893572089, 1391232801,
-    3168640330, 2396859648, 894950918, 1103583736, 961991865, 2807302642, 305977505, 3054505899,
-    1048256994, 781017659, 2459278754, 3164823415, 537658277, 905753687, 464963300, 4149131560,
-    1029507924, 2278300961, 1231291503, 414073408, 3630740085, 2345841814, 475358196, 3258243317,
-    4167625072, 4178911231, 2927355042, 655438830, 3138378018, 623200562, 2785714112, 273403236,
-    807993669, 98,
-];
-const POW5_14: [u32; 595] = [
-    1691320321, 2671006246, 1682531301, 2072858707, 1240508969, 3108358191, 1125119096, 2470144952,
-    1610099978, 1690632660, 1941696884, 2663506355, 1006364675, 3909158537, 4147711374, 1072663936,
-    4078768933, 745751659, 4123687570, 471458681, 655028926, 4113407388, 3945524552, 985625313,
-    1254424514, 2127508744, 570530434, 945388122, 3194649404, 2589065070, 2731705399, 202030749,
-    2090780394, 3348662271, 1481754777, 1130635472, 4025144705, 1924486271, 2578567861, 125491448,
-    1558036315, 994248173, 3817216711, 763950077, 1030439870, 959586474, 3845661701, 483795093,
-    1637944470, 2275463649, 3398804829, 1758016486, 2665513698, 2004912571, 1094885097, 4223064276,
-    3307819021, 651121777, 1757003305, 3603542336, 129917786, 2215974994, 3042386306, 2205352757,
-    3944939700, 3710987569, 97967515, 1217242524, 930630949, 3660328512, 1787663098, 1784141600,
-    2500542892, 4034561586, 3444961378, 785043562, 3869499367, 885623728, 2625011087, 3053789617,
-    1965731793, 3900511934, 2648823592, 3851062028, 3321968688, 799195417, 1011847510, 1369129160,
-    1348009103, 2876796955, 2915408967, 3305284948, 263399535, 1715990604, 2645821294, 1587844552,
-    2624912049, 3035631499, 2306636348, 3499275462, 675152704, 854794152, 4004972748, 1739996642,
-    1333476491, 4012621867, 3658792931, 3297985728, 2864481726, 3066357406, 785287846, 1671499798,
-    433044045, 1919608025, 264833858, 3999983367, 1116778570, 1301982149, 4213901070, 4081649357,
-    536169226, 1389008649, 188923873, 373495152, 2551132278, 1800758715, 3951840330, 2632334454,
-    3118778225, 1034046547, 1862428410, 3037609062, 1994608505, 29051798, 2571685694, 264151332,
-    2260643090, 2717535964, 3508441116, 3283713017, 1903365635, 923575694, 1219598101, 2288281570,
-    3676533911, 1014136356, 555142354, 2389170030, 4185108175, 884862419, 836141292, 2957159173,
-    1997444768, 4233903127, 2876184692, 3089125070, 1480848293, 1097600237, 299700527, 2507669891,
-    2982628312, 2114881043, 2529576251, 2812279824, 2987750993, 4241938954, 2204775591, 1037094060,
-    829315638, 1231047149, 52608178, 3735136637, 3455232602, 962039123, 488286513, 50685385,
-    3516451821, 843975207, 1572355722, 675489076, 2428445672, 1555117248, 3708476086, 10375249,
-    4172112346, 2117510871, 2227658327, 3187664554, 3050656558, 328034318, 3179601324, 1247769761,
-    3439263953, 1431538938, 2962525068, 1213366289, 3813013550, 2651093719, 1860661503, 3933716208,
-    264320617, 789980519, 2257856172, 102000748, 977269860, 1113845122, 3008928583, 1461738106,
-    557786285, 2926560363, 1038106190, 3643478847, 828004507, 457818698, 1933056971, 373408056,
-    2076808229, 3160935130, 2781854874, 2519636100, 177606000, 4237103862, 3977834316, 1621936232,
-    2599050516, 319893558, 3343370366, 765044144, 976657331, 7026264, 294277429, 3829376742,
-    3029627280, 2705178718, 3614653880, 230519152, 3288033233, 293525479, 3805751881, 3227511198,
-    2520308544, 3648103003, 1111086184, 437622105, 2232033852, 3239146386, 584244184, 1450926016,
-    2462430443, 3226534010, 298582169, 4214576928, 1762099469, 964985185, 1585788148, 1641127666,
-    787006566, 2315956284, 3258232694, 2275058964, 2541003317, 1508235863, 2613339827, 4080647514,
-    1152057965, 3149266279, 731345410, 914737650, 65395712, 1884566942, 1379520432, 2611027720,
-    4163073378, 2619704967, 2746552541, 1388822415, 3005141199, 843440249, 4288674003, 3136174279,
-    4051522914, 4144149433, 3427566947, 3419023197, 3758479825, 3893877676, 96899594, 1657725776,
-    253618880, 434129337, 1499045748, 2996992534, 4036042074, 2110713869, 906222950, 928326225,
-    2541827893, 1604330202, 226792470, 4022228930, 815850898, 1466012310, 3377712199, 292769859,
-    2822055597, 3225701344, 3052947004, 385831222, 705324593, 4030158636, 3540280538, 2982120874,
-    2136414455, 255762046, 3852783591, 3262064164, 2358991588, 3756586117, 4143612643, 3326743817,
-    2897365738, 807711264, 3719310016, 3721264861, 3627337076, 944539331, 3640975513, 3712525681,
-    1162911839, 2008243316, 2179489649, 2867584109, 261861553, 3570253908, 2062868357, 2220328623,
-    3857004679, 3744109002, 4138041873, 1451860932, 2364975637, 2802161722, 2680106834, 753401584,
-    1223182946, 1245401957, 4163377735, 3565815922, 2216942838, 4036140094, 71979081, 3924559643,
-    400477238, 551750683, 1174153235, 859969898, 1185921017, 1711399735, 812991545, 4051735761,
-    3549118738, 1631653329, 3631835958, 3648867800, 1206500363, 2155893137, 361030362, 3454286017,
-    2505909489, 1083595169, 453595313, 1510564703, 1706163902, 1632924345, 1381875722, 1661526119,
-    1082778324, 3571910052, 1140625929, 851544870, 1145546234, 2938573139, 907528924, 1304752338,
-    1764668294, 1788942063, 1700368828, 104979467, 1413911959, 3327497828, 1956384744, 1272712474,
-    2815637534, 3307809377, 1320574940, 1111968962, 4073107827, 434096622, 169451929, 3201183459,
-    3331028877, 2852366972, 3369830128, 2924794558, 3106537952, 3739481231, 1612955817, 4138608722,
-    2721281595, 2755775390, 843505117, 982234295, 1157276611, 814674632, 4246504726, 3532006708,
-    992340967, 1647538031, 204696133, 193866982, 3899126129, 300851698, 1379496684, 1759463683,
-    1354782756, 1374637239, 3410883240, 1073406229, 3038431791, 1053909855, 3607043270, 173719711,
-    3733903830, 171820911, 1573050589, 932781534, 4183534770, 2158849555, 372245998, 3573073830,
-    841339264, 2759200520, 1610547277, 2603293319, 3890906486, 1557138278, 3964109906, 677238797,
-    537994297, 1124184993, 4287078344, 4207654540, 2943022776, 2977947524, 3255359985, 4098397558,
-    2274666217, 2915862060, 243524940, 2467726756, 2869020032, 507521339, 3403121914, 522051455,
-    1803903108, 3471254194, 473535371, 1948602036, 3352095732, 3116527002, 1795743673, 775867940,
-    2551469548, 3757442064, 3162525227, 3765412747, 3040105484, 1927625810, 48214767, 2997207130,
-    1342349989, 2536583992, 1501320191, 3592287317, 887432730, 967585477, 3334212779, 948663609,
-    1064513472, 15386372, 2465931737, 3230242590, 3036652803, 2063155087, 1927500726, 2821790499,
-    2187774383, 501520074, 3688568496, 3606711121, 2576459247, 3176542345, 378322447, 156541411,
-    1400607301, 1406179107, 677848877, 2253753529, 193196070, 4207435024, 4166396241, 509467541,
-    2906024136, 1221753746, 3375413222, 431327897, 2749265123, 2848827671, 3412997614, 2051920238,
-    1283516885, 1300498239, 1957256104, 2634010560, 3531900395, 360276850, 1461184973, 2012063967,
-    2873572430, 2914608609, 4289554777, 1539331673, 1859532928, 4213441063, 538215691, 3512720863,
-    4258743698, 3040408445, 982396546, 343095663, 4138069496, 1021581857, 214185242, 1968079460,
-    2864275059, 3347192726, 4096783459, 3259169450, 3707808869, 142485006, 399610869, 230556456,
-    2219467721, 4191227798, 2242548189, 3136366572, 179755707, 3464881829, 452317775, 3887426070,
-    3446430233, 1473370015, 1576807208, 3964523248, 419325089, 2373067114, 1596072055, 1928415752,
-    3635452689, 1005598891, 3335462724, 3290848636, 3669078247, 1178176812, 2110774376, 3068593619,
-    1253036518, 908857731, 3631223047, 4138506423, 2903592318, 3596915748, 3289036113, 3721512676,
-    2704409359, 3386016968, 3676268074, 2185259502, 1096257611, 3360076717, 3548676554, 170167319,
-    3360064287, 3899940843, 9640,
-];
-
-pub(crate) const POW5: [&'static [u32]; 14] = [
-    &POW5_1, &POW5_2, &POW5_3, &POW5_4, &POW5_5, &POW5_6, &POW5_7, &POW5_8, &POW5_9, &POW5_10,
-    &POW5_11, &POW5_12, &POW5_13, &POW5_14,
-];
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/large_powers64.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/large_powers64.rs
deleted file mode 100644
index ee36561..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/large_powers64.rs
+++ /dev/null
@@ -1,625 +0,0 @@
-// Adapted from https://github.com/Alexhuszagh/rust-lexical.
-
-//! Precalculated large powers for 64-bit limbs.
-
-/// Large powers (&[u64]) for base5 operations.
-const POW5_1: [u64; 1] = [5];
-const POW5_2: [u64; 1] = [25];
-const POW5_3: [u64; 1] = [625];
-const POW5_4: [u64; 1] = [390625];
-const POW5_5: [u64; 1] = [152587890625];
-const POW5_6: [u64; 2] = [3273344365508751233, 1262];
-const POW5_7: [u64; 3] = [7942358959831785217, 16807427164405733357, 1593091];
-const POW5_8: [u64; 5] = [
-    279109966635548161,
-    2554917779393558781,
-    14124656261812188652,
-    11976055582626787546,
-    2537941837315,
-];
-const POW5_9: [u64; 10] = [
-    13750482914757213185,
-    1302999927698857842,
-    14936872543252795590,
-    2788415840139466767,
-    2095640732773017264,
-    7205570348933370714,
-    7348167152523113408,
-    9285516396840364274,
-    6907659600622710236,
-    349175,
-];
-const POW5_10: [u64; 19] = [
-    8643096425819600897,
-    6743743997439985372,
-    14059704609098336919,
-    10729359125898331411,
-    4933048501514368705,
-    12258131603170554683,
-    2172371001088594721,
-    13569903330219142946,
-    13809142207969578845,
-    16716360519037769646,
-    9631256923806107285,
-    12866941232305103710,
-    1397931361048440292,
-    7619627737732970332,
-    12725409486282665900,
-    11703051443360963910,
-    9947078370803086083,
-    13966287901448440471,
-    121923442132,
-];
-const POW5_11: [u64; 38] = [
-    17679772531488845825,
-    2216509366347768155,
-    1568689219195129479,
-    5511594616325588277,
-    1067709417009240089,
-    9070650952098657518,
-    11515285870634858015,
-    2539561553659505564,
-    17604889300961091799,
-    14511540856854204724,
-    12099083339557485471,
-    7115240299237943815,
-    313979240050606788,
-    10004784664717172195,
-    15570268847930131473,
-    10359715202835930803,
-    17685054012115162812,
-    13183273382855797757,
-    7743260039872919062,
-    9284593436392572926,
-    11105921222066415013,
-    18198799323400703846,
-    16314988383739458320,
-    4387527177871570570,
-    8476708682254672590,
-    4925096874831034057,
-    14075687868072027455,
-    112866656203221926,
-    9852830467773230418,
-    25755239915196746,
-    2201493076310172510,
-    8342165458688466438,
-    13954006576066379050,
-    15193819059903295636,
-    12565616718911389531,
-    3815854855847885129,
-    15696762163583540628,
-    805,
-];
-const POW5_12: [u64; 75] = [
-    16359721904723189761,
-    5323973632697650495,
-    17187956456762001185,
-    3930387638628283780,
-    3374723710406992273,
-    16884225088663222131,
-    10967440051041439154,
-    9686916182456720060,
-    10554548046311730194,
-    7390739362393647554,
-    6316162333127736719,
-    18122464886584070891,
-    4044404959645932768,
-    3801320885861987401,
-    12080950653257274590,
-    16414324262488991299,
-    16395687498836410113,
-    12173633940896186260,
-    10843185433142632150,
-    11048169832730399808,
-    12674828934734683716,
-    17370808310130582550,
-    10500926985433408692,
-    10252725158410704555,
-    14170108270502067523,
-    3698946465517688080,
-    989984870770509463,
-    10965601426733943069,
-    11389898658438335655,
-    6901098232861256586,
-    1921335291173932590,
-    7662788640922083388,
-    9775023833308395430,
-    4640401278902814207,
-    14532050972198413359,
-    8378549018693130223,
-    11672322628395371653,
-    8930704142764178555,
-    6275193859483102017,
-    15782593304269205087,
-    8673060659034172558,
-    8018354414354334043,
-    1824896661540749038,
-    11345563346725559868,
-    14959216444480821949,
-    970189517688324683,
-    3338835207603007873,
-    17684964260791738489,
-    1436466329061721851,
-    4554134986752476101,
-    6398757850768963907,
-    4709779218751158342,
-    10033277748582410264,
-    17932125878679265063,
-    10004750887749091440,
-    256584531835386932,
-    14396282740722731628,
-    3086085133731396950,
-    17831272085689600064,
-    10573926491412564693,
-    14888061047859191737,
-    4570995450261499817,
-    10410165022312935266,
-    5691078631447480790,
-    8632710455805418155,
-    790672778942823293,
-    16505464105756800547,
-    2092171438149740401,
-    17505030673829275878,
-    1291290830058928444,
-    14856191690683232796,
-    8916773426496500052,
-    10152003807578858265,
-    13104441193763861714,
-    649395,
-];
-const POW5_13: [u64; 149] = [
-    15308384451594534913,
-    17913664074042735335,
-    6115977719198531863,
-    5794980608663993169,
-    16544350702855106930,
-    9253787637781258566,
-    4977988951675168190,
-    9087837664087448770,
-    2098480401110016986,
-    15474332540882100712,
-    14042133997396540944,
-    1090855284423485362,
-    12639956485351058381,
-    1454115676006639319,
-    3180465001342538023,
-    14649076551958697729,
-    9801292446545910916,
-    13552201410826594004,
-    6101141927469189381,
-    1881431857880609316,
-    4907847477899433595,
-    8714572486973123228,
-    3514969632331374520,
-    11667642286891470094,
-    2391499697425323350,
-    17486585679659076043,
-    18267223761882105642,
-    2886610765822313148,
-    9302834862968900288,
-    15246507846733637044,
-    15924227519624562840,
-    9743741243284697760,
-    3159780987244964246,
-    7304816812369628428,
-    17584602612559717809,
-    4146812420657846766,
-    14525415362681041515,
-    8477630142371600195,
-    4380695748062263745,
-    12119915994367943173,
-    16970630866565485122,
-    4332724980155264503,
-    8079943140620527639,
-    1687908087554405626,
-    17051081099834002166,
-    12638146269730763230,
-    11883749876933445771,
-    4662462156371383785,
-    4796962238316531176,
-    3325504751659868927,
-    6469595803187862550,
-    5852556621152583005,
-    9229334792448387881,
-    17979733373938620709,
-    13951623534175792756,
-    17075879371091039277,
-    14212246479457938037,
-    4008999959804158260,
-    2414266395366403722,
-    3252733766253918247,
-    6382678985007829216,
-    2245927470982310841,
-    13790724502051307301,
-    13116936866733148041,
-    9718402891306794538,
-    13516274400356104875,
-    17859223875778049403,
-    4396895129099725471,
-    3563053650368467915,
-    12176845952536972668,
-    3492050964335269015,
-    2740656767075170753,
-    4409704077614761919,
-    10237775279597492710,
-    3314206875098230827,
-    16437361028114095448,
-    12361736225407656572,
-    16792510651790145480,
-    11449053143229929935,
-    18336641737580333136,
-    6558939822118891088,
-    4606255756908155300,
-    2360792578991605004,
-    160428430149144538,
-    11644861220729221511,
-    10785178451159739786,
-    14923560618031934681,
-    1902620814992781610,
-    14064076995338910412,
-    11547019064112212657,
-    16847481479966225734,
-    8331994491163145469,
-    11739712981738851885,
-    8008309968651120619,
-    10266969595459035264,
-    15175153381217702033,
-    12208659352573720245,
-    7714061140750342961,
-    2892831567213510541,
-    15453714249045017319,
-    71020323573871677,
-    15431137995750602633,
-    5659146884637671933,
-    5998809010488554503,
-    16552192379299157850,
-    1192197967194298797,
-    16157555793424861524,
-    10929371590994640255,
-    3194469143425738352,
-    6651586784672005225,
-    11062427140788057791,
-    6834443579468668318,
-    16421563197797455922,
-    6251046422506172884,
-    13952303462156793860,
-    16632486601871393224,
-    11313454360291325172,
-    5587835232504462834,
-    3105197524618514637,
-    18268568531031972989,
-    2397205535804309313,
-    59413027864729597,
-    11869878125348715710,
-    12592801707270523266,
-    8070632061321113656,
-    18403647807860650811,
-    267109013517069093,
-    6537214311028855260,
-    5220826919973709902,
-    3448740582779163661,
-    16822239213112884941,
-    5975299384311048185,
-    10294433804430712138,
-    4739856055412448774,
-    12057273038326387897,
-    13119002941950056609,
-    3354445304051737058,
-    13592813067499314594,
-    3890182464434078629,
-    17820384357466425060,
-    9785228118969879380,
-    1778431746734556271,
-    10075313876350055029,
-    13994048489400919028,
-    17948287074199726448,
-    2815088342305858722,
-    2676626035777198370,
-    1174257960026283968,
-    421714788677,
-];
-const POW5_14: [u64; 298] = [
-    11471884475673051137,
-    8902860357476377573,
-    13350296775839230505,
-    10609191786344608888,
-    7261211985859587338,
-    11439672689354862964,
-    16789708072300570627,
-    4607056528866348430,
-    3202978990421512997,
-    2024899620433984146,
-    17666950207239811774,
-    4233228489390288200,
-    9137580478688460738,
-    4060411066587388546,
-    11119949806060600124,
-    867715462473090103,
-    14382394941384869610,
-    4856042377419278489,
-    8265605599571137921,
-    538981667666252469,
-    4270263388700786523,
-    3281140600308898503,
-    4121392524544394174,
-    2077884106245940229,
-    9773041957329767574,
-    7550623316597646685,
-    8611033926449791714,
-    18137922955420802793,
-    2796546741236224013,
-    15477096484628446761,
-    9517540128113714010,
-    9471917970500821378,
-    15938570248662483124,
-    5228016831978462619,
-    15720991252586974501,
-    7662829825220776698,
-    17328310068068434348,
-    3371736428170309730,
-    3803724952191098855,
-    13115926536504376719,
-    16752571196153442257,
-    16540185467776259880,
-    3432518182450051120,
-    5880364967211798870,
-    12355748840305392783,
-    14196090758536469575,
-    7370123524686686319,
-    6819740424617592686,
-    13037938013537368753,
-    15029273671291927100,
-    3671312928327205696,
-    7473228676544792780,
-    17234079691312938123,
-    14164740848093544419,
-    13169904779481875902,
-    7179036968465894054,
-    8244653688947194445,
-    17179797746073799490,
-    5591970751047577674,
-    17530550506268329742,
-    5965746721852312330,
-    1604149463243472865,
-    7734199791463116918,
-    11305790396015856714,
-    4441196105025505137,
-    13046431581185664762,
-    124776524294606713,
-    1134521334706523966,
-    11671728093344476434,
-    14103440020972933148,
-    3966727403013869059,
-    9828094508409132821,
-    4355682486381147287,
-    10261407143988481234,
-    3800455155249557199,
-    12700901937937547500,
-    18184475466894579360,
-    13267691151779895412,
-    4714157123477697445,
-    10770360171308585263,
-    9083344917597998040,
-    12078649873810212155,
-    18218989082046199377,
-    4454285072780637351,
-    5287307245618354742,
-    16042289702059031730,
-    4131926574212754010,
-    217692071448455473,
-    3624845916216282093,
-    2901203491797614218,
-    6679177724033967080,
-    44561358851332790,
-    9094639944041587162,
-    13690915012276084311,
-    1408896670826320686,
-    5359130319612337580,
-    6148412925099835601,
-    5211368532286409612,
-    11386360825549027374,
-    16895182466965795071,
-    3392940493846427241,
-    438089879085393580,
-    4783928372776399972,
-    6278117363595909959,
-    12569481049412674733,
-    15648622492570893902,
-    1966316336235305115,
-    1603775390515993547,
-    13576113010204316709,
-    10821754650102840474,
-    18198222517222903152,
-    6966163076615302988,
-    1373932372410129684,
-    3285839581819684990,
-    30177575069719475,
-    16447047871247307061,
-    11618654126674833808,
-    990072222556306872,
-    1260682336135768017,
-    13862055046689532489,
-    15668483092844698432,
-    1879572630092764264,
-    13912027797058626108,
-    6231679788219816920,
-    13857858054844167403,
-    18101470072534728857,
-    4144579812461609229,
-    7048589655616599284,
-    9946956499532694630,
-    9771303850109874038,
-    6477823708780339765,
-    17526247621747041971,
-    13525995675852669549,
-    3928768291901239810,
-    8094153383078124544,
-    11214278667728965552,
-    11251547162596832610,
-    5964946855123292381,
-    3622548288590237903,
-    13469765967150053587,
-    17798986288523466082,
-    14684592818807932259,
-    16724077276802963921,
-    7119877993753121290,
-    1864571304902781632,
-    12871984921385213812,
-    9065447042604670298,
-    3987130777300360550,
-    6890545752116901685,
-    17275341711601865750,
-    6296474927799264658,
-    1257436973037243463,
-    13854281781965301421,
-    1657132483318662716,
-    17309399540017292849,
-    12808111630089217242,
-    1098489625264462071,
-    14010458905686364135,
-    16134414519481621220,
-    14288255900328821475,
-    3469093466388187882,
-    15982710881468295872,
-    4056765540058056052,
-    15945176389096104089,
-    8625339365793505375,
-    12316179968863788913,
-    15334123773538054321,
-    9536238824220581765,
-    16080825720106203271,
-    6235695225418121745,
-    12035192956458019349,
-    3235835166714703698,
-    5348960676912581218,
-    15315062772709464647,
-    17335089708021308662,
-    16855855317958414409,
-    2369751139431140406,
-    3693542588628609043,
-    7350405893393987577,
-    17402072586341663801,
-    7007897690013647122,
-    15671767872059304758,
-    9259490518292347915,
-    14836045474406130394,
-    4654005815464502513,
-    6487825998330548401,
-    7013356660323385022,
-    7136200343936679946,
-    15341236858676437716,
-    3657357368867197449,
-    12621075530054608378,
-    5603868621997066972,
-    7683447656788439942,
-    450883379216880060,
-    14291494350184945047,
-    5466258454997635048,
-    14206933098432772126,
-    4775870327277641692,
-    1864430798867181939,
-    13748978265070608793,
-    12250822864261576589,
-    12561896977498605296,
-    16060949594257359328,
-    17775189113543311529,
-    11835965177892927035,
-    4218664174878121437,
-    3499000902478111683,
-    15169853304359126294,
-    7076121963053575143,
-    832652347668916805,
-    1292148207755194737,
-    7556838978364207852,
-    5904021986723518500,
-    4610244652288570024,
-    4526508363195533871,
-    746120481022614726,
-    737965197247830486,
-    4006266184415762653,
-    9272188239892688050,
-    15346235246415709678,
-    11850675997347533184,
-    11181059668610842701,
-    6687857983250662774,
-    2908718488661492818,
-    4828337780126983225,
-    18071738646453002184,
-    12790187227727197880,
-    17602483480871623153,
-    12523532189621855977,
-    10598805712727696716,
-    2179787555896149376,
-    2242193929457337594,
-    14908923241136742532,
-    8369182018012550027,
-    13385381554043022324,
-    3332327430110633913,
-    16138090784046208492,
-    16172324607469047339,
-    8279089815915615244,
-    12872906602736235247,
-    10894545290539475621,
-    15428756545851905023,
-    4155747980686992922,
-    4074479178894544043,
-    66083965608603584,
-    13873786284662268377,
-    8861183628277687555,
-    12119497911296021430,
-    2154012318305274287,
-    15490706314503067312,
-    13643145488710608367,
-    672340241093017103,
-    6039493278284091973,
-    9679797700977436461,
-    18070795828318171174,
-    2188146431134935377,
-    5247392385741514952,
-    1852539214842869734,
-    12235621681634112739,
-    8812930319623534062,
-    5585597406294108629,
-    11312989214475901864,
-    1547377291787797995,
-    8641748937186208205,
-    12518148659168623694,
-    6611379197521520985,
-    18096591571068008576,
-    15087021227100112139,
-    13058454842015958418,
-    1473584652966833794,
-    4387660670140018168,
-    8452836916843525402,
-    14376083294443363955,
-    13998026203969090659,
-    611968444648172645,
-    990232438801273845,
-    18001186324715561929,
-    13470591857250177501,
-    14881554140239420091,
-    16696367836720124495,
-    6328076032778459673,
-    17027497695968504616,
-    10192245646262428833,
-    8282482589527318647,
-    4319014353374321425,
-    14134087271041670980,
-    5060230880114618599,
-    13179509240430058600,
-    3903514232614801894,
-    17774749744702165255,
-    15448635507030969726,
-    15983775238358480209,
-    14542832143965487887,
-    9385618098039514666,
-    14431419612662304843,
-    730863073501675978,
-    16750118380379734815,
-    9640,
-];
-
-pub(crate) const POW5: [&[u64]; 14] = [
-    &POW5_1, &POW5_2, &POW5_3, &POW5_4, &POW5_5, &POW5_6, &POW5_7, &POW5_8, &POW5_9, &POW5_10,
-    &POW5_11, &POW5_12, &POW5_13, &POW5_14,
-];
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/mod.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/mod.rs
deleted file mode 100644
index b1a45e21..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/mod.rs
+++ /dev/null
@@ -1,38 +0,0 @@
-// The code in this module is derived from the `lexical` crate by @Alexhuszagh
-// which the author condensed into this minimal subset for use in serde_json.
-// For the serde_json use case we care more about reliably round tripping all
-// possible floating point values than about parsing any arbitrarily long string
-// of digits with perfect accuracy, as the latter would take a high cost in
-// compile time and performance.
-//
-// Dual licensed as MIT and Apache 2.0 just like the rest of serde_json, but
-// copyright Alexander Huszagh.
-
-//! Fast, minimal float-parsing algorithm.
-
-// MODULES
-pub(crate) mod algorithm;
-mod bhcomp;
-mod bignum;
-mod cached;
-mod cached_float80;
-mod digit;
-mod errors;
-pub(crate) mod exponent;
-pub(crate) mod float;
-mod large_powers;
-pub(crate) mod math;
-pub(crate) mod num;
-pub(crate) mod parse;
-pub(crate) mod rounding;
-mod shift;
-mod small_powers;
-
-#[cfg(limb_width_32)]
-mod large_powers32;
-
-#[cfg(limb_width_64)]
-mod large_powers64;
-
-// API
-pub use self::parse::{parse_concise_float, parse_truncated_float};
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/num.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/num.rs
deleted file mode 100644
index e47e003..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/num.rs
+++ /dev/null
@@ -1,440 +0,0 @@
-// Adapted from https://github.com/Alexhuszagh/rust-lexical.
-
-//! Utilities for Rust numbers.
-
-use core::ops;
-
-/// Precalculated values of radix**i for i in range [0, arr.len()-1].
-/// Each value can be **exactly** represented as that type.
-const F32_POW10: [f32; 11] = [
-    1.0,
-    10.0,
-    100.0,
-    1000.0,
-    10000.0,
-    100000.0,
-    1000000.0,
-    10000000.0,
-    100000000.0,
-    1000000000.0,
-    10000000000.0,
-];
-
-/// Precalculated values of radix**i for i in range [0, arr.len()-1].
-/// Each value can be **exactly** represented as that type.
-const F64_POW10: [f64; 23] = [
-    1.0,
-    10.0,
-    100.0,
-    1000.0,
-    10000.0,
-    100000.0,
-    1000000.0,
-    10000000.0,
-    100000000.0,
-    1000000000.0,
-    10000000000.0,
-    100000000000.0,
-    1000000000000.0,
-    10000000000000.0,
-    100000000000000.0,
-    1000000000000000.0,
-    10000000000000000.0,
-    100000000000000000.0,
-    1000000000000000000.0,
-    10000000000000000000.0,
-    100000000000000000000.0,
-    1000000000000000000000.0,
-    10000000000000000000000.0,
-];
-
-/// Type that can be converted to primitive with `as`.
-pub trait AsPrimitive: Sized + Copy + PartialOrd {
-    fn as_u32(self) -> u32;
-    fn as_u64(self) -> u64;
-    fn as_u128(self) -> u128;
-    fn as_usize(self) -> usize;
-    fn as_f32(self) -> f32;
-    fn as_f64(self) -> f64;
-}
-
-macro_rules! as_primitive_impl {
-    ($($ty:ident)*) => {
-        $(
-            impl AsPrimitive for $ty {
-                #[inline]
-                fn as_u32(self) -> u32 {
-                    self as u32
-                }
-
-                #[inline]
-                fn as_u64(self) -> u64 {
-                    self as u64
-                }
-
-                #[inline]
-                fn as_u128(self) -> u128 {
-                    self as u128
-                }
-
-                #[inline]
-                fn as_usize(self) -> usize {
-                    self as usize
-                }
-
-                #[inline]
-                fn as_f32(self) -> f32 {
-                    self as f32
-                }
-
-                #[inline]
-                fn as_f64(self) -> f64 {
-                    self as f64
-                }
-            }
-        )*
-    };
-}
-
-as_primitive_impl! { u32 u64 u128 usize f32 f64 }
-
-/// An interface for casting between machine scalars.
-pub trait AsCast: AsPrimitive {
-    /// Creates a number from another value that can be converted into
-    /// a primitive via the `AsPrimitive` trait.
-    fn as_cast<N: AsPrimitive>(n: N) -> Self;
-}
-
-macro_rules! as_cast_impl {
-    ($ty:ident, $method:ident) => {
-        impl AsCast for $ty {
-            #[inline]
-            fn as_cast<N: AsPrimitive>(n: N) -> Self {
-                n.$method()
-            }
-        }
-    };
-}
-
-as_cast_impl!(u32, as_u32);
-as_cast_impl!(u64, as_u64);
-as_cast_impl!(u128, as_u128);
-as_cast_impl!(usize, as_usize);
-as_cast_impl!(f32, as_f32);
-as_cast_impl!(f64, as_f64);
-
-/// Numerical type trait.
-pub trait Number: AsCast + ops::Add<Output = Self> {}
-
-macro_rules! number_impl {
-    ($($ty:ident)*) => {
-        $(
-            impl Number for $ty {}
-        )*
-    };
-}
-
-number_impl! { u32 u64 u128 usize f32 f64 }
-
-/// Defines a trait that supports integral operations.
-pub trait Integer: Number + ops::BitAnd<Output = Self> + ops::Shr<i32, Output = Self> {
-    const ZERO: Self;
-}
-
-macro_rules! integer_impl {
-    ($($ty:tt)*) => {
-        $(
-            impl Integer for $ty {
-                const ZERO: Self = 0;
-            }
-        )*
-    };
-}
-
-integer_impl! { u32 u64 u128 usize }
-
-/// Type trait for the mantissa type.
-pub trait Mantissa: Integer {
-    /// Mask to extract the high bits from the integer.
-    const HIMASK: Self;
-    /// Mask to extract the low bits from the integer.
-    const LOMASK: Self;
-    /// Full size of the integer, in bits.
-    const FULL: i32;
-    /// Half size of the integer, in bits.
-    const HALF: i32 = Self::FULL / 2;
-}
-
-impl Mantissa for u64 {
-    const HIMASK: u64 = 0xFFFFFFFF00000000;
-    const LOMASK: u64 = 0x00000000FFFFFFFF;
-    const FULL: i32 = 64;
-}
-
-/// Get exact exponent limit for radix.
-pub trait Float: Number {
-    /// Unsigned type of the same size.
-    type Unsigned: Integer;
-
-    /// Literal zero.
-    const ZERO: Self;
-    /// Maximum number of digits that can contribute in the mantissa.
-    ///
-    /// We can exactly represent a float in radix `b` from radix 2 if
-    /// `b` is divisible by 2. This function calculates the exact number of
-    /// digits required to exactly represent that float.
-    ///
-    /// According to the "Handbook of Floating Point Arithmetic",
-    /// for IEEE754, with emin being the min exponent, p2 being the
-    /// precision, and b being the radix, the number of digits follows as:
-    ///
-    /// `−emin + p2 + ⌊(emin + 1) log(2, b) − log(1 − 2^(−p2), b)⌋`
-    ///
-    /// For f32, this follows as:
-    ///     emin = -126
-    ///     p2 = 24
-    ///
-    /// For f64, this follows as:
-    ///     emin = -1022
-    ///     p2 = 53
-    ///
-    /// In Python:
-    ///     `-emin + p2 + math.floor((emin+1)*math.log(2, b) - math.log(1-2**(-p2), b))`
-    ///
-    /// This was used to calculate the maximum number of digits for [2, 36].
-    const MAX_DIGITS: usize;
-
-    // MASKS
-
-    /// Bitmask for the sign bit.
-    const SIGN_MASK: Self::Unsigned;
-    /// Bitmask for the exponent, including the hidden bit.
-    const EXPONENT_MASK: Self::Unsigned;
-    /// Bitmask for the hidden bit in exponent, which is an implicit 1 in the fraction.
-    const HIDDEN_BIT_MASK: Self::Unsigned;
-    /// Bitmask for the mantissa (fraction), excluding the hidden bit.
-    const MANTISSA_MASK: Self::Unsigned;
-
-    // PROPERTIES
-
-    /// Positive infinity as bits.
-    const INFINITY_BITS: Self::Unsigned;
-    /// Positive infinity as bits.
-    const NEGATIVE_INFINITY_BITS: Self::Unsigned;
-    /// Size of the significand (mantissa) without hidden bit.
-    const MANTISSA_SIZE: i32;
-    /// Bias of the exponet
-    const EXPONENT_BIAS: i32;
-    /// Exponent portion of a denormal float.
-    const DENORMAL_EXPONENT: i32;
-    /// Maximum exponent value in float.
-    const MAX_EXPONENT: i32;
-
-    // ROUNDING
-
-    /// Default number of bits to shift (or 64 - mantissa size - 1).
-    const DEFAULT_SHIFT: i32;
-    /// Mask to determine if a full-carry occurred (1 in bit above hidden bit).
-    const CARRY_MASK: u64;
-
-    /// Get min and max exponent limits (exact) from radix.
-    fn exponent_limit() -> (i32, i32);
-
-    /// Get the number of digits that can be shifted from exponent to mantissa.
-    fn mantissa_limit() -> i32;
-
-    // Re-exported methods from std.
-    fn pow10(self, n: i32) -> Self;
-    fn from_bits(u: Self::Unsigned) -> Self;
-    fn to_bits(self) -> Self::Unsigned;
-    fn is_sign_positive(self) -> bool;
-    fn is_sign_negative(self) -> bool;
-
-    /// Returns true if the float is a denormal.
-    #[inline]
-    fn is_denormal(self) -> bool {
-        self.to_bits() & Self::EXPONENT_MASK == Self::Unsigned::ZERO
-    }
-
-    /// Returns true if the float is a NaN or Infinite.
-    #[inline]
-    fn is_special(self) -> bool {
-        self.to_bits() & Self::EXPONENT_MASK == Self::EXPONENT_MASK
-    }
-
-    /// Returns true if the float is infinite.
-    #[inline]
-    fn is_inf(self) -> bool {
-        self.is_special() && (self.to_bits() & Self::MANTISSA_MASK) == Self::Unsigned::ZERO
-    }
-
-    /// Get exponent component from the float.
-    #[inline]
-    fn exponent(self) -> i32 {
-        if self.is_denormal() {
-            return Self::DENORMAL_EXPONENT;
-        }
-
-        let bits = self.to_bits();
-        let biased_e = ((bits & Self::EXPONENT_MASK) >> Self::MANTISSA_SIZE).as_u32();
-        biased_e as i32 - Self::EXPONENT_BIAS
-    }
-
-    /// Get mantissa (significand) component from float.
-    #[inline]
-    fn mantissa(self) -> Self::Unsigned {
-        let bits = self.to_bits();
-        let s = bits & Self::MANTISSA_MASK;
-        if !self.is_denormal() {
-            s + Self::HIDDEN_BIT_MASK
-        } else {
-            s
-        }
-    }
-
-    /// Get next greater float for a positive float.
-    /// Value must be >= 0.0 and < INFINITY.
-    #[inline]
-    fn next_positive(self) -> Self {
-        debug_assert!(self.is_sign_positive() && !self.is_inf());
-        Self::from_bits(self.to_bits() + Self::Unsigned::as_cast(1u32))
-    }
-
-    /// Round a positive number to even.
-    #[inline]
-    fn round_positive_even(self) -> Self {
-        if self.mantissa() & Self::Unsigned::as_cast(1u32) == Self::Unsigned::as_cast(1u32) {
-            self.next_positive()
-        } else {
-            self
-        }
-    }
-}
-
-impl Float for f32 {
-    type Unsigned = u32;
-
-    const ZERO: f32 = 0.0;
-    const MAX_DIGITS: usize = 114;
-    const SIGN_MASK: u32 = 0x80000000;
-    const EXPONENT_MASK: u32 = 0x7F800000;
-    const HIDDEN_BIT_MASK: u32 = 0x00800000;
-    const MANTISSA_MASK: u32 = 0x007FFFFF;
-    const INFINITY_BITS: u32 = 0x7F800000;
-    const NEGATIVE_INFINITY_BITS: u32 = Self::INFINITY_BITS | Self::SIGN_MASK;
-    const MANTISSA_SIZE: i32 = 23;
-    const EXPONENT_BIAS: i32 = 127 + Self::MANTISSA_SIZE;
-    const DENORMAL_EXPONENT: i32 = 1 - Self::EXPONENT_BIAS;
-    const MAX_EXPONENT: i32 = 0xFF - Self::EXPONENT_BIAS;
-    const DEFAULT_SHIFT: i32 = u64::FULL - f32::MANTISSA_SIZE - 1;
-    const CARRY_MASK: u64 = 0x1000000;
-
-    #[inline]
-    fn exponent_limit() -> (i32, i32) {
-        (-10, 10)
-    }
-
-    #[inline]
-    fn mantissa_limit() -> i32 {
-        7
-    }
-
-    #[inline]
-    fn pow10(self, n: i32) -> f32 {
-        // Check the exponent is within bounds in debug builds.
-        debug_assert!({
-            let (min, max) = Self::exponent_limit();
-            n >= min && n <= max
-        });
-
-        if n > 0 {
-            self * F32_POW10[n as usize]
-        } else {
-            self / F32_POW10[-n as usize]
-        }
-    }
-
-    #[inline]
-    fn from_bits(u: u32) -> f32 {
-        f32::from_bits(u)
-    }
-
-    #[inline]
-    fn to_bits(self) -> u32 {
-        f32::to_bits(self)
-    }
-
-    #[inline]
-    fn is_sign_positive(self) -> bool {
-        f32::is_sign_positive(self)
-    }
-
-    #[inline]
-    fn is_sign_negative(self) -> bool {
-        f32::is_sign_negative(self)
-    }
-}
-
-impl Float for f64 {
-    type Unsigned = u64;
-
-    const ZERO: f64 = 0.0;
-    const MAX_DIGITS: usize = 769;
-    const SIGN_MASK: u64 = 0x8000000000000000;
-    const EXPONENT_MASK: u64 = 0x7FF0000000000000;
-    const HIDDEN_BIT_MASK: u64 = 0x0010000000000000;
-    const MANTISSA_MASK: u64 = 0x000FFFFFFFFFFFFF;
-    const INFINITY_BITS: u64 = 0x7FF0000000000000;
-    const NEGATIVE_INFINITY_BITS: u64 = Self::INFINITY_BITS | Self::SIGN_MASK;
-    const MANTISSA_SIZE: i32 = 52;
-    const EXPONENT_BIAS: i32 = 1023 + Self::MANTISSA_SIZE;
-    const DENORMAL_EXPONENT: i32 = 1 - Self::EXPONENT_BIAS;
-    const MAX_EXPONENT: i32 = 0x7FF - Self::EXPONENT_BIAS;
-    const DEFAULT_SHIFT: i32 = u64::FULL - f64::MANTISSA_SIZE - 1;
-    const CARRY_MASK: u64 = 0x20000000000000;
-
-    #[inline]
-    fn exponent_limit() -> (i32, i32) {
-        (-22, 22)
-    }
-
-    #[inline]
-    fn mantissa_limit() -> i32 {
-        15
-    }
-
-    #[inline]
-    fn pow10(self, n: i32) -> f64 {
-        // Check the exponent is within bounds in debug builds.
-        debug_assert!({
-            let (min, max) = Self::exponent_limit();
-            n >= min && n <= max
-        });
-
-        if n > 0 {
-            self * F64_POW10[n as usize]
-        } else {
-            self / F64_POW10[-n as usize]
-        }
-    }
-
-    #[inline]
-    fn from_bits(u: u64) -> f64 {
-        f64::from_bits(u)
-    }
-
-    #[inline]
-    fn to_bits(self) -> u64 {
-        f64::to_bits(self)
-    }
-
-    #[inline]
-    fn is_sign_positive(self) -> bool {
-        f64::is_sign_positive(self)
-    }
-
-    #[inline]
-    fn is_sign_negative(self) -> bool {
-        f64::is_sign_negative(self)
-    }
-}
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/parse.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/parse.rs
deleted file mode 100644
index e3d7f1e..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/parse.rs
+++ /dev/null
@@ -1,83 +0,0 @@
-// Adapted from https://github.com/Alexhuszagh/rust-lexical.
-
-use super::algorithm::*;
-use super::bhcomp::*;
-use super::digit::*;
-use super::exponent::*;
-use super::num::*;
-
-// PARSERS
-// -------
-
-/// Parse float for which the entire integer and fraction parts fit into a 64
-/// bit mantissa.
-pub fn parse_concise_float<F>(mantissa: u64, mant_exp: i32) -> F
-where
-    F: Float,
-{
-    if let Some(float) = fast_path(mantissa, mant_exp) {
-        return float;
-    }
-
-    // Moderate path (use an extended 80-bit representation).
-    let truncated = false;
-    let (fp, valid) = moderate_path::<F>(mantissa, mant_exp, truncated);
-    if valid {
-        return fp.into_float::<F>();
-    }
-
-    let b = fp.into_downward_float::<F>();
-    if b.is_special() {
-        // We have a non-finite number, we get to leave early.
-        return b;
-    }
-
-    // Slow path, fast path didn't work.
-    let mut buffer = itoa::Buffer::new();
-    let integer = buffer.format(mantissa).as_bytes();
-    let fraction = &[];
-    bhcomp(b, integer, fraction, mant_exp)
-}
-
-/// Parse float from extracted float components.
-///
-/// * `integer`     - Slice containing the integer digits.
-/// * `fraction`    - Slice containing the fraction digits.
-/// * `exponent`    - Parsed, 32-bit exponent.
-///
-/// Precondition: The integer must not have leading zeros.
-pub fn parse_truncated_float<F>(integer: &[u8], mut fraction: &[u8], exponent: i32) -> F
-where
-    F: Float,
-{
-    // Trim trailing zeroes from the fraction part.
-    while fraction.last() == Some(&b'0') {
-        fraction = &fraction[..fraction.len() - 1];
-    }
-
-    // Calculate the number of truncated digits.
-    let mut truncated = 0;
-    let mut mantissa: u64 = 0;
-    let mut iter = integer.iter().chain(fraction);
-    for &c in &mut iter {
-        mantissa = match add_digit(mantissa, to_digit(c).unwrap()) {
-            Some(v) => v,
-            None => {
-                truncated = 1 + iter.count();
-                break;
-            }
-        };
-    }
-
-    let mant_exp = mantissa_exponent(exponent, fraction.len(), truncated);
-    let is_truncated = true;
-
-    fallback_path(
-        integer,
-        fraction,
-        mantissa,
-        exponent,
-        mant_exp,
-        is_truncated,
-    )
-}
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/rounding.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/rounding.rs
deleted file mode 100644
index 6ec1292..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/rounding.rs
+++ /dev/null
@@ -1,231 +0,0 @@
-// Adapted from https://github.com/Alexhuszagh/rust-lexical.
-
-//! Defines rounding schemes for floating-point numbers.
-
-use super::float::ExtendedFloat;
-use super::num::*;
-use super::shift::*;
-use core::mem;
-
-// MASKS
-
-/// Calculate a scalar factor of 2 above the halfway point.
-#[inline]
-pub(crate) fn nth_bit(n: u64) -> u64 {
-    let bits: u64 = mem::size_of::<u64>() as u64 * 8;
-    debug_assert!(n < bits, "nth_bit() overflow in shl.");
-
-    1 << n
-}
-
-/// Generate a bitwise mask for the lower `n` bits.
-#[inline]
-pub(crate) fn lower_n_mask(n: u64) -> u64 {
-    let bits: u64 = mem::size_of::<u64>() as u64 * 8;
-    debug_assert!(n <= bits, "lower_n_mask() overflow in shl.");
-
-    if n == bits {
-        u64::max_value()
-    } else {
-        (1 << n) - 1
-    }
-}
-
-/// Calculate the halfway point for the lower `n` bits.
-#[inline]
-pub(crate) fn lower_n_halfway(n: u64) -> u64 {
-    let bits: u64 = mem::size_of::<u64>() as u64 * 8;
-    debug_assert!(n <= bits, "lower_n_halfway() overflow in shl.");
-
-    if n == 0 {
-        0
-    } else {
-        nth_bit(n - 1)
-    }
-}
-
-/// Calculate a bitwise mask with `n` 1 bits starting at the `bit` position.
-#[inline]
-pub(crate) fn internal_n_mask(bit: u64, n: u64) -> u64 {
-    let bits: u64 = mem::size_of::<u64>() as u64 * 8;
-    debug_assert!(bit <= bits, "internal_n_halfway() overflow in shl.");
-    debug_assert!(n <= bits, "internal_n_halfway() overflow in shl.");
-    debug_assert!(bit >= n, "internal_n_halfway() overflow in sub.");
-
-    lower_n_mask(bit) ^ lower_n_mask(bit - n)
-}
-
-// NEAREST ROUNDING
-
-// Shift right N-bytes and round to the nearest.
-//
-// Return if we are above halfway and if we are halfway.
-#[inline]
-pub(crate) fn round_nearest(fp: &mut ExtendedFloat, shift: i32) -> (bool, bool) {
-    // Extract the truncated bits using mask.
-    // Calculate if the value of the truncated bits are either above
-    // the mid-way point, or equal to it.
-    //
-    // For example, for 4 truncated bytes, the mask would be b1111
-    // and the midway point would be b1000.
-    let mask: u64 = lower_n_mask(shift as u64);
-    let halfway: u64 = lower_n_halfway(shift as u64);
-
-    let truncated_bits = fp.mant & mask;
-    let is_above = truncated_bits > halfway;
-    let is_halfway = truncated_bits == halfway;
-
-    // Bit shift so the leading bit is in the hidden bit.
-    overflowing_shr(fp, shift);
-
-    (is_above, is_halfway)
-}
-
-// Tie rounded floating point to event.
-#[inline]
-pub(crate) fn tie_even(fp: &mut ExtendedFloat, is_above: bool, is_halfway: bool) {
-    // Extract the last bit after shifting (and determine if it is odd).
-    let is_odd = fp.mant & 1 == 1;
-
-    // Calculate if we need to roundup.
-    // We need to roundup if we are above halfway, or if we are odd
-    // and at half-way (need to tie-to-even).
-    if is_above || (is_odd && is_halfway) {
-        fp.mant += 1;
-    }
-}
-
-// Shift right N-bytes and round nearest, tie-to-even.
-//
-// Floating-point arithmetic uses round to nearest, ties to even,
-// which rounds to the nearest value, if the value is halfway in between,
-// round to an even value.
-#[inline]
-pub(crate) fn round_nearest_tie_even(fp: &mut ExtendedFloat, shift: i32) {
-    let (is_above, is_halfway) = round_nearest(fp, shift);
-    tie_even(fp, is_above, is_halfway);
-}
-
-// DIRECTED ROUNDING
-
-// Shift right N-bytes and round towards a direction.
-//
-// Return if we have any truncated bytes.
-#[inline]
-fn round_toward(fp: &mut ExtendedFloat, shift: i32) -> bool {
-    let mask: u64 = lower_n_mask(shift as u64);
-    let truncated_bits = fp.mant & mask;
-
-    // Bit shift so the leading bit is in the hidden bit.
-    overflowing_shr(fp, shift);
-
-    truncated_bits != 0
-}
-
-// Round down.
-#[inline]
-fn downard(_: &mut ExtendedFloat, _: bool) {}
-
-// Shift right N-bytes and round toward zero.
-//
-// Floating-point arithmetic defines round toward zero, which rounds
-// towards positive zero.
-#[inline]
-pub(crate) fn round_downward(fp: &mut ExtendedFloat, shift: i32) {
-    // Bit shift so the leading bit is in the hidden bit.
-    // No rounding schemes, so we just ignore everything else.
-    let is_truncated = round_toward(fp, shift);
-    downard(fp, is_truncated);
-}
-
-// ROUND TO FLOAT
-
-// Shift the ExtendedFloat fraction to the fraction bits in a native float.
-//
-// Floating-point arithmetic uses round to nearest, ties to even,
-// which rounds to the nearest value, if the value is halfway in between,
-// round to an even value.
-#[inline]
-pub(crate) fn round_to_float<F, Algorithm>(fp: &mut ExtendedFloat, algorithm: Algorithm)
-where
-    F: Float,
-    Algorithm: FnOnce(&mut ExtendedFloat, i32),
-{
-    // Calculate the difference to allow a single calculation
-    // rather than a loop, to minimize the number of ops required.
-    // This does underflow detection.
-    let final_exp = fp.exp + F::DEFAULT_SHIFT;
-    if final_exp < F::DENORMAL_EXPONENT {
-        // We would end up with a denormal exponent, try to round to more
-        // digits. Only shift right if we can avoid zeroing out the value,
-        // which requires the exponent diff to be < M::BITS. The value
-        // is already normalized, so we shouldn't have any issue zeroing
-        // out the value.
-        let diff = F::DENORMAL_EXPONENT - fp.exp;
-        if diff <= u64::FULL {
-            // We can avoid underflow, can get a valid representation.
-            algorithm(fp, diff);
-        } else {
-            // Certain underflow, assign literal 0s.
-            fp.mant = 0;
-            fp.exp = 0;
-        }
-    } else {
-        algorithm(fp, F::DEFAULT_SHIFT);
-    }
-
-    if fp.mant & F::CARRY_MASK == F::CARRY_MASK {
-        // Roundup carried over to 1 past the hidden bit.
-        shr(fp, 1);
-    }
-}
-
-// AVOID OVERFLOW/UNDERFLOW
-
-// Avoid overflow for large values, shift left as needed.
-//
-// Shift until a 1-bit is in the hidden bit, if the mantissa is not 0.
-#[inline]
-pub(crate) fn avoid_overflow<F>(fp: &mut ExtendedFloat)
-where
-    F: Float,
-{
-    // Calculate the difference to allow a single calculation
-    // rather than a loop, minimizing the number of ops required.
-    if fp.exp >= F::MAX_EXPONENT {
-        let diff = fp.exp - F::MAX_EXPONENT;
-        if diff <= F::MANTISSA_SIZE {
-            // Our overflow mask needs to start at the hidden bit, or at
-            // `F::MANTISSA_SIZE+1`, and needs to have `diff+1` bits set,
-            // to see if our value overflows.
-            let bit = (F::MANTISSA_SIZE + 1) as u64;
-            let n = (diff + 1) as u64;
-            let mask = internal_n_mask(bit, n);
-            if (fp.mant & mask) == 0 {
-                // If we have no 1-bit in the hidden-bit position,
-                // which is index 0, we need to shift 1.
-                let shift = diff + 1;
-                shl(fp, shift);
-            }
-        }
-    }
-}
-
-// ROUND TO NATIVE
-
-// Round an extended-precision float to a native float representation.
-#[inline]
-pub(crate) fn round_to_native<F, Algorithm>(fp: &mut ExtendedFloat, algorithm: Algorithm)
-where
-    F: Float,
-    Algorithm: FnOnce(&mut ExtendedFloat, i32),
-{
-    // Shift all the way left, to ensure a consistent representation.
-    // The following right-shifts do not work for a non-normalized number.
-    fp.normalize();
-
-    // Round so the fraction is in a native mantissa representation,
-    // and avoid overflow/underflow.
-    round_to_float::<F, _>(fp, algorithm);
-    avoid_overflow::<F>(fp);
-}
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/shift.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/shift.rs
deleted file mode 100644
index a0bae01..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/shift.rs
+++ /dev/null
@@ -1,46 +0,0 @@
-// Adapted from https://github.com/Alexhuszagh/rust-lexical.
-
-//! Bit-shift helpers.
-
-use super::float::ExtendedFloat;
-use core::mem;
-
-// Shift extended-precision float right `shift` bytes.
-#[inline]
-pub(crate) fn shr(fp: &mut ExtendedFloat, shift: i32) {
-    let bits: u64 = mem::size_of::<u64>() as u64 * 8;
-    debug_assert!((shift as u64) < bits, "shr() overflow in shift right.");
-
-    fp.mant >>= shift;
-    fp.exp += shift;
-}
-
-// Shift extended-precision float right `shift` bytes.
-//
-// Accepts when the shift is the same as the type size, and
-// sets the value to 0.
-#[inline]
-pub(crate) fn overflowing_shr(fp: &mut ExtendedFloat, shift: i32) {
-    let bits: u64 = mem::size_of::<u64>() as u64 * 8;
-    debug_assert!(
-        (shift as u64) <= bits,
-        "overflowing_shr() overflow in shift right."
-    );
-
-    fp.mant = if shift as u64 == bits {
-        0
-    } else {
-        fp.mant >> shift
-    };
-    fp.exp += shift;
-}
-
-// Shift extended-precision float left `shift` bytes.
-#[inline]
-pub(crate) fn shl(fp: &mut ExtendedFloat, shift: i32) {
-    let bits: u64 = mem::size_of::<u64>() as u64 * 8;
-    debug_assert!((shift as u64) < bits, "shl() overflow in shift left.");
-
-    fp.mant <<= shift;
-    fp.exp -= shift;
-}
diff --git a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/small_powers.rs b/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/small_powers.rs
deleted file mode 100644
index 219d8261..0000000
--- a/third_party/rust/serde_json_lenient/v0_1/crate/src/lexical/small_powers.rs
+++ /dev/null
@@ -1,70 +0,0 @@
-// Adapted from https://github.com/Alexhuszagh/rust-lexical.
-
-//! Pre-computed small powers.
-
-// 32 BIT
-#[cfg(limb_width_32)]
-pub(crate) const POW5_32: [u32; 14] = [
-    1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, 48828125, 244140625,
-    1220703125,
-];
-
-#[cfg(limb_width_32)]
-pub(crate) const POW10_32: [u32; 10] = [
-    1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000,
-];
-
-// 64 BIT
-#[cfg(limb_width_64)]
-pub(crate) const POW5_64: [u64; 28] = [
-    1,
-    5,
-    25,
-    125,
-    625,
-    3125,
-    15625,
-    78125,
-    390625,
-    1953125,
-    9765625,
-    48828125,
-    244140625,
-    1220703125,
-    6103515625,
-    30517578125,
-    152587890625,
-    762939453125,
-    3814697265625,
-    19073486328125,
-    95367431640625,
-    476837158203125,
-    2384185791015625,
-    11920928955078125,
-    59604644775390625,
-    298023223876953125,
-    1490116119384765625,
-    7450580596923828125,
-];
-pub(crate) const POW10_64: [u64; 20] = [
-    1,
-    10,
-    100,
-    1000,
-    10000,
-    100000,
-    1000000,
-    10000000,
-    100000000,
-    1000000000,
-    10000000000,
-    100000000000,
-    1000000000000,
-    10000000000000,
-    100000000000000,
-    1000000000000000,
-    10000000000000000,
-    100000000000000000,
-    1000000000000000000,
-    10000000000000000000,
-];
diff --git a/third_party/rust/serde_json_lenient/v0_1/wrapper/functions.h b/third_party/rust/serde_json_lenient/v0_1/wrapper/functions.h
index 458ce73e..55cf121 100644
--- a/third_party/rust/serde_json_lenient/v0_1/wrapper/functions.h
+++ b/third_party/rust/serde_json_lenient/v0_1/wrapper/functions.h
@@ -7,7 +7,7 @@
 
 #include <stdint.h>
 
-#include "third_party/rust/cxx/v1/crate/include/cxx.h"
+#include "third_party/rust/cxx/v1/cxx.h"
 
 namespace serde_json_lenient {
 
diff --git a/third_party/rust/skrifa/v0_10/BUILD.gn b/third_party/rust/skrifa/v0_10/BUILD.gn
index 80cec718..850685b 100644
--- a/third_party/rust/skrifa/v0_10/BUILD.gn
+++ b/third_party/rust/skrifa/v0_10/BUILD.gn
@@ -11,33 +11,35 @@
   crate_name = "skrifa"
   epoch = "0.10"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/lib.rs"
   sources = [
-    "//third_party/rust/skrifa/v0_10/crate/src/attribute.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/charmap.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/font.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/instance.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/lib.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/metrics.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/provider.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/scale/cff/hint.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/scale/cff/mod.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/scale/cff/scaler.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/scale/error.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/scale/glyf/deltas.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/scale/glyf/glyph.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/scale/glyf/hint.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/scale/glyf/mem.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/scale/glyf/mod.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/scale/glyf/scaler.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/scale/mod.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/scale/scaler.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/setting.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/small_array.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/string.rs",
-    "//third_party/rust/skrifa/v0_10/crate/src/variation.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/attribute.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/charmap.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/font.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/instance.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/metrics.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/provider.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/cff/hint.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/cff/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/cff/scaler.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/deltas.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/glyph.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/hint.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/mem.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/glyf/scaler.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/scale/scaler.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/setting.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/small_array.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/string.rs",
+    "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/src/variation.rs",
   ]
-  inputs = [ "//third_party/rust/skrifa/v0_10/crate/README.md" ]
+  inputs =
+      [ "//third_party/rust/chromium_crates_io/vendor/skrifa-0.10.0/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/small_ctor/v0_1/BUILD.gn b/third_party/rust/small_ctor/v0_1/BUILD.gn
index bdcd18a..9d569c4 100644
--- a/third_party/rust/small_ctor/v0_1/BUILD.gn
+++ b/third_party/rust/small_ctor/v0_1/BUILD.gn
@@ -11,12 +11,15 @@
   crate_name = "small_ctor"
   epoch = "0.1"
   crate_type = "proc-macro"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/src/lib.rs"
   sources = [
-    "//third_party/rust/small_ctor/v0_1/crate/examples/hello.rs",
-    "//third_party/rust/small_ctor/v0_1/crate/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/examples/hello.rs",
+    "//third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/src/lib.rs",
   ]
-  inputs = [ "//third_party/rust/small_ctor/v0_1/crate/README.md" ]
+  inputs = [
+    "//third_party/rust/chromium_crates_io/vendor/small_ctor-0.1.1/README.md",
+  ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/static_assertions/v1/BUILD.gn b/third_party/rust/static_assertions/v1/BUILD.gn
index d76d65bc..b151f52 100644
--- a/third_party/rust/static_assertions/v1/BUILD.gn
+++ b/third_party/rust/static_assertions/v1/BUILD.gn
@@ -11,22 +11,22 @@
   crate_name = "static_assertions"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/lib.rs"
   sources = [
-    "//third_party/rust/static_assertions/v1/crate/src/assert_cfg.rs",
-    "//third_party/rust/static_assertions/v1/crate/src/assert_eq_align.rs",
-    "//third_party/rust/static_assertions/v1/crate/src/assert_eq_size.rs",
-    "//third_party/rust/static_assertions/v1/crate/src/assert_fields.rs",
-    "//third_party/rust/static_assertions/v1/crate/src/assert_impl.rs",
-    "//third_party/rust/static_assertions/v1/crate/src/assert_obj_safe.rs",
-    "//third_party/rust/static_assertions/v1/crate/src/assert_trait.rs",
-    "//third_party/rust/static_assertions/v1/crate/src/assert_type.rs",
-    "//third_party/rust/static_assertions/v1/crate/src/const_assert.rs",
-    "//third_party/rust/static_assertions/v1/crate/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_cfg.rs",
+    "//third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_eq_align.rs",
+    "//third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_eq_size.rs",
+    "//third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_fields.rs",
+    "//third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_impl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_obj_safe.rs",
+    "//third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_trait.rs",
+    "//third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/assert_type.rs",
+    "//third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/const_assert.rs",
+    "//third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/src/lib.rs",
   ]
   inputs = [
-    "//third_party/rust/static_assertions/v1/crate/CHANGELOG.md",
-    "//third_party/rust/static_assertions/v1/crate/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/CHANGELOG.md",
+    "//third_party/rust/chromium_crates_io/vendor/static_assertions-1.1.0/README.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
diff --git a/third_party/rust/strsim/v0_10/BUILD.gn b/third_party/rust/strsim/v0_10/BUILD.gn
index 46ed6896..7ea25d8 100644
--- a/third_party/rust/strsim/v0_10/BUILD.gn
+++ b/third_party/rust/strsim/v0_10/BUILD.gn
@@ -11,15 +11,16 @@
   crate_name = "strsim"
   epoch = "0.10"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/src/lib.rs"
   sources = [
-    "//third_party/rust/strsim/v0_10/crate/benches/benches.rs",
-    "//third_party/rust/strsim/v0_10/crate/src/lib.rs",
-    "//third_party/rust/strsim/v0_10/crate/tests/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/benches/benches.rs",
+    "//third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/tests/lib.rs",
   ]
   inputs = [
-    "//third_party/rust/strsim/v0_10/crate/CHANGELOG.md",
-    "//third_party/rust/strsim/v0_10/crate/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/CHANGELOG.md",
+    "//third_party/rust/chromium_crates_io/vendor/strsim-0.10.0/README.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
diff --git a/third_party/rust/syn/v1/BUILD.gn b/third_party/rust/syn/v1/BUILD.gn
index 61440b7..0ef3e6d 100644
--- a/third_party/rust/syn/v1/BUILD.gn
+++ b/third_party/rust/syn/v1/BUILD.gn
@@ -11,100 +11,102 @@
   crate_name = "syn"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/lib.rs"
   sources = [
-    "//third_party/rust/syn/v1/crate/benches/file.rs",
-    "//third_party/rust/syn/v1/crate/benches/rust.rs",
-    "//third_party/rust/syn/v1/crate/build.rs",
-    "//third_party/rust/syn/v1/crate/src/attr.rs",
-    "//third_party/rust/syn/v1/crate/src/await.rs",
-    "//third_party/rust/syn/v1/crate/src/bigint.rs",
-    "//third_party/rust/syn/v1/crate/src/buffer.rs",
-    "//third_party/rust/syn/v1/crate/src/custom_keyword.rs",
-    "//third_party/rust/syn/v1/crate/src/custom_punctuation.rs",
-    "//third_party/rust/syn/v1/crate/src/data.rs",
-    "//third_party/rust/syn/v1/crate/src/derive.rs",
-    "//third_party/rust/syn/v1/crate/src/discouraged.rs",
-    "//third_party/rust/syn/v1/crate/src/error.rs",
-    "//third_party/rust/syn/v1/crate/src/export.rs",
-    "//third_party/rust/syn/v1/crate/src/expr.rs",
-    "//third_party/rust/syn/v1/crate/src/ext.rs",
-    "//third_party/rust/syn/v1/crate/src/file.rs",
-    "//third_party/rust/syn/v1/crate/src/gen/clone.rs",
-    "//third_party/rust/syn/v1/crate/src/gen/debug.rs",
-    "//third_party/rust/syn/v1/crate/src/gen/eq.rs",
-    "//third_party/rust/syn/v1/crate/src/gen/fold.rs",
-    "//third_party/rust/syn/v1/crate/src/gen/hash.rs",
-    "//third_party/rust/syn/v1/crate/src/gen/visit.rs",
-    "//third_party/rust/syn/v1/crate/src/gen/visit_mut.rs",
-    "//third_party/rust/syn/v1/crate/src/gen_helper.rs",
-    "//third_party/rust/syn/v1/crate/src/generics.rs",
-    "//third_party/rust/syn/v1/crate/src/group.rs",
-    "//third_party/rust/syn/v1/crate/src/ident.rs",
-    "//third_party/rust/syn/v1/crate/src/item.rs",
-    "//third_party/rust/syn/v1/crate/src/lib.rs",
-    "//third_party/rust/syn/v1/crate/src/lifetime.rs",
-    "//third_party/rust/syn/v1/crate/src/lit.rs",
-    "//third_party/rust/syn/v1/crate/src/lookahead.rs",
-    "//third_party/rust/syn/v1/crate/src/mac.rs",
-    "//third_party/rust/syn/v1/crate/src/macros.rs",
-    "//third_party/rust/syn/v1/crate/src/op.rs",
-    "//third_party/rust/syn/v1/crate/src/parse.rs",
-    "//third_party/rust/syn/v1/crate/src/parse_macro_input.rs",
-    "//third_party/rust/syn/v1/crate/src/parse_quote.rs",
-    "//third_party/rust/syn/v1/crate/src/pat.rs",
-    "//third_party/rust/syn/v1/crate/src/path.rs",
-    "//third_party/rust/syn/v1/crate/src/print.rs",
-    "//third_party/rust/syn/v1/crate/src/punctuated.rs",
-    "//third_party/rust/syn/v1/crate/src/reserved.rs",
-    "//third_party/rust/syn/v1/crate/src/sealed.rs",
-    "//third_party/rust/syn/v1/crate/src/span.rs",
-    "//third_party/rust/syn/v1/crate/src/spanned.rs",
-    "//third_party/rust/syn/v1/crate/src/stmt.rs",
-    "//third_party/rust/syn/v1/crate/src/thread.rs",
-    "//third_party/rust/syn/v1/crate/src/token.rs",
-    "//third_party/rust/syn/v1/crate/src/tt.rs",
-    "//third_party/rust/syn/v1/crate/src/ty.rs",
-    "//third_party/rust/syn/v1/crate/src/verbatim.rs",
-    "//third_party/rust/syn/v1/crate/src/whitespace.rs",
-    "//third_party/rust/syn/v1/crate/tests/common/eq.rs",
-    "//third_party/rust/syn/v1/crate/tests/common/mod.rs",
-    "//third_party/rust/syn/v1/crate/tests/common/parse.rs",
-    "//third_party/rust/syn/v1/crate/tests/debug/gen.rs",
-    "//third_party/rust/syn/v1/crate/tests/debug/mod.rs",
-    "//third_party/rust/syn/v1/crate/tests/macros/mod.rs",
-    "//third_party/rust/syn/v1/crate/tests/regression.rs",
-    "//third_party/rust/syn/v1/crate/tests/regression/issue1108.rs",
-    "//third_party/rust/syn/v1/crate/tests/repo/mod.rs",
-    "//third_party/rust/syn/v1/crate/tests/repo/progress.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_asyncness.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_attribute.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_derive_input.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_expr.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_generics.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_grouping.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_ident.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_item.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_iterators.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_lit.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_meta.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_parse_buffer.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_parse_stream.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_pat.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_path.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_precedence.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_receiver.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_round_trip.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_shebang.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_should_parse.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_size.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_stmt.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_token_trees.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_ty.rs",
-    "//third_party/rust/syn/v1/crate/tests/test_visibility.rs",
-    "//third_party/rust/syn/v1/crate/tests/zzz_stable.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/benches/file.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/benches/rust.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/attr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/await.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/bigint.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/buffer.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/custom_keyword.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/custom_punctuation.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/data.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/discouraged.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/export.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/expr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/ext.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/file.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/clone.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/debug.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/eq.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/fold.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/hash.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/visit.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen/visit_mut.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/gen_helper.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/generics.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/group.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/ident.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/item.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/lifetime.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/lit.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/lookahead.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/mac.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/macros.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/op.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/parse_macro_input.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/parse_quote.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/pat.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/path.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/print.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/punctuated.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/reserved.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/sealed.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/span.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/spanned.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/stmt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/thread.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/token.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/tt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/ty.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/verbatim.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/src/whitespace.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/common/eq.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/common/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/common/parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/debug/gen.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/debug/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/macros/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/regression.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/regression/issue1108.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/repo/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/repo/progress.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_asyncness.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_attribute.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_derive_input.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_expr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_generics.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_grouping.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_ident.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_item.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_iterators.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_lit.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_meta.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_parse_buffer.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_parse_stream.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_pat.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_path.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_precedence.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_receiver.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_round_trip.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_shebang.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_should_parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_size.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_stmt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_token_trees.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_ty.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/test_visibility.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/tests/zzz_stable.rs",
   ]
-  inputs = [ "//third_party/rust/syn/v1/crate/README.md" ]
+  inputs =
+      [ "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
@@ -134,8 +136,10 @@
     "visit",
     "visit-mut",
   ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root =
+      "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/build.rs"
+  build_sources =
+      [ "//third_party/rust/chromium_crates_io/vendor/syn-1.0.99/build.rs" ]
 
   # Only for usage from third-party crates. Add the crate to
   # third_party.toml to use it from first-party code.
diff --git a/third_party/rust/syn/v1/crate/LICENSE-APACHE b/third_party/rust/syn/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 16fe87b..0000000
--- a/third_party/rust/syn/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/third_party/rust/syn/v1/crate/LICENSE-MIT b/third_party/rust/syn/v1/crate/LICENSE-MIT
deleted file mode 100644
index 31aa7938..0000000
--- a/third_party/rust/syn/v1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,23 +0,0 @@
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/syn/v2/BUILD.gn b/third_party/rust/syn/v2/BUILD.gn
index 366a62a..c068ebb5f 100644
--- a/third_party/rust/syn/v2/BUILD.gn
+++ b/third_party/rust/syn/v2/BUILD.gn
@@ -11,101 +11,103 @@
   crate_name = "syn"
   epoch = "2"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/lib.rs"
   sources = [
-    "//third_party/rust/syn/v2/crate/benches/file.rs",
-    "//third_party/rust/syn/v2/crate/benches/rust.rs",
-    "//third_party/rust/syn/v2/crate/src/attr.rs",
-    "//third_party/rust/syn/v2/crate/src/bigint.rs",
-    "//third_party/rust/syn/v2/crate/src/buffer.rs",
-    "//third_party/rust/syn/v2/crate/src/custom_keyword.rs",
-    "//third_party/rust/syn/v2/crate/src/custom_punctuation.rs",
-    "//third_party/rust/syn/v2/crate/src/data.rs",
-    "//third_party/rust/syn/v2/crate/src/derive.rs",
-    "//third_party/rust/syn/v2/crate/src/discouraged.rs",
-    "//third_party/rust/syn/v2/crate/src/drops.rs",
-    "//third_party/rust/syn/v2/crate/src/error.rs",
-    "//third_party/rust/syn/v2/crate/src/export.rs",
-    "//third_party/rust/syn/v2/crate/src/expr.rs",
-    "//third_party/rust/syn/v2/crate/src/ext.rs",
-    "//third_party/rust/syn/v2/crate/src/file.rs",
-    "//third_party/rust/syn/v2/crate/src/gen/clone.rs",
-    "//third_party/rust/syn/v2/crate/src/gen/debug.rs",
-    "//third_party/rust/syn/v2/crate/src/gen/eq.rs",
-    "//third_party/rust/syn/v2/crate/src/gen/fold.rs",
-    "//third_party/rust/syn/v2/crate/src/gen/hash.rs",
-    "//third_party/rust/syn/v2/crate/src/gen/visit.rs",
-    "//third_party/rust/syn/v2/crate/src/gen/visit_mut.rs",
-    "//third_party/rust/syn/v2/crate/src/gen_helper.rs",
-    "//third_party/rust/syn/v2/crate/src/generics.rs",
-    "//third_party/rust/syn/v2/crate/src/group.rs",
-    "//third_party/rust/syn/v2/crate/src/ident.rs",
-    "//third_party/rust/syn/v2/crate/src/item.rs",
-    "//third_party/rust/syn/v2/crate/src/lib.rs",
-    "//third_party/rust/syn/v2/crate/src/lifetime.rs",
-    "//third_party/rust/syn/v2/crate/src/lit.rs",
-    "//third_party/rust/syn/v2/crate/src/lookahead.rs",
-    "//third_party/rust/syn/v2/crate/src/mac.rs",
-    "//third_party/rust/syn/v2/crate/src/macros.rs",
-    "//third_party/rust/syn/v2/crate/src/meta.rs",
-    "//third_party/rust/syn/v2/crate/src/op.rs",
-    "//third_party/rust/syn/v2/crate/src/parse.rs",
-    "//third_party/rust/syn/v2/crate/src/parse_macro_input.rs",
-    "//third_party/rust/syn/v2/crate/src/parse_quote.rs",
-    "//third_party/rust/syn/v2/crate/src/pat.rs",
-    "//third_party/rust/syn/v2/crate/src/path.rs",
-    "//third_party/rust/syn/v2/crate/src/print.rs",
-    "//third_party/rust/syn/v2/crate/src/punctuated.rs",
-    "//third_party/rust/syn/v2/crate/src/restriction.rs",
-    "//third_party/rust/syn/v2/crate/src/sealed.rs",
-    "//third_party/rust/syn/v2/crate/src/span.rs",
-    "//third_party/rust/syn/v2/crate/src/spanned.rs",
-    "//third_party/rust/syn/v2/crate/src/stmt.rs",
-    "//third_party/rust/syn/v2/crate/src/thread.rs",
-    "//third_party/rust/syn/v2/crate/src/token.rs",
-    "//third_party/rust/syn/v2/crate/src/tt.rs",
-    "//third_party/rust/syn/v2/crate/src/ty.rs",
-    "//third_party/rust/syn/v2/crate/src/verbatim.rs",
-    "//third_party/rust/syn/v2/crate/src/whitespace.rs",
-    "//third_party/rust/syn/v2/crate/tests/common/eq.rs",
-    "//third_party/rust/syn/v2/crate/tests/common/mod.rs",
-    "//third_party/rust/syn/v2/crate/tests/common/parse.rs",
-    "//third_party/rust/syn/v2/crate/tests/debug/gen.rs",
-    "//third_party/rust/syn/v2/crate/tests/debug/mod.rs",
-    "//third_party/rust/syn/v2/crate/tests/macros/mod.rs",
-    "//third_party/rust/syn/v2/crate/tests/regression.rs",
-    "//third_party/rust/syn/v2/crate/tests/regression/issue1108.rs",
-    "//third_party/rust/syn/v2/crate/tests/regression/issue1235.rs",
-    "//third_party/rust/syn/v2/crate/tests/repo/mod.rs",
-    "//third_party/rust/syn/v2/crate/tests/repo/progress.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_asyncness.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_attribute.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_derive_input.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_expr.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_generics.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_grouping.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_ident.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_item.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_iterators.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_lit.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_meta.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_parse_buffer.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_parse_stream.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_pat.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_path.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_precedence.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_receiver.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_round_trip.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_shebang.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_should_parse.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_size.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_stmt.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_token_trees.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_ty.rs",
-    "//third_party/rust/syn/v2/crate/tests/test_visibility.rs",
-    "//third_party/rust/syn/v2/crate/tests/zzz_stable.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/benches/file.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/benches/rust.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/attr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/bigint.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/buffer.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/custom_keyword.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/custom_punctuation.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/data.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/derive.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/discouraged.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/drops.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/error.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/export.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/expr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/ext.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/file.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/clone.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/debug.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/eq.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/fold.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/hash.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/visit.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen/visit_mut.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/gen_helper.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/generics.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/group.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/ident.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/item.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/lifetime.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/lit.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/lookahead.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/mac.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/macros.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/meta.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/op.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/parse_macro_input.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/parse_quote.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/pat.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/path.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/print.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/punctuated.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/restriction.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/sealed.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/span.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/spanned.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/stmt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/thread.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/token.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/tt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/ty.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/verbatim.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/src/whitespace.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/common/eq.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/common/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/common/parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/debug/gen.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/debug/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/macros/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/regression.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/regression/issue1108.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/regression/issue1235.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/repo/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/repo/progress.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_asyncness.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_attribute.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_derive_input.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_expr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_generics.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_grouping.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_ident.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_item.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_iterators.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_lit.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_meta.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_parse_buffer.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_parse_stream.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_pat.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_path.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_precedence.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_receiver.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_round_trip.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_shebang.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_should_parse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_size.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_stmt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_token_trees.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_ty.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/test_visibility.rs",
+    "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/tests/zzz_stable.rs",
   ]
-  inputs = [ "//third_party/rust/syn/v2/crate/README.md" ]
+  inputs =
+      [ "//third_party/rust/chromium_crates_io/vendor/syn-2.0.29/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/syn/v2/crate/LICENSE-APACHE b/third_party/rust/syn/v2/crate/LICENSE-APACHE
deleted file mode 100644
index 1b5ec8b..0000000
--- a/third_party/rust/syn/v2/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,176 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
diff --git a/third_party/rust/syn/v2/crate/LICENSE-MIT b/third_party/rust/syn/v2/crate/LICENSE-MIT
deleted file mode 100644
index 31aa7938..0000000
--- a/third_party/rust/syn/v2/crate/LICENSE-MIT
+++ /dev/null
@@ -1,23 +0,0 @@
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/syn/v2/crate/tests/common/mod.rs b/third_party/rust/syn/v2/crate/tests/common/mod.rs
deleted file mode 100644
index 2156530b..0000000
--- a/third_party/rust/syn/v2/crate/tests/common/mod.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-#![allow(dead_code)]
-#![allow(clippy::module_name_repetitions, clippy::shadow_unrelated)]
-
-use rayon::ThreadPoolBuilder;
-use std::env;
-
-pub mod eq;
-pub mod parse;
-
-/// Read the `ABORT_AFTER_FAILURE` environment variable, and parse it.
-pub fn abort_after() -> usize {
-    match env::var("ABORT_AFTER_FAILURE") {
-        Ok(s) => s.parse().expect("failed to parse ABORT_AFTER_FAILURE"),
-        Err(_) => usize::max_value(),
-    }
-}
-
-/// Configure Rayon threadpool.
-pub fn rayon_init() {
-    let stack_size = match env::var("RUST_MIN_STACK") {
-        Ok(s) => s.parse().expect("failed to parse RUST_MIN_STACK"),
-        Err(_) => 20 * 1024 * 1024,
-    };
-    ThreadPoolBuilder::new()
-        .stack_size(stack_size)
-        .build_global()
-        .unwrap();
-}
diff --git a/third_party/rust/syn/v2/crate/tests/regression/issue1108.rs b/third_party/rust/syn/v2/crate/tests/regression/issue1108.rs
deleted file mode 100644
index 11a82ad..0000000
--- a/third_party/rust/syn/v2/crate/tests/regression/issue1108.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-#[test]
-fn issue1108() {
-    let data = "impl<x<>>::x for";
-    let _ = syn::parse_file(data);
-}
diff --git a/third_party/rust/syn/v2/crate/tests/repo/progress.rs b/third_party/rust/syn/v2/crate/tests/repo/progress.rs
deleted file mode 100644
index 28c8a44b..0000000
--- a/third_party/rust/syn/v2/crate/tests/repo/progress.rs
+++ /dev/null
@@ -1,37 +0,0 @@
-use std::io::{Read, Result};
-use std::time::{Duration, Instant};
-
-pub struct Progress<R> {
-    bytes: usize,
-    tick: Instant,
-    stream: R,
-}
-
-impl<R> Progress<R> {
-    pub fn new(stream: R) -> Self {
-        Progress {
-            bytes: 0,
-            tick: Instant::now() + Duration::from_millis(2000),
-            stream,
-        }
-    }
-}
-
-impl<R: Read> Read for Progress<R> {
-    fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
-        let num = self.stream.read(buf)?;
-        self.bytes += num;
-        let now = Instant::now();
-        if now > self.tick {
-            self.tick = now + Duration::from_millis(500);
-            errorf!("downloading... {} bytes\n", self.bytes);
-        }
-        Ok(num)
-    }
-}
-
-impl<R> Drop for Progress<R> {
-    fn drop(&mut self) {
-        errorf!("done ({} bytes)\n", self.bytes);
-    }
-}
diff --git a/third_party/rust/syn/v2/crate/tests/test_ident.rs b/third_party/rust/syn/v2/crate/tests/test_ident.rs
deleted file mode 100644
index ee01bfcc9..0000000
--- a/third_party/rust/syn/v2/crate/tests/test_ident.rs
+++ /dev/null
@@ -1,85 +0,0 @@
-use proc_macro2::{Ident, Span, TokenStream};
-use std::str::FromStr;
-use syn::Result;
-
-fn parse(s: &str) -> Result<Ident> {
-    syn::parse2(TokenStream::from_str(s).unwrap())
-}
-
-fn new(s: &str) -> Ident {
-    Ident::new(s, Span::call_site())
-}
-
-#[test]
-fn ident_parse() {
-    parse("String").unwrap();
-}
-
-#[test]
-fn ident_parse_keyword() {
-    parse("abstract").unwrap_err();
-}
-
-#[test]
-fn ident_parse_empty() {
-    parse("").unwrap_err();
-}
-
-#[test]
-fn ident_parse_lifetime() {
-    parse("'static").unwrap_err();
-}
-
-#[test]
-fn ident_parse_underscore() {
-    parse("_").unwrap_err();
-}
-
-#[test]
-fn ident_parse_number() {
-    parse("255").unwrap_err();
-}
-
-#[test]
-fn ident_parse_invalid() {
-    parse("a#").unwrap_err();
-}
-
-#[test]
-fn ident_new() {
-    new("String");
-}
-
-#[test]
-fn ident_new_keyword() {
-    new("abstract");
-}
-
-#[test]
-#[should_panic(expected = "use Option<Ident>")]
-fn ident_new_empty() {
-    new("");
-}
-
-#[test]
-#[should_panic(expected = "not a valid Ident")]
-fn ident_new_lifetime() {
-    new("'static");
-}
-
-#[test]
-fn ident_new_underscore() {
-    new("_");
-}
-
-#[test]
-#[should_panic(expected = "use Literal instead")]
-fn ident_new_number() {
-    new("255");
-}
-
-#[test]
-#[should_panic(expected = "\"a#\" is not a valid Ident")]
-fn ident_new_invalid() {
-    new("a#");
-}
diff --git a/third_party/rust/syn/v2/crate/tests/test_should_parse.rs b/third_party/rust/syn/v2/crate/tests/test_should_parse.rs
deleted file mode 100644
index 180d859..0000000
--- a/third_party/rust/syn/v2/crate/tests/test_should_parse.rs
+++ /dev/null
@@ -1,45 +0,0 @@
-macro_rules! should_parse {
-    ($name:ident, { $($in:tt)* }) => {
-        #[test]
-        fn $name() {
-            // Make sure we can parse the file!
-            syn::parse_file(stringify!($($in)*)).unwrap();
-        }
-    }
-}
-
-should_parse!(generic_associated_type, {
-    impl Foo {
-        type Item = &'a i32;
-        fn foo<'a>(&'a self) -> Self::Item<'a> {}
-    }
-});
-
-#[rustfmt::skip]
-should_parse!(const_generics_use, {
-    type X = Foo<5>;
-    type Y = Foo<"foo">;
-    type Z = Foo<X>;
-    type W = Foo<{ X + 10 }>;
-});
-
-should_parse!(trailing_plus_type, {
-    type A = Box<Foo>;
-    type A = Box<Foo + 'a>;
-    type A = Box<'a + Foo>;
-});
-
-should_parse!(generic_associated_type_where, {
-    trait Foo {
-        type Item;
-        fn foo<T>(&self, t: T) -> Self::Item<T>;
-    }
-});
-
-should_parse!(match_with_block_expr, {
-    fn main() {
-        match false {
-            _ => {}.a(),
-        }
-    }
-});
diff --git a/third_party/rust/syn/v2/crate/tests/zzz_stable.rs b/third_party/rust/syn/v2/crate/tests/zzz_stable.rs
deleted file mode 100644
index a1a670d9..0000000
--- a/third_party/rust/syn/v2/crate/tests/zzz_stable.rs
+++ /dev/null
@@ -1,33 +0,0 @@
-#![cfg(syn_disable_nightly_tests)]
-
-use std::io::{self, Write};
-use termcolor::{Color, ColorChoice, ColorSpec, StandardStream, WriteColor};
-
-const MSG: &str = "\
-‖
-‖   WARNING:
-‖   This is not a nightly compiler so not all tests were able to
-‖   run. Syn includes tests that compare Syn's parser against the
-‖   compiler's parser, which requires access to unstable librustc
-‖   data structures and a nightly compiler.
-‖
-";
-
-#[test]
-fn notice() -> io::Result<()> {
-    let header = "WARNING";
-    let index_of_header = MSG.find(header).unwrap();
-    let before = &MSG[..index_of_header];
-    let after = &MSG[index_of_header + header.len()..];
-
-    let mut stderr = StandardStream::stderr(ColorChoice::Auto);
-    stderr.set_color(ColorSpec::new().set_fg(Some(Color::Yellow)))?;
-    write!(&mut stderr, "{}", before)?;
-    stderr.set_color(ColorSpec::new().set_bold(true).set_fg(Some(Color::Yellow)))?;
-    write!(&mut stderr, "{}", header)?;
-    stderr.set_color(ColorSpec::new().set_fg(Some(Color::Yellow)))?;
-    write!(&mut stderr, "{}", after)?;
-    stderr.reset()?;
-
-    Ok(())
-}
diff --git a/third_party/rust/termcolor/v1/BUILD.gn b/third_party/rust/termcolor/v1/BUILD.gn
index 57ca2ef..69f615e 100644
--- a/third_party/rust/termcolor/v1/BUILD.gn
+++ b/third_party/rust/termcolor/v1/BUILD.gn
@@ -11,9 +11,14 @@
   crate_name = "termcolor"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
-  sources = [ "//third_party/rust/termcolor/v1/crate/src/lib.rs" ]
-  inputs = [ "//third_party/rust/termcolor/v1/crate/README.md" ]
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/src/lib.rs"
+  sources = [
+    "//third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/src/lib.rs",
+  ]
+  inputs = [
+    "//third_party/rust/chromium_crates_io/vendor/termcolor-1.1.2/README.md",
+  ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/termcolor/v1/crate/COPYING b/third_party/rust/termcolor/v1/crate/COPYING
deleted file mode 100644
index bb9c20a0..0000000
--- a/third_party/rust/termcolor/v1/crate/COPYING
+++ /dev/null
@@ -1,3 +0,0 @@
-This project is dual-licensed under the Unlicense and MIT licenses.
-
-You may use this code under the terms of either license.
diff --git a/third_party/rust/termcolor/v1/crate/LICENSE-MIT b/third_party/rust/termcolor/v1/crate/LICENSE-MIT
deleted file mode 100644
index 3b0a5dc..0000000
--- a/third_party/rust/termcolor/v1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Andrew Gallant
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/third_party/rust/termcolor/v1/crate/UNLICENSE b/third_party/rust/termcolor/v1/crate/UNLICENSE
deleted file mode 100644
index 68a49da..0000000
--- a/third_party/rust/termcolor/v1/crate/UNLICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-This is free and unencumbered software released into the public domain.
-
-Anyone is free to copy, modify, publish, use, compile, sell, or
-distribute this software, either in source code form or as a compiled
-binary, for any purpose, commercial or non-commercial, and by any
-means.
-
-In jurisdictions that recognize copyright laws, the author or authors
-of this software dedicate any and all copyright interest in the
-software to the public domain. We make this dedication for the benefit
-of the public at large and to the detriment of our heirs and
-successors. We intend this dedication to be an overt act of
-relinquishment in perpetuity of all present and future rights to this
-software under copyright law.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-For more information, please refer to <http://unlicense.org/>
diff --git a/third_party/rust/termcolor/v1/crate/rustfmt.toml b/third_party/rust/termcolor/v1/crate/rustfmt.toml
deleted file mode 100644
index aa37a218..0000000
--- a/third_party/rust/termcolor/v1/crate/rustfmt.toml
+++ /dev/null
@@ -1,2 +0,0 @@
-max_width = 79
-use_small_heuristics = "max"
diff --git a/third_party/rust/third_party.toml b/third_party/rust/third_party.toml
index 35747c8..d2698fe1 100644
--- a/third_party/rust/third_party.toml
+++ b/third_party/rust/third_party.toml
@@ -39,7 +39,7 @@
 # resolve its dependencies.
 [workspace]
 members = [
-    "cxxbridge_cmd/v1/crate",
+    "chromium_crates_io/vendor/cxxbridge-cmd-1.0.110"
 ]
 
 [dependencies]
diff --git a/third_party/rust/unicode_ident/v1/BUILD.gn b/third_party/rust/unicode_ident/v1/BUILD.gn
index cb35196..7ae5d323 100644
--- a/third_party/rust/unicode_ident/v1/BUILD.gn
+++ b/third_party/rust/unicode_ident/v1/BUILD.gn
@@ -11,21 +11,21 @@
   crate_name = "unicode_ident"
   epoch = "1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/src/lib.rs"
   sources = [
-    "//third_party/rust/unicode_ident/v1/crate/benches/xid.rs",
-    "//third_party/rust/unicode_ident/v1/crate/src/lib.rs",
-    "//third_party/rust/unicode_ident/v1/crate/src/tables.rs",
-    "//third_party/rust/unicode_ident/v1/crate/tests/compare.rs",
-    "//third_party/rust/unicode_ident/v1/crate/tests/fst/mod.rs",
-    "//third_party/rust/unicode_ident/v1/crate/tests/roaring/mod.rs",
-    "//third_party/rust/unicode_ident/v1/crate/tests/static_size.rs",
-    "//third_party/rust/unicode_ident/v1/crate/tests/tables/mod.rs",
-    "//third_party/rust/unicode_ident/v1/crate/tests/tables/tables.rs",
-    "//third_party/rust/unicode_ident/v1/crate/tests/trie/mod.rs",
-    "//third_party/rust/unicode_ident/v1/crate/tests/trie/trie.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/benches/xid.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/src/tables.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/compare.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/fst/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/roaring/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/static_size.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/tables/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/tables/tables.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/trie/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/tests/trie/trie.rs",
   ]
-  inputs = [ "//third_party/rust/unicode_ident/v1/crate/README.md" ]
+  inputs = [ "//third_party/rust/chromium_crates_io/vendor/unicode-ident-1.0.8/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/unicode_ident/v1/crate/.github/FUNDING.yml b/third_party/rust/unicode_ident/v1/crate/.github/FUNDING.yml
deleted file mode 100644
index 7507077..0000000
--- a/third_party/rust/unicode_ident/v1/crate/.github/FUNDING.yml
+++ /dev/null
@@ -1 +0,0 @@
-github: dtolnay
diff --git a/third_party/rust/unicode_ident/v1/crate/LICENSE-APACHE b/third_party/rust/unicode_ident/v1/crate/LICENSE-APACHE
deleted file mode 100644
index 1b5ec8b..0000000
--- a/third_party/rust/unicode_ident/v1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,176 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
diff --git a/third_party/rust/unicode_ident/v1/crate/LICENSE-MIT b/third_party/rust/unicode_ident/v1/crate/LICENSE-MIT
deleted file mode 100644
index 31aa7938..0000000
--- a/third_party/rust/unicode_ident/v1/crate/LICENSE-MIT
+++ /dev/null
@@ -1,23 +0,0 @@
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/third_party/rust/unicode_linebreak/v0_1/BUILD.gn b/third_party/rust/unicode_linebreak/v0_1/BUILD.gn
index 28f4fe0..8249103 100644
--- a/third_party/rust/unicode_linebreak/v0_1/BUILD.gn
+++ b/third_party/rust/unicode_linebreak/v0_1/BUILD.gn
@@ -11,11 +11,11 @@
   crate_name = "unicode_linebreak"
   epoch = "0.1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/src/lib.rs"
   sources = [
-    "//third_party/rust/unicode_linebreak/v0_1/crate/build.rs",
-    "//third_party/rust/unicode_linebreak/v0_1/crate/src/lib.rs",
-    "//third_party/rust/unicode_linebreak/v0_1/crate/src/shared.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/src/shared.rs",
   ]
   inputs = []
 
@@ -32,8 +32,8 @@
   executable_configs -= [ "//build/config/compiler:chromium_code" ]
   executable_configs += [ "//build/config/compiler:no_chromium_code" ]
   build_deps = [ "//third_party/rust/regex/v1:buildrs_support" ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root = "//third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/build.rs"
+  build_sources = [ "//third_party/rust/chromium_crates_io/vendor/unicode-linebreak-0.1.2/build.rs" ]
   build_script_outputs = [ "tables.rs" ]
 
   # Only for usage from third-party crates. Add the crate to
diff --git a/third_party/rust/unicode_width/v0_1/BUILD.gn b/third_party/rust/unicode_width/v0_1/BUILD.gn
index 7b56a93..796e7344 100644
--- a/third_party/rust/unicode_width/v0_1/BUILD.gn
+++ b/third_party/rust/unicode_width/v0_1/BUILD.gn
@@ -11,13 +11,13 @@
   crate_name = "unicode_width"
   epoch = "0.1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/src/lib.rs"
   sources = [
-    "//third_party/rust/unicode_width/v0_1/crate/src/lib.rs",
-    "//third_party/rust/unicode_width/v0_1/crate/src/tables.rs",
-    "//third_party/rust/unicode_width/v0_1/crate/src/tests.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/src/tables.rs",
+    "//third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/src/tests.rs",
   ]
-  inputs = [ "//third_party/rust/unicode_width/v0_1/crate/README.md" ]
+  inputs = [ "//third_party/rust/chromium_crates_io/vendor/unicode-width-0.1.9/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/unicode_width/v0_1/crate/LICENSE-APACHE b/third_party/rust/unicode_width/v0_1/crate/LICENSE-APACHE
deleted file mode 100644
index 16fe87b..0000000
--- a/third_party/rust/unicode_width/v0_1/crate/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/third_party/rust/winapi/v0_3/BUILD.gn b/third_party/rust/winapi/v0_3/BUILD.gn
index 81e6c116..42166e37 100644
--- a/third_party/rust/winapi/v0_3/BUILD.gn
+++ b/third_party/rust/winapi/v0_3/BUILD.gn
@@ -11,415 +11,417 @@
   crate_name = "winapi"
   epoch = "0.3"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/lib.rs"
   sources = [
-    "//third_party/rust/winapi/v0_3/crate/build.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/km/d3dkmthk.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/km/mod.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/lib.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/macros.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/basetsd.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/bcrypt.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/bthdef.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/bthioctl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/bthsdpdef.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/bugcodes.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/cderr.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/cfg.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/d3d9.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/d3d9caps.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/d3d9types.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/d3dkmdt.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/d3dukmdt.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/dcomptypes.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/devguid.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/devpkey.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/devpropdef.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/dinputd.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/dxgi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/dxgi1_2.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/dxgi1_3.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/dxgi1_4.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/dxgi1_5.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/dxgi1_6.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/dxgiformat.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/dxgitype.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/evntprov.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/evntrace.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/guiddef.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/hidclass.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/hidpi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/hidsdi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/hidusage.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/ifdef.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/ifmib.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/in6addr.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/inaddr.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/intsafe.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/ipifcons.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/ipmib.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/iprtrmib.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/ks.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/ksmedia.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/ktmtypes.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/lmcons.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/minwindef.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/mmreg.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/mod.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/mprapidef.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/mstcpip.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/mswsockdef.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/netioapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/nldef.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/ntddndis.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/ntddscsi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/ntddser.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/ntdef.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/ntstatus.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/qos.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/rpc.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/rpcdce.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/rpcndr.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/sddl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/sspi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/stralign.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/tcpestats.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/tcpmib.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/transportsettingcommon.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/tvout.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/udpmib.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/usb.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/usbioctl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/usbiodef.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/usbscan.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/usbspec.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/windef.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/windot11.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/windowsx.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/winerror.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/winusbio.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/wlantypes.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/wmistr.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/wnnc.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/ws2def.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/ws2ipdef.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/wtypes.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/shared/wtypesbase.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/ucrt/corecrt.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/ucrt/mod.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/accctrl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/aclapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/adhoc.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/appmgmt.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/audioclient.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/audiosessiontypes.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/avrt.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/bits.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/bits10_1.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/bits1_5.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/bits2_0.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/bits2_5.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/bits3_0.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/bits4_0.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/bits5_0.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/bitscfg.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/bitsmsg.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/bluetoothapis.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/bluetoothleapis.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/bthledef.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/cfgmgr32.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/cguid.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/combaseapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/coml2api.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/commapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/commctrl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/commdlg.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/commoncontrols.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/consoleapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/corsym.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d2d1.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d2d1_1.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d2d1_2.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d2d1_3.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d2d1effectauthor.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d2d1effects.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d2d1effects_1.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d2d1effects_2.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d2d1svg.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d2dbasetypes.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d10.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d10_1.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d10_1shader.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d10effect.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d10misc.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d10sdklayers.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d10shader.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d11.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d11_1.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d11_2.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d11_3.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d11_4.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d11on12.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d11sdklayers.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d11shader.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d11tokenizedprogramformat.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d12.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d12sdklayers.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3d12shader.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3dcommon.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3dcompiler.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3dcsx.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3dx10core.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3dx10math.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/d3dx10mesh.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/datetimeapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/davclnt.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dbghelp.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dbt.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dcommon.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dcomp.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dcompanimation.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dde.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/ddraw.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/ddrawi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/ddrawint.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/debugapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/devicetopology.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dinput.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dispex.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dmksctl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dmusicc.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/docobj.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/documenttarget.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dot1x.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dpa_dsa.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dpapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dsgetdc.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dsound.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dsrole.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dvp.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dwmapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dwrite.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dwrite_1.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dwrite_2.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dwrite_3.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dxdiag.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dxfile.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dxgidebug.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dxva2api.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/dxvahd.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/eaptypes.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/enclaveapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/endpointvolume.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/errhandlingapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/evntcons.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/exdisp.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/fibersapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/fileapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/functiondiscoverykeys_devpkey.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/gl/gl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/gl/mod.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/handleapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/heapapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/highlevelmonitorconfigurationapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/http.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/imm.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/interlockedapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/ioapiset.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/ipexport.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/iphlpapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/iptypes.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/jobapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/jobapi2.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/knownfolders.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/ktmw32.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/l2cmn.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/libloaderapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lmaccess.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lmalert.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lmapibuf.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lmat.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lmdfs.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lmerrlog.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lmjoin.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lmmsg.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lmremutl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lmrepl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lmserver.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lmshare.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lmstats.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lmsvc.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lmuse.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lmwksta.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lowlevelmonitorconfigurationapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/lsalookup.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/memoryapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/minschannel.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/minwinbase.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/mmdeviceapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/mmeapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/mmsystem.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/mod.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/msaatext.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/mscat.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/mschapp.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/mssip.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/mswsock.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/namedpipeapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/namespaceapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/nb30.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/ncrypt.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/ntlsa.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/ntsecapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/oaidl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/objbase.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/objidl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/objidlbase.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/ocidl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/ole2.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/oleauto.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/olectl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/oleidl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/opmapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/pdh.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/perflib.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/physicalmonitorenumerationapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/playsoundapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/portabledevice.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/portabledeviceapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/portabledevicetypes.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/powerbase.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/powersetting.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/powrprof.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/processenv.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/processsnapshot.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/processthreadsapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/processtopologyapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/profileapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/propidl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/propkey.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/propkeydef.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/propsys.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/prsht.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/psapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/realtimeapiset.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/reason.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/restartmanager.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/restrictederrorinfo.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/rmxfguid.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/rtinfo.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/sapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/sapi51.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/sapi53.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/sapiddk.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/sapiddk51.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/schannel.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/securityappcontainer.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/securitybaseapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/servprov.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/setupapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/shellapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/shellscalingapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/shlobj.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/shobjidl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/shobjidl_core.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/shtypes.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/softpub.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/spapidef.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/spellcheck.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/sporder.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/sql.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/sqlext.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/sqltypes.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/sqlucode.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/sspi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/stringapiset.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/strmif.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/subauth.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/synchapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/sysinfoapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/systemtopologyapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/taskschd.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/textstor.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/threadpoolapiset.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/threadpoollegacyapiset.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/timeapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/timezoneapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/tlhelp32.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/unknwnbase.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/urlhist.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/urlmon.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/userenv.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/usp10.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/utilapiset.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/uxtheme.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/vsbackup.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/vss.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/vsserror.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/vswriter.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wbemads.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wbemcli.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wbemdisp.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wbemprov.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wbemtran.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wct.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/werapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winbase.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wincodec.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wincodecsdk.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wincon.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wincontypes.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wincred.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wincrypt.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/windowsceip.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winefs.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winevt.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wingdi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winhttp.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wininet.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winineti.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winioctl.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winnetwk.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winnls.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winnt.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winreg.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winsafer.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winscard.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winsmcrd.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winsock2.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winspool.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winsvc.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wintrust.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winusb.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winuser.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/winver.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wlanapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wlanihv.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wlanihvtypes.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wlclient.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wow64apiset.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wpdmtpextensions.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/ws2bth.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/ws2spi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/ws2tcpip.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/wtsapi32.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/um/xinput.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/vc/excpt.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/vc/limits.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/vc/mod.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/vc/vadefs.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/vc/vcruntime.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/winrt/activation.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/winrt/hstring.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/winrt/inspectable.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/winrt/mod.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/winrt/roapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/winrt/robuffer.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/winrt/roerrorapi.rs",
-    "//third_party/rust/winapi/v0_3/crate/src/winrt/winstring.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/build.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/km/d3dkmthk.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/km/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/macros.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/basetsd.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/bcrypt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/bthdef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/bthioctl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/bthsdpdef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/bugcodes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/cderr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/cfg.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/d3d9.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/d3d9caps.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/d3d9types.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/d3dkmdt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/d3dukmdt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dcomptypes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/devguid.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/devpkey.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/devpropdef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dinputd.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi1_2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi1_3.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi1_4.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi1_5.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgi1_6.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgiformat.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/dxgitype.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/evntprov.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/evntrace.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/guiddef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/hidclass.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/hidpi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/hidsdi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/hidusage.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ifdef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ifmib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/in6addr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/inaddr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/intsafe.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ipifcons.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ipmib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/iprtrmib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ks.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ksmedia.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ktmtypes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/lmcons.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/minwindef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/mmreg.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/mprapidef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/mstcpip.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/mswsockdef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/netioapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/nldef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ntddndis.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ntddscsi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ntddser.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ntdef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ntstatus.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/qos.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/rpc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/rpcdce.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/rpcndr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/sddl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/sspi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/stralign.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/tcpestats.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/tcpmib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/transportsettingcommon.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/tvout.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/udpmib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/usb.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/usbioctl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/usbiodef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/usbscan.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/usbspec.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/windef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/windot11.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/windowsx.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/winerror.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/winusbio.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/wlantypes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/wmistr.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/wnnc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ws2def.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/ws2ipdef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/wtypes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/shared/wtypesbase.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/ucrt/corecrt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/ucrt/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/accctrl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/aclapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/adhoc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/appmgmt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/audioclient.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/audiosessiontypes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/avrt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits10_1.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits1_5.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits2_0.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits2_5.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits3_0.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits4_0.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bits5_0.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bitscfg.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bitsmsg.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bluetoothapis.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bluetoothleapis.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/bthledef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/cfgmgr32.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/cguid.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/combaseapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/coml2api.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/commapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/commctrl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/commdlg.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/commoncontrols.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/consoleapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/corsym.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1_1.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1_2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1_3.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1effectauthor.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1effects.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1effects_1.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1effects_2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2d1svg.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d2dbasetypes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10_1.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10_1shader.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10effect.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10misc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10sdklayers.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d10shader.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11_1.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11_2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11_3.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11_4.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11on12.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11sdklayers.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11shader.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d11tokenizedprogramformat.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d12.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d12sdklayers.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3d12shader.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dcommon.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dcompiler.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dcsx.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dx10core.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dx10math.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/d3dx10mesh.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/datetimeapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/davclnt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dbghelp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dbt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dcommon.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dcomp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dcompanimation.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dde.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ddraw.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ddrawi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ddrawint.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/debugapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/devicetopology.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dinput.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dispex.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dmksctl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dmusicc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/docobj.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/documenttarget.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dot1x.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dpa_dsa.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dpapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dsgetdc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dsound.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dsrole.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dvp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dwmapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dwrite.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dwrite_1.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dwrite_2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dwrite_3.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dxdiag.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dxfile.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dxgidebug.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dxva2api.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/dxvahd.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/eaptypes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/enclaveapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/endpointvolume.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/errhandlingapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/evntcons.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/exdisp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/fibersapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/fileapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/functiondiscoverykeys_devpkey.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/gl/gl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/gl/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/handleapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/heapapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/highlevelmonitorconfigurationapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/http.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/imm.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/interlockedapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ioapiset.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ipexport.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/iphlpapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/iptypes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/jobapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/jobapi2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/knownfolders.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ktmw32.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/l2cmn.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/libloaderapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmaccess.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmalert.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmapibuf.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmat.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmdfs.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmerrlog.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmjoin.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmmsg.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmremutl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmrepl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmserver.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmshare.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmstats.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmsvc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmuse.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lmwksta.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lowlevelmonitorconfigurationapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/lsalookup.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/memoryapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/minschannel.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/minwinbase.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mmdeviceapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mmeapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mmsystem.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/msaatext.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mscat.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mschapp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mssip.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/mswsock.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/namedpipeapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/namespaceapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/nb30.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ncrypt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ntlsa.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ntsecapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/oaidl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/objbase.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/objidl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/objidlbase.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ocidl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ole2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/oleauto.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/olectl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/oleidl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/opmapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/pdh.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/perflib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/physicalmonitorenumerationapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/playsoundapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/portabledevice.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/portabledeviceapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/portabledevicetypes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/powerbase.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/powersetting.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/powrprof.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/processenv.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/processsnapshot.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/processthreadsapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/processtopologyapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/profileapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/propidl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/propkey.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/propkeydef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/propsys.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/prsht.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/psapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/realtimeapiset.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/reason.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/restartmanager.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/restrictederrorinfo.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/rmxfguid.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/rtinfo.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sapi51.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sapi53.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sapiddk.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sapiddk51.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/schannel.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/securityappcontainer.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/securitybaseapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/servprov.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/setupapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shellapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shellscalingapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shlobj.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shobjidl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shobjidl_core.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/shtypes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/softpub.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/spapidef.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/spellcheck.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sporder.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sql.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sqlext.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sqltypes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sqlucode.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sspi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/stringapiset.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/strmif.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/subauth.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/synchapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/sysinfoapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/systemtopologyapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/taskschd.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/textstor.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/threadpoolapiset.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/threadpoollegacyapiset.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/timeapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/timezoneapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/tlhelp32.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/unknwnbase.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/urlhist.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/urlmon.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/userenv.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/usp10.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/utilapiset.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/uxtheme.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/vsbackup.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/vss.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/vsserror.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/vswriter.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wbemads.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wbemcli.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wbemdisp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wbemprov.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wbemtran.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wct.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/werapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winbase.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincodec.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincodecsdk.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincon.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincontypes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincred.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wincrypt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/windowsceip.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winefs.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winevt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wingdi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winhttp.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wininet.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winineti.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winioctl.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winnetwk.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winnls.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winnt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winreg.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winsafer.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winscard.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winsmcrd.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winsock2.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winspool.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winsvc.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wintrust.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winusb.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winuser.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/winver.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wlanapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wlanihv.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wlanihvtypes.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wlclient.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wow64apiset.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wpdmtpextensions.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ws2bth.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ws2spi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/ws2tcpip.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/wtsapi32.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/um/xinput.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/vc/excpt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/vc/limits.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/vc/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/vc/vadefs.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/vc/vcruntime.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/activation.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/hstring.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/inspectable.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/mod.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/roapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/robuffer.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/roerrorapi.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/src/winrt/winstring.rs",
   ]
-  inputs = [ "//third_party/rust/winapi/v0_3/crate/README.md" ]
+  inputs =
+      [ "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/README.md" ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
@@ -444,8 +446,10 @@
     "winerror",
     "winnt",
   ]
-  build_root = "crate/build.rs"
-  build_sources = [ "crate/build.rs" ]
+  build_root =
+      "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/build.rs"
+  build_sources =
+      [ "//third_party/rust/chromium_crates_io/vendor/winapi-0.3.9/build.rs" ]
 
   # Only for usage from third-party crates. Add the crate to
   # third_party.toml to use it from first-party code.
diff --git a/third_party/rust/winapi_util/v0_1/BUILD.gn b/third_party/rust/winapi_util/v0_1/BUILD.gn
index 286f145..75cc3f1 100644
--- a/third_party/rust/winapi_util/v0_1/BUILD.gn
+++ b/third_party/rust/winapi_util/v0_1/BUILD.gn
@@ -11,14 +11,16 @@
   crate_name = "winapi_util"
   epoch = "0.1"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root = "//third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/src/lib.rs"
   sources = [
-    "//third_party/rust/winapi_util/v0_1/crate/src/console.rs",
-    "//third_party/rust/winapi_util/v0_1/crate/src/file.rs",
-    "//third_party/rust/winapi_util/v0_1/crate/src/lib.rs",
-    "//third_party/rust/winapi_util/v0_1/crate/src/win.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/src/console.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/src/file.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/src/win.rs",
   ]
-  inputs = [ "//third_party/rust/winapi_util/v0_1/crate/README.md" ]
+  inputs = [
+    "//third_party/rust/chromium_crates_io/vendor/winapi-util-0.1.5/README.md",
+  ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
   build_native_rust_unit_tests = false
diff --git a/third_party/rust/winapi_util/v0_1/crate/COPYING b/third_party/rust/winapi_util/v0_1/crate/COPYING
deleted file mode 100644
index bb9c20a0..0000000
--- a/third_party/rust/winapi_util/v0_1/crate/COPYING
+++ /dev/null
@@ -1,3 +0,0 @@
-This project is dual-licensed under the Unlicense and MIT licenses.
-
-You may use this code under the terms of either license.
diff --git a/third_party/rust/winapi_util/v0_1/crate/UNLICENSE b/third_party/rust/winapi_util/v0_1/crate/UNLICENSE
deleted file mode 100644
index 68a49da..0000000
--- a/third_party/rust/winapi_util/v0_1/crate/UNLICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-This is free and unencumbered software released into the public domain.
-
-Anyone is free to copy, modify, publish, use, compile, sell, or
-distribute this software, either in source code form or as a compiled
-binary, for any purpose, commercial or non-commercial, and by any
-means.
-
-In jurisdictions that recognize copyright laws, the author or authors
-of this software dedicate any and all copyright interest in the
-software to the public domain. We make this dedication for the benefit
-of the public at large and to the detriment of our heirs and
-successors. We intend this dedication to be an overt act of
-relinquishment in perpetuity of all present and future rights to this
-software under copyright law.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-For more information, please refer to <http://unlicense.org/>
diff --git a/third_party/rust/winapi_util/v0_1/crate/rustfmt.toml b/third_party/rust/winapi_util/v0_1/crate/rustfmt.toml
deleted file mode 100644
index aa37a218..0000000
--- a/third_party/rust/winapi_util/v0_1/crate/rustfmt.toml
+++ /dev/null
@@ -1,2 +0,0 @@
-max_width = 79
-use_small_heuristics = "max"
diff --git a/third_party/rust/wycheproof/v0_4/BUILD.gn b/third_party/rust/wycheproof/v0_4/BUILD.gn
index 71945958..6cfee97c 100644
--- a/third_party/rust/wycheproof/v0_4/BUILD.gn
+++ b/third_party/rust/wycheproof/v0_4/BUILD.gn
@@ -11,33 +11,34 @@
   crate_name = "wycheproof"
   epoch = "0.4"
   crate_type = "rlib"
-  crate_root = "crate/src/lib.rs"
+  crate_root =
+      "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/lib.rs"
   sources = [
-    "//third_party/rust/wycheproof/v0_4/crate/src/aead.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/cipher.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/daead.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/dsa.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/ecdh.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/ecdsa.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/eddsa.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/hkdf.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/jwk.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/keywrap.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/lib.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/mac.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/mac_with_iv.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/primality.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/rsa_oaep.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/rsa_pkcs1_decrypt.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/rsa_pkcs1_sign.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/rsa_pkcs1_verify.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/rsa_pss_verify.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/src/xdh.rs",
-    "//third_party/rust/wycheproof/v0_4/crate/tests/tests.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/aead.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/cipher.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/daead.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/dsa.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/ecdh.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/ecdsa.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/eddsa.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/hkdf.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/jwk.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/keywrap.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/lib.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/mac.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/mac_with_iv.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/primality.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/rsa_oaep.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/rsa_pkcs1_decrypt.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/rsa_pkcs1_sign.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/rsa_pkcs1_verify.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/rsa_pss_verify.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/src/xdh.rs",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/tests/tests.rs",
   ]
   inputs = [
-    "//third_party/rust/wycheproof/v0_4/crate/NEWS.md",
-    "//third_party/rust/wycheproof/v0_4/crate/README.md",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/NEWS.md",
+    "//third_party/rust/chromium_crates_io/vendor/wycheproof-0.4.0/README.md",
   ]
 
   # Unit tests skipped. Generate with --with-tests to include them.
diff --git a/third_party/rust/wycheproof/v0_4/crate/.gitignore b/third_party/rust/wycheproof/v0_4/crate/.gitignore
deleted file mode 100644
index 96ef6c0..0000000
--- a/third_party/rust/wycheproof/v0_4/crate/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/target
-Cargo.lock
diff --git a/third_party/skia b/third_party/skia
index 5fbacd5..bd8546d 160000
--- a/third_party/skia
+++ b/third_party/skia
@@ -1 +1 @@
-Subproject commit 5fbacd5d68a5e722eb516ed91301d894f57ac00c
+Subproject commit bd8546dab41cf13042af58117a6b588cbad14085
diff --git a/third_party/webgpu-cts/src b/third_party/webgpu-cts/src
index 0e06340..d3e4c53 160000
--- a/third_party/webgpu-cts/src
+++ b/third_party/webgpu-cts/src
@@ -1 +1 @@
-Subproject commit 0e06340de1e50169093ea5951d55a4dce983f719
+Subproject commit d3e4c5300efaec139cc5728c3455508386fe4db2
diff --git a/third_party/webrtc b/third_party/webrtc
index 5a6f022..25c2344 160000
--- a/third_party/webrtc
+++ b/third_party/webrtc
@@ -1 +1 @@
-Subproject commit 5a6f022c934ce54f9fe58a511e5a30aa02b70888
+Subproject commit 25c2344b06a3c76893930613b957d2468df6c3a3
diff --git a/tools/code_coverage/run_all_fuzzers.py b/tools/code_coverage/run_all_fuzzers.py
index bee97336..db1c55b0 100644
--- a/tools/code_coverage/run_all_fuzzers.py
+++ b/tools/code_coverage/run_all_fuzzers.py
@@ -20,26 +20,40 @@
   """ Runs a given fuzzer target. Designed to be called in parallel.
 
   Parameters:
-    args[0]: Name of the fuzzer target.
-    args[1]: Command to be run.
-    args[2]: Environment variables.
-    args[3]: A multiprocessing.Manager.list for names of successful fuzzers.
-    args[4]: A multiprocessing.Manager.list for names of failed fuzzers.
+    args[0]: A dict containing information about what to run. Must contain:
+      name: name of the fuzzer target
+      corpus_dir: where to find its corpus. May be None.
+      profraw_dir: the directory in which to create a .profraws temporarily
+      profdata_file: the output .profdata filename to create
+      env: a dict of additional environment variables. This function will
+        append profdata environment variables.
+      cmd: a list of command line arguments, including the binary name.
+        This function will append corpus entries.
+    args[1]: A multiprocessing.Manager.list for names of successful fuzzers.
+    args[2]: A multiprocessing.Manager.list for names of failed fuzzers.
 
   Returns:
     None.
   """
-  target = args[0]
-  cmd = args[1]
-  env = args[2]
-  verified_fuzzer_targets = args[3]
-  failed_targets = args[4]
-  target_profraw = os.path.join(reportdir, target + ".profraw")
-  target_profdata = os.path.join(reportdir, target + ".profdata")
+  target_details = args[0]
+  verified_fuzzer_targets = args[1]
+  failed_targets = args[2]
+  target = target_details['name']
+  cmd = target_details['cmd']
+  env = target_details['env']
+  corpus_dir = target_details['corpus']
+  profraw_dir = target_details['profraw_dir']
+  target_profdata = target_details['profdata_file']
+  fullcorpus_profraw = os.path.join(profraw_dir, target + ".profraw")
+  env['LLVM_PROFILE_FILE'] = fullcorpus_profraw
+  fullcorpus_cmd = cmd.copy()
+  if corpus_dir is not None:
+    fullcorpus_cmd.append(corpus_dir)
+  valid_profraws = set()
   for i in range(FUZZ_RETRIES):
-    print("Trying command %s" % str(cmd))
+    print("Trying command with full corpus %s" % str(fullcorpus_cmd))
     try:
-      subprocess.run(cmd,
+      subprocess.run(fullcorpus_cmd,
                      env=env,
                      timeout=1800,
                      capture_output=True,
@@ -48,7 +62,7 @@
     except Exception as e:
       print(
           "Command %s exited with non-zero return code, failing on iteration %d"
-          % (cmd, i))
+          % (fullcorpus_cmd, i))
       if type(e) == subprocess.TimeoutExpired:
         print("Timed out after %d seconds" % e.timeout)
       else:
@@ -57,12 +71,62 @@
         print(e.output)
         print(e.stderr)
         print("*** FULL FUZZING OUTPUT ABOVE ***")
-  if not os.path.isfile(target_profraw):
+  if os.path.exists(
+      fullcorpus_profraw) and os.path.getsize(fullcorpus_profraw) > 0:
+    valid_profraws.add(fullcorpus_profraw)
+  if len(valid_profraws) == 0 and corpus_dir is not None:
+    # We failed to run the fuzzer with the whole corpus in one go. That probably
+    # means one of the test cases caused a crash. Let's run each test
+    # case one at a time.
+    for count, corpus_entry in enumerate(os.listdir(corpus_dir)):
+      specific_test_case_profraw = os.path.join(
+          profraw_dir, target + "_" + str(count) + ".profraw")
+      test_case = os.path.join(corpus_dir, corpus_entry)
+      specific_test_case_cmd = cmd + [test_case]
+      env['LLVM_PROFILE_FILE'] = specific_test_case_profraw
+      print("Trying command with specific test case %d (%s)" %
+            (count, str(specific_test_case_cmd)))
+      try:
+        subprocess.run(specific_test_case_cmd,
+                       env=env,
+                       timeout=1800,
+                       capture_output=True,
+                       check=True)
+      except Exception as e:
+        print("Command %s exited with non-zero return code" %
+              (specific_test_case_cmd))
+        if type(e) == subprocess.TimeoutExpired:
+          print("Timed out after %d seconds" % e.timeout)
+        else:
+          print("Return code: " + str(e.returncode))
+          print("**** FULL FUZZING OUTPUT BELOW ***")
+          print(e.output)
+          print(e.stderr)
+          print("*** FULL FUZZING OUTPUT ABOVE ***")
+      if os.path.exists(specific_test_case_profraw
+                        ) and os.path.getsize(specific_test_case_profraw) > 0:
+        valid_profraws.add(specific_test_case_profraw)
+      # The corpus may be huge - don't keep going forever.
+      if count > 1000:
+        print("Skipping remaining test cases - >1000 tried")
+        break
+      # And if we've got 200 valid coverage files, assume this is a
+      # reasonable approximation of the total coverage. This is partly
+      # to ensure the profdata command line isn't too huge and partly
+      # to reduce processing time to something reasonable.
+      if len(valid_profraws) > 200:
+        print(
+            "Skipping remaining individual test cases, >200 valid profiles recorded."
+        )
+        break
+  if len(valid_profraws) == 0:
     failed_targets.append(target)
     return
-  llvm_profdata_cmd = [
-      llvm_profdata, 'merge', '-sparse', target_profraw, '-o', target_profdata
-  ]
+  # This script is currently run only on Linux. If in future we want to use
+  # it on Windows, where command line length limits are smaller, we might
+  # want to use the -f argument instead of listing them all
+  llvm_profdata_cmd = [llvm_profdata, 'merge', '-sparse'
+                       ] + list(valid_profraws) + ['-o', target_profdata]
   subprocess.check_call(llvm_profdata_cmd)
   verified_fuzzer_targets.append(target)
 
@@ -104,9 +168,7 @@
 verified_fuzzer_targets = Manager().list()
 failed_targets = Manager().list()
 reportdir = 'out/report'
-commands = []
-targets = []
-envs = []
+all_target_details = []
 llvm_profdata = 'third_party/llvm-build/Release+Asserts/bin/llvm-profdata'
 
 if not (os.path.isfile(llvm_profdata)):
@@ -129,20 +191,21 @@
          'not a directory') % fuzzer_target)
     incomplete_targets.append(fuzzer_target)
   else:
-    subprocess_cmd = [
+    all_target_details.append({
+        'name':
+        fuzzer_target,
+        'profraw_dir':
+        reportdir,
+        'profdata_file':
+        os.path.join(reportdir, fuzzer_target + ".profdata"),
+        'env':
+        dict(),
         # RSS limit 8GB. Some of our fuzzers which involve running significant
         # chunks of Chromium code require more than the 2GB default.
-        fuzzer_target_binpath,
-        '-runs=0',
-        '-rss_limit_mb=8192',
+        'cmd': [fuzzer_target_binpath, '-runs=0', '-rss_limit_mb=8192'],
+        'corpus':
         fuzzer_target_corporadir
-    ]
-    profraw_file = fuzzer_target + ".profraw"
-    profraw_path = os.path.join(reportdir, profraw_file)
-    env = {'LLVM_PROFILE_FILE': profraw_path}
-    targets.append(fuzzer_target)
-    commands.append(subprocess_cmd)
-    envs.append(env)
+    })
 
 # We also want to run ./chrome without a valid X server.
 # It will almost immediately exit.
@@ -156,18 +219,28 @@
 else:
   profraw_file = chrome_target_binpath + ".profraw"
   profraw_path = os.path.join(reportdir, profraw_file)
-  env = {'LLVM_PROFILE_FILE': profraw_path, 'DISPLAY': 'not-a-real-display'}
-  targets.append(chrome_target_binpath)
-  commands.append([chrome_target_binpath])
-  envs.append(env)
+
+  env = {'DISPLAY': 'not-a-real-display'}
+  all_target_details.append({
+      'name':
+      "chrome",
+      'profraw_dir':
+      reportdir,
+      'profdata_file':
+      os.path.join(reportdir, "chrome.profdata"),
+      'env':
+      env,
+      'cmd': [chrome_target_binpath],
+      'corpus':
+      None
+  })
 
 # Run the fuzzers in parallel.
 cpu_count = int(cpu_count())
 with Pool(cpu_count) as p:
-  results = p.map(
-      _run_fuzzer_target,
-      [(target, command, env, verified_fuzzer_targets, failed_targets)
-       for target, command, env in zip(targets, commands, envs)])
+  results = p.map(_run_fuzzer_target,
+                  [(target_details, verified_fuzzer_targets, failed_targets)
+                   for target_details in all_target_details])
 
 print("Successful targets: %s" % verified_fuzzer_targets)
 print("Failed targets: %s" % failed_targets)
@@ -184,4 +257,4 @@
   try:
     subprocess.check_call(cmd)
   except:
-    print.warning("Warning: failed to copy profraw for %s" % fuzzer)
+    print.warning("Warning: failed to copy profdata for %s" % fuzzer)
diff --git a/tools/crates/gnrt/gen.rs b/tools/crates/gnrt/gen.rs
index 583ed21..8da16d7c1 100644
--- a/tools/crates/gnrt/gen.rs
+++ b/tools/crates/gnrt/gen.rs
@@ -35,7 +35,9 @@
     // Used to generate Cargo.toml [patch] sections, and later to check against
     // `cargo metadata`'s dependency resolution to ensure we have all the crates
     // we need. We sort `crates` for a stable ordering of [patch] sections.
-    let source = crates::ThirdPartySource::new(paths.third_party)?;
+    let source = crates::ThirdPartySource::new(
+        &paths.third_party.join("chromium_crates_io").join("vendor"),
+    )?;
 
     let manifest_contents =
         String::from_utf8(fs::read(paths.third_party.join("third_party.toml")).unwrap()).unwrap();
diff --git a/tools/crates/gnrt/lib/crates.rs b/tools/crates/gnrt/lib/crates.rs
index 1f79caa..4287894 100644
--- a/tools/crates/gnrt/lib/crates.rs
+++ b/tools/crates/gnrt/lib/crates.rs
@@ -343,45 +343,23 @@
             }
 
             let crate_path = crate_dir.path();
+            let Some(crate_id) = get_vendored_crate_id(&crate_path)? else {
+                warn!(
+                    "directory name parsed as valid epoch but contained no Cargo.toml: {}",
+                    crate_path.to_string_lossy()
+                );
+                continue;
+            };
 
-            // Ensure the path has a valid name: is UTF8, has our normalized format.
-            let normalized_name = path_as_str(crate_path.file_name().unwrap())?;
-            into_io_result(NormalizedName::new(normalized_name).ok_or_else(|| {
-                format!("unnormalized crate name in path {}", crate_path.to_string_lossy())
-            }))?;
+            let mut files = CrateFiles::new();
+            recurse_crate_files(&crate_path, &mut |filepath| {
+                collect_crate_file(&mut files, CollectCrateFiles::Internal, filepath)
+            })?;
+            files.sort();
 
-            for epoch_dir in fs::read_dir(crate_dir.path())? {
-                // Look at each epoch of the crate we have checked in.
-                let epoch_dir: fs::DirEntry = epoch_dir?;
-                if !epoch_dir.file_type()?.is_dir() {
-                    continue;
-                }
+            all_crate_files.insert(crate_id.clone(), files);
 
-                // Skip it if it's not a valid epoch.
-                if epoch_dir.file_name().to_str().and_then(|s| Epoch::from_str(s).ok()).is_none() {
-                    continue;
-                }
-
-                let crate_path = epoch_dir.path().join("crate");
-
-                let Some(crate_id) = get_vendored_crate_id(&crate_path)? else {
-                    warn!(
-                        "directory name parsed as valid epoch but contained no Cargo.toml: {}",
-                        crate_path.to_string_lossy()
-                    );
-                    continue;
-                };
-
-                let mut files = CrateFiles::new();
-                recurse_crate_files(&crate_path, &mut |filepath| {
-                    collect_crate_file(&mut files, CollectCrateFiles::Internal, filepath)
-                })?;
-                files.sort();
-
-                all_crate_files.insert(crate_id.clone(), files);
-
-                crate_versions.entry(crate_id.name).or_default().push(crate_id.version);
-            }
+            crate_versions.entry(crate_id.name).or_default().push(crate_id.version);
         }
 
         Ok(ThirdPartySource { crate_versions, crate_files: all_crate_files })
@@ -411,7 +389,12 @@
                     name = c.name,
                     epoch = Epoch::from_version(&c.version)
                 ),
-                path: Self::crate_path(c),
+                path: Path::new(&format!(
+                    "chromium_crates_io/vendor/{name}-{version}",
+                    name = c.name,
+                    version = c.version
+                ))
+                .to_owned(),
             })
             .collect();
         // Give patches a stable ordering, instead of the arbitrary HashMap
diff --git a/tools/crates/gnrt/lib/gn.rs b/tools/crates/gnrt/lib/gn.rs
index 7bc80245f..b103476 100644
--- a/tools/crates/gnrt/lib/gn.rs
+++ b/tools/crates/gnrt/lib/gn.rs
@@ -308,9 +308,7 @@
         paths.third_party.join(ThirdPartySource::build_path(&crate_id));
     let crate_abs_path = paths.root.join(&crate_path_from_chromium_src);
 
-    let to_gn_path = |abs_path: &Path| {
-        abs_path.strip_prefix(&crate_abs_path).unwrap().to_string_lossy().into_owned()
-    };
+    let to_gn_path = |abs_path: &Path| format!("//{}", paths.to_gn_abs_path(abs_path).unwrap());
 
     let cargo_pkg_description = dep.description.as_ref().map(|s| s.trim_end().to_string());
     let cargo_pkg_authors =
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index bdc4e76c..cbaa8a7 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -6656,6 +6656,7 @@
   <int value="307"
       label="MSDH_EXCLUDE_MONITORS_BUT_PREFERRED_MONITOR_REQUESTED"/>
   <int value="308" label="PSI_REGISTER_PERMISSION_ELEMENT_WITHOUT_FEATURE"/>
+  <int value="309" label="RFH_RECEIVED_INVALID_AD_AUCTION_HEADERS_ATTRIBUTE"/>
 </enum>
 
 <enum name="BadMessageReasonExtensions">
@@ -21892,6 +21893,7 @@
   <int value="1840" label="AUTOFILLPRIVATE_BULKDELETEALLCVCS"/>
   <int value="1841" label="PDFVIEWERPRIVATE_GETSTREAMINFO"/>
   <int value="1842" label="PDFVIEWERPRIVATE_SETPDFPLUGINATTRIBUTES"/>
+  <int value="1843" label="ACCESSIBILITY_PRIVATE_SETCURSORPOSITION"/>
 </enum>
 
 <enum name="ExtensionInProgressRequestState">
@@ -24677,7 +24679,7 @@
   <int value="1964" label="GamepadAxes"/>
   <int value="1965" label="GamepadButtons"/>
   <int value="1966" label="VibrateWithoutUserGesture"/>
-  <int value="1967" label="DispatchMouseEventOnDisabledFormControl"/>
+  <int value="1967" label="OBSOLETE_DispatchMouseEventOnDisabledFormControl"/>
   <int value="1968" label="ElementNameDOMInvalidHTMLParserValid"/>
   <int value="1969" label="ElementNameDOMValidHTMLParserInvalid"/>
   <int value="1970" label="GATTServerDisconnectedEvent"/>
@@ -27629,6 +27631,7 @@
   <int value="4736" label="ThirdPartyCookieDeprecation_AllowByStorageAccess"/>
   <int value="4737"
       label="ThirdPartyCookieDeprecation_AllowByTopLevelStorageAccess"/>
+  <int value="4738" label="IframeAdAuctionHeadersAttribute"/>
 </enum>
 
 <enum name="FeaturePolicyFeature">
@@ -37309,6 +37312,7 @@
   <int value="-1371239786" label="EnablePasswordsAccountStorage:enabled"/>
   <int value="-1370883795" label="TerminalTmuxIntegration:disabled"/>
   <int value="-1370532920" label="AppServiceAsh:enabled"/>
+  <int value="-1369939420" label="BoardingPassDetector:disabled"/>
   <int value="-1369613781" label="FileHandlingIcons:disabled"/>
   <int value="-1369413945" label="PwaUpdateDialogForIcon:enabled"/>
   <int value="-1369089674" label="ArcTouchModeMouse:enabled"/>
@@ -43412,6 +43416,7 @@
   <int value="1577651674" label="SafetyHub:enabled"/>
   <int value="1579084737" label="TemporaryUnexpireFlagsM80:disabled"/>
   <int value="1579461102" label="MemoryCoordinator:disabled"/>
+  <int value="1579627455" label="BoardingPassDetector:enabled"/>
   <int value="1580340993" label="EnableTabMuting:enabled"/>
   <int value="1580365114" label="ThirdPartyProfileManagement:disabled"/>
   <int value="1581002467" label="enable-explicit-dma-fences"/>
diff --git a/tools/metrics/histograms/metadata/accessibility/histograms.xml b/tools/metrics/histograms/metadata/accessibility/histograms.xml
index 8e56c5f..ac96150 100644
--- a/tools/metrics/histograms/metadata/accessibility/histograms.xml
+++ b/tools/metrics/histograms/metadata/accessibility/histograms.xml
@@ -605,6 +605,18 @@
   </summary>
 </histogram>
 
+<histogram name="Accessibility.AXTreeSnapshotter.Snapshot.EndToEndRuntime"
+    units="ms" expires_after="2024-09-30">
+  <owner>mschillaci@google.com</owner>
+  <owner>chrome-a11y-core@google.com</owner>
+  <summary>
+    Tracks the total end-to-end runtime of the AXTreeSnapshotter flow from
+    initial Java request to a fully populated Java-side tree. This is recorded
+    during the snapshot callback after the root node's asyncCommit call. It is
+    currently recorded only during the snapshot stress test experiments.
+  </summary>
+</histogram>
+
 <histogram name="Accessibility.AXTreeSnapshotter.Snapshot.Error"
     enum="AXTreeSnapshotErrorReason" expires_after="2024-09-30">
   <owner>mschillaci@google.com</owner>
@@ -618,6 +630,26 @@
   </summary>
 </histogram>
 
+<histogram name="Accessibility.AXTreeSnapshotter.Snapshot.NoRestrictions.Nodes"
+    units="count" expires_after="2024-09-30">
+  <owner>mschillaci@google.com</owner>
+  <owner>chrome-a11y-core@google.com</owner>
+  <summary>
+    Tracks the total number of nodes that are serialized in a AXTreeSnapshotter
+    call that does not have a max node limit.
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.AXTreeSnapshotter.Snapshot.NoRestrictions.Time"
+    units="ms" expires_after="2024-09-30">
+  <owner>mschillaci@google.com</owner>
+  <owner>chrome-a11y-core@google.com</owner>
+  <summary>
+    Tracks the total serialization runtime of a AXTreeSnapshotter call that does
+    not have a timeout limit.
+  </summary>
+</histogram>
+
 <histogram name="Accessibility.AXTreeSnapshotter.Snapshot.Request"
     enum="BooleanSent" expires_after="2024-09-30">
   <owner>mschillaci@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml
index ccd26f5..93744b7d 100644
--- a/tools/metrics/histograms/metadata/android/histograms.xml
+++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -252,7 +252,7 @@
 </histogram>
 
 <histogram name="Android.AdaptiveToolbarButton.Settings.Changed"
-    enum="AdaptiveToolbarRadioButtonState" expires_after="2023-11-12">
+    enum="AdaptiveToolbarRadioButtonState" expires_after="2024-03-17">
   <owner>shaktisahu@chromium.org</owner>
   <owner>chrome-segmentation-platform@google.com</owner>
   <summary>
@@ -274,7 +274,7 @@
 </histogram>
 
 <histogram name="Android.AdaptiveToolbarButton.SettingsToggle.Changed"
-    enum="BooleanEnabled" expires_after="2023-09-24">
+    enum="BooleanEnabled" expires_after="2024-03-17">
   <owner>shaktisahu@chromium.org</owner>
   <owner>chrome-segmentation-platform@google.com</owner>
   <summary>
@@ -285,7 +285,7 @@
 </histogram>
 
 <histogram name="Android.AdaptiveToolbarButton.SettingsToggle.Startup"
-    enum="BooleanEnabled" expires_after="2023-09-03">
+    enum="BooleanEnabled" expires_after="2024-03-17">
   <owner>shaktisahu@chromium.org</owner>
   <owner>chrome-segmentation-platform@google.com</owner>
   <summary>
@@ -3382,7 +3382,7 @@
   </summary>
 </histogram>
 
-<histogram name="Android.RestoreTabsOnFRE.ResultActionFirstShow"
+<histogram name="Android.RestoreTabsOnFRE.ResultActionFirstShow2"
     enum="RestoreTabsOnFREResultAction" expires_after="2024-03-31">
   <owner>ckitagawa@chromium.org</owner>
   <owner>bjfong@google.com</owner>
@@ -3393,7 +3393,7 @@
   </summary>
 </histogram>
 
-<histogram name="Android.RestoreTabsOnFRE.ResultActionSecondShow"
+<histogram name="Android.RestoreTabsOnFRE.ResultActionSecondShow2"
     enum="RestoreTabsOnFREResultAction" expires_after="2024-03-31">
   <owner>ckitagawa@chromium.org</owner>
   <owner>bjfong@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml
index 0fa3d987..ae009b3 100644
--- a/tools/metrics/histograms/metadata/autofill/histograms.xml
+++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -2095,11 +2095,15 @@
     Counts whether users accepted any autofill suggestion that was shown to them
     for a given form.
 
-    This metric is only recorded if a suggestion for the given form type (see
-    histogram name) was shown at least once. This is recorded once per form. If
-    the user accepts one suggestion, this is reported as &quot;User chose to
-    fill&quot; once. It does not matter if the user clears the filled values nor
-    if the user accepts a different suggestion later. {AutofillFormType}
+    This metric is only recorded if a suggestion for the {AutofillFormType} was
+    shown, accepted, and the suggestion was filled successfully. This is
+    recorded once per form. It is reported as &quot;User chose to fill&quot;
+    once. It does not matter if the user clears the filled values nor if the
+    user accepts a different suggestion later.
+
+    If the accepted suggestion is not filled (e.g., if it required
+    authentication and the user cancelled or failed that step), then this metric
+    is not recorded.
   </summary>
   <token key="AutofillFormType" variants="AutofillFormType"/>
 </histogram>
diff --git a/tools/metrics/histograms/metadata/compose/enums.xml b/tools/metrics/histograms/metadata/compose/enums.xml
index 8a8a10a..812d469 100644
--- a/tools/metrics/histograms/metadata/compose/enums.xml
+++ b/tools/metrics/histograms/metadata/compose/enums.xml
@@ -57,7 +57,9 @@
   <int value="4" label="Blocked for user not signed in"/>
   <int value="5" label="Blocked for user language not supported"/>
   <int value="6"
-      label="Blocked for form element appearing in cross-origin subframe."/>
+      label="Blocked for form element appearing in cross-origin subframe"/>
+  <int value="7"
+      label="Blocked by Optimization Guide Result for main frame URL"/>
 </enum>
 
 </enums>
diff --git a/tools/metrics/histograms/metadata/compose/histograms.xml b/tools/metrics/histograms/metadata/compose/histograms.xml
index 35a0507..1e06235 100644
--- a/tools/metrics/histograms/metadata/compose/histograms.xml
+++ b/tools/metrics/histograms/metadata/compose/histograms.xml
@@ -55,6 +55,16 @@
   </summary>
 </histogram>
 
+<histogram name="Compose.Dialog.SelectionLength" units="chars"
+    expires_after="2024-03-31">
+  <owner>perrier@chromium.org</owner>
+  <owner>chrome-compose-frontend@google.com</owner>
+  <summary>
+    The length, in unicode code points (roughly characters), of the selection
+    when a new Compose session is started. Recorded once per session start.
+  </summary>
+</histogram>
+
 <histogram name="Compose.Response.Duration.Error" units="ms"
     expires_after="2024-03-31">
   <owner>perrier@chromium.org</owner>
diff --git a/ui/accessibility/BUILD.gn b/ui/accessibility/BUILD.gn
index d56fd64..e7b9f387 100644
--- a/ui/accessibility/BUILD.gn
+++ b/ui/accessibility/BUILD.gn
@@ -114,6 +114,12 @@
   if (is_chromeos_ash) {
     deps += [ "//ash/constants" ]
   }
+
+  if (is_android) {
+    sources += [ "android/accessibility_features_map.cc" ]
+
+    deps += [ ":ax_base_jni_headers" ]
+  }
 }
 
 #if (is_win) {
@@ -454,6 +460,11 @@
     srcjar_deps = [ ":java_features_srcjar" ]
   }
 
+  generate_jni("ax_base_jni_headers") {
+    sources = [ "android/java/src/org/chromium/ui/accessibility/AccessibilityFeaturesMap.java" ]
+    deps = [ "//third_party/jni_zero:jni_zero_java" ]
+  }
+
   generate_jni("ax_jni_headers") {
     sources = [
       "android/java/src/org/chromium/ui/accessibility/AccessibilityState.java",
@@ -476,6 +487,16 @@
     ]
   }
 
+  android_library("accessibility_features_native_map_java") {
+    srcjar_deps = [ ":ax_base_jni_headers" ]
+
+    sources = [ "android/java/src/org/chromium/ui/accessibility/AccessibilityFeaturesMap.java" ]
+    deps = [
+      "//base:base_java",
+      "//third_party/jni_zero:jni_zero_java",
+    ]
+  }
+
   android_library("ax_base_java") {
     srcjar_deps = [ ":ax_jni_headers" ]
     sources = [
diff --git a/ui/accessibility/android/accessibility_features_map.cc b/ui/accessibility/android/accessibility_features_map.cc
new file mode 100644
index 0000000..fb6d2b77
--- /dev/null
+++ b/ui/accessibility/android/accessibility_features_map.cc
@@ -0,0 +1,32 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/android/feature_map.h"
+#include "base/no_destructor.h"
+#include "ui/accessibility/accessibility_features.h"
+#include "ui/accessibility/ax_base_jni_headers/AccessibilityFeaturesMap_jni.h"
+
+namespace ui {
+
+namespace {
+
+// Array of features exposed through the Java AccessibilityFeaturesMap API.
+const base::Feature* const kFeaturesExposedToJava[] = {
+    &features::kAccessibilitySnapshotStressTests,
+};
+
+// static
+base::android::FeatureMap* GetFeatureMap() {
+  static base::NoDestructor<base::android::FeatureMap> kFeatureMap(std::vector(
+      std::begin(kFeaturesExposedToJava), std::end(kFeaturesExposedToJava)));
+  return kFeatureMap.get();
+}
+
+}  // namespace
+
+static jlong JNI_AccessibilityFeaturesMap_GetNativeMap(JNIEnv* env) {
+  return reinterpret_cast<jlong>(GetFeatureMap());
+}
+
+}  // namespace ui
diff --git a/ui/accessibility/android/java/src/org/chromium/ui/accessibility/AccessibilityFeaturesMap.java b/ui/accessibility/android/java/src/org/chromium/ui/accessibility/AccessibilityFeaturesMap.java
new file mode 100644
index 0000000..26f536d
--- /dev/null
+++ b/ui/accessibility/android/java/src/org/chromium/ui/accessibility/AccessibilityFeaturesMap.java
@@ -0,0 +1,41 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.ui.accessibility;
+
+import org.jni_zero.JNINamespace;
+import org.jni_zero.NativeMethods;
+
+import org.chromium.base.FeatureMap;
+
+/** Java accessor for ui/accessibility/accessibility_features.cc state */
+@JNINamespace("ui")
+public class AccessibilityFeaturesMap extends FeatureMap {
+    private static final AccessibilityFeaturesMap sInstance = new AccessibilityFeaturesMap();
+
+    // Do not instantiate this class
+    private AccessibilityFeaturesMap() {}
+
+    /**
+     * @return the singleton AccessibilityFeaturesMap.
+     */
+    public static AccessibilityFeaturesMap getInstance() {
+        return sInstance;
+    }
+
+    /** Convenience method to call {@link #isEnabledInNative(String)} statically. */
+    public static boolean isEnabled(String featureName) {
+        return getInstance().isEnabledInNative(featureName);
+    }
+
+    @Override
+    protected long getNativeMap() {
+        return AccessibilityFeaturesMapJni.get().getNativeMap();
+    }
+
+    @NativeMethods
+    public interface Natives {
+        long getNativeMap();
+    }
+}
diff --git a/ui/accessibility/ax_position.h b/ui/accessibility/ax_position.h
index c627f14..a5543b7 100644
--- a/ui/accessibility/ax_position.h
+++ b/ui/accessibility/ax_position.h
@@ -2823,6 +2823,8 @@
   bool AllowsCharacterStopsOnGeneratedNewline() const {
     return g_ax_embedded_object_behavior ==
                AXEmbeddedObjectBehavior::kExposeCharacterForHypertext ||
+           g_ax_embedded_object_behavior ==
+               AXEmbeddedObjectBehavior::kUIAExposeCharacterForTextContent ||
            !IsInUnignoredEmptyObject();
   }
 
@@ -2905,8 +2907,9 @@
       return Clone();
 
     AXPositionInstance leaf_text_position = AsLeafTextPosition();
-    if (leaf_text_position->IsFollowedByGeneratedNewline())
+    if (leaf_text_position->IsFollowedByGeneratedNewline()) {
       return leaf_text_position;
+    }
 
     AXPositionInstance text_position = AsTextPosition();
 
@@ -3038,8 +3041,9 @@
       return text_position;
     }
 
-    if (text_position->IsFollowedByGeneratedNewline())
+    if (text_position->IsFollowedByGeneratedNewline()) {
       return CreateNextPositionAtAnchorWithText();
+    }
 
     // Calling "AsLeafTextPositionBeforeCharacter" should have created a text
     // position that is either at a grapheme boundary, or a null position. If
@@ -4249,6 +4253,18 @@
     return GetAnchor() && !GetAnchor()->IsIgnored() && IsInEmptyObject();
   }
 
+  // Returns whether the position is anchored in an unignored and empty object,
+  // has an author specified name that is not empty, and it is not anchored in
+  // an image. This is because in UIA we want to expose embedded object
+  // characters for image elements, even if they have an author specified name.
+  // Only used for UIA.
+  bool EmptyObjectShouldProvideNameFromAttribute() const {
+    DCHECK(IsInUnignoredEmptyObject());
+    return GetAnchor()->GetNameFrom() == ax::mojom::NameFrom::kAttribute &&
+           !IsImage(GetAnchor()->GetRole()) &&
+           !GetAnchor()->GetNameUTF16().empty();
+  }
+
   AXNode* GetEmptyObjectAncestorNode() const {
     if (!GetAnchor())
       return nullptr;
@@ -4303,7 +4319,7 @@
   // text representation. Some platforms use an embedded object replacement
   // character that replaces the text coming from most child nodes and empty
   // objects.
-  const std::u16string& GetText(
+  const std::u16string GetText(
       const AXEmbeddedObjectBehavior embedded_object_behavior =
           g_ax_embedded_object_behavior) const {
     // Note that the use of `base::EmptyString16()` is a special case here. For
@@ -4335,7 +4351,29 @@
         // text navigation purposes. I.e. when AT's need to navigate around
         // nodes and elements which are empty and should then be exposed as
         // embedded object characters.
+        //
+        // According to the spec, we should favor author supplied names over
+        // names from content. However, trying to fulfill this in every case
+        // leads to bugs in the UIA implementation in the TextRangeProvider
+        // since we create leaf text positions, which means that they will
+        // always have name from content. As such, for now we are
+        // implementing this special case where we will only return the author
+        // specified name if NameFrom is kAttribute and the name is not empty.
+        // Even though a case like:
+        // <button aria-label="label">hello</button>
+        // Should have its name exposed as "label" according to the spec
+        // but we will expose "hello" instead.
+        // Exposing the aria label here would make us expose text that isn't on
+        // a leaf position, and throughout our UIA implementation, we always
+        // assume and expect to be on leaf positions. Exposing the label
+        // when it has text from content would effectively hide the subtree
+        // from UIA ATs
+        // https://www.w3.org/TR/accname-1.1/#mapping_additional_nd_te
+
         if (IsInUnignoredEmptyObject()) {
+          if (EmptyObjectShouldProvideNameFromAttribute()) {
+            return GetAnchor()->GetNameUTF16();
+          }
           return *embedded_character_str;
         }
         // However, for UIA, we don't want to expose the Hypertext like the
@@ -4440,7 +4478,18 @@
         // embedded object characters, and as such we need to return the length
         // of the embedded object character when calculating the `MaxTextOffset`
         // for these nodes.
+        //
+        // According to the spec, we should favor author supplied names over
+        // names from content. However, trying to fulfill this in every case
+        // leads to bugs in the UIA implementation in the TextRangeProvider
+        // since we create leaf text positions, which means that they will
+        // always have name from content. As such, for now we are
+        // implementing this special case where we will only return the author
+        // specified name if NameFrom is kAttribute and the name is not empty.
         if (IsInUnignoredEmptyObject()) {
+          if (EmptyObjectShouldProvideNameFromAttribute()) {
+            return (int)GetAnchor()->GetNameUTF16().length();
+          }
           return AXNode::kEmbeddedObjectCharacterLengthUTF16;
         }
         // However, for UIA, we don't want to expose the Hypertext like the
@@ -4767,9 +4816,16 @@
     // control has no text, no word start offsets are present in the
     // `ax::mojom::IntListAttribute::kWordStarts` attribute, so we need to
     // special case them here.
-    if (g_ax_embedded_object_behavior ==
-            AXEmbeddedObjectBehavior::kExposeCharacterForHypertext &&
-        IsInUnignoredEmptyObject()) {
+    //
+    // For the kUIAExposeCharacterForHypertext case, we only want to return a
+    // vector with {0} if the empty object does not have an author specified
+    // name that we are exposing.
+    if (IsInUnignoredEmptyObject() &&
+        (g_ax_embedded_object_behavior ==
+             AXEmbeddedObjectBehavior::kExposeCharacterForHypertext ||
+         (g_ax_embedded_object_behavior ==
+              AXEmbeddedObjectBehavior::kUIAExposeCharacterForTextContent &&
+          !EmptyObjectShouldProvideNameFromAttribute()))) {
       // Using braces ensures that the vector will contain the given value, and
       // not create a vector of size 0.
       static const base::NoDestructor<std::vector<int32_t>>
@@ -4799,9 +4855,12 @@
     // is positioned at 1. Because we want to treat embedded object replacement
     // characters as ordinary characters, it wouldn't be consistent to assume
     // they have no length and return 0 instead of 1.
-    if (g_ax_embedded_object_behavior ==
-            AXEmbeddedObjectBehavior::kExposeCharacterForHypertext &&
-        IsInUnignoredEmptyObject()) {
+    if (IsInUnignoredEmptyObject() &&
+        (g_ax_embedded_object_behavior ==
+             AXEmbeddedObjectBehavior::kExposeCharacterForHypertext ||
+         (g_ax_embedded_object_behavior ==
+              AXEmbeddedObjectBehavior::kUIAExposeCharacterForTextContent &&
+          !EmptyObjectShouldProvideNameFromAttribute()))) {
       // Using braces ensures that the vector will contain the given value, and
       // not create a vector of size 1.
       static const base::NoDestructor<std::vector<int32_t>> embedded_word_ends{
diff --git a/ui/accessibility/ax_role_properties.cc b/ui/accessibility/ax_role_properties.cc
index 9672324c..f27fdb81 100644
--- a/ui/accessibility/ax_role_properties.cc
+++ b/ui/accessibility/ax_role_properties.cc
@@ -57,8 +57,8 @@
 
 bool IsAlert(const ax::mojom::Role role) {
   switch (role) {
-    case ax::mojom::Role::kAlert:
-    case ax::mojom::Role::kAlertDialog:
+    case ax::mojom::Role::kAlert:        // For simple or hidden alerts.
+    case ax::mojom::Role::kAlertDialog:  // For alerts that must be dismissed.
       return true;
     default:
       return false;
diff --git a/ui/accessibility/platform/ax_platform_node_auralinux.cc b/ui/accessibility/platform/ax_platform_node_auralinux.cc
index f0d0d55b..5b75b39 100644
--- a/ui/accessibility/platform/ax_platform_node_auralinux.cc
+++ b/ui/accessibility/platform/ax_platform_node_auralinux.cc
@@ -4013,7 +4013,6 @@
 }
 
 void AXPlatformNodeAuraLinux::OnAlertShown() {
-  DCHECK(ui::IsAlert(GetRole()));
   atk_object_notify_state_change(ATK_OBJECT(GetOrCreateAtkObject()),
                                  ATK_STATE_SHOWING, TRUE);
 }
diff --git a/ui/accessibility/platform/ax_platform_node_base.cc b/ui/accessibility/platform/ax_platform_node_base.cc
index 907f185..cd38e48 100644
--- a/ui/accessibility/platform/ax_platform_node_base.cc
+++ b/ui/accessibility/platform/ax_platform_node_base.cc
@@ -459,6 +459,13 @@
 }
 
 void AXPlatformNodeBase::NotifyAccessibilityEvent(ax::mojom::Event event_type) {
+  if (event_type == ax::mojom::Event::kAlert) {
+    CHECK(ui::IsAlert(GetRole()))
+        << "On some platforms, the alert event does not work correctly unless "
+           "it is fired on an object with an alert role. Role was "
+        << GetRole();
+  }
+
   OnNotifyEventCallbackMap& callback_map = GetOnNotifyEventCallbackMap();
   if (callback_map.find(event_type) != callback_map.end() &&
       callback_map[event_type]) {
diff --git a/ui/accessibility/platform/ax_platform_node_textchildprovider_win_unittest.cc b/ui/accessibility/platform/ax_platform_node_textchildprovider_win_unittest.cc
index 1f73988..7a86f55 100644
--- a/ui/accessibility/platform/ax_platform_node_textchildprovider_win_unittest.cc
+++ b/ui/accessibility/platform/ax_platform_node_textchildprovider_win_unittest.cc
@@ -9,6 +9,7 @@
 #include "ui/accessibility/platform/ax_platform_node_textchildprovider_win.h"
 #include "ui/accessibility/platform/ax_platform_node_textprovider_win.h"
 #include "ui/accessibility/platform/ax_platform_node_textrangeprovider_win.h"
+#include "ui/accessibility/test_ax_tree_update.h"
 
 using Microsoft::WRL::ComPtr;
 
@@ -30,52 +31,26 @@
   // character to allow the text pattern navigation to work with them too.
   // Because of that, a nontext leaf element is treated as a text element.
   void SetUp() override {
-    ui::AXNodeData root;
-    root.id = 1;
-    root.role = ax::mojom::Role::kRootWebArea;
+    TestAXTreeUpdate update(std::string(R"HTML(
+      ++1 kRootWebArea
+      ++++2 kGroup
+      ++++++3 kGroup
+      ++++++4 kStaticText
+      ++++++5 kButton
+      ++++6 kStaticText
+      ++++++7 kInlineTextBox
+    )HTML"));
 
-    ui::AXNodeData nontext_child_of_root;
-    nontext_child_of_root.id = 2;
-    nontext_child_of_root.role = ax::mojom::Role::kGroup;
-    nontext_child_of_root.SetName("non text child of root.");
-    root.child_ids.push_back(nontext_child_of_root.id);
-
-    ui::AXNodeData text_child_of_root;
-    text_child_of_root.id = 3;
-    text_child_of_root.role = ax::mojom::Role::kStaticText;
-    text_child_of_root.SetName("text child of root.");
-    root.child_ids.push_back(text_child_of_root.id);
-
-    ui::AXNodeData nontext_child_of_nontext;
-    nontext_child_of_nontext.id = 4;
-    nontext_child_of_nontext.role = ax::mojom::Role::kGroup;
-    nontext_child_of_nontext.SetName("nontext child of nontext.");
-    nontext_child_of_root.child_ids.push_back(nontext_child_of_nontext.id);
-
-    ui::AXNodeData text_child_of_nontext;
-    text_child_of_nontext.id = 5;
-    text_child_of_nontext.role = ax::mojom::Role::kStaticText;
-    text_child_of_nontext.SetName("text child of nontext.");
-    nontext_child_of_root.child_ids.push_back(text_child_of_nontext.id);
-
-    ui::AXNodeData text_child_of_text;
-    text_child_of_text.id = 6;
-    text_child_of_text.role = ax::mojom::Role::kInlineTextBox;
-    text_child_of_text.SetName("text child of text.");
-    text_child_of_root.child_ids.push_back(text_child_of_text.id);
-
-    ui::AXTreeUpdate update;
-    ui::AXTreeData tree_data;
-    tree_data.tree_id = ui::AXTreeID::CreateNewAXTreeID();
-    update.tree_data = tree_data;
-    update.has_tree_data = true;
-    update.root_id = root.id;
-    update.nodes = {root,
-                    nontext_child_of_root,
-                    text_child_of_root,
-                    nontext_child_of_nontext,
-                    text_child_of_nontext,
-                    text_child_of_text};
+    update.nodes[1].SetName("non text child of root.");
+    update.nodes[1].SetNameFrom(ax::mojom::NameFrom::kAttribute);
+    update.nodes[2].SetName("non text child of nontext.");
+    update.nodes[2].SetNameFrom(ax::mojom::NameFrom::kAttribute);
+    update.nodes[3].SetName("text child of nontext.");
+    update.nodes[3].SetNameFrom(ax::mojom::NameFrom::kContents);
+    update.nodes[5].SetName("text child of root.");
+    update.nodes[5].SetNameFrom(ax::mojom::NameFrom::kContents);
+    update.nodes[6].SetName("text child of text.");
+    update.nodes[6].SetNameFrom(ax::mojom::NameFrom::kContents);
 
     Init(update);
 
@@ -289,7 +264,8 @@
   EXPECT_HRESULT_SUCCEEDED(
       text_range_provider->GetText(-1, text_content.Receive()));
   EXPECT_EQ(base::WideToUTF16(text_content.Get()),
-            kEmbeddedCharacterAsString + u"\ntext child of nontext.");
+            u"non text child of nontext.\ntext child of nontext.\n" +
+                kEmbeddedCharacterAsString);
 
   ComPtr<IRawElementProviderSimple> enclosing_element;
   text_range_provider->GetEnclosingElement(&enclosing_element);
@@ -334,7 +310,8 @@
   base::win::ScopedBstr text_content;
   EXPECT_HRESULT_SUCCEEDED(
       text_range_provider->GetText(-1, text_content.Receive()));
-  EXPECT_EQ(base::WideToUTF16(text_content.Get()), kEmbeddedCharacterAsString);
+  EXPECT_EQ(base::WideToUTF16(text_content.Get()),
+            u"non text child of nontext.");
 
   ComPtr<IRawElementProviderSimple> enclosing_element;
   text_range_provider->GetEnclosingElement(&enclosing_element);
diff --git a/ui/accessibility/platform/ax_platform_node_textprovider_win.cc b/ui/accessibility/platform/ax_platform_node_textprovider_win.cc
index 7672b06f..ae54449 100644
--- a/ui/accessibility/platform/ax_platform_node_textprovider_win.cc
+++ b/ui/accessibility/platform/ax_platform_node_textprovider_win.cc
@@ -264,6 +264,8 @@
 
 HRESULT AXPlatformNodeTextProviderWin::get_DocumentRange(
     ITextRangeProvider** range) {
+  ScopedAXEmbeddedObjectBehaviorSetter ax_embedded_object_behavior(
+      AXEmbeddedObjectBehavior::kUIAExposeCharacterForTextContent);
   WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TEXT_GET_DOCUMENTRANGE);
   UIA_VALIDATE_TEXTPROVIDER_CALL();
 
@@ -312,6 +314,8 @@
   DCHECK(descendant);
   DCHECK(descendant->GetDelegate());
   DCHECK(ancestor->IsDescendant(descendant));
+  ScopedAXEmbeddedObjectBehaviorSetter ax_embedded_object_behavior(
+      AXEmbeddedObjectBehavior::kUIAExposeCharacterForTextContent);
 
   // Start and end should be leaf text positions that span the beginning and end
   // of text content within a node. The start position should be the directly
diff --git a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc
index 8dea0384..24dd642 100644
--- a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc
+++ b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc
@@ -841,6 +841,8 @@
     TextUnit unit,
     int count,
     int* units_moved) {
+  ScopedAXEmbeddedObjectBehaviorSetter ax_embedded_object_behavior(
+      AXEmbeddedObjectBehavior::kUIAExposeCharacterForTextContent);
   UIA_VALIDATE_TEXTRANGEPROVIDER_CALL_1_OUT(units_moved);
 
   // Per MSDN, MoveEndpointByUnit with zero count has no effect.
diff --git a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc
index a9c2dd3..bbde8ae 100644
--- a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc
+++ b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc
@@ -3179,6 +3179,43 @@
   EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"some text");
 }
 
+TEST_F(AXPlatformNodeTextRangeProviderTest, TestMoveByCharacterEmptyTextfield) {
+  TestAXTreeUpdate update(std::string(R"HTML(
+    ++1 kRootWebArea
+    ++++2 kStaticText name="hello"
+    ++++3 kTextField state=kEditable
+    ++++++4 kStaticText name="" state=kEditable
+    ++++5 kStaticText name="world" state=kEditable
+  )HTML"));
+
+  update.nodes[2].SetNameExplicitlyEmpty();
+
+  Init(update);
+
+  // Set up variables from the tree for testing.
+  AXNode* root_node = GetRoot();
+
+  ComPtr<ITextRangeProvider> text_range_provider;
+  GetTextRangeProviderFromTextNode(text_range_provider, root_node);
+
+  EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"hello\n\xFFFc\nworld");
+
+  int count;
+  // Tests for TextUnit_Character.
+  ASSERT_HRESULT_SUCCEEDED(text_range_provider->MoveEndpointByUnit(
+      TextPatternRangeEndpoint_Start, TextUnit_Character, /*count*/ 7, &count));
+  ASSERT_EQ(7, count);
+  // Note that by design, empty objects such as empty text fields, are placed in
+  // their own paragraph for easier screen reader navigation.
+  EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"\nworld");
+
+  ASSERT_HRESULT_SUCCEEDED(text_range_provider->MoveEndpointByUnit(
+      TextPatternRangeEndpoint_Start, TextUnit_Character, /*count*/ -7,
+      &count));
+  ASSERT_EQ(-7, count);
+  EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"hello\n\xFFFc\nworld");
+}
+
 TEST_F(AXPlatformNodeTextRangeProviderTest,
        TestITextRangeProviderMoveEndpointByFormat) {
   Init(BuildAXTreeForMoveByFormat());
diff --git a/ui/android/java/src/org/chromium/ui/display/DisplayUtil.java b/ui/android/java/src/org/chromium/ui/display/DisplayUtil.java
index 85b230b..f38834e 100644
--- a/ui/android/java/src/org/chromium/ui/display/DisplayUtil.java
+++ b/ui/android/java/src/org/chromium/ui/display/DisplayUtil.java
@@ -39,37 +39,33 @@
 
     /**
      * Retrieves the UI scaling factor on automotive devices.
+     * TODO: Remove this method and replace usages with getUiDensityForAutomotive.
      */
+    @Deprecated
     public static float getUiScalingFactorForAutomotive() {
         return sUiScalingFactorForAutomotive;
     }
 
-    static int getUiDensityForAutomotive(int baseDensity) {
+    public static int getUiDensityForAutomotive(int baseDensity) {
         int rawScaledDensity = (int) (baseDensity * sUiScalingFactorForAutomotive);
         // Round up to the nearest 20 to align with DisplayMetrics defined densities.
         return ((int) Math.ceil(rawScaledDensity / 20.0f)) * 20;
     }
 
-    /**
-     * @return The smaller of getDisplayWidth(), getDisplayHeight().
-     */
+    /** Returns the smaller of getDisplayWidth(), getDisplayHeight(). */
     public static int getSmallestWidth(DisplayAndroid display) {
         int width = display.getDisplayWidth();
         int height = display.getDisplayHeight();
         return width < height ? width : height;
     }
 
-    /**
-     * @return The given value converted from px to dp.
-     */
+    /** Returns the given value converted from px to dp. */
     public static int pxToDp(DisplayAndroid display, int value) {
         // Adding .5 is what Android does when doing this conversion.
         return (int) (value / display.getDipScale() + 0.5f);
     }
 
-    /**
-     * @return The given value converted from dp to px.
-     */
+    /** Returns the given value converted from dp to px. */
     public static int dpToPx(DisplayAndroid display, int value) {
         // Adding .5 is what Android does when doing this conversion.
         return (int) (value * display.getDipScale() + 0.5f);
diff --git a/ui/android/junit/src/org/chromium/ui/display/DisplayUtilTest.java b/ui/android/junit/src/org/chromium/ui/display/DisplayUtilTest.java
index e151df2..b1096517 100644
--- a/ui/android/junit/src/org/chromium/ui/display/DisplayUtilTest.java
+++ b/ui/android/junit/src/org/chromium/ui/display/DisplayUtilTest.java
@@ -15,6 +15,7 @@
 /** Tests logic in the {@link DisplayUtil} class. */
 @RunWith(BaseRobolectricTestRunner.class)
 public class DisplayUtilTest {
+
     @Test
     public void testGetUiDensityForAutomotive() {
         assertEquals(
diff --git a/ui/color/color_id.h b/ui/color/color_id.h
index 59a11d1..9b1d812 100644
--- a/ui/color/color_id.h
+++ b/ui/color/color_id.h
@@ -355,6 +355,7 @@
   E_CPONLY(kColorLiveCaptionBubbleForegroundSecondary) \
   E_CPONLY(kColorLiveCaptionBubbleCheckbox) \
   E_CPONLY(kColorLiveCaptionBubbleLink) \
+  E_CPONLY(kColorLoadingGradientBorder) \
   E_CPONLY(kColorLoadingGradientEnd) \
   E_CPONLY(kColorLoadingGradientMiddle) \
   E_CPONLY(kColorLoadingGradientStart) \
@@ -450,8 +451,6 @@
   E_CPONLY(kColorTableHeaderSeparator) \
   E_CPONLY(kColorSuggestionChipBorder) \
   E_CPONLY(kColorSuggestionChipIcon) \
-  E_CPONLY(kColorTabOrganizationGradient1) \
-  E_CPONLY(kColorTabOrganizationGradient2) \
   E_CPONLY(kColorTextfieldBackground) \
   E_CPONLY(kColorTextfieldBackgroundDisabled) \
   E_CPONLY(kColorTextfieldFilledBackground) \
diff --git a/ui/color/material_ui_color_mixer.cc b/ui/color/material_ui_color_mixer.cc
index 90b9910..2dc9faf1 100644
--- a/ui/color/material_ui_color_mixer.cc
+++ b/ui/color/material_ui_color_mixer.cc
@@ -97,6 +97,7 @@
   mixer[kColorListItemFolderIconBackground] = {kColorSysTonalContainer};
   mixer[kColorListItemFolderIconForeground] = {kColorSysOnTonalContainer};
   mixer[kColorListItemUrlFaviconBackground] = {kColorSysNeutralContainer};
+  mixer[kColorLoadingGradientBorder] = {kColorSysTonalContainer};
   mixer[kColorLoadingGradientEnd] = {kColorSysGradientTertiary};
   mixer[kColorLoadingGradientMiddle] = {kColorSysGradientPrimary};
   mixer[kColorLoadingGradientStart] = {SK_ColorTRANSPARENT};
@@ -133,8 +134,6 @@
   mixer[kColorSliderTrackMinimal] = {kColorSysOnSecondary};
   mixer[kColorSuggestionChipBorder] = {kColorSysTonalOutline};
   mixer[kColorSuggestionChipIcon] = {kColorSysPrimary};
-  mixer[kColorTabOrganizationGradient1] = {kColorSysGradientPrimary};
-  mixer[kColorTabOrganizationGradient2] = {kColorSysGradientTertiary};
   // TODO(colehorvitz): Rename textfield color IDs to specify which
   // textfield variation they are used for ('filled' or 'stroked').
   mixer[kColorTextfieldBackground] = {kColorSysSurface};
diff --git a/ui/views/accessibility/ax_virtual_view.cc b/ui/views/accessibility/ax_virtual_view.cc
index fe2870c..493e0d80 100644
--- a/ui/views/accessibility/ax_virtual_view.cc
+++ b/ui/views/accessibility/ax_virtual_view.cc
@@ -16,6 +16,7 @@
 #include "base/ranges/algorithm.h"
 #include "build/build_config.h"
 #include "ui/accessibility/ax_action_data.h"
+#include "ui/accessibility/ax_role_properties.h"
 #include "ui/accessibility/ax_tree_data.h"
 #include "ui/accessibility/platform/ax_platform_node.h"
 #include "ui/base/layout.h"
@@ -205,6 +206,12 @@
 
 void AXVirtualView::NotifyAccessibilityEvent(ax::mojom::Event event_type) {
   DCHECK(ax_platform_node_);
+  if (event_type == ax::mojom::Event::kAlert) {
+    CHECK(ui::IsAlert(GetRole()))
+        << "On some platforms, the alert event does not work correctly unless "
+           "it is fired on an object with an alert role. Role was "
+        << GetRole();
+  }
   if (GetOwnerView()) {
     const ViewAccessibility::AccessibilityEventsCallback& events_callback =
         GetOwnerView()->GetViewAccessibility().accessibility_events_callback();
diff --git a/ui/views/accessibility/view_accessibility.cc b/ui/views/accessibility/view_accessibility.cc
index 3a4fe2a..35cb979 100644
--- a/ui/views/accessibility/view_accessibility.cc
+++ b/ui/views/accessibility/view_accessibility.cc
@@ -563,6 +563,10 @@
 }
 
 void ViewAccessibility::NotifyAccessibilityEvent(ax::mojom::Event event_type) {
+  Widget* const widget = view_->GetWidget();
+  if (!widget || widget->IsClosed()) {
+    return;
+  }
   // Used for unit testing.
   if (accessibility_events_callback_)
     accessibility_events_callback_.Run(nullptr, event_type);
diff --git a/ui/views/accessibility/view_ax_platform_node_delegate.cc b/ui/views/accessibility/view_ax_platform_node_delegate.cc
index 19a06cd5e..1c53a42 100644
--- a/ui/views/accessibility/view_ax_platform_node_delegate.cc
+++ b/ui/views/accessibility/view_ax_platform_node_delegate.cc
@@ -225,6 +225,17 @@
 void ViewAXPlatformNodeDelegate::NotifyAccessibilityEvent(
     ax::mojom::Event event_type) {
   DCHECK(ax_platform_node_);
+  Widget* const widget = view()->GetWidget();
+  if (!widget || widget->IsClosed()) {
+    return;
+  }
+  if (event_type == ax::mojom::Event::kAlert) {
+    // Do not queue alert events for later. They must be dealt with
+    // before the window potentially closes, and they can be fired
+    // out of order relative to other events.
+    ax_platform_node_->NotifyAccessibilityEvent(event_type);
+    return;
+  }
   if (accessibility_events_callback_)
     accessibility_events_callback_.Run(this, event_type);
   if (g_is_queueing_events) {
diff --git a/ui/views/bubble/bubble_dialog_delegate_view.cc b/ui/views/bubble/bubble_dialog_delegate_view.cc
index 5bab323..3ceb355 100644
--- a/ui/views/bubble/bubble_dialog_delegate_view.cc
+++ b/ui/views/bubble/bubble_dialog_delegate_view.cc
@@ -1056,6 +1056,9 @@
   // Log time from bubble dialog delegate creation to bubble becoming
   // visible.
   if (visible) {
+    if (GetWidget()->IsClosed()) {
+      return;
+    }
     if (bubble_created_time_.has_value()) {
       GetWidget()
           ->GetCompositor()
@@ -1089,6 +1092,7 @@
   // the bubble in its entirety rather than just its title and initially focused
   // view.  See http://crbug.com/474622 for details.
   if (visible && ui::IsAlert(GetAccessibleWindowRole())) {
+    GetWidget()->GetRootView()->SetAccessibleRole(GetAccessibleWindowRole());
     GetWidget()->GetRootView()->NotifyAccessibilityEvent(
         ax::mojom::Event::kAlert, true);
   }
diff --git a/ui/views/widget/root_view.cc b/ui/views/widget/root_view.cc
index 9be10b31..2fbecbbf4 100644
--- a/ui/views/widget/root_view.cc
+++ b/ui/views/widget/root_view.cc
@@ -339,6 +339,9 @@
 void RootView::AnnounceTextAs(
     const std::u16string& text,
     ui::AXPlatformNode::AnnouncementType announcement_type) {
+  if (text.empty()) {
+    return;
+  }
 #if BUILDFLAG(IS_MAC)
   gfx::NativeViewAccessible native = GetViewAccessibility().GetNativeObject();
   if (auto* ax_node = ui::AXPlatformNode::FromNativeViewAccessible(native)) {
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc
index e3307ed..8e048fc8b 100644
--- a/ui/views/widget/widget.cc
+++ b/ui/views/widget/widget.cc
@@ -668,6 +668,10 @@
     native_widget_->SetSize(size);
 }
 
+gfx::Size Widget::GetSize() const {
+  return GetRestoredBounds().size();
+}
+
 void Widget::CenterWindow(const gfx::Size& size) {
   if (native_widget_)
     native_widget_->CenterWindow(size);
@@ -2263,6 +2267,7 @@
 ADD_PROPERTY_METADATA(int, Height)
 ADD_PROPERTY_METADATA(bool, Visible)
 ADD_PROPERTY_METADATA(ui::ZOrderLevel, ZOrderLevel)
+ADD_PROPERTY_METADATA(gfx::Size, Size)
 END_METADATA
 
 namespace internal {
diff --git a/ui/views/widget/widget.h b/ui/views/widget/widget.h
index aa10cfe6..7f9dee2 100644
--- a/ui/views/widget/widget.h
+++ b/ui/views/widget/widget.h
@@ -654,6 +654,9 @@
   void SetBounds(const gfx::Rect& bounds);
   void SetSize(const gfx::Size& size);
 
+  // Retrieves the restored size for the window.
+  gfx::Size GetSize() const;
+
   // Sizes the window to the specified size and centers it.
   void CenterWindow(const gfx::Size& size);
 
diff --git a/ui/webui/resources/cr_components/omnibox/realbox_action.html b/ui/webui/resources/cr_components/omnibox/realbox_action.html
index bcfacfb4..e7b1e6e 100644
--- a/ui/webui/resources/cr_components/omnibox/realbox_action.html
+++ b/ui/webui/resources/cr_components/omnibox/realbox_action.html
@@ -11,6 +11,15 @@
     padding-inline-start: 12px;
   }
 
+  /* TODO(niharm): Theme border color to sys tonal-outline. */
+  :host-context([expanded-state-layout-chrome-refresh]) {
+    --action-height: 28px;
+    border: solid 1px #A8C7FA;
+    border-radius: 8px;
+    padding-inline-end: 8px;
+    padding-inline-start: 8px;
+  }
+
   .contents {
     align-items: center;
     display: flex;
@@ -23,6 +32,18 @@
     width: var(--cr-icon-size);
   }
 
+  /* TODO(niharm): Theme background color to sys primary. */
+  :host-context([expanded-state-layout-chrome-refresh]) #action-icon {
+    -webkit-mask-position: center;
+    -webkit-mask-repeat: no-repeat;
+    -webkit-mask-size: 15px;
+    background-color: #0B57D0;
+    background-position: center center;
+    background-repeat: no-repeat;
+    height: 16px;
+    width: 16px;
+  }
+
   #text {
     overflow: hidden;
     padding-inline-start: 8px;
@@ -43,7 +64,10 @@
 </style>
 <div class="contents" title="[[tooltip_]]" on-click="onActionClick_"
                      on-keydown="onActionKeyDown_">
-  <img id="action-icon" src$="[[action.iconUrl]]">
+  <div id="action-icon" style$="-webkit-mask-image: url([[action.iconUrl]])"
+      hidden="[[!showCr23ActionIcon_()]]"></div>
+  <img id="action-icon" src$="[[action.iconUrl]]"
+      hidden="[[showCr23ActionIcon_()]]">
   <div id="text" inner-h-t-m-l="[[hintHtml_]]"></div>
 </div>
 
diff --git a/ui/webui/resources/cr_components/omnibox/realbox_action.ts b/ui/webui/resources/cr_components/omnibox/realbox_action.ts
index 5a66458..fd24b194 100644
--- a/ui/webui/resources/cr_components/omnibox/realbox_action.ts
+++ b/ui/webui/resources/cr_components/omnibox/realbox_action.ts
@@ -4,6 +4,7 @@
 
 import '//resources/cr_elements/cr_shared_style.css.js';
 
+import {loadTimeData} from '//resources/js/load_time_data.js';
 import {sanitizeInnerHtml} from '//resources/js/parse_html_subset.js';
 import {PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
@@ -100,6 +101,12 @@
     }
   }
 
+  private showCr23ActionIcon_(): boolean {
+    // Action icons are webkit-mask-image when chrome refresh expanded state
+    // layout is enabled.
+    return loadTimeData.getBoolean('realboxCr23ExpandedStateLayout');
+  }
+
   //============================================================================
   // Helpers
   //============================================================================
diff --git a/ui/webui/resources/cr_components/omnibox/realbox_dropdown.html b/ui/webui/resources/cr_components/omnibox/realbox_dropdown.html
index c320eeb8..58d39f9 100644
--- a/ui/webui/resources/cr_components/omnibox/realbox_dropdown.html
+++ b/ui/webui/resources/cr_components/omnibox/realbox_dropdown.html
@@ -15,6 +15,10 @@
     padding-top: var(--cr-realbox-height);
   }
 
+  :host([expanded-state-layout-chrome-refresh]) #content {
+    padding-bottom: 8px;
+  }
+
   @media (forced-colors: active) {
     #content {
       border: 1px solid ActiveBorder;
diff --git a/ui/webui/resources/cr_components/omnibox/realbox_dropdown.ts b/ui/webui/resources/cr_components/omnibox/realbox_dropdown.ts
index 78690e2..e472d7e 100644
--- a/ui/webui/resources/cr_components/omnibox/realbox_dropdown.ts
+++ b/ui/webui/resources/cr_components/omnibox/realbox_dropdown.ts
@@ -56,6 +56,12 @@
         value: false,
       },
 
+      expandedStateLayoutChromeRefresh: {
+        type: Boolean,
+        value: () => loadTimeData.getBoolean('realboxCr23ExpandedStateLayout'),
+        reflectToAttribute: true,
+      },
+
       /**
        * Whether the secondary side was at any point available to be shown.
        */
@@ -117,6 +123,7 @@
   }
 
   canShowSecondarySide: boolean;
+  expandedStateLayoutChromeRefresh: boolean;
   hadSecondarySide: boolean;
   hasSecondarySide: boolean;
   result: AutocompleteResult;
diff --git a/ui/webui/resources/cr_components/omnibox/realbox_match.html b/ui/webui/resources/cr_components/omnibox/realbox_match.html
index a071d4ac..fb8f4dfe 100644
--- a/ui/webui/resources/cr_components/omnibox/realbox_match.html
+++ b/ui/webui/resources/cr_components/omnibox/realbox_match.html
@@ -55,6 +55,10 @@
     width: 6px;
   }
 
+  :host-context([expanded-state-layout-chrome-refresh]) #focus-indicator {
+    width: 7px;
+  }
+
   /* TODO(crbug.com/1430996): Add focus indicator for secondary results. */
   :host(:is(:focus-visible, [selected]:not(:focus-within)):not(
       [side-type-class_='secondary-side'])) #focus-indicator {