diff --git a/DEPS b/DEPS
index d28c7c6..13cb446 100644
--- a/DEPS
+++ b/DEPS
@@ -171,11 +171,11 @@
   # 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': '7f5e3c7e43c74338cc52efc868daba7793f2e1ec',
+  'skia_revision': 'dc2a97774bb699786a8277635c922ea636b07931',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': '54f0b120057ebcd0993ad20548922b940e43623a',
+  'v8_revision': '6426a06cf8e7fd93c3cc5391a9a4a17ed1fe1403',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -183,7 +183,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': '4a9ec2ef6f2a70f7758b0e57658089bbb40f22ac',
+  'angle_revision': 'b9b4569b9b7675f8fcb3fa553b5e1e66c2afcd43',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -242,7 +242,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': '4e52bbdf716210ccbb1b2c097ba4dd9067eefaf2',
+  'devtools_frontend_revision': '3cb141bbce3fb8f0e1a81fcfc3341bfca1e468a5',
   # 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.
@@ -282,7 +282,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.
-  'spv_tools_revision': 'fb6e3e48d51d1efdc31f016d7e52f528b93235a8',
+  'spv_tools_revision': '70f888131ede3d267cb19a413c9fef3fc51ccc22',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -298,7 +298,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': '2f0f850da8aab8ce4e5cde2e83f91421e559456d',
+  'dawn_revision': 'a9d7d478429d8deaac52a0578826783877cd556a',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -866,7 +866,7 @@
 
   # Build tools for Chrome OS. Note: This depends on third_party/pyelftools.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '8e87fcb858e8a06483a2604ce2c65fd357ef08ff',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '235fe2c3aa103db111b3b191384526263c2483c5',
       'condition': 'checkout_linux',
   },
 
@@ -1242,7 +1242,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '651a1d860c99021196134e4dd8b700a2d73d6ceb',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '1815c5422a39976e6253eed8f8648caeef58b738',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1345,7 +1345,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/r8',
-              'version': '-oXGY8FjY2ZuIBHoGAByn8N6Vn2b0wB2QO8Ct_169XoC',
+              'version': 'C28ypVbWD-R2M9x9fH7QniIsYjJrKoUhxqEV_cZR4qgC',
           },
       ],
       'condition': 'checkout_android',
@@ -1443,7 +1443,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'ec18cc3262922e7dcdbe70243c6f40606f979144',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'a6db9c8fe9276774e3939d577c9320ad00fddd83',
+    Var('webrtc_git') + '/src.git' + '@' + 'c310889ec79167896e1d7b4b401c397fe1f51032',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1518,7 +1518,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@33b4927e0d74157573c62c22914b185e00e62a23',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@6c8abd05a95c37f6c2c347cd3ab936c624cf0a48',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/android_webview/browser/gfx/output_surface_provider_webview.cc b/android_webview/browser/gfx/output_surface_provider_webview.cc
index fb6362c9..2cf8c345 100644
--- a/android_webview/browser/gfx/output_surface_provider_webview.cc
+++ b/android_webview/browser/gfx/output_surface_provider_webview.cc
@@ -94,9 +94,19 @@
           GpuServiceWebView::GetInstance()->gpu_preferences(),
           std::move(feature_info));
     }
+
+    // As most of the GPU resources used for compositing are created on Chrome
+    // side this affects only validation inside Skia. The workaround effectively
+    // clamps max frame buffer size that comes from Android. As we don't control
+    // frame buffer size using this workaround leads to not drawing anything on
+    // screen.
+    // TODO(vasilyt): Remove this once it handles on Skia side.
+    gpu::GpuDriverBugWorkarounds workarounds_for_skia = workarounds;
+    workarounds_for_skia.max_texture_size_limit_4096 = false;
+
     shared_context_state_->InitializeGrContext(
-        GpuServiceWebView::GetInstance()->gpu_preferences(), workarounds,
-        nullptr /* gr_shader_cache */);
+        GpuServiceWebView::GetInstance()->gpu_preferences(),
+        workarounds_for_skia, nullptr /* gr_shader_cache */);
   }
 }
 
diff --git a/android_webview/browser/gfx/viz_compositor_thread_runner_webview.cc b/android_webview/browser/gfx/viz_compositor_thread_runner_webview.cc
index fa66adc..4c9dd82 100644
--- a/android_webview/browser/gfx/viz_compositor_thread_runner_webview.cc
+++ b/android_webview/browser/gfx/viz_compositor_thread_runner_webview.cc
@@ -11,6 +11,7 @@
 #include "base/logging.h"
 #include "base/no_destructor.h"
 #include "base/synchronization/waitable_event.h"
+#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h"
 #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h"
 
 namespace android_webview {
@@ -58,10 +59,15 @@
 void VizCompositorThreadRunnerWebView::InitFrameSinkManagerOnViz() {
   DCHECK_CALLED_ON_VALID_THREAD(viz_thread_checker_);
 
-  // The SharedBitmapManager is null as we do not support or use software
-  // compositing on Android.
+  // Android doesn't support software compositing, but in some cases
+  // unaccelerated canvas can use SharedBitmaps as resource so we create
+  // SharedBitmapManager anyway.
+  // TODO(1056184): Stop using SharedBitmapManager after fixing fallback to
+  // SharedBitmap.
+  server_shared_bitmap_manager_ =
+      std::make_unique<viz::ServerSharedBitmapManager>();
   frame_sink_manager_ = std::make_unique<viz::FrameSinkManagerImpl>(
-      /*shared_bitmap_manager=*/nullptr);
+      server_shared_bitmap_manager_.get());
 }
 
 viz::FrameSinkManagerImpl*
diff --git a/android_webview/browser/gfx/viz_compositor_thread_runner_webview.h b/android_webview/browser/gfx/viz_compositor_thread_runner_webview.h
index 98feb92..bac6333 100644
--- a/android_webview/browser/gfx/viz_compositor_thread_runner_webview.h
+++ b/android_webview/browser/gfx/viz_compositor_thread_runner_webview.h
@@ -20,6 +20,7 @@
 
 namespace viz {
 class FrameSinkManagerImpl;
+class ServerSharedBitmapManager;
 }  // namespace viz
 
 namespace android_webview {
@@ -77,6 +78,7 @@
 
   // Only accessed on |viz_task_runner_|.
   THREAD_CHECKER(viz_thread_checker_);
+  std::unique_ptr<viz::ServerSharedBitmapManager> server_shared_bitmap_manager_;
   std::unique_ptr<viz::FrameSinkManagerImpl> frame_sink_manager_;
 
   DISALLOW_COPY_AND_ASSIGN(VizCompositorThreadRunnerWebView);
diff --git a/android_webview/nonembedded/java/src/org/chromium/android_webview/services/AwMinidumpUploaderDelegate.java b/android_webview/nonembedded/java/src/org/chromium/android_webview/services/AwMinidumpUploaderDelegate.java
index 13db7e3..78d53e8 100644
--- a/android_webview/nonembedded/java/src/org/chromium/android_webview/services/AwMinidumpUploaderDelegate.java
+++ b/android_webview/nonembedded/java/src/org/chromium/android_webview/services/AwMinidumpUploaderDelegate.java
@@ -83,6 +83,7 @@
         return new CrashReportingPermissionManager() {
             @Override
             public boolean isClientInMetricsSample() {
+                // Downsample unknown channel as a precaution in case it ends up being shipped.
                 if (mSamplingDelegate.getChannel() == Channel.STABLE
                         || mSamplingDelegate.getChannel() == Channel.DEFAULT) {
                     return mSamplingDelegate.getRandomSample() < CRASH_DUMP_PERCENTAGE_FOR_STABLE;
diff --git a/ash/app_list/app_list_metrics.cc b/ash/app_list/app_list_metrics.cc
index ba04a8aa..6124acd0 100644
--- a/ash/app_list/app_list_metrics.cc
+++ b/ash/app_list/app_list_metrics.cc
@@ -12,23 +12,12 @@
 #include "ash/public/cpp/app_menu_constants.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/time/time.h"
 #include "ui/compositor/compositor.h"
 
 namespace ash {
 
 namespace {
 
-int CalculateAnimationSmoothness(int actual_frames,
-                                 base::TimeDelta ideal_duration,
-                                 float refresh_rate) {
-  int smoothness = 100;
-  const int ideal_frames = refresh_rate * ideal_duration.InSecondsF();
-  if (ideal_frames > actual_frames)
-    smoothness = 100 * actual_frames / ideal_frames;
-  return smoothness;
-}
-
 // These constants affect logging, and  should not be changed without
 // deprecating the following UMA histograms:
 //  - Apps.AppListTileClickIndexAndQueryLength
@@ -104,31 +93,6 @@
   kMaxApplistSearchResultOpenedSource = 3,
 };
 
-void RecordFolderShowHideAnimationSmoothness(int actual_frames,
-                                             base::TimeDelta ideal_duration,
-                                             float refresh_rate) {
-  const int smoothness =
-      CalculateAnimationSmoothness(actual_frames, ideal_duration, refresh_rate);
-  UMA_HISTOGRAM_PERCENTAGE(kFolderShowHideAnimationSmoothness, smoothness);
-}
-
-void RecordPaginationAnimationSmoothness(int actual_frames,
-                                         base::TimeDelta ideal_duration,
-                                         float refresh_rate,
-                                         bool is_tablet_mode) {
-  const int smoothness =
-      CalculateAnimationSmoothness(actual_frames, ideal_duration, refresh_rate);
-  UMA_HISTOGRAM_PERCENTAGE(kPaginationTransitionAnimationSmoothness,
-                           smoothness);
-  if (is_tablet_mode) {
-    UMA_HISTOGRAM_PERCENTAGE(kPaginationTransitionAnimationSmoothnessInTablet,
-                             smoothness);
-  } else {
-    UMA_HISTOGRAM_PERCENTAGE(
-        kPaginationTransitionAnimationSmoothnessInClamshell, smoothness);
-  }
-}
-
 void AppListRecordPageSwitcherSourceByEventType(ui::EventType type,
                                                 bool is_tablet_mode) {
   AppListPageSwitcherSource source;
@@ -346,4 +310,61 @@
   return false;
 }
 
+FolderShowHideAnimationReporter::FolderShowHideAnimationReporter() = default;
+
+FolderShowHideAnimationReporter::~FolderShowHideAnimationReporter() = default;
+
+void FolderShowHideAnimationReporter::Report(int value) {
+  UMA_HISTOGRAM_PERCENTAGE(kFolderShowHideAnimationSmoothness, value);
+}
+
+PaginationTransitionAnimationReporter::PaginationTransitionAnimationReporter() =
+    default;
+
+PaginationTransitionAnimationReporter::
+    ~PaginationTransitionAnimationReporter() = default;
+
+void PaginationTransitionAnimationReporter::Report(int value) {
+  UMA_HISTOGRAM_PERCENTAGE(kPaginationTransitionAnimationSmoothness, value);
+
+  if (is_tablet_mode_) {
+    UMA_HISTOGRAM_PERCENTAGE(kPaginationTransitionAnimationSmoothnessInTablet,
+                             value);
+  } else {
+    UMA_HISTOGRAM_PERCENTAGE(
+        kPaginationTransitionAnimationSmoothnessInClamshell, value);
+  }
+}
+
+AppListAnimationMetricsRecorder::AppListAnimationMetricsRecorder(
+    ui::AnimationMetricsReporter* reporter)
+    : ui::AnimationMetricsRecorder(reporter) {}
+
+AppListAnimationMetricsRecorder::~AppListAnimationMetricsRecorder() = default;
+
+void AppListAnimationMetricsRecorder::OnAnimationStart(
+    base::TimeDelta expected_duration,
+    ui::Compositor* compositor) {
+  if (!compositor)
+    return;
+
+  animation_started_ = true;
+  ui::AnimationMetricsRecorder::OnAnimationStart(
+      compositor->activated_frame_count(), base::TimeTicks::Now(),
+      expected_duration);
+}
+
+void AppListAnimationMetricsRecorder::OnAnimationEnd(
+    ui::Compositor* compositor) {
+  if (!animation_started_)
+    return;
+
+  animation_started_ = false;
+
+  if (!compositor)
+    return;
+  ui::AnimationMetricsRecorder::OnAnimationEnd(
+      compositor->activated_frame_count(), compositor->refresh_rate());
+}
+
 }  // namespace ash
diff --git a/ash/app_list/app_list_metrics.h b/ash/app_list/app_list_metrics.h
index f2f81d4..89c40c2 100644
--- a/ash/app_list/app_list_metrics.h
+++ b/ash/app_list/app_list_metrics.h
@@ -7,8 +7,15 @@
 
 #include "ash/app_list/app_list_export.h"
 #include "ash/public/cpp/app_list/app_list_types.h"
+#include "base/time/time.h"
+#include "ui/compositor/animation_metrics_recorder.h"
+#include "ui/compositor/animation_metrics_reporter.h"
 #include "ui/events/event.h"
 
+namespace ui {
+class Compositor;
+}
+
 namespace ash {
 
 class AppListModel;
@@ -304,21 +311,12 @@
   bool home_launcher_shown = false;
 };
 
-void RecordFolderShowHideAnimationSmoothness(int actual_frames,
-                                             base::TimeDelta ideal_duration,
-                                             float refresh_rate);
-
 void AppListRecordPageSwitcherSourceByEventType(ui::EventType type,
                                                 bool is_tablet_mode);
 
 void RecordPageSwitcherSource(AppListPageSwitcherSource source,
                               bool is_tablet_mode);
 
-void RecordPaginationAnimationSmoothness(int actual_frames,
-                                         base::TimeDelta ideal_duration,
-                                         float refresh_rate,
-                                         bool is_tablet_mode);
-
 void RecordZeroStateSearchResultUserActionHistogram(
     ZeroStateSearchResultUserActionType action);
 
@@ -345,6 +343,56 @@
 
 APP_LIST_EXPORT bool IsCommandIdAnAppLaunch(int command_id);
 
+class FolderShowHideAnimationReporter : public ui::AnimationMetricsReporter {
+ public:
+  FolderShowHideAnimationReporter();
+  FolderShowHideAnimationReporter(FolderShowHideAnimationReporter&) = delete;
+  FolderShowHideAnimationReporter& operator=(FolderShowHideAnimationReporter&) =
+      delete;
+  ~FolderShowHideAnimationReporter() override;
+
+  // ui:AnimationMetricsReporter:
+  void Report(int value) override;
+};
+
+class PaginationTransitionAnimationReporter
+    : public ui::AnimationMetricsReporter {
+ public:
+  PaginationTransitionAnimationReporter();
+  PaginationTransitionAnimationReporter(
+      PaginationTransitionAnimationReporter&) = delete;
+  PaginationTransitionAnimationReporter& operator=(
+      PaginationTransitionAnimationReporter&) = delete;
+  ~PaginationTransitionAnimationReporter() override;
+
+  // ui:AnimationMetricsReporter:
+  void Report(int value) override;
+
+  void set_is_tablet_mode(bool val) { is_tablet_mode_ = val; }
+
+ private:
+  bool is_tablet_mode_ = false;
+};
+
+// App list specific animation metrics recorder which has a pointer to the
+// compositor the app list to simplify things for callsites.
+class AppListAnimationMetricsRecorder : public ui::AnimationMetricsRecorder {
+ public:
+  explicit AppListAnimationMetricsRecorder(
+      ui::AnimationMetricsReporter* reporter);
+  AppListAnimationMetricsRecorder(AppListAnimationMetricsRecorder&) = delete;
+  AppListAnimationMetricsRecorder& operator=(AppListAnimationMetricsRecorder&) =
+      delete;
+  ~AppListAnimationMetricsRecorder();
+
+  void OnAnimationStart(base::TimeDelta expected_duration,
+                        ui::Compositor* compositor);
+  void OnAnimationEnd(ui::Compositor* compositor);
+
+ private:
+  bool animation_started_ = false;
+};
+
 }  // namespace ash
 
 #endif  // ASH_APP_LIST_APP_LIST_METRICS_H_
diff --git a/ash/app_list/views/app_list_folder_view.cc b/ash/app_list/views/app_list_folder_view.cc
index 1dc6ad1..bfd8402b 100644
--- a/ash/app_list/views/app_list_folder_view.cc
+++ b/ash/app_list/views/app_list_folder_view.cc
@@ -56,10 +56,6 @@
 constexpr int kIndexFolderHeader = 3;
 constexpr int kIndexPageSwitcher = 4;
 
-int GetCompositorActivatedFrameCount(ui::Compositor* compositor) {
-  return compositor ? compositor->activated_frame_count() : 0;
-}
-
 // Transit from the background of the folder item's icon to the opened
 // folder's background when opening the folder. Transit the other way when
 // closing the folder.
@@ -476,6 +472,12 @@
           contents_view_->app_list_view()->is_tablet_mode()));
   view_model_->Add(page_switcher_, kIndexPageSwitcher);
 
+  show_hide_metrics_reporter_ =
+      std::make_unique<FolderShowHideAnimationReporter>();
+  show_hide_metrics_recorder_ =
+      std::make_unique<AppListAnimationMetricsRecorder>(
+          show_hide_metrics_reporter_.get());
+
   model_->AddObserver(this);
 }
 
@@ -502,8 +504,9 @@
 void AppListFolderView::ScheduleShowHideAnimation(bool show,
                                                   bool hide_for_reparent) {
   CreateOpenOrCloseFolderAccessibilityEvent(show);
-  animation_start_frame_number_ =
-      GetCompositorActivatedFrameCount(GetCompositor());
+  show_hide_metrics_recorder_->OnAnimationStart(
+      GetAppListConfig().folder_transition_in_duration(),
+      GetWidget()->GetCompositor());
 
   hide_for_reparent_ = hide_for_reparent;
 
@@ -666,25 +669,7 @@
 }
 
 void AppListFolderView::RecordAnimationSmoothness() {
-  ui::Compositor* compositor = GetCompositor();
-  // Do not record animation smoothness if |compositor| is nullptr.
-  if (!compositor)
-    return;
-  // Do not record if the start frame number doesn't exist; either animation is
-  // not scheduled or the record happens.
-  if (!animation_start_frame_number_.has_value())
-    return;
-
-  const int end_frame_number = GetCompositorActivatedFrameCount(compositor);
-  if (end_frame_number > *animation_start_frame_number_) {
-    RecordFolderShowHideAnimationSmoothness(
-        end_frame_number - *animation_start_frame_number_,
-        GetAppListConfig().folder_transition_in_duration(),
-        compositor->refresh_rate());
-  }
-  // Resets the frame number so that further invocation won't record the
-  // metrics.
-  animation_start_frame_number_.reset();
+  show_hide_metrics_recorder_->OnAnimationEnd(GetWidget()->GetCompositor());
 }
 
 void AppListFolderView::OnTabletModeChanged(bool started) {
diff --git a/ash/app_list/views/app_list_folder_view.h b/ash/app_list/views/app_list_folder_view.h
index 95beb8c9..341d046 100644
--- a/ash/app_list/views/app_list_folder_view.h
+++ b/ash/app_list/views/app_list_folder_view.h
@@ -194,8 +194,9 @@
   std::unique_ptr<Animation> top_icon_animation_;
   std::unique_ptr<Animation> contents_container_animation_;
 
-  // The compositor frame number when animation starts.
-  base::Optional<int> animation_start_frame_number_;
+  // Records smoothness of the folder show/hide animation.
+  std::unique_ptr<AppListAnimationMetricsRecorder> show_hide_metrics_recorder_;
+  std::unique_ptr<FolderShowHideAnimationReporter> show_hide_metrics_reporter_;
 
   DISALLOW_COPY_AND_ASSIGN(AppListFolderView);
 };
diff --git a/ash/app_list/views/apps_grid_view.cc b/ash/app_list/views/apps_grid_view.cc
index c2e8793..8d7a4af 100644
--- a/ash/app_list/views/apps_grid_view.cc
+++ b/ash/app_list/views/apps_grid_view.cc
@@ -257,10 +257,6 @@
              AppListFolderItem::FOLDER_TYPE_OEM;
 }
 
-int GetCompositorActivatedFrameCount(ui::Compositor* compositor) {
-  return compositor ? compositor->activated_frame_count() : 0;
-}
-
 }  // namespace
 
 std::string GridIndex::ToString() const {
@@ -335,7 +331,6 @@
     : folder_delegate_(folder_delegate),
       contents_view_(contents_view),
       page_flip_delay_in_ms_(kPageFlipDelayInMsFullscreen),
-      pagination_animation_start_frame_number_(0),
       view_structure_(this) {
   DCHECK(contents_view_);
   SetPaintToLayer(ui::LAYER_NOT_DRAWN);
@@ -368,6 +363,12 @@
           : base::BindRepeating(&AppListRecordPageSwitcherSourceByEventType),
       IsTabletMode());
   bounds_animator_->AddObserver(this);
+
+  pagination_metrics_reporter_ =
+      std::make_unique<PaginationTransitionAnimationReporter>();
+  pagination_metrics_recorder_ =
+      std::make_unique<AppListAnimationMetricsRecorder>(
+          pagination_metrics_reporter_.get());
 }
 
 AppsGridView::~AppsGridView() {
@@ -2793,8 +2794,6 @@
 
   MaybeCreateGradientMask();
   CancelContextMenusOnCurrentPage();
-  pagination_animation_start_frame_number_ =
-      GetCompositorActivatedFrameCount(layer()->GetCompositor());
 }
 
 void AppsGridView::TransitionStarted() {
@@ -2802,6 +2801,10 @@
           pagination_model_.selected_page()) > 1) {
     Layout();
   }
+
+  pagination_metrics_recorder_->OnAnimationStart(
+      pagination_model_.GetTransitionAnimationSlideDuration(),
+      GetWidget()->GetCompositor());
 }
 
 void AppsGridView::TransitionChanged() {
@@ -2842,21 +2845,9 @@
 }
 
 void AppsGridView::TransitionEnded() {
-  const base::TimeDelta duration =
-      pagination_model_.GetTransitionAnimationSlideDuration();
+  pagination_metrics_reporter_->set_is_tablet_mode(IsTabletMode());
+  pagination_metrics_recorder_->OnAnimationEnd(GetWidget()->GetCompositor());
 
-  ui::Compositor* compositor = layer()->GetCompositor();
-  // Do not record animation smoothness if |compositor| is nullptr.
-  if (!compositor)
-    return;
-
-  const int end_frame_number = GetCompositorActivatedFrameCount(compositor);
-  if (end_frame_number > pagination_animation_start_frame_number_ &&
-      !duration.is_zero()) {
-    RecordPaginationAnimationSmoothness(
-        end_frame_number - pagination_animation_start_frame_number_, duration,
-        compositor->refresh_rate(), IsTabletMode());
-  }
   // Gradient mask is no longer necessary once transition is finished.
   if (layer()->layer_mask_layer())
     layer()->SetMaskLayer(nullptr);
diff --git a/ash/app_list/views/apps_grid_view.h b/ash/app_list/views/apps_grid_view.h
index 6ceaff3..9cfa8a6 100644
--- a/ash/app_list/views/apps_grid_view.h
+++ b/ash/app_list/views/apps_grid_view.h
@@ -816,9 +816,6 @@
   // True if it is the end gesture from shelf dragging.
   bool is_end_gesture_ = false;
 
-  // The compositor frame number when animation starts.
-  int pagination_animation_start_frame_number_;
-
   // view structure used only for non-folder.
   PagedViewStructure view_structure_;
 
@@ -846,6 +843,11 @@
   // If true, Layout() does nothing. See where set for details.
   bool ignore_layout_ = false;
 
+  // Records smoothness of pagination animation.
+  std::unique_ptr<AppListAnimationMetricsRecorder> pagination_metrics_recorder_;
+  std::unique_ptr<PaginationTransitionAnimationReporter>
+      pagination_metrics_reporter_;
+
   // Records the presentation time for apps grid dragging.
   std::unique_ptr<PresentationTimeRecorder> presentation_time_recorder_;
 
diff --git a/base/android/library_loader/library_prefetcher_unittest.cc b/base/android/library_loader/library_prefetcher_unittest.cc
index 67ae24c..37892689 100644
--- a/base/android/library_loader/library_prefetcher_unittest.cc
+++ b/base/android/library_loader/library_prefetcher_unittest.cc
@@ -22,7 +22,8 @@
 const size_t kPageSize = 4096;
 }  // namespace
 
-TEST(NativeLibraryPrefetcherTest, TestPercentageOfResidentCode) {
+// https://crbug.com/1056021 - flaky on Nexus 5.
+TEST(NativeLibraryPrefetcherTest, DISABLED_TestPercentageOfResidentCode) {
   size_t length = 4 * kPageSize;
   auto shared_region = base::WritableSharedMemoryRegion::Create(length);
   ASSERT_TRUE(shared_region.IsValid());
diff --git a/build/android/OWNERS b/build/android/OWNERS
index 2d1fb52..ef7cea8d 100644
--- a/build/android/OWNERS
+++ b/build/android/OWNERS
@@ -1,4 +1,5 @@
 jbudorick@chromium.org
+mheikal@chromium.org
 pasko@chromium.org
 tiborg@chromium.org
 wnwen@chromium.org
diff --git a/build/config/android/BUILD.gn b/build/config/android/BUILD.gn
index 6d8bec8e7..51230609 100644
--- a/build/config/android/BUILD.gn
+++ b/build/config/android/BUILD.gn
@@ -153,3 +153,10 @@
     }
   }
 }
+
+if (current_toolchain == default_toolchain) {
+  pool("goma_javac_pool") {
+    # Override action_pool when goma is enabled for javac.
+    depth = 10000
+  }
+}
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni
index 07cd2e0..502ce69 100644
--- a/build/config/android/internal_rules.gni
+++ b/build/config/android/internal_rules.gni
@@ -2792,6 +2792,9 @@
       }
       if (use_java_goma) {
         args += [ "--gomacc-path=$goma_dir/gomacc" ]
+
+        # Override the default action_pool when goma is enabled.
+        pool = "//build/config/android:goma_javac_pool"
       }
       if (defined(invoker.srcjar_filearg)) {
         args += [ "--java-srcjars=${invoker.srcjar_filearg}" ]
diff --git a/build/config/chromecast_build.gni b/build/config/chromecast_build.gni
index b2640f5..0dc6ec0 100644
--- a/build/config/chromecast_build.gni
+++ b/build/config/chromecast_build.gni
@@ -66,14 +66,16 @@
   }
 
   cast_mojo_media_host = "gpu"
-} else if (is_android && !is_cast_audio_only) {
+} else if (is_android) {
   # On Android, all the enabled mojo media services run in the process specified
   # by "cast_mojo_media_host".
   cast_mojo_media_services = [
     "cdm",
     "audio_decoder",
-    "video_decoder",
   ]
+  if (!is_cast_audio_only) {
+    cast_mojo_media_services += [ "video_decoder" ]
+  }
 
   cast_mojo_media_host = "gpu"
 }
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index aa74ba0c..471e2b6 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-0.20200226.0.1
\ No newline at end of file
+0.20200226.1.1
\ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index 378b0ee..471e2b6 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-0.20200225.2.1
\ No newline at end of file
+0.20200226.1.1
\ No newline at end of file
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index a3735df3b..83d8cb4 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -157,6 +157,7 @@
     "//components/find_in_page/android:java_resources",
     "//components/javascript_dialogs/android:java_resources",
     "//components/omnibox/browser:java_resources",
+    "//components/page_info/android:java_resources",
     "//components/permissions/android:java_resources",
     "//components/policy:app_restrictions_resources",
     "//components/strings:components_locale_settings_grd",
@@ -312,7 +313,6 @@
     "//components/navigation_interception/android:navigation_interception_java",
     "//components/offline_items_collection/core:core_java",
     "//components/omnibox/browser:browser_java",
-    "//components/page_info/android",
     "//components/page_info/android:java",
     "//components/paint_preview/browser/android:java",
     "//components/payments/content/android:java",
@@ -2757,8 +2757,6 @@
     "java/src/org/chromium/chrome/browser/omnibox/OmniboxViewUtil.java",
     "java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeader.java",
     "java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteController.java",
-    "java/src/org/chromium/chrome/browser/page_info/CertificateChainHelper.java",
-    "java/src/org/chromium/chrome/browser/page_info/CertificateViewer.java",
     "java/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopup.java",
     "java/src/org/chromium/chrome/browser/page_info/PageInfoController.java",
     "java/src/org/chromium/chrome/browser/partnerbookmarks/PartnerBookmarksReader.java",
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
index 4ac992b..51eea6e 100644
--- a/chrome/android/chrome_java_sources.gni
+++ b/chrome/android/chrome_java_sources.gni
@@ -1202,14 +1202,10 @@
   "java/src/org/chromium/chrome/browser/omnibox/suggestions/tail/TailSuggestionViewProperties.java",
   "java/src/org/chromium/chrome/browser/omnibox/voice/AssistantVoiceSearchService.java",
   "java/src/org/chromium/chrome/browser/omnibox/voice/VoiceRecognitionHandler.java",
-  "java/src/org/chromium/chrome/browser/page_info/CertificateChainHelper.java",
-  "java/src/org/chromium/chrome/browser/page_info/CertificateViewer.java",
   "java/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopup.java",
   "java/src/org/chromium/chrome/browser/page_info/PageInfoController.java",
-  "java/src/org/chromium/chrome/browser/page_info/PageInfoDialog.java",
   "java/src/org/chromium/chrome/browser/page_info/PermissionParamsListBuilder.java",
   "java/src/org/chromium/chrome/browser/page_info/SiteSettingsHelper.java",
-  "java/src/org/chromium/chrome/browser/page_info/SystemSettingsActivityRequiredListener.java",
   "java/src/org/chromium/chrome/browser/paint_preview/PaintPreviewExperiments.java",
   "java/src/org/chromium/chrome/browser/paint_preview/PaintPreviewTabHelper.java",
   "java/src/org/chromium/chrome/browser/partnerbookmarks/PartnerBookmark.java",
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java
index b9ae0d61..d4aab0c 100644
--- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java
+++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java
@@ -4,17 +4,22 @@
 
 package org.chromium.chrome.browser.autofill_assistant;
 
+import static android.support.test.espresso.Espresso.onData;
 import static android.support.test.espresso.Espresso.onView;
 import static android.support.test.espresso.action.ViewActions.clearText;
 import static android.support.test.espresso.action.ViewActions.click;
+import static android.support.test.espresso.action.ViewActions.scrollTo;
 import static android.support.test.espresso.action.ViewActions.typeText;
 import static android.support.test.espresso.assertion.ViewAssertions.matches;
+import static android.support.test.espresso.matcher.RootMatchers.withDecorView;
 import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant;
 import static android.support.test.espresso.matcher.ViewMatchers.isChecked;
 import static android.support.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed;
 import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA;
 import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
 import static android.support.test.espresso.matcher.ViewMatchers.isEnabled;
+import static android.support.test.espresso.matcher.ViewMatchers.withChild;
+import static android.support.test.espresso.matcher.ViewMatchers.withClassName;
 import static android.support.test.espresso.matcher.ViewMatchers.withContentDescription;
 import static android.support.test.espresso.matcher.ViewMatchers.withId;
 import static android.support.test.espresso.matcher.ViewMatchers.withParent;
@@ -22,6 +27,7 @@
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.allOf;
+import static org.hamcrest.Matchers.anything;
 import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.instanceOf;
 import static org.hamcrest.Matchers.is;
@@ -32,6 +38,7 @@
 import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.waitUntilViewMatchesCondition;
 
 import android.support.test.InstrumentationRegistry;
+import android.support.test.espresso.Espresso;
 import android.support.test.filters.MediumTest;
 import android.widget.RadioButton;
 
@@ -59,6 +66,7 @@
 import org.chromium.content_public.browser.WebContents;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Collections;
 
 /**
@@ -391,7 +399,90 @@
         assertThat(getElementValue("email", getWebContents()), is("janedoe@google.com"));
     }
 
-    // TODO(b/143265578): Add test where credit card is manually entered.
+    /**
+     * Add a credit card with Autofill Assistant UI and fill it into the form.
+     */
+    @Test
+    @MediumTest
+    public void testCreateAndEnterCard() throws Exception {
+        // Add a profile for easier address selection.
+        mHelper.addDummyProfile("Adam West", "adamwest@google.com");
+
+        // The Current year is the default selection for expiration year of the credit card.
+        int year = Calendar.getInstance().get(Calendar.YEAR);
+
+        ArrayList<ActionProto> list = new ArrayList<>();
+        list.add((ActionProto) ActionProto.newBuilder()
+                         .setCollectUserData(CollectUserDataProto.newBuilder()
+                                                     .setRequestPaymentMethod(true)
+                                                     .setBillingAddressName("billing_address")
+                                                     .setRequestTermsAndConditions(false))
+                         .build());
+        list.add(
+                (ActionProto) ActionProto.newBuilder()
+                        .setUseCard(org.chromium.chrome.browser.autofill_assistant.proto
+                                            .UseCreditCardProto.newBuilder()
+                                            .setFormFieldElement(
+                                                    ElementReferenceProto.newBuilder().addSelectors(
+                                                            "#card_number")))
+                        .build());
+        list.add((ActionProto) ActionProto.newBuilder()
+                         .setPrompt(PromptProto.newBuilder().setMessage("Prompt").addChoices(
+                                 PromptProto.Choice.newBuilder()))
+                         .build());
+        AutofillAssistantTestScript script = new AutofillAssistantTestScript(
+                (SupportedScriptProto) SupportedScriptProto.newBuilder()
+                        .setPath("form_target_website.html")
+                        .setPresentation(PresentationProto.newBuilder().setAutostart(true).setChip(
+                                ChipProto.newBuilder().setText("Payment")))
+                        .build(),
+                list);
+
+        AutofillAssistantTestService testService =
+                new AutofillAssistantTestService(Collections.singletonList(script));
+        startAutofillAssistant(mTestRule.getActivity(), testService);
+
+        waitUntilViewMatchesCondition(
+                allOf(withId(R.id.section_title_add_button_label), withText("Add card")),
+                isCompletelyDisplayed());
+        onView(allOf(withId(R.id.section_title_add_button_label), withText("Add card")))
+                .perform(click());
+        waitUntilViewMatchesCondition(
+                withContentDescription("Card number*"), allOf(isDisplayed(), isEnabled()));
+        onView(withContentDescription("Card number*")).perform(typeText("4111111111111111"));
+        waitUntilViewMatchesCondition(
+                withContentDescription("Name on card*"), allOf(isDisplayed(), isEnabled()));
+        onView(withContentDescription("Name on card*")).perform(typeText("John Doe"));
+        Espresso.closeSoftKeyboard(); // Close keyboard, not to hide the Spinners.
+        onView(allOf(withId(org.chromium.chrome.R.id.spinner),
+                       withChild(withText(String.valueOf(year)))))
+                .perform(click());
+        onData(anything())
+                .atPosition(2 /* select 2 years in the future, 0 is the current year */)
+                .inRoot(withDecorView(withClassName(containsString("Popup"))))
+                .perform(click());
+        onView(allOf(withId(org.chromium.chrome.R.id.spinner), withChild(withText("Select"))))
+                .perform(click());
+        onData(anything())
+                .atPosition(1 /* address of Adam, 0 is SELECT (empty) */)
+                .inRoot(withDecorView(withClassName(containsString("Popup"))))
+                .perform(click());
+        onView(withId(org.chromium.chrome.R.id.editor_dialog_done_button))
+                .perform(scrollTo(), click());
+        waitUntilViewMatchesCondition(allOf(withId(R.id.credit_card_number),
+                                              isDescendantOfA(withId(R.id.payment_method_summary))),
+                allOf(withText(containsString("1111")), isDisplayed()));
+        onView(withContentDescription("Continue")).perform(click());
+        waitUntilViewMatchesCondition(withId(R.id.card_unmask_input), isCompletelyDisplayed());
+        onView(withId(R.id.card_unmask_input)).perform(typeText("123"));
+        onView(withId(R.id.positive_button)).perform(click());
+        waitUntilViewMatchesCondition(withText("Prompt"), isCompletelyDisplayed());
+        assertThat(getElementValue("name", getWebContents()), is("John Doe"));
+        assertThat(getElementValue("card_number", getWebContents()), is("4111111111111111"));
+        assertThat(getElementValue("cv2_number", getWebContents()), is("123"));
+        assertThat(getElementValue("exp_month", getWebContents()), is("01"));
+        assertThat(getElementValue("exp_year", getWebContents()), is(String.valueOf(year + 2)));
+    }
 
     /**
      * Catch the insert of a credit card added outside of the Autofill Assistant, e.g. with the
diff --git a/chrome/android/features/tab_ui/BUILD.gn b/chrome/android/features/tab_ui/BUILD.gn
index d05f4172..6919d14 100644
--- a/chrome/android/features/tab_ui/BUILD.gn
+++ b/chrome/android/features/tab_ui/BUILD.gn
@@ -78,8 +78,9 @@
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupTitleEditor.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java",
+    "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiProperties.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarView.java",
-    "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarViewBinder.java",
+    "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiViewBinder.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabListContainerProperties.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabListContainerViewBinder.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java",
@@ -97,7 +98,6 @@
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorMediator.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorProperties.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorToolbar.java",
-    "java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripToolbarViewProperties.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripViewBinder.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabSuggestionMessageCardViewModel.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabSuggestionMessageService.java",
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java
index 4cf77c2..d7075dfd 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java
@@ -43,7 +43,7 @@
                                               TabGroupUiMediator.TabGroupUiController {
     static final String COMPONENT_NAME = "TabStrip";
     private final Context mContext;
-    private final PropertyModel mTabStripToolbarModel;
+    private final PropertyModel mModel;
     private final ThemeColorProvider mThemeColorProvider;
     private final PropertyModelChangeProcessor mModelChangeProcessor;
     private final ViewGroup mTabListContainerView;
@@ -59,14 +59,14 @@
     public TabGroupUiCoordinator(ViewGroup parentView, ThemeColorProvider themeColorProvider) {
         mContext = parentView.getContext();
         mThemeColorProvider = themeColorProvider;
-        mTabStripToolbarModel = new PropertyModel(TabStripToolbarViewProperties.ALL_KEYS);
+        mModel = new PropertyModel(TabGroupUiProperties.ALL_KEYS);
         TabGroupUiToolbarView toolbarView =
                 (TabGroupUiToolbarView) LayoutInflater.from(mContext).inflate(
                         R.layout.bottom_tab_strip_toolbar, parentView, false);
         mTabListContainerView = toolbarView.getViewContainer();
         parentView.addView(toolbarView);
         mModelChangeProcessor = PropertyModelChangeProcessor.create(
-                mTabStripToolbarModel, toolbarView, TabGroupUiToolbarViewBinder::bind);
+                mModel, toolbarView, TabGroupUiViewBinder::bind);
     }
 
     /**
@@ -104,9 +104,9 @@
             mTabGridDialogCoordinator = null;
         }
 
-        mMediator = new TabGroupUiMediator(visibilityController, this, mTabStripToolbarModel,
-                tabModelSelector, activity,
-                ((ChromeTabbedActivity) activity).getOverviewModeBehavior(), mThemeColorProvider,
+        mMediator = new TabGroupUiMediator(visibilityController, this, mModel, tabModelSelector,
+                activity, ((ChromeTabbedActivity) activity).getOverviewModeBehavior(),
+                mThemeColorProvider,
                 isTabGroupsUiImprovementsEnabled ? mTabGridDialogCoordinator.getDialogController()
                                                  : null);
 
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java
index 389178f..abba0f60 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java
@@ -79,7 +79,7 @@
         void resetGridWithListOfTabs(List<Tab> tabs);
     }
 
-    private final PropertyModel mToolbarPropertyModel;
+    private final PropertyModel mModel;
     private final TabModelObserver mTabModelObserver;
     private final ResetHandler mResetHandler;
     private final TabModelSelector mTabModelSelector;
@@ -100,12 +100,12 @@
 
     TabGroupUiMediator(
             BottomControlsCoordinator.BottomControlsVisibilityController visibilityController,
-            ResetHandler resetHandler, PropertyModel toolbarPropertyModel,
-            TabModelSelector tabModelSelector, TabCreatorManager tabCreatorManager,
-            OverviewModeBehavior overviewModeBehavior, ThemeColorProvider themeColorProvider,
+            ResetHandler resetHandler, PropertyModel model, TabModelSelector tabModelSelector,
+            TabCreatorManager tabCreatorManager, OverviewModeBehavior overviewModeBehavior,
+            ThemeColorProvider themeColorProvider,
             @Nullable TabGridDialogMediator.DialogController dialogController) {
         mResetHandler = resetHandler;
-        mToolbarPropertyModel = toolbarPropertyModel;
+        mModel = model;
         mTabModelSelector = tabModelSelector;
         mTabCreatorManager = tabCreatorManager;
         mOverviewModeBehavior = overviewModeBehavior;
@@ -215,10 +215,9 @@
                  true))
                 .addTabGroupObserver(mTabGroupModelFilterObserver);
 
-        mThemeColorObserver = (color, shouldAnimate)
-                -> mToolbarPropertyModel.set(TabStripToolbarViewProperties.PRIMARY_COLOR, color);
-        mTintObserver = (tint,
-                useLight) -> mToolbarPropertyModel.set(TabStripToolbarViewProperties.TINT, tint);
+        mThemeColorObserver =
+                (color, shouldAnimate) -> mModel.set(TabGroupUiProperties.PRIMARY_COLOR, color);
+        mTintObserver = (tint, useLight) -> mModel.set(TabGroupUiProperties.TINT, tint);
 
         mTabModelSelector.getTabModelFilterProvider().addTabModelFilterObserver(mTabModelObserver);
         mTabModelSelector.addObserver(mTabModelSelectorObserver);
@@ -227,7 +226,7 @@
         mThemeColorProvider.addTintObserver(mTintObserver);
 
         setupToolbarClickHandlers();
-        mToolbarPropertyModel.set(TabStripToolbarViewProperties.IS_MAIN_CONTENT_VISIBLE, true);
+        mModel.set(TabGroupUiProperties.IS_MAIN_CONTENT_VISIBLE, true);
         Tab tab = mTabModelSelector.getCurrentTab();
         if (tab != null) {
             resetTabStripWithRelatedTabsForId(tab.getId());
@@ -235,27 +234,24 @@
     }
 
     void setupLeftButtonDrawable(int drawableId) {
-        mToolbarPropertyModel.set(
-                TabStripToolbarViewProperties.LEFT_BUTTON_DRAWABLE_ID, drawableId);
+        mModel.set(TabGroupUiProperties.LEFT_BUTTON_DRAWABLE_ID, drawableId);
     }
 
     void setupLeftButtonOnClickListener(View.OnClickListener listener) {
-        mToolbarPropertyModel.set(
-                TabStripToolbarViewProperties.LEFT_BUTTON_ON_CLICK_LISTENER, listener);
+        mModel.set(TabGroupUiProperties.LEFT_BUTTON_ON_CLICK_LISTENER, listener);
     }
 
     private void setupToolbarClickHandlers() {
-        mToolbarPropertyModel.set(
-                TabStripToolbarViewProperties.LEFT_BUTTON_ON_CLICK_LISTENER, view -> {
-                    Tab currentTab = mTabModelSelector.getCurrentTab();
-                    if (currentTab == null) return;
-                    mResetHandler.resetGridWithListOfTabs(getRelatedTabsForId(currentTab.getId()));
-                    if (CachedFeatureFlags.isTabGroupsAndroidUiImprovementsEnabled()) {
-                        RecordUserAction.record("TabGroup.ExpandedFromStrip.TabGridDialog");
-                    }
-                });
-        mToolbarPropertyModel.set(
-                TabStripToolbarViewProperties.RIGHT_BUTTON_ON_CLICK_LISTENER, view -> {
+        mModel.set(TabGroupUiProperties.LEFT_BUTTON_ON_CLICK_LISTENER, view -> {
+            Tab currentTab = mTabModelSelector.getCurrentTab();
+            if (currentTab == null) return;
+            mResetHandler.resetGridWithListOfTabs(getRelatedTabsForId(currentTab.getId()));
+            if (CachedFeatureFlags.isTabGroupsAndroidUiImprovementsEnabled()) {
+                RecordUserAction.record("TabGroup.ExpandedFromStrip.TabGridDialog");
+            }
+        });
+        mModel.set(
+                TabGroupUiProperties.RIGHT_BUTTON_ON_CLICK_LISTENER, view -> {
                     Tab currentTab = mTabModelSelector.getCurrentTab();
                     List<Tab> relatedTabs = mTabModelSelector.getTabModelFilterProvider()
                                                     .getCurrentTabModelFilter()
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripToolbarViewProperties.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiProperties.java
similarity index 93%
rename from chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripToolbarViewProperties.java
rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiProperties.java
index bcddfab..09431441 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripToolbarViewProperties.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiProperties.java
@@ -11,9 +11,9 @@
 import org.chromium.ui.modelutil.PropertyModel;
 
 /**
- * {@link PropertyKey} list for the toolbar view on tabstrip.
+ * {@link PropertyKey} list for the TabGroupUi.
  */
-class TabStripToolbarViewProperties {
+class TabGroupUiProperties {
     public static final PropertyModel
             .WritableObjectPropertyKey<OnClickListener> LEFT_BUTTON_ON_CLICK_LISTENER =
             new PropertyModel.WritableObjectPropertyKey<OnClickListener>();
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiViewBinder.java
similarity index 83%
rename from chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarViewBinder.java
rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiViewBinder.java
index 92c8c09d..89ad8a8 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarViewBinder.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiViewBinder.java
@@ -4,20 +4,20 @@
 
 package org.chromium.chrome.browser.tasks.tab_management;
 
-import static org.chromium.chrome.browser.tasks.tab_management.TabStripToolbarViewProperties.IS_MAIN_CONTENT_VISIBLE;
-import static org.chromium.chrome.browser.tasks.tab_management.TabStripToolbarViewProperties.LEFT_BUTTON_DRAWABLE_ID;
-import static org.chromium.chrome.browser.tasks.tab_management.TabStripToolbarViewProperties.LEFT_BUTTON_ON_CLICK_LISTENER;
-import static org.chromium.chrome.browser.tasks.tab_management.TabStripToolbarViewProperties.PRIMARY_COLOR;
-import static org.chromium.chrome.browser.tasks.tab_management.TabStripToolbarViewProperties.RIGHT_BUTTON_ON_CLICK_LISTENER;
-import static org.chromium.chrome.browser.tasks.tab_management.TabStripToolbarViewProperties.TINT;
+import static org.chromium.chrome.browser.tasks.tab_management.TabGroupUiProperties.IS_MAIN_CONTENT_VISIBLE;
+import static org.chromium.chrome.browser.tasks.tab_management.TabGroupUiProperties.LEFT_BUTTON_DRAWABLE_ID;
+import static org.chromium.chrome.browser.tasks.tab_management.TabGroupUiProperties.LEFT_BUTTON_ON_CLICK_LISTENER;
+import static org.chromium.chrome.browser.tasks.tab_management.TabGroupUiProperties.PRIMARY_COLOR;
+import static org.chromium.chrome.browser.tasks.tab_management.TabGroupUiProperties.RIGHT_BUTTON_ON_CLICK_LISTENER;
+import static org.chromium.chrome.browser.tasks.tab_management.TabGroupUiProperties.TINT;
 
 import org.chromium.ui.modelutil.PropertyKey;
 import org.chromium.ui.modelutil.PropertyModel;
 
 /**
- * ViewBinder for TabGroupUiToolbar.
+ * ViewBinder for TabGroupUi component.
  */
-class TabGroupUiToolbarViewBinder {
+class TabGroupUiViewBinder {
     /**
      * Binds the given model to the given view, updating the payload in propertyKey.
      *
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarViewBinderTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiViewBinderTest.java
similarity index 82%
rename from chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarViewBinderTest.java
rename to chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiViewBinderTest.java
index 26428382..3dd7e31 100644
--- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarViewBinderTest.java
+++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiViewBinderTest.java
@@ -37,10 +37,10 @@
 import java.util.concurrent.atomic.AtomicBoolean;
 
 /**
- * Tests for {@link TabGroupUiToolbarViewBinder}.
+ * Tests for {@link TabGroupUiViewBinder}.
  */
 @RunWith(ChromeJUnit4ClassRunner.class)
-public class TabGroupUiToolbarViewBinderTest extends DummyUiActivityTestCase {
+public class TabGroupUiViewBinderTest extends DummyUiActivityTestCase {
     private ImageView mLeftButton;
     private ImageView mRightButton;
     private ViewGroup mContainerView;
@@ -62,9 +62,8 @@
         mContainerView = toolbarView.findViewById(R.id.toolbar_container_view);
         mMainContent = toolbarView.findViewById(R.id.main_content);
 
-        mModel = new PropertyModel(TabStripToolbarViewProperties.ALL_KEYS);
-        mMCP = PropertyModelChangeProcessor.create(
-                mModel, toolbarView, TabGroupUiToolbarViewBinder::bind);
+        mModel = new PropertyModel(TabGroupUiProperties.ALL_KEYS);
+        mMCP = PropertyModelChangeProcessor.create(mModel, toolbarView, TabGroupUiViewBinder::bind);
     }
 
     @Override
@@ -82,7 +81,7 @@
         mLeftButton.performClick();
         assertFalse(leftButtonClicked.get());
 
-        mModel.set(TabStripToolbarViewProperties.LEFT_BUTTON_ON_CLICK_LISTENER,
+        mModel.set(TabGroupUiProperties.LEFT_BUTTON_ON_CLICK_LISTENER,
                 (View view) -> leftButtonClicked.set(true));
 
         mLeftButton.performClick();
@@ -98,7 +97,7 @@
         mRightButton.performClick();
         assertFalse(rightButtonClicked.get());
 
-        mModel.set(TabStripToolbarViewProperties.RIGHT_BUTTON_ON_CLICK_LISTENER,
+        mModel.set(TabGroupUiProperties.RIGHT_BUTTON_ON_CLICK_LISTENER,
                 (View view) -> rightButtonClicked.set(true));
 
         mRightButton.performClick();
@@ -113,10 +112,10 @@
         mContainerView.addView(contentView);
         contentView.setVisibility(View.GONE);
 
-        mModel.set(TabStripToolbarViewProperties.IS_MAIN_CONTENT_VISIBLE, true);
+        mModel.set(TabGroupUiProperties.IS_MAIN_CONTENT_VISIBLE, true);
         assertEquals(View.VISIBLE, contentView.getVisibility());
 
-        mModel.set(TabStripToolbarViewProperties.IS_MAIN_CONTENT_VISIBLE, false);
+        mModel.set(TabGroupUiProperties.IS_MAIN_CONTENT_VISIBLE, false);
         assertEquals(View.INVISIBLE, contentView.getVisibility());
     }
 
@@ -127,9 +126,9 @@
         int expandLessDrawableId = R.drawable.ic_expand_less_black_24dp;
         int expandMoreDrawableId = R.drawable.ic_expand_more_black_24dp;
 
-        mModel.set(TabStripToolbarViewProperties.LEFT_BUTTON_DRAWABLE_ID, expandLessDrawableId);
+        mModel.set(TabGroupUiProperties.LEFT_BUTTON_DRAWABLE_ID, expandLessDrawableId);
         Drawable expandLessDrawable = mLeftButton.getDrawable();
-        mModel.set(TabStripToolbarViewProperties.LEFT_BUTTON_DRAWABLE_ID, expandMoreDrawableId);
+        mModel.set(TabGroupUiProperties.LEFT_BUTTON_DRAWABLE_ID, expandMoreDrawableId);
         Drawable expandMoreDrawable = mLeftButton.getDrawable();
 
         assertNotEquals(expandLessDrawable, expandMoreDrawable);
@@ -145,7 +144,7 @@
         Assert.assertNotEquals(tint, mLeftButton.getImageTintList());
         Assert.assertNotEquals(tint, mRightButton.getImageTintList());
 
-        mModel.set(TabStripToolbarViewProperties.TINT, tint);
+        mModel.set(TabGroupUiProperties.TINT, tint);
 
         Assert.assertEquals(tint, mLeftButton.getImageTintList());
         Assert.assertEquals(tint, mRightButton.getImageTintList());
@@ -158,9 +157,9 @@
         int colorGrey = R.color.modern_grey_300;
         int colorBlue = R.color.modern_blue_300;
 
-        mModel.set(TabStripToolbarViewProperties.PRIMARY_COLOR, colorGrey);
+        mModel.set(TabGroupUiProperties.PRIMARY_COLOR, colorGrey);
         int greyDrawableId = ((ColorDrawable) mMainContent.getBackground()).getColor();
-        mModel.set(TabStripToolbarViewProperties.PRIMARY_COLOR, colorBlue);
+        mModel.set(TabGroupUiProperties.PRIMARY_COLOR, colorBlue);
         int blueDrawableId = ((ColorDrawable) mMainContent.getBackground()).getColor();
 
         assertNotEquals(greyDrawableId, blueDrawableId);
diff --git a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediatorUnitTest.java b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediatorUnitTest.java
index 9766e28..762361a 100644
--- a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediatorUnitTest.java
+++ b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediatorUnitTest.java
@@ -277,7 +277,7 @@
 
         mResetHandlerInOrder = inOrder(mResetHandler);
         mVisibilityControllerInOrder = inOrder(mVisibilityController);
-        mModel = new PropertyModel(TabStripToolbarViewProperties.ALL_KEYS);
+        mModel = new PropertyModel(TabGroupUiProperties.ALL_KEYS);
     }
 
     @After
@@ -311,7 +311,7 @@
         initAndAssertProperties(mTab2);
 
         View.OnClickListener listener =
-                mModel.get(TabStripToolbarViewProperties.LEFT_BUTTON_ON_CLICK_LISTENER);
+                mModel.get(TabGroupUiProperties.LEFT_BUTTON_ON_CLICK_LISTENER);
         assertThat(listener, instanceOf(View.OnClickListener.class));
 
         listener.onClick(mView);
@@ -324,7 +324,7 @@
         initAndAssertProperties(mTab1);
 
         View.OnClickListener listener =
-                mModel.get(TabStripToolbarViewProperties.RIGHT_BUTTON_ON_CLICK_LISTENER);
+                mModel.get(TabGroupUiProperties.RIGHT_BUTTON_ON_CLICK_LISTENER);
         assertThat(listener, instanceOf(View.OnClickListener.class));
 
         listener.onClick(mView);
@@ -676,22 +676,22 @@
     @Test
     public void themeColorChange() {
         initAndAssertProperties(mTab1);
-        mModel.set(TabStripToolbarViewProperties.PRIMARY_COLOR, -1);
+        mModel.set(TabGroupUiProperties.PRIMARY_COLOR, -1);
 
         mThemeColorObserverArgumentCaptor.getValue().onThemeColorChanged(1, false);
 
-        assertThat(mModel.get(TabStripToolbarViewProperties.PRIMARY_COLOR), equalTo(1));
+        assertThat(mModel.get(TabGroupUiProperties.PRIMARY_COLOR), equalTo(1));
     }
 
     @Test
     public void tintChange() {
         initAndAssertProperties(mTab1);
-        mModel.set(TabStripToolbarViewProperties.TINT, null);
+        mModel.set(TabGroupUiProperties.TINT, null);
         ColorStateList colorStateList = mock(ColorStateList.class);
 
         mTintObserverArgumentCaptor.getValue().onTintChanged(colorStateList, true);
 
-        assertThat(mModel.get(TabStripToolbarViewProperties.TINT), equalTo(colorStateList));
+        assertThat(mModel.get(TabGroupUiProperties.TINT), equalTo(colorStateList));
     }
 
     @Test
@@ -744,12 +744,11 @@
         initAndAssertProperties(mTab3);
         int drawableId = 321;
 
-        mModel.set(TabStripToolbarViewProperties.LEFT_BUTTON_DRAWABLE_ID, 0);
+        mModel.set(TabGroupUiProperties.LEFT_BUTTON_DRAWABLE_ID, 0);
 
         mTabGroupUiMediator.setupLeftButtonDrawable(drawableId);
 
-        assertThat(mModel.get(TabStripToolbarViewProperties.LEFT_BUTTON_DRAWABLE_ID),
-                equalTo(drawableId));
+        assertThat(mModel.get(TabGroupUiProperties.LEFT_BUTTON_DRAWABLE_ID), equalTo(drawableId));
     }
 
     @Test
@@ -757,11 +756,11 @@
         initAndAssertProperties(mTab3);
         View.OnClickListener listener = v -> {};
 
-        mModel.set(TabStripToolbarViewProperties.LEFT_BUTTON_ON_CLICK_LISTENER, null);
+        mModel.set(TabGroupUiProperties.LEFT_BUTTON_ON_CLICK_LISTENER, null);
 
         mTabGroupUiMediator.setupLeftButtonOnClickListener(listener);
 
-        assertThat(mModel.get(TabStripToolbarViewProperties.LEFT_BUTTON_ON_CLICK_LISTENER),
-                equalTo(listener));
+        assertThat(
+                mModel.get(TabGroupUiProperties.LEFT_BUTTON_ON_CLICK_LISTENER), equalTo(listener));
     }
 }
diff --git a/chrome/android/features/tab_ui/tab_management_java_sources.gni b/chrome/android/features/tab_ui/tab_management_java_sources.gni
index be91916..cd2ae28 100644
--- a/chrome/android/features/tab_ui/tab_management_java_sources.gni
+++ b/chrome/android/features/tab_ui/tab_management_java_sources.gni
@@ -40,7 +40,7 @@
   "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridPanelViewBinderTest.java",
   "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupPopupUiTest.java",
   "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupPopupUiViewBinderTest.java",
-  "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiToolbarViewBinderTest.java",
+  "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiViewBinderTest.java",
   "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabListContainerViewBinderTest.java",
   "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabListViewHolderTest.java",
   "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorLayoutBinderTest.java",
diff --git a/chrome/android/java/res/layout/password_no_result.xml b/chrome/android/java/res/layout/password_no_result.xml
new file mode 100644
index 0000000..2d069175
--- /dev/null
+++ b/chrome/android/java/res/layout/password_no_result.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2020 The Chromium Authors. All rights reserved.
+     Use of this source code is governed by a BSD-style license that can be
+     found in the LICENSE file. -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <FrameLayout
+        style="@style/Card"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:layout_marginStart="16dp"
+        android:layout_marginEnd="16dp">
+
+        <org.chromium.ui.widget.TextViewWithLeading
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:padding="@dimen/card_padding"
+            android:text="@string/password_no_result"
+            android:textAlignment="center"
+            android:textAppearance="@style/TextAppearance.TextMedium.Secondary"
+            app:leading="@dimen/text_size_medium_leading" />
+
+    </FrameLayout>
+
+</FrameLayout>
diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml
index 909432f..50690c4 100644
--- a/chrome/android/java/res/values/dimens.xml
+++ b/chrome/android/java/res/values/dimens.xml
@@ -5,7 +5,6 @@
 
 <resources xmlns:tools="http://schemas.android.com/tools">
     <!-- Connection info popup dimensions -->
-    <dimen name="connection_info_padding_wide">24dp</dimen>
     <dimen name="connection_info_padding_thin">16dp</dimen>
 
     <!-- Page Info Popup Dimensions -->
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopup.java b/chrome/android/java/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopup.java
index f0f0472..8415b29 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopup.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopup.java
@@ -27,6 +27,8 @@
 import org.chromium.chrome.browser.ResourceId;
 import org.chromium.chrome.browser.vr.UiUnsupportedMode;
 import org.chromium.chrome.browser.vr.VrModuleProvider;
+import org.chromium.components.page_info.CertificateChainHelper;
+import org.chromium.components.page_info.CertificateViewer;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.content_public.browser.WebContentsObserver;
 import org.chromium.ui.modaldialog.DialogDismissalCause;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoController.java b/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoController.java
index 349dddb..03380ac 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoController.java
@@ -47,9 +47,11 @@
 import org.chromium.components.feature_engagement.Tracker;
 import org.chromium.components.page_info.CookieControlsStatus;
 import org.chromium.components.page_info.CookieControlsView;
+import org.chromium.components.page_info.PageInfoDialog;
 import org.chromium.components.page_info.PageInfoView;
 import org.chromium.components.page_info.PageInfoView.ConnectionInfoParams;
 import org.chromium.components.page_info.PageInfoView.PageInfoViewParams;
+import org.chromium.components.page_info.SystemSettingsActivityRequiredListener;
 import org.chromium.components.security_state.ConnectionSecurityLevel;
 import org.chromium.components.url_formatter.UrlFormatter;
 import org.chromium.content_public.browser.WebContents;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PermissionParamsListBuilder.java b/chrome/android/java/src/org/chromium/chrome/browser/page_info/PermissionParamsListBuilder.java
index 8592ae3..5bf27af39 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PermissionParamsListBuilder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/page_info/PermissionParamsListBuilder.java
@@ -26,6 +26,7 @@
 import org.chromium.components.content_settings.ContentSettingsType;
 import org.chromium.components.location.LocationUtils;
 import org.chromium.components.page_info.PageInfoView;
+import org.chromium.components.page_info.SystemSettingsActivityRequiredListener;
 import org.chromium.ui.base.AndroidPermissionDelegate;
 import org.chromium.ui.base.PermissionCallback;
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
index 4b386ff3..be9c9a8a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
@@ -29,7 +29,6 @@
 import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior.OverviewModeObserver;
 import org.chromium.chrome.browser.favicon.FaviconHelper;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
-import org.chromium.chrome.browser.page_info.CertificateChainHelper;
 import org.chromium.chrome.browser.payments.handler.PaymentHandlerCoordinator;
 import org.chromium.chrome.browser.payments.handler.PaymentHandlerCoordinator.PaymentHandlerUiObserver;
 import org.chromium.chrome.browser.payments.handler.PaymentHandlerCoordinator.PaymentHandlerWebContentsObserver;
@@ -56,6 +55,7 @@
 import org.chromium.chrome.browser.widget.ScrimView;
 import org.chromium.chrome.browser.widget.ScrimView.EmptyScrimObserver;
 import org.chromium.chrome.browser.widget.ScrimView.ScrimParams;
+import org.chromium.components.page_info.CertificateChainHelper;
 import org.chromium.components.payments.CurrencyFormatter;
 import org.chromium.components.payments.ErrorStrings;
 import org.chromium.components.payments.MethodStrings;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHost.java b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHost.java
index 4a778fe9..32a7868 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHost.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHost.java
@@ -24,6 +24,7 @@
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.Log;
+import org.chromium.base.ThreadUtils;
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.task.AsyncTask;
 import org.chromium.base.task.PostTask;
@@ -248,6 +249,8 @@
      */
     public void decodeImage(Uri uri, @PickerBitmap.TileTypes int fileType, int width,
             boolean fullWidth, ImagesDecodedCallback callback) {
+        ThreadUtils.assertOnUiThread();
+
         DecoderServiceParams params = new DecoderServiceParams(
                 uri, width, fullWidth, fileType, /*firstFrame=*/true, callback);
         mPendingRequests.add(params);
@@ -409,7 +412,7 @@
         });
     }
 
-    public void closeRequestWithError(String filePath) {
+    private void closeRequestWithError(String filePath) {
         closeRequest(filePath, false, false, null, null, -1, 1.0f);
     }
 
@@ -424,7 +427,7 @@
      * @param decodeTime The length of time it took to decode the bitmaps.
      * @param ratio The ratio of the images (>1.0=portrait, <1.0=landscape).
      */
-    public void closeRequest(String filePath, boolean isVideo, boolean fullWidth,
+    private void closeRequest(String filePath, boolean isVideo, boolean fullWidth,
             @Nullable List<Bitmap> bitmaps, String videoDuration, long decodeTime, float ratio) {
         // If this assert triggers, it means that simultaneous requests have been sent for
         // decoding, which should not happen.
@@ -541,6 +544,8 @@
      * @param filePath The path to the image to cancel decoding.
      */
     public void cancelDecodeImage(String filePath) {
+        ThreadUtils.assertOnUiThread();
+
         // It is important not to null out only pending requests and not mProcessingRequest, because
         // it is used as a signal to see if the decoder is busy.
         Iterator it = mPendingRequests.iterator();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/password/PasswordSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/password/PasswordSettings.java
index ef73551e..98c89d3a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/password/PasswordSettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/password/PasswordSettings.java
@@ -202,6 +202,16 @@
         getPreferenceScreen().addPreference(mEmptyView);
     }
 
+    /**
+     * Include a message when there's no match.
+     */
+    private void displayPasswordNoResultScreenMessage() {
+        Preference noResultView = new Preference(getStyledContext());
+        noResultView.setLayoutResource(R.layout.password_no_result);
+        noResultView.setSelectable(false);
+        getPreferenceScreen().addPreference(noResultView);
+    }
+
     @Override
     public void onDetach() {
         super.onDetach();
@@ -296,6 +306,7 @@
                 // If not searching, the category needs to be removed again.
                 getPreferenceScreen().removePreference(passwordParent);
             } else {
+                displayPasswordNoResultScreenMessage();
                 getView().announceForAccessibility(
                         getString(R.string.accessible_find_in_page_no_results));
             }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sharing/click_to_call/ClickToCallMessageHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/sharing/click_to_call/ClickToCallMessageHandler.java
index f30c7054..b816c00a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sharing/click_to_call/ClickToCallMessageHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sharing/click_to_call/ClickToCallMessageHandler.java
@@ -164,8 +164,6 @@
     @CalledByNative
     @VisibleForTesting
     static void handleMessage(String phoneNumber) {
-        ClickToCallUma.recordMessageReceived();
-
         if (shouldOpenDialer()) {
             openDialer(phoneNumber);
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sharing/click_to_call/ClickToCallUma.java b/chrome/android/java/src/org/chromium/chrome/browser/sharing/click_to_call/ClickToCallUma.java
index d2fd71ac..cf37e30 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sharing/click_to_call/ClickToCallUma.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sharing/click_to_call/ClickToCallUma.java
@@ -4,124 +4,13 @@
 
 package org.chromium.chrome.browser.sharing.click_to_call;
 
-import android.content.Context;
-import android.os.Build;
-import android.os.Handler;
-import android.os.SystemClock;
-import android.telephony.PhoneStateListener;
-import android.telephony.TelephonyManager;
-
-import androidx.annotation.IntDef;
-import androidx.annotation.MainThread;
-
-import org.chromium.base.ApplicationStatus;
-import org.chromium.base.ContextUtils;
 import org.chromium.base.metrics.RecordHistogram;
-import org.chromium.chrome.browser.DeviceConditions;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
 
 /**
  * Helper Class for Click to Call UMA Collection.
  */
 public class ClickToCallUma {
-    // Keep in sync with the ClickToCallDeviceState enum in enums.xml.
-    @IntDef({ClickToCallDeviceState.SCREEN_OFF_BACKGROUND,
-            ClickToCallDeviceState.SCREEN_ON_BACKGROUND,
-            ClickToCallDeviceState.SCREEN_OFF_FOREGROUND,
-            ClickToCallDeviceState.SCREEN_ON_FOREGROUND})
-    @Retention(RetentionPolicy.SOURCE)
-    private @interface ClickToCallDeviceState {
-        int SCREEN_OFF_BACKGROUND = 0;
-        int SCREEN_ON_BACKGROUND = 1;
-        int SCREEN_OFF_FOREGROUND = 2;
-        int SCREEN_ON_FOREGROUND = 3;
-        int NUM_ENTRIES = 4;
-    }
-
-    private static @ClickToCallDeviceState int getDeviceState(Context context) {
-        boolean isScreenOn = DeviceConditions.isCurrentlyScreenOnAndUnlocked(context);
-        boolean isInForeground = ApplicationStatus.hasVisibleActivities();
-
-        if (isInForeground) {
-            return isScreenOn ? ClickToCallDeviceState.SCREEN_ON_FOREGROUND
-                              : ClickToCallDeviceState.SCREEN_OFF_FOREGROUND;
-        } else {
-            return isScreenOn ? ClickToCallDeviceState.SCREEN_ON_BACKGROUND
-                              : ClickToCallDeviceState.SCREEN_OFF_BACKGROUND;
-        }
-    }
-
-    /**
-     * Listens for outgoing phone calls for TIMEOUT_MS and adds metrics if there was one within that
-     * time frame. This is only used to measure successful usages of the Click to Call feature and
-     * does not contain any data other than the time it took from opening the dialer to a call being
-     * initiated.
-     */
-    private static final class CallMetricListener extends PhoneStateListener {
-        // Maximum time we wait for an outgoing call to be made.
-        private static final long TIMEOUT_MS = 30000;
-
-        // Current instance of a registered listener, or null if none running.
-        private static CallMetricListener sListener;
-
-        private final Handler mHandler = new Handler();
-        private final Runnable mTimeoutRunnable = this::stopMetric;
-        private final long mDialerOpenTime = SystemClock.uptimeMillis();
-        private final TelephonyManager mTelephonyManager;
-
-        private CallMetricListener(Context context) {
-            mTelephonyManager =
-                    (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
-            mTelephonyManager.listen(this, PhoneStateListener.LISTEN_CALL_STATE);
-            mHandler.postDelayed(mTimeoutRunnable, TIMEOUT_MS);
-        }
-
-        @Override
-        public void onCallStateChanged(int state, String number) {
-            // Note: |number| will always be empty as we don't have permissions to read it.
-            if (sListener != this || state != TelephonyManager.CALL_STATE_OFFHOOK) return;
-
-            // Record successful Click to Call journey and the time it took to initiate a call.
-            recordCallMade(SystemClock.uptimeMillis() - mDialerOpenTime);
-
-            stopMetric();
-        }
-
-        @MainThread
-        public static void startMetric(Context context) {
-            // We do not have READ_PHONE_STATE permissions which are required pre-M.
-            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return;
-            if (sListener != null) sListener.stopMetric();
-            sListener = new CallMetricListener(context);
-        }
-
-        @MainThread
-        private void stopMetric() {
-            if (sListener != this) return;
-            mHandler.removeCallbacks(mTimeoutRunnable);
-            mTelephonyManager.listen(this, PhoneStateListener.LISTEN_NONE);
-            sListener = null;
-        }
-    }
-
-    private static void recordCallMade(long timeFromDialerToCallMs) {
-        RecordHistogram.recordMediumTimesHistogram(
-                "Sharing.ClickToCallPhoneCall", timeFromDialerToCallMs);
-    }
-
     public static void recordDialerPresent(boolean isDialerPresent) {
-        if (isDialerPresent) {
-            // We successfully launched the dialer intent, lets record if a call is made.
-            CallMetricListener.startMetric(ContextUtils.getApplicationContext());
-        }
         RecordHistogram.recordBooleanHistogram("Sharing.ClickToCallDialerPresent", isDialerPresent);
     }
-
-    public static void recordMessageReceived() {
-        RecordHistogram.recordEnumeratedHistogram("Sharing.ClickToCallReceiveDeviceState",
-                getDeviceState(ContextUtils.getApplicationContext()),
-                ClickToCallDeviceState.NUM_ENTRIES);
-    }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java
index 5284144..256b6e2 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java
@@ -147,6 +147,7 @@
 
     @Test
     @MediumTest
+    @DisabledTest(message = "https://crbug.com/1056176")
     @Feature({"Browser"})
     @EnableFeatures({ChromeFeatureList.CONTEXT_MENU_SEARCH_WITH_GOOGLE_LENS})
     public void testSearchWithGoogleLensFiresIntent() throws Throwable {
@@ -164,6 +165,7 @@
 
     @Test
     @MediumTest
+    @DisabledTest(message = "https://crbug.com/1056176")
     @Feature({"Browser"})
     @CommandLineFlags.Add({"enable-features="
                     + ChromeFeatureList.CONTEXT_MENU_SEARCH_WITH_GOOGLE_LENS + "<FakeStudyName",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHostTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHostTest.java
index b36cedd..89c40c1 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHostTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHostTest.java
@@ -25,6 +25,7 @@
 import org.chromium.chrome.browser.ChromeSwitches;
 import org.chromium.chrome.test.ChromeActivityTestRule;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+import org.chromium.content_public.browser.test.util.TestThreadUtils;
 
 import java.io.File;
 import java.util.List;
@@ -101,6 +102,16 @@
         onDecodedCallback.waitForCallback(callCount, 1, WAIT_TIMEOUT_SECONDS, TimeUnit.SECONDS);
     }
 
+    private void decodeImage(DecoderServiceHost host, Uri uri, @PickerBitmap.TileTypes int fileType,
+            int width, boolean fullWidth, DecoderServiceHost.ImagesDecodedCallback callback) {
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> host.decodeImage(uri, fileType, width, fullWidth, callback));
+    }
+
+    private void cancelDecodeImage(DecoderServiceHost host, String filePath) {
+        TestThreadUtils.runOnUiThreadBlocking(() -> host.cancelDecodeImage(filePath));
+    }
+
     @Test
     @LargeTest
     public void testDecodingOrder() throws Throwable {
@@ -116,12 +127,12 @@
         File file2 = new File(UrlUtils.getIsolatedTestFilePath(filePath + video2));
         File file3 = new File(UrlUtils.getIsolatedTestFilePath(filePath + jpg1));
 
-        host.decodeImage(
-                Uri.fromFile(file1), PickerBitmap.TileTypes.VIDEO, 10, /*fullWidth=*/false, this);
-        host.decodeImage(
-                Uri.fromFile(file2), PickerBitmap.TileTypes.VIDEO, 10, /*fullWidth=*/false, this);
-        host.decodeImage(
-                Uri.fromFile(file3), PickerBitmap.TileTypes.PICTURE, 10, /*fullWidth=*/false, this);
+        decodeImage(host, Uri.fromFile(file1), PickerBitmap.TileTypes.VIDEO, 10,
+                /*fullWidth=*/false, this);
+        decodeImage(host, Uri.fromFile(file2), PickerBitmap.TileTypes.VIDEO, 10,
+                /*fullWidth=*/false, this);
+        decodeImage(host, Uri.fromFile(file3), PickerBitmap.TileTypes.PICTURE, 10,
+                /*fullWidth=*/false, this);
 
         // First decoding result should be first frame of video 1. Even though still images take
         // priority over video decoding, video 1 will be the only item in the queue when the first
@@ -180,8 +191,8 @@
         File file2 = new File(UrlUtils.getIsolatedTestFilePath(filePath + jpg1));
 
         // Thumbnail photo. 100 x 100 -> 10 x 10.
-        host.decodeImage(
-                Uri.fromFile(file2), PickerBitmap.TileTypes.PICTURE, 10, /*fullWidth=*/false, this);
+        decodeImage(host, Uri.fromFile(file2), PickerBitmap.TileTypes.PICTURE, 10,
+                /*fullWidth=*/false, this);
         waitForThumbnailDecode();
         Assert.assertTrue(mLastDecodedPath.contains(jpg1));
         Assert.assertEquals(false, mLastIsVideo);
@@ -192,8 +203,8 @@
         Assert.assertEquals(10, mLastInitialFrame.getHeight());
 
         // Full-width photo. 100 x 100 -> 200 x 200.
-        host.decodeImage(
-                Uri.fromFile(file2), PickerBitmap.TileTypes.PICTURE, 200, /*fullWidth=*/true, this);
+        decodeImage(host, Uri.fromFile(file2), PickerBitmap.TileTypes.PICTURE, 200,
+                /*fullWidth=*/true, this);
         waitForThumbnailDecode();
         Assert.assertTrue(mLastDecodedPath.contains(jpg1));
         Assert.assertEquals(false, mLastIsVideo);
@@ -204,8 +215,8 @@
         Assert.assertEquals(200, mLastInitialFrame.getHeight());
 
         // Thumbnail video. 1920 x 1080 -> 10 x 10.
-        host.decodeImage(
-                Uri.fromFile(file1), PickerBitmap.TileTypes.VIDEO, 10, /*fullWidth=*/false, this);
+        decodeImage(host, Uri.fromFile(file1), PickerBitmap.TileTypes.VIDEO, 10,
+                /*fullWidth=*/false, this);
         waitForThumbnailDecode(); // Initial frame.
         Assert.assertTrue(mLastDecodedPath.contains(video1));
         Assert.assertEquals(true, mLastIsVideo);
@@ -224,8 +235,8 @@
         Assert.assertEquals(10, mLastInitialFrame.getHeight());
 
         // Full-width video. 1920 x 1080 -> 2000 x 1125.
-        host.decodeImage(
-                Uri.fromFile(file1), PickerBitmap.TileTypes.VIDEO, 2000, /*fullWidth=*/true, this);
+        decodeImage(host, Uri.fromFile(file1), PickerBitmap.TileTypes.VIDEO, 2000,
+                /*fullWidth=*/true, this);
         waitForThumbnailDecode(); // Initial frame.
         Assert.assertTrue(mLastDecodedPath.contains(video1));
         Assert.assertEquals(true, mLastIsVideo);
@@ -262,15 +273,15 @@
         String yellowPath = UrlUtils.getIsolatedTestFilePath(filePath + yellow);
         String redPath = UrlUtils.getIsolatedTestFilePath(filePath + red);
 
-        host.decodeImage(Uri.fromFile(new File(greenPath)), PickerBitmap.TileTypes.PICTURE, 10,
+        decodeImage(host, Uri.fromFile(new File(greenPath)), PickerBitmap.TileTypes.PICTURE, 10,
                 /*fullWidth=*/false, this);
-        host.decodeImage(Uri.fromFile(new File(yellowPath)), PickerBitmap.TileTypes.PICTURE, 10,
+        decodeImage(host, Uri.fromFile(new File(yellowPath)), PickerBitmap.TileTypes.PICTURE, 10,
                 /*fullWidth=*/false, this);
 
         // Now add and subsequently remove the request.
-        host.decodeImage(Uri.fromFile(new File(redPath)), PickerBitmap.TileTypes.PICTURE, 10,
+        decodeImage(host, Uri.fromFile(new File(redPath)), PickerBitmap.TileTypes.PICTURE, 10,
                 /*fullWidth=*/false, this);
-        host.cancelDecodeImage(redPath);
+        cancelDecodeImage(host, redPath);
 
         // First decoding result should be the green image.
         waitForThumbnailDecode();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/password/PasswordSettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/password/PasswordSettingsTest.java
index 323ceab1..c8d1e4d 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/password/PasswordSettingsTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/password/PasswordSettingsTest.java
@@ -1875,7 +1875,7 @@
     @Test
     @SmallTest
     @Feature({"Preferences"})
-    public void testSearchDisplaysBlankPageIfSearchTurnsUpEmpty() {
+    public void testSearchDisplaysNoResultMessageIfSearchTurnsUpEmpty() {
         setPasswordSourceWithMultipleEntries(GREEK_GODS);
         SettingsActivityTest.startSettingsActivity(
                 InstrumentationRegistry.getInstrumentation(), PasswordSettings.class.getName());
@@ -1898,6 +1898,8 @@
         Espresso.onView(allOf(withParent(isAssignableFrom(LinearLayout.class)),
                                 withText(R.string.password_settings_title)))
                 .check(doesNotExist());
+        // Check the message for no result.
+        Espresso.onView(withText(R.string.password_no_result)).check(matches(isDisplayed()));
     }
 
     /**
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ui/system/StatusBarColorControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ui/system/StatusBarColorControllerTest.java
index bbcb643..b70b0ff 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/ui/system/StatusBarColorControllerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ui/system/StatusBarColorControllerTest.java
@@ -16,6 +16,7 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.MinAndroidSdkLevel;
 import org.chromium.chrome.browser.ChromeSwitches;
@@ -57,6 +58,7 @@
     @LargeTest
     @Feature({"StatusBar"})
     @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP_MR1)
+    @DisabledTest(message = "https://crbug.com/1056196")
     public void testColorToggleIncongitoInOverview() {
         ChromeTabbedActivity activity = mActivityTestRule.getActivity();
         Resources resources = activity.getResources();
@@ -87,6 +89,7 @@
     @LargeTest
     @Feature({"StatusBar"})
     @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP_MR1)
+    @DisabledTest(message = "https://crbug.com/1056196")
     public void testBrandColorIgnoredInOverview() throws Exception {
         ChromeTabbedActivity activity = mActivityTestRule.getActivity();
         Resources resources = activity.getResources();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/page_info/PermissionParamsListBuilderUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/page_info/PermissionParamsListBuilderUnitTest.java
index 70f4ff83..d291f8d9 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/page_info/PermissionParamsListBuilderUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/page_info/PermissionParamsListBuilderUnitTest.java
@@ -43,6 +43,7 @@
 import org.chromium.chrome.test.util.browser.LocationSettingsTestUtil;
 import org.chromium.components.content_settings.ContentSettingsType;
 import org.chromium.components.page_info.PageInfoView;
+import org.chromium.components.page_info.SystemSettingsActivityRequiredListener;
 import org.chromium.ui.base.AndroidPermissionDelegate;
 import org.chromium.ui.base.PermissionCallback;
 
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt
index 58b7c82..bb1907a 100644
--- a/chrome/android/profiles/newest.txt
+++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-82.0.4065.0_rc-r1-merged.afdo.bz2
\ No newline at end of file
+chromeos-chrome-amd64-82.0.4067.0_rc-r1-merged.afdo.bz2
\ No newline at end of file
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index c7dc896..2d6cd0e 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -2751,52 +2751,7 @@
           Serial
         </message>
       </if>
-
-      <!-- Certificate viewer dialog strings that are shared across all the platforms -->
-      <message name="IDS_CERT_INFO_SUBJECT_GROUP" desc="The label of the Issued To group in the general page of the certificate info dialog">
-        Issued To
-      </message>
-      <message name="IDS_CERT_INFO_ISSUER_GROUP" desc="The label of the Issued By group in the general page of the certificate info dialog">
-        Issued By
-      </message>
-      <message name="IDS_CERT_INFO_COMMON_NAME_LABEL" desc="The label of the Common Name field in the general page of the certificate info dialog.  (CN) is the name of this field in the standard">
-        Common Name (CN)
-      </message>
-      <message name="IDS_CERT_INFO_ORGANIZATION_LABEL" desc="The label of the Organization field in the general page of the certificate info dialog.  (O) is the name of this field in the standard">
-        Organization (O)
-      </message>
-      <message name="IDS_CERT_INFO_ORGANIZATIONAL_UNIT_LABEL" desc="The label of the Organizational Unit field in the general page of the certificate info dialog.  (OU) is the name of this field in the standard">
-        Organizational Unit (OU)
-      </message>
-      <message name="IDS_CERT_INFO_SERIAL_NUMBER_LABEL" desc="The label of the Serial Number field in the general page of the certificate info dialog.">
-        Serial Number
-      </message>
-      <message name="IDS_CERT_INFO_VALIDITY_GROUP" desc="The label of the group showing the validity (issued and expired dates) in the general page of the certificate info dialog">
-        Validity Period
-      </message>
-      <message name="IDS_CERT_INFO_ISSUED_ON_LABEL" desc="The label of the Issued On field in the general page of the certificate info dialog">
-        Issued On
-      </message>
-      <message name="IDS_CERT_INFO_EXPIRES_ON_LABEL" desc="The label of the Issued On field in the general page of the certificate info dialog">
-        Expires On
-      </message>
-      <message name="IDS_CERT_INFO_FINGERPRINTS_GROUP" desc="The label of the group showing the certificate fingerprints in the general page of the certificate info dialog">
-        Fingerprints
-      </message>
-      <message name="IDS_CERT_INFO_SHA256_FINGERPRINT_LABEL" desc="The label of the SHA-256 Fingerprint field in the general page of the certificate info dialog">
-        SHA-256 Fingerprint
-      </message>
-      <message name="IDS_CERT_INFO_SHA1_FINGERPRINT_LABEL" desc="The label of the SHA-1 Fingerprint field in the general page of the certificate info dialog">
-        SHA-1 Fingerprint
-      </message>
-
-      <message name="IDS_CERT_DETAILS_EXTENSIONS" desc="The label of the Extensions element in the details page of the certificate info dialog.">
-        Extensions
-      </message>
-      <message name="IDS_CERT_X509_SUBJECT_ALT_NAME" desc="description of extension Certificate Subject Alternative Name">
-        Certificate Subject Alternative Name
-      </message>
-
+ 
       <message name="IDS_CERT_EXPORT_TYPE_BASE64" desc="The description of saving a single certificate in base64 encoding.">
         Base64-encoded ASCII, single certificate
       </message>
diff --git a/chrome/app/settings_chromium_strings.grdp b/chrome/app/settings_chromium_strings.grdp
index 079dac2..886563e 100644
--- a/chrome/app/settings_chromium_strings.grdp
+++ b/chrome/app/settings_chromium_strings.grdp
@@ -89,6 +89,24 @@
   <message name="IDS_SETTINGS_SAFETY_CHECK_PARENT_PRIMARY_LABEL_BEFORE" desc="This text describes what the safety check is. (It's an area of the Settings page where users can quickly check whether their safety-related settings are fully protecting them.)">
     Chromium can help keep you safe from data breaches, bad extensions, and more
   </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_OFFLINE" desc="This text points out that the password check cannot run due to not having interent connection.">
+    Chromium can't check your passwords. Try checking your internet connection.
+  </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_NO_PASSWORDS" desc="This text points out that password check cannot run due to the user not having saved passwords.">
+    No saved passwords. Chromium can check your passwords when you save them in your Google Account.
+  </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_SIGNED_OUT" desc="This text points out that the password check can only run when the user is signed in.">
+    Chromium can check your passwords when you sign in with your Google Account
+  </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_QUOTA_LIMIT" desc="This text points out that the passwords check cannot run and that the user should try again tomorrow.">
+    Chromium can't check your passwords. Try again tomorrow.
+  </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_TOO_MANY_PASSWORDS" desc="This text points out that the password check cannot run due to the user having too many saved passwords.">
+    Chromium can't check your passwords because there are too many
+  </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_ERROR" desc="This text points out that the passwords check encountered an unknown error.">
+    Chromium can't check your passwords
+  </message>
 
   <!-- People Page -->
   <message name="IDS_SETTINGS_SYNC_DISCONNECT_DELETE_PROFILE_WARNING_WITH_COUNTS_SINGULAR" desc="Warning message displayed in the Sign out of Chrome dialog that indicates profile browsing data will be removed from the device.">
diff --git a/chrome/app/settings_google_chrome_strings.grdp b/chrome/app/settings_google_chrome_strings.grdp
index b4a791e01..21e1047 100644
--- a/chrome/app/settings_google_chrome_strings.grdp
+++ b/chrome/app/settings_google_chrome_strings.grdp
@@ -89,6 +89,24 @@
   <message name="IDS_SETTINGS_SAFETY_CHECK_PARENT_PRIMARY_LABEL_BEFORE" desc="This text describes what the safety check is. (It's an area of the Settings page where users can quickly check whether their safety-related settings are fully protecting them.)">
     Chrome can help keep you safe from data breaches, bad extensions, and more
   </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_OFFLINE" desc="This text points out that the password check cannot run due to not having interent connection.">
+    Chrome can't check your passwords. Try checking your internet connection.
+  </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_NO_PASSWORDS" desc="This text points out that password check cannot run due to the user not having saved passwords.">
+    No saved passwords. Chrome can check your passwords when you save them in your Google Account.
+  </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_SIGNED_OUT" desc="This text points out that the password check can only run when the user is signed in.">
+    Chrome can check your passwords when you sign in with your Google Account
+  </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_QUOTA_LIMIT" desc="This text points out that the passwords check cannot run and that the user should try again tomorrow.">
+    Chrome can't check your passwords. Try again tomorrow.
+  </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_TOO_MANY_PASSWORDS" desc="This text points out that the password check cannot run due to the user having too many saved passwords.">
+    Chrome can't check your passwords because there are too many
+  </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_ERROR" desc="This text points out that the passwords check encountered an unknown error.">
+    Chrome can't check your passwords
+  </message>
 
   <!-- People Page -->
   <message name="IDS_SETTINGS_SYNC_DISCONNECT_DELETE_PROFILE_WARNING_WITH_COUNTS_SINGULAR" desc="Warning message displayed in the Sign out of Chrome dialog that indicates profile browsing data will be removed from the device.">
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index 5f90c118..a6f94010 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -448,9 +448,18 @@
   <message name="IDS_SETTINGS_CHECK_PASSWORDS" desc="Name for the check passwords subsection and settings entry used to perform a password bulk check.">
     Check passwords
   </message>
+  <message name="IDS_SETTINGS_CHECKED_PASSWORDS" desc="Title above amount of found compromised passwords after password bulk check.">
+    Checked passwords
+  </message>
   <message name="IDS_SETTINGS_CHECK_PASSWORDS_DESCRIPTION" desc="Explanation of the passwords bulk check feature found within the password settings.">
     Keep your passwords safe from data breaches and other security issues
   </message>
+  <message name="IDS_SETTINGS_LEAKED_PASSWORDS_COUNT" desc="Number of compromised passwords found during bulk check.">
+    <ph name="COUNT">$1<ex>5</ex></ph> compromised passwords
+  </message>
+  <message name="IDS_SETTINGS_CHECK_PASSWORDS_AGAIN" desc="Button to start bulk password check manually in passwords check section.">
+    Check again
+  </message>
   <message name="IDS_SETTINGS_PASSWORDS_SAVE_PASSWORDS_TOGGLE_LABEL" desc="Label for a toggle that allows users to be prompted if they want to save their passwords when logging into webpages.">
     Offer to save passwords
   </message>
@@ -1760,6 +1769,24 @@
   <message name="IDS_SETTINGS_SAFETY_CHECK_PARENT_BUTTON" desc="'Check' is a verb. By clicking this button, the user can quickly check whether their safety-related settings are fully protecting them.">
     Check now
   </message>
+  <message name="IDS_SETTINGS_SAFETY_CHECK_PASSWORDS_PRIMARY_LABEL" desc="'Passwords' is an element in safety check that allows users to check for their passwords being compromised.">
+    Passwords
+  </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_SAFE" desc="This text points out that the safety check password check has not found any compromised passwords.">
+    No compromised passwords found
+  </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_COMPROMISED_SINGULAR" desc="This text points out that the safety check password check has found one compromised password.">
+    1 compromised password
+  </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_COMPROMISED_PLURAL" desc="This text points out that the safety check password check has found multiple compromised passwords. The placeholder will be a numeral.">
+    <ph name="NUM_PASSWORDS">$1<ex>42</ex></ph> compromised passwords
+  </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_BUTTON_COMPROMISED" desc="This button allows users to change their compromised passwords.">
+    Change passwords
+  </message>
+  <message name="IDS_SAFETY_CHECK_PASSWORDS_BUTTON_ERROR" desc="This button allows users to try the password check again.">
+    Try again
+  </message>
   <message name="IDS_SETTINGS_NETWORK_PREDICTION_ENABLED_LABEL" desc="In the advanced options tab, the text next to the checkbox that enables prediction of network actions.  Actions include browser-initiated DNS prefetching, TCP and SSL preconnection, and prerendering of webpages.">
     Preload pages for faster browsing and searching
   </message>
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_CHECKED_PASSWORDS.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_CHECKED_PASSWORDS.png.sha1
new file mode 100644
index 0000000..b275f77
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_CHECKED_PASSWORDS.png.sha1
@@ -0,0 +1 @@
+956520bbbe69fb947a771b72de567f1bac2ac5c4
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_CHECK_PASSWORDS_AGAIN.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_CHECK_PASSWORDS_AGAIN.png.sha1
new file mode 100644
index 0000000..b275f77
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_CHECK_PASSWORDS_AGAIN.png.sha1
@@ -0,0 +1 @@
+956520bbbe69fb947a771b72de567f1bac2ac5c4
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_LEAKED_PASSWORDS_COUNT.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_LEAKED_PASSWORDS_COUNT.png.sha1
new file mode 100644
index 0000000..b275f77
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_LEAKED_PASSWORDS_COUNT.png.sha1
@@ -0,0 +1 @@
+956520bbbe69fb947a771b72de567f1bac2ac5c4
\ No newline at end of file
diff --git a/chrome/browser/chrome_browser_main_win.cc b/chrome/browser/chrome_browser_main_win.cc
index 96662df..48eea89 100644
--- a/chrome/browser/chrome_browser_main_win.cc
+++ b/chrome/browser/chrome_browser_main_win.cc
@@ -427,9 +427,7 @@
       FROM_HERE, base::BindOnce(&InitializeModuleDatabase,
                                 third_party_blocking_policy_enabled));
 
-  *module_watcher =
-      ModuleWatcher::Create(base::BindRepeating(&OnModuleEvent),
-                            /* report_background_loaded_modules = */ true);
+  *module_watcher = ModuleWatcher::Create(base::BindRepeating(&OnModuleEvent));
 }
 
 void ShowCloseBrowserFirstMessageBox() {
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index b836409..41daf09 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -2741,6 +2741,7 @@
     "child_accounts/time_limits/app_time_test_utils.cc",
     "child_accounts/time_limits/app_time_test_utils.h",
     "child_accounts/time_limits/app_types_unittest.cc",
+    "child_accounts/time_limits/persisted_app_info_unittest.cc",
     "child_accounts/usage_time_limit_processor_unittest.cc",
     "child_accounts/usage_time_state_notifier_unittest.cc",
     "chrome_content_browser_client_chromeos_part_unittest.cc",
diff --git a/chrome/browser/chromeos/certificate_provider/test_certificate_provider_extension.cc b/chrome/browser/chromeos/certificate_provider/test_certificate_provider_extension.cc
index eeac418..98a689f 100644
--- a/chrome/browser/chromeos/certificate_provider/test_certificate_provider_extension.cc
+++ b/chrome/browser/chromeos/certificate_provider/test_certificate_provider_extension.cc
@@ -15,6 +15,7 @@
 #include "base/logging.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/string_piece.h"
+#include "base/strings/string_util.h"
 #include "chrome/common/extensions/api/certificate_provider.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/notification_details.h"
@@ -161,10 +162,11 @@
     CHECK_EQ(message_value.GetList().size(), 1U);
     HandleCertificatesRequest(std::move(send_reply_to_js_callback));
   } else if (request_type == "onSignatureRequested") {
-    CHECK_EQ(message_value.GetList().size(), 3U);
+    CHECK_EQ(message_value.GetList().size(), 4U);
     HandleSignatureRequest(
         /*sign_request=*/message_value.GetList()[1],
-        /*pin_user_input=*/message_value.GetList()[2],
+        /*pin_status=*/message_value.GetList()[2],
+        /*pin=*/message_value.GetList()[3],
         std::move(send_reply_to_js_callback));
   } else {
     LOG(FATAL) << "Unexpected JS message type: " << request_type;
@@ -181,10 +183,13 @@
 
 void TestCertificateProviderExtension::HandleSignatureRequest(
     const base::Value& sign_request,
-    const base::Value& pin_user_input,
+    const base::Value& pin_status,
+    const base::Value& pin,
     ReplyToJsCallback callback) {
   CHECK_EQ(*sign_request.FindKey("certificate"),
            ConvertBytesToValue(GetCertDer(*certificate_)));
+  const std::string pin_status_string = pin_status.GetString();
+  const std::string pin_string = pin.GetString();
 
   const int sign_request_id = sign_request.FindKey("signRequestId")->GetInt();
   const std::vector<uint8_t> digest =
@@ -209,7 +214,7 @@
 
   base::Value response(base::Value::Type::DICTIONARY);
   if (required_pin_.has_value()) {
-    if (pin_user_input.is_none()) {
+    if (pin_status_string == "not_requested") {
       // The PIN is required but not specified yet, so request it via the JS
       // side before generating the signature.
       base::Value pin_request_parameters(base::Value::Type::DICTIONARY);
@@ -218,7 +223,17 @@
       std::move(callback).Run(response);
       return;
     }
-    if (pin_user_input.GetString() != *required_pin_) {
+    if (pin_status_string == "canceled" ||
+        base::StartsWith(pin_status_string,
+                         "failed:", base::CompareCase::SENSITIVE)) {
+      // The PIN request failed.
+      LOG(WARNING) << "PIN request failed: " << pin_status_string;
+      // Respond with a failure.
+      std::move(callback).Run(/*response=*/base::Value());
+      return;
+    }
+    DCHECK_EQ(pin_status_string, "ok");
+    if (pin_string != *required_pin_) {
       // The PIN is wrong, so retry the PIN request with displaying an error.
       base::Value pin_request_parameters(base::Value::Type::DICTIONARY);
       pin_request_parameters.SetIntKey("signRequestId", sign_request_id);
diff --git a/chrome/browser/chromeos/certificate_provider/test_certificate_provider_extension.h b/chrome/browser/chromeos/certificate_provider/test_certificate_provider_extension.h
index c9105c1..2ee43b9d 100644
--- a/chrome/browser/chromeos/certificate_provider/test_certificate_provider_extension.h
+++ b/chrome/browser/chromeos/certificate_provider/test_certificate_provider_extension.h
@@ -79,7 +79,8 @@
 
   void HandleCertificatesRequest(ReplyToJsCallback callback);
   void HandleSignatureRequest(const base::Value& sign_request,
-                              const base::Value& pin_user_input,
+                              const base::Value& pin_status,
+                              const base::Value& pin,
                               ReplyToJsCallback callback);
 
   content::BrowserContext* const browser_context_;
diff --git a/chrome/browser/chromeos/child_accounts/child_user_service.cc b/chrome/browser/chromeos/child_accounts/child_user_service.cc
index db2a9e4..7bc90138d 100644
--- a/chrome/browser/chromeos/child_accounts/child_user_service.cc
+++ b/chrome/browser/chromeos/child_accounts/child_user_service.cc
@@ -64,7 +64,7 @@
 
 app_time::AppActivityReportInterface::ReportParams
 ChildUserService::GenerateAppActivityReport(
-    enterprise_management::ChildStatusReportRequest* report) const {
+    enterprise_management::ChildStatusReportRequest* report) {
   DCHECK(app_time_controller_);
   return app_time_controller_->app_registry()->GenerateAppActivityReport(
       report);
@@ -73,7 +73,7 @@
 void ChildUserService::AppActivityReportSubmitted(
     base::Time report_generation_timestamp) {
   DCHECK(app_time_controller_);
-  app_time_controller_->app_registry()->CleanRegistry(
+  app_time_controller_->app_registry()->OnSuccessfullyReported(
       report_generation_timestamp);
 }
 
@@ -104,7 +104,10 @@
 }
 
 void ChildUserService::Shutdown() {
-  app_time_controller_.reset();
+  if (app_time_controller_) {
+    app_time_controller_->app_registry()->SaveAppActivity();
+    app_time_controller_.reset();
+  }
 }
 
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/child_accounts/child_user_service.h b/chrome/browser/chromeos/child_accounts/child_user_service.h
index c871de5..ebea61e 100644
--- a/chrome/browser/chromeos/child_accounts/child_user_service.h
+++ b/chrome/browser/chromeos/child_accounts/child_user_service.h
@@ -64,7 +64,7 @@
 
   // app_time::AppActivityReportInterface:
   app_time::AppActivityReportInterface::ReportParams GenerateAppActivityReport(
-      enterprise_management::ChildStatusReportRequest* report) const override;
+      enterprise_management::ChildStatusReportRequest* report) override;
   void AppActivityReportSubmitted(
       base::Time report_generation_timestamp) override;
 
diff --git a/chrome/browser/chromeos/child_accounts/time_limits/app_activity_registry.cc b/chrome/browser/chromeos/child_accounts/time_limits/app_activity_registry.cc
index 66924a7..4fb2f6f 100644
--- a/chrome/browser/chromeos/child_accounts/time_limits/app_activity_registry.cc
+++ b/chrome/browser/chromeos/child_accounts/time_limits/app_activity_registry.cc
@@ -4,10 +4,11 @@
 
 #include "chrome/browser/chromeos/child_accounts/time_limits/app_activity_registry.h"
 
+#include <algorithm>
+
 #include "base/logging.h"
 #include "base/stl_util.h"
 #include "base/time/default_tick_clock.h"
-#include "base/timer/timer.h"
 #include "base/values.h"
 #include "chrome/browser/chromeos/child_accounts/time_limits/app_time_limit_utils.h"
 #include "chrome/browser/chromeos/child_accounts/time_limits/app_time_limits_whitelist_policy_wrapper.h"
@@ -143,6 +144,8 @@
 // static
 void AppActivityRegistry::RegisterProfilePrefs(PrefRegistrySimple* registry) {
   registry->RegisterListPref(prefs::kPerAppTimeLimitsAppActivities);
+  registry->RegisterInt64Pref(prefs::kPerAppTimeLimitsLastSuccessfulReportTime,
+                              0);
 }
 
 AppActivityRegistry::AppActivityRegistry(
@@ -151,13 +154,20 @@
     Profile* profile)
     : profile_(profile),
       app_service_wrapper_(app_service_wrapper),
-      notification_delegate_(notification_delegate) {
+      notification_delegate_(notification_delegate),
+      save_data_to_pref_service_(base::DefaultTickClock::GetInstance()) {
   DCHECK(app_service_wrapper_);
   DCHECK(notification_delegate_);
   DCHECK(profile_);
 
+  if (ShouldCleanUpStoredPref())
+    CleanRegistry(base::Time::Now() - base::TimeDelta::FromDays(30));
+
   InitializeRegistryFromPref();
 
+  save_data_to_pref_service_.Start(FROM_HERE, base::TimeDelta::FromMinutes(5),
+                                   this, &AppActivityRegistry::SaveAppActivity);
+
   app_service_wrapper_->AddObserver(this);
 }
 
@@ -310,18 +320,29 @@
 
 AppActivityReportInterface::ReportParams
 AppActivityRegistry::GenerateAppActivityReport(
-    enterprise_management::ChildStatusReportRequest* report) const {
-  // TODO(agawronska): We should also report the ongoing activity if it started
-  // before the reporting, because it could have been going for a long time.
+    enterprise_management::ChildStatusReportRequest* report) {
+  SaveAppActivity();
+
+  PrefService* pref_service = profile_->GetPrefs();
+  const base::Value* value =
+      pref_service->GetList(prefs::kPerAppTimeLimitsAppActivities);
+  DCHECK(value);
+
+  const std::vector<PersistedAppInfo> applications_info =
+      PersistedAppInfo::PersistedAppInfosFromList(
+          value,
+          /* include_app_activity_array */ true);
+
   const base::Time timestamp = base::Time::Now();
   bool anything_reported = false;
 
-  for (const auto& entry : activity_registry_) {
-    const AppId& app_id = entry.first;
-    const AppActivity& registered_activity = entry.second.activity;
+  for (const auto& entry : applications_info) {
+    const AppId& app_id = entry.app_id();
+    const std::vector<AppActivity::ActiveTime>& active_times =
+        entry.active_times();
 
     // Do not report if there is no activity.
-    if (registered_activity.active_times().empty())
+    if (active_times.empty())
       continue;
 
     enterprise_management::AppActivity* app_activity =
@@ -334,11 +355,10 @@
       app_info->add_additional_app_id(
           app_service_wrapper_->GetAppServiceId(app_id));
     }
-    app_activity->set_app_state(
-        AppStateForReporting(registered_activity.app_state()));
+    app_activity->set_app_state(AppStateForReporting(entry.app_state()));
     app_activity->set_populated_at(timestamp.ToJavaTime());
 
-    for (const auto& active_time : registered_activity.active_times()) {
+    for (const auto& active_time : active_times) {
       enterprise_management::TimePeriod* time_period =
           app_activity->add_active_time_periods();
       time_period->set_start_timestamp(active_time.active_from().ToJavaTime());
@@ -350,21 +370,13 @@
   return AppActivityReportInterface::ReportParams{timestamp, anything_reported};
 }
 
-void AppActivityRegistry::CleanRegistry(base::Time timestamp) {
-  for (auto it = activity_registry_.begin(); it != activity_registry_.end();) {
-    const AppId& app_id = it->first;
-    AppActivity& registered_activity = it->second.activity;
-    // TODO(agawronska): Update data stored in user pref.
-    registered_activity.RemoveActiveTimeEarlierThan(timestamp);
-    // Remove app that was uninstalled and does not have any past activity
-    // stored.
-    if (GetAppState(app_id) == AppState::kUninstalled &&
-        registered_activity.active_times().empty()) {
-      it = activity_registry_.erase(it);
-    } else {
-      ++it;
-    }
-  }
+void AppActivityRegistry::OnSuccessfullyReported(base::Time timestamp) {
+  CleanRegistry(timestamp);
+
+  // Update last successful report time.
+  profile_->GetPrefs()->SetInt64(
+      prefs::kPerAppTimeLimitsLastSuccessfulReportTime,
+      timestamp.ToDeltaSinceWindowsEpoch().InMicroseconds());
 }
 
 void AppActivityRegistry::UpdateAppLimits(
@@ -488,6 +500,44 @@
   }
 }
 
+void AppActivityRegistry::SaveAppActivity() {
+  {
+    ListPrefUpdate update(profile_->GetPrefs(),
+                          prefs::kPerAppTimeLimitsAppActivities);
+    base::ListValue* list_value = update.Get();
+
+    const base::Time now = base::Time::Now();
+
+    base::Value::ListView list_view = list_value->GetList();
+    for (base::Value& entry : list_view) {
+      base::Optional<AppId> app_id = policy::AppIdFromAppInfoDict(entry);
+      DCHECK(app_id.has_value());
+
+      if (!base::Contains(activity_registry_, app_id.value())) {
+        base::Optional<AppState> state =
+            PersistedAppInfo::GetAppStateFromDict(&entry);
+        DCHECK(state.has_value() && state.value() == AppState::kUninstalled);
+        continue;
+      }
+
+      const PersistedAppInfo info =
+          GetPersistedAppInfoForApp(app_id.value(), now);
+      info.UpdateAppActivityPreference(&entry, /* replace */ false);
+    }
+
+    for (const AppId& app_id : newly_installed_apps_) {
+      const PersistedAppInfo info = GetPersistedAppInfoForApp(app_id, now);
+      base::Value value(base::Value::Type::DICTIONARY);
+      info.UpdateAppActivityPreference(&value, /* replace */ false);
+      list_value->Append(std::move(value));
+    }
+    newly_installed_apps_.clear();
+  }
+
+  // Ensure that the app activity is persisted.
+  profile_->GetPrefs()->CommitPendingWrite();
+}
+
 void AppActivityRegistry::OnResetTimeReached(base::Time timestamp) {
   for (std::pair<const AppId, AppDetails>& info : activity_registry_) {
     const AppId& app = info.first;
@@ -510,6 +560,41 @@
   }
 }
 
+void AppActivityRegistry::CleanRegistry(base::Time timestamp) {
+  ListPrefUpdate update(profile_->GetPrefs(),
+                        prefs::kPerAppTimeLimitsAppActivities);
+
+  base::ListValue* list_value = update.Get();
+
+  // base::Value::ListStorage is an alias for std::vector<base::Value>.
+  base::Value::ListStorage list_storage = list_value->TakeList();
+
+  for (size_t index = 0; index < list_storage.size();) {
+    base::Value& entry = list_storage[index];
+    base::Optional<PersistedAppInfo> info =
+        PersistedAppInfo::PersistedAppInfoFromDict(&entry, true);
+    DCHECK(info.has_value());
+    info->RemoveActiveTimeEarlierThan(timestamp);
+    info->UpdateAppActivityPreference(&entry, /* replace */ true);
+
+    if (info->app_state() == AppState::kUninstalled &&
+        info->active_times().size() == 0) {
+      // Remove entry in |activity_registry_| if it is present.
+      activity_registry_.erase(info->app_id());
+
+      // To efficiently remove the entry, swap it with the last element and pop
+      // back.
+      if (index < list_storage.size() - 1)
+        std::swap(list_storage[index], list_storage[list_storage.size() - 1]);
+      list_storage.pop_back();
+    } else {
+      ++index;
+    }
+  }
+
+  *list_value = base::ListValue(std::move(list_storage));
+}
+
 void AppActivityRegistry::Add(const AppId& app_id) {
   activity_registry_[app_id].activity = AppActivity(AppState::kAvailable);
   newly_installed_apps_.push_back(app_id);
@@ -807,51 +892,30 @@
 
   AppDetails& details = activity_registry_.at(app_id);
 
+  base::TimeDelta running_active_time = details.activity.RunningActiveTime();
+  if (ContributesToWebTimeLimit(app_id, GetAppState(app_id)))
+    running_active_time = GetWebActiveRunningTime();
+
   // Updates |AppActivity::active_times_| to include the current activity up to
   // |timestamp|.
   details.activity.CaptureOngoingActivity(timestamp);
 
   return PersistedAppInfo(app_id, details.activity.app_state(),
-                          details.activity.RunningActiveTime(),
+                          running_active_time,
                           details.activity.TakeActiveTimes());
 }
 
-void AppActivityRegistry::SaveAppActivity() {
-  {
-    ListPrefUpdate update(profile_->GetPrefs(),
-                          prefs::kPerAppTimeLimitsAppActivities);
-    base::ListValue* list_value = update.Get();
+bool AppActivityRegistry::ShouldCleanUpStoredPref() {
+  int64_t last_time = profile_->GetPrefs()->GetInt64(
+      prefs::kPerAppTimeLimitsLastSuccessfulReportTime);
 
-    const base::Time now = base::Time::Now();
+  if (last_time == 0)
+    return false;
 
-    base::Value::ListView list_view = list_value->GetList();
-    for (base::Value& entry : list_view) {
-      base::Optional<AppId> app_id = policy::AppIdFromAppInfoDict(entry);
-      DCHECK(app_id.has_value());
+  base::Time time = base::Time::FromDeltaSinceWindowsEpoch(
+      base::TimeDelta::FromMicroseconds(last_time));
 
-      if (!base::Contains(activity_registry_, app_id.value())) {
-        base::Optional<AppState> state =
-            PersistedAppInfo::GetAppStateFromDict(&entry);
-        DCHECK(state.has_value() && state.value() == AppState::kUninstalled);
-        continue;
-      }
-
-      const PersistedAppInfo info =
-          GetPersistedAppInfoForApp(app_id.value(), now);
-      info.UpdateAppActivityPreference(&entry);
-    }
-
-    for (const AppId& app_id : newly_installed_apps_) {
-      const PersistedAppInfo info = GetPersistedAppInfoForApp(app_id, now);
-      base::Value value(base::Value::Type::DICTIONARY);
-      info.UpdateAppActivityPreference(&value);
-      list_value->Append(std::move(value));
-    }
-    newly_installed_apps_.clear();
-  }
-
-  // Ensure that the app activity is persisted.
-  profile_->GetPrefs()->CommitPendingWrite();
+  return time < base::Time::Now() - base::TimeDelta::FromDays(30);
 }
 
 }  // namespace app_time
diff --git a/chrome/browser/chromeos/child_accounts/time_limits/app_activity_registry.h b/chrome/browser/chromeos/child_accounts/time_limits/app_activity_registry.h
index d398c31..73b461b 100644
--- a/chrome/browser/chromeos/child_accounts/time_limits/app_activity_registry.h
+++ b/chrome/browser/chromeos/child_accounts/time_limits/app_activity_registry.h
@@ -12,6 +12,7 @@
 #include "base/observer_list_types.h"
 #include "base/optional.h"
 #include "base/time/time.h"
+#include "base/timer/timer.h"
 #include "chrome/browser/chromeos/child_accounts/time_limits/app_activity_report_interface.h"
 #include "chrome/browser/chromeos/child_accounts/time_limits/app_service_wrapper.h"
 #include "chrome/browser/chromeos/child_accounts/time_limits/app_types.h"
@@ -24,10 +25,6 @@
 class ChildStatusReportRequest;
 }  // namespace enterprise_management
 
-namespace base {
-class OneShotTimer;
-}  // namespace base
-
 class PrefRegistrySimple;
 class Profile;
 
@@ -124,12 +121,11 @@
   // Populates |report| with collected app activity. Returns whether any data
   // were reported.
   AppActivityReportInterface::ReportParams GenerateAppActivityReport(
-      enterprise_management::ChildStatusReportRequest* report) const;
+      enterprise_management::ChildStatusReportRequest* report);
 
-  // Removes data older than |timestamp| from the registry.
-  // Removes entries for uninstalled apps if there is no more relevant activity
-  // data left.
-  void CleanRegistry(base::Time timestamp);
+  // Application activities earlier than |timestamp| have been reported. Clear
+  // entries earlier than |timestamp|.
+  void OnSuccessfullyReported(base::Time timestamp);
 
   // Updates time limits for all installed apps.
   // Apps not present in |app_limits| are treated as they do not have limit set.
@@ -152,6 +148,9 @@
   void OnTimeLimitWhitelistChanged(
       const AppTimeLimitsWhitelistPolicyWrapper& wrapper);
 
+  // Saves app activity into user preference.
+  void SaveAppActivity();
+
  private:
   // Bundles detailed data stored for a specific app.
   struct AppDetails {
@@ -185,6 +184,11 @@
     std::unique_ptr<base::OneShotTimer> app_limit_timer;
   };
 
+  // Removes data older than |timestamp| from the registry.
+  // Removes entries for uninstalled apps if there is no more relevant activity
+  // data left.
+  void CleanRegistry(base::Time timestamp);
+
   // Adds an ap to the registry if it does not exist.
   void Add(const AppId& app_id);
 
@@ -225,8 +229,9 @@
   PersistedAppInfo GetPersistedAppInfoForApp(const AppId& app_id,
                                              base::Time timestamp);
 
-  // Saves app activity into user preference.
-  void SaveAppActivity();
+  // Returns true if the last successfully reported time is earlier than 30 days
+  // from base::Time::Now();
+  bool ShouldCleanUpStoredPref();
 
   Profile* const profile_;
 
@@ -244,6 +249,9 @@
   // Newly installed applications which have not yet been added to the user
   // pref.
   std::vector<AppId> newly_installed_apps_;
+
+  // Repeating timer to trigger saving app activity to pref service.
+  base::RepeatingTimer save_data_to_pref_service_;
 };
 
 }  // namespace app_time
diff --git a/chrome/browser/chromeos/child_accounts/time_limits/app_activity_registry_unittest.cc b/chrome/browser/chromeos/child_accounts/time_limits/app_activity_registry_unittest.cc
index 9b23888..a28f307 100644
--- a/chrome/browser/chromeos/child_accounts/time_limits/app_activity_registry_unittest.cc
+++ b/chrome/browser/chromeos/child_accounts/time_limits/app_activity_registry_unittest.cc
@@ -88,6 +88,9 @@
   }
   Profile& profile() { return profile_; }
 
+  void CreateAppActivityForApp(const AppId& app_id,
+                               base::TimeDelta activity_length);
+
  private:
   TestingProfile profile_;
   AppTimeNotificationDelegateMock notification_delegate_mock_;
@@ -135,6 +138,15 @@
       std::make_unique<AppActivityRegistry::TestApi>(registry_.get());
 }
 
+void AppActivityRegistryTest::CreateAppActivityForApp(
+    const AppId& app_id,
+    base::TimeDelta activity_length) {
+  auto* app_window = CreateWindowForApp(app_id);
+  registry().OnAppActive(app_id, app_window, base::Time::Now());
+  task_environment().FastForwardBy(activity_length);
+  registry().OnAppInactive(app_id, app_window, base::Time::Now());
+}
+
 TEST_F(AppActivityRegistryTest, RunningActiveTimeCheck) {
   auto* app1_window = CreateWindowForApp(kApp1);
 
@@ -671,5 +683,65 @@
   }
 }
 
+TEST_F(AppActivityRegistryTest, RemoveUninstalledApplications) {
+  CreateAppActivityForApp(kApp1, base::TimeDelta::FromHours(1));
+  CreateAppActivityForApp(kApp2, base::TimeDelta::FromHours(1));
+
+  // App1 has been uninstalled.
+  registry().OnAppUninstalled(kApp1);
+  task_environment().FastForwardBy(base::TimeDelta::FromMinutes(10));
+
+  // Removes kApp1 and cleans up ActiveTimes list in user pref.
+  registry().OnSuccessfullyReported(base::Time::Now());
+
+  // Now let's test that the app activity are stored appropriately.
+  const base::Value* value =
+      profile().GetPrefs()->GetList(prefs::kPerAppTimeLimitsAppActivities);
+
+  const std::vector<PersistedAppInfo> app_infos =
+      PersistedAppInfo::PersistedAppInfosFromList(
+          value,
+          /* include_app_activity_array */ true);
+
+  // Two apps left. They are Chrome, and kApp2.
+  EXPECT_EQ(app_infos.size(), 2u);
+  for (const auto& entry : app_infos) {
+    EXPECT_EQ(entry.active_times().size(), 0u);
+    EXPECT_NE(entry.app_id(), kApp1);
+  }
+}
+
+TEST_F(AppActivityRegistryTest, RemoveOldEntries) {
+  base::Time start_time = base::Time::Now();
+
+  CreateAppActivityForApp(kApp1, base::TimeDelta::FromHours(1));
+  CreateAppActivityForApp(kApp2, base::TimeDelta::FromHours(1));
+
+  profile().GetPrefs()->SetInt64(
+      prefs::kPerAppTimeLimitsLastSuccessfulReportTime,
+      start_time.ToDeltaSinceWindowsEpoch().InMicroseconds());
+
+  task_environment().FastForwardBy(base::TimeDelta::FromDays(30));
+
+  // Now let's recreate AppActivityRegistry. Its state should be restored.
+  ReInitializeRegistry();
+
+  // Now let's test that the app activity are stored appropriately.
+  const base::Value* value =
+      profile().GetPrefs()->GetList(prefs::kPerAppTimeLimitsAppActivities);
+
+  const std::vector<PersistedAppInfo> app_infos =
+      PersistedAppInfo::PersistedAppInfosFromList(
+          value,
+          /* include_app_activity_array */ true);
+
+  // The app activities have been cleared.
+  for (const auto& app_info : app_infos) {
+    const std::vector<AppActivity::ActiveTime>& active_time =
+        app_info.active_times();
+    EXPECT_EQ(active_time.size(), 0u);
+  }
+}
+
 }  // namespace app_time
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/child_accounts/time_limits/app_activity_report_interface.h b/chrome/browser/chromeos/child_accounts/time_limits/app_activity_report_interface.h
index 920aa6490..b595cb5 100644
--- a/chrome/browser/chromeos/child_accounts/time_limits/app_activity_report_interface.h
+++ b/chrome/browser/chromeos/child_accounts/time_limits/app_activity_report_interface.h
@@ -41,7 +41,7 @@
   // Populates child status |report| with collected app activity.
   // Returns whether any data were populated.
   virtual ReportParams GenerateAppActivityReport(
-      enterprise_management::ChildStatusReportRequest* report) const = 0;
+      enterprise_management::ChildStatusReportRequest* report) = 0;
 
   // Clears the stored app activity older than |report_generation_timestamp|.
   // Should be called when child status report was successfully submitted.
diff --git a/chrome/browser/chromeos/child_accounts/time_limits/app_types.cc b/chrome/browser/chromeos/child_accounts/time_limits/app_types.cc
index cd20c0f..2e0aecb 100644
--- a/chrome/browser/chromeos/child_accounts/time_limits/app_types.cc
+++ b/chrome/browser/chromeos/child_accounts/time_limits/app_types.cc
@@ -249,22 +249,5 @@
   return std::move(active_times_);
 }
 
-void AppActivity::RemoveActiveTimeEarlierThan(base::Time timestamp) {
-  for (auto active_time = active_times_.begin();
-       active_time != active_times_.end();) {
-    if (active_time->IsEarlierThan(timestamp)) {
-      active_time = active_times_.erase(active_time);
-      continue;
-    }
-    if (active_time->IsLaterThan(timestamp)) {
-      ++active_time;
-      continue;
-    }
-    DCHECK(active_time->Contains(timestamp));
-    active_time->set_active_from(timestamp);
-    ++active_time;
-  }
-}
-
 }  // namespace app_time
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/child_accounts/time_limits/app_types.h b/chrome/browser/chromeos/child_accounts/time_limits/app_types.h
index 3f1d26e..e13a0bb 100644
--- a/chrome/browser/chromeos/child_accounts/time_limits/app_types.h
+++ b/chrome/browser/chromeos/child_accounts/time_limits/app_types.h
@@ -212,9 +212,6 @@
   // saved in user preference.
   std::vector<ActiveTime> TakeActiveTimes();
 
-  // TODO(yilkal) remove the following method.
-  void RemoveActiveTimeEarlierThan(base::Time timestamp);
-
   bool is_active() const { return is_active_; }
   AppState app_state() const { return app_state_; }
   const std::vector<ActiveTime>& active_times() const { return active_times_; }
diff --git a/chrome/browser/chromeos/child_accounts/time_limits/app_types_unittest.cc b/chrome/browser/chromeos/child_accounts/time_limits/app_types_unittest.cc
index e0a061f..a454bda 100644
--- a/chrome/browser/chromeos/child_accounts/time_limits/app_types_unittest.cc
+++ b/chrome/browser/chromeos/child_accounts/time_limits/app_types_unittest.cc
@@ -130,52 +130,6 @@
   EXPECT_EQ(merged_time5->active_to(), time3);
 }
 
-TEST_F(AppActivityTest, RemoveActiveTimes) {
-  base::test::TaskEnvironment task_environment(
-      base::test::TaskEnvironment::TimeSource::MOCK_TIME);
-  AppActivity activity(AppState::kAvailable);
-
-  // Time interval that will be removed.
-  base::Time start = base::Time::Now();
-  activity.SetAppActive(start);
-  task_environment.FastForwardBy(base::TimeDelta::FromMinutes(10));
-  base::Time end = base::Time::Now();
-  activity.SetAppInactive(end);
-  const AppActivity::ActiveTime to_remove(start, end);
-
-  // Time interval that will be trimmed.
-  start = base::Time::Now();
-  activity.SetAppActive(start);
-  task_environment.FastForwardBy(base::TimeDelta::FromMinutes(5));
-  const base::Time report_time = base::Time::Now();
-  task_environment.FastForwardBy(base::TimeDelta::FromMinutes(5));
-  end = base::Time::Now();
-  activity.SetAppInactive(end);
-  const AppActivity::ActiveTime to_trim(start, end);
-
-  // Time interval that will be kept.
-  start = base::Time::Now();
-  activity.SetAppActive(start);
-  task_environment.FastForwardBy(base::TimeDelta::FromMinutes(10));
-  end = base::Time::Now();
-  activity.SetAppInactive(end);
-  const AppActivity::ActiveTime to_keep(start, end);
-
-  EXPECT_EQ(3u, activity.active_times().size());
-  EXPECT_TRUE(base::Contains(activity.active_times(), to_remove));
-  EXPECT_TRUE(base::Contains(activity.active_times(), to_trim));
-  EXPECT_TRUE(base::Contains(activity.active_times(), to_keep));
-
-  activity.RemoveActiveTimeEarlierThan(report_time);
-
-  EXPECT_EQ(2u, activity.active_times().size());
-  EXPECT_FALSE(base::Contains(activity.active_times(), to_remove));
-  EXPECT_TRUE(base::Contains(activity.active_times(), to_keep));
-
-  const AppActivity::ActiveTime trimmed(report_time, to_trim.active_to());
-  EXPECT_TRUE(base::Contains(activity.active_times(), trimmed));
-}
-
 // TODO(agawronska) : Add more tests for app activity.
 
 }  // namespace app_time
diff --git a/chrome/browser/chromeos/child_accounts/time_limits/persisted_app_info.cc b/chrome/browser/chromeos/child_accounts/time_limits/persisted_app_info.cc
index b04b576a..14bb13a 100644
--- a/chrome/browser/chromeos/child_accounts/time_limits/persisted_app_info.cc
+++ b/chrome/browser/chromeos/child_accounts/time_limits/persisted_app_info.cc
@@ -213,7 +213,9 @@
 
 PersistedAppInfo::~PersistedAppInfo() = default;
 
-void PersistedAppInfo::UpdateAppActivityPreference(base::Value* dict) const {
+void PersistedAppInfo::UpdateAppActivityPreference(
+    base::Value* dict,
+    bool replace_activity) const {
   DCHECK(!!dict && dict->is_dict());
 
   dict->SetKey(kAppInfoKey, policy::AppIdToDict(app_id_));
@@ -222,6 +224,16 @@
       kRunningActiveTimeKey,
       base::NumberToString(active_running_time().InMicroseconds()));
 
+  if (replace_activity) {
+    base::Value active_times_value(base::Value::Type::LIST);
+    for (const auto& entry : active_times_) {
+      active_times_value.Append(AppActivityToDict(entry));
+    }
+
+    dict->SetPath(kActiveTimesKey, std::move(active_times_value));
+    return;
+  }
+
   base::Value* value = dict->FindListKey(kActiveTimesKey);
   if (!value || !value->is_list()) {
     value =
@@ -256,5 +268,20 @@
   }
 }
 
+void PersistedAppInfo::RemoveActiveTimeEarlierThan(base::Time timestamp) {
+  std::vector<AppActivity::ActiveTime> active_times = std::move(active_times_);
+
+  // |active_times_| is empty now. Populate it with active times later than
+  // |timestamp|.
+  for (auto& entry : active_times) {
+    if (entry.IsLaterThan(timestamp)) {
+      active_times_.push_back(entry);
+    } else if (entry.Contains(timestamp)) {
+      entry.set_active_from(timestamp);
+      active_times_.push_back(entry);
+    }
+  }
+}
+
 }  // namespace app_time
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/child_accounts/time_limits/persisted_app_info.h b/chrome/browser/chromeos/child_accounts/time_limits/persisted_app_info.h
index f3b764b..04d4dab5 100644
--- a/chrome/browser/chromeos/child_accounts/time_limits/persisted_app_info.h
+++ b/chrome/browser/chromeos/child_accounts/time_limits/persisted_app_info.h
@@ -39,7 +39,14 @@
 
   ~PersistedAppInfo();
 
-  void UpdateAppActivityPreference(base::Value* dict) const;
+  // Updates the dictionary to contain the information stored in this class.
+  // If |replace_activity| is true, then completely replaces the list keyed by
+  // |kActiveTimesKey| in the dicationary. Otherwise, appends the values in
+  // |active_running_time_|.
+  void UpdateAppActivityPreference(base::Value* dict,
+                                   bool replace_activity) const;
+
+  void RemoveActiveTimeEarlierThan(base::Time timestamp);
 
   const AppId& app_id() const { return app_id_; }
   AppState app_state() const { return app_state_; }
diff --git a/chrome/browser/chromeos/child_accounts/time_limits/persisted_app_info_unittest.cc b/chrome/browser/chromeos/child_accounts/time_limits/persisted_app_info_unittest.cc
new file mode 100644
index 0000000..e6178489
--- /dev/null
+++ b/chrome/browser/chromeos/child_accounts/time_limits/persisted_app_info_unittest.cc
@@ -0,0 +1,100 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/child_accounts/time_limits/persisted_app_info.h"
+
+#include "base/time/time.h"
+#include "base/values.h"
+#include "chrome/browser/chromeos/child_accounts/time_limits/app_types.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chromeos {
+namespace app_time {
+
+using PersistedAppInfoTest = testing::Test;
+
+TEST_F(PersistedAppInfoTest, RemoveActiveTimes) {
+  AppId app = AppId(apps::mojom::AppType::kArc, "1");
+  AppState app_state = AppState::kAvailable;
+  base::TimeDelta running_active_time = base::TimeDelta::FromHours(5);
+
+  base::Time start_time = base::Time::Now();
+  base::TimeDelta activity = base::TimeDelta::FromHours(1);
+
+  AppActivity::ActiveTime to_remove =
+      AppActivity::ActiveTime(start_time, start_time + activity);
+  AppActivity::ActiveTime to_trim = AppActivity::ActiveTime(
+      start_time + 2 * activity, start_time + 3 * activity);
+  AppActivity::ActiveTime to_keep = AppActivity::ActiveTime(
+      start_time + 4 * activity, start_time + 5 * activity);
+
+  PersistedAppInfo app_info(app, app_state, running_active_time,
+                            {{to_remove, to_trim, to_keep}});
+
+  EXPECT_TRUE(base::Contains(app_info.active_times(), to_remove));
+  EXPECT_TRUE(base::Contains(app_info.active_times(), to_trim));
+  EXPECT_TRUE(base::Contains(app_info.active_times(), to_keep));
+
+  base::Time report_time = start_time + 2.5 * activity;
+  app_info.RemoveActiveTimeEarlierThan(report_time);
+
+  EXPECT_EQ(2u, app_info.active_times().size());
+  EXPECT_FALSE(base::Contains(app_info.active_times(), to_remove));
+  EXPECT_TRUE(base::Contains(app_info.active_times(), to_keep));
+
+  const AppActivity::ActiveTime trimmed(report_time, to_trim.active_to());
+  EXPECT_TRUE(base::Contains(app_info.active_times(), trimmed));
+}
+
+TEST_F(PersistedAppInfoTest, UpdateAppActivityPreference) {
+  AppId app = AppId(apps::mojom::AppType::kArc, "1");
+  AppState app_state = AppState::kAvailable;
+  base::TimeDelta running_active_time = base::TimeDelta::FromHours(5);
+
+  base::Time start_time = base::Time::Now();
+  base::TimeDelta activity = base::TimeDelta::FromHours(1);
+
+  AppActivity::ActiveTime entry1 =
+      AppActivity::ActiveTime(start_time, start_time + activity);
+  AppActivity::ActiveTime entry2 = AppActivity::ActiveTime(
+      start_time + 2 * activity, start_time + 3 * activity);
+  AppActivity::ActiveTime entry3 = AppActivity::ActiveTime(
+      start_time + 4 * activity, start_time + 5 * activity);
+
+  PersistedAppInfo app_info(app, app_state, running_active_time,
+                            {{entry1, entry2, entry3}});
+  base::Value entry(base::Value::Type::DICTIONARY);
+
+  app_info.UpdateAppActivityPreference(&entry, /* replace */ false);
+  AppActivity::ActiveTime to_append = AppActivity::ActiveTime(
+      start_time + 6 * activity, start_time + 7 * activity);
+  PersistedAppInfo app_info2(app, app_state, running_active_time,
+                             {{to_append}});
+  app_info2.UpdateAppActivityPreference(&entry, /* replace */ false);
+
+  base::Optional<PersistedAppInfo> updated_entry =
+      PersistedAppInfo::PersistedAppInfoFromDict(
+          &entry, /* include_app_activity_array */ true);
+  ASSERT_TRUE(updated_entry.has_value());
+
+  const std::vector<AppActivity::ActiveTime>& active_times =
+      updated_entry->active_times();
+
+  EXPECT_EQ(active_times.size(), 4u);
+  EXPECT_EQ(active_times[0], entry1);
+  EXPECT_EQ(active_times[1], entry2);
+  EXPECT_EQ(active_times[2], entry3);
+  EXPECT_EQ(active_times[3], to_append);
+
+  app_info2.UpdateAppActivityPreference(&entry, /* replace */ true);
+  base::Optional<PersistedAppInfo> final_entry =
+      PersistedAppInfo::PersistedAppInfoFromDict(
+          &entry, /* include_app_activity_array */ true);
+  EXPECT_TRUE(final_entry.has_value());
+  EXPECT_EQ(final_entry->active_times().size(), 1u);
+  EXPECT_EQ(final_entry->active_times()[0], to_append);
+}
+
+}  // namespace app_time
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/login/reset_browsertest.cc b/chrome/browser/chromeos/login/reset_browsertest.cc
index dad63fd9..1092b31 100644
--- a/chrome/browser/chromeos/login/reset_browsertest.cc
+++ b/chrome/browser/chromeos/login/reset_browsertest.cc
@@ -47,15 +47,28 @@
 constexpr char kTestUser1[] = "test-user1@gmail.com";
 constexpr char kTestUser1GaiaId[] = "test-user1@gmail.com";
 
+// HTML Elements
+constexpr char kResetScreen[] = "reset";
+constexpr char kConfirmationDialog[] = "confirmationDialog";
+constexpr char kHelpDialog[] = "helpDialog";
+constexpr char kTpmUpdate[] = "tpmFirmwareUpdate";
+constexpr char kTpmUpdateCheckbox[] = "tpmFirmwareUpdateCheckbox";
+
 void InvokeRollbackOption() {
   test::ExecuteOobeJS("cr.ui.Oobe.handleAccelerator('reset');");
 }
 
-void CloseResetScreen() {
+void RequestCloseResetScreen() {
   test::ExecuteOobeJS(
       "chrome.send('login.ResetScreen.userActed', ['cancel-reset']);");
 }
 
+void CloseResetScreen() {
+  RequestCloseResetScreen();
+  OobeScreenExitWaiter(ResetView::kScreenId).Wait();
+  EXPECT_TRUE(ash::LoginScreenTestApi::IsGuestButtonShown());
+}
+
 void ClickResetButton() {
   test::ExecuteOobeJS(
       "chrome.send('login.ResetScreen.userActed', ['powerwash-pressed']);");
@@ -77,6 +90,27 @@
       "['reset-confirm-dismissed']);");
 }
 
+void WaitForConfirmationDialogToOpen() {
+  test::OobeJS()
+      .CreateAttributePresenceWaiter(
+          "open", true /*present*/,
+          {kResetScreen, kConfirmationDialog, kHelpDialog})
+      ->Wait();
+}
+
+void WaitForConfirmationDialogToClose() {
+  test::OobeJS()
+      .CreateAttributePresenceWaiter(
+          "open", false /*present*/,
+          {kResetScreen, kConfirmationDialog, kHelpDialog})
+      ->Wait();
+}
+
+void ExpectConfirmationDialogClosed() {
+  test::OobeJS().ExpectHasNoAttribute(
+      "open", {kResetScreen, kConfirmationDialog, kHelpDialog});
+}
+
 // Helper class that tracks whether 'login-prompt-visible' signal was requested
 // from the session manager service.
 class LoginPromptVisibleObserver : public SessionManagerClient::Observer {
@@ -135,7 +169,10 @@
   // Simulates reset screen request from views based login.
   void InvokeResetScreen() {
     chromeos::LoginDisplayHost::default_host()->ShowResetScreen();
+    EXPECT_TRUE(login_prompt_visible_observer_->signal_emitted());
     OobeScreenWaiter(ResetView::kScreenId).Wait();
+    EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
+    ExpectConfirmationDialogClosed();
   }
 
   FakeUpdateEngineClient* update_engine_client_ = nullptr;
@@ -174,6 +211,8 @@
   void InvokeResetScreen() {
     test::ExecuteOobeJS("cr.ui.Oobe.handleAccelerator('reset');");
     OobeScreenWaiter(ResetView::kScreenId).Wait();
+    EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
+    ExpectConfirmationDialogClosed();
   }
 
   FakeUpdateEngineClient* update_engine_client_ = nullptr;
@@ -268,14 +307,7 @@
 IN_PROC_BROWSER_TEST_F(ResetTest, ShowAndCancel) {
   EXPECT_TRUE(ash::LoginScreenTestApi::IsGuestButtonShown());
   InvokeResetScreen();
-  EXPECT_TRUE(login_prompt_visible_observer_->signal_emitted());
-  EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
-
-  test::OobeJS().ExpectVisible("reset");
-
   CloseResetScreen();
-  test::OobeJS().CreateVisibilityWaiter(false, {"reset"})->Wait();
-  EXPECT_TRUE(ash::LoginScreenTestApi::IsGuestButtonShown());
 }
 
 IN_PROC_BROWSER_TEST_F(ResetTest, RestartBeforePowerwash) {
@@ -283,8 +315,6 @@
   PrefService* prefs = g_browser_process->local_state();
 
   InvokeResetScreen();
-  EXPECT_TRUE(login_prompt_visible_observer_->signal_emitted());
-  EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
 
   EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(0, FakeSessionManagerClient::Get()->start_device_wipe_call_count());
@@ -301,10 +331,6 @@
   EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
   InvokeResetScreen();
 
-  OobeScreenWaiter(ResetView::kScreenId).Wait();
-  test::OobeJS().ExpectVisible("reset");
-  EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
-
   ClickResetButton();
   EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(1, FakeSessionManagerClient::Get()->start_device_wipe_call_count());
@@ -316,13 +342,9 @@
   EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
   InvokeResetScreen();
 
-  OobeScreenWaiter(ResetView::kScreenId).Wait();
-  test::OobeJS().ExpectVisible("reset");
-  EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
-
-  CloseResetScreen();
+  RequestCloseResetScreen();
   OobeScreenWaiter(WelcomeView::kScreenId).Wait();
-  test::OobeJS().ExpectHidden("reset");
+  test::OobeJS().ExpectHidden(kResetScreen);
   EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
 
   EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
@@ -351,43 +373,36 @@
   // Rollback unavailable. Show and cancel.
   update_engine_client_->set_can_rollback_check_result(false);
   InvokeResetScreen();
-  EXPECT_TRUE(login_prompt_visible_observer_->signal_emitted());
-  EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
-
-  test::OobeJS().CreateVisibilityWaiter(true, {"reset"})->Wait();
-  test::OobeJS().ExpectHidden("overlay-reset");
   CloseResetScreen();
-  test::OobeJS().CreateVisibilityWaiter(false, {"reset"})->Wait();
-  EXPECT_TRUE(ash::LoginScreenTestApi::IsGuestButtonShown());
 
   // Go to confirmation phase, cancel from there in 2 steps.
   prefs->SetBoolean(prefs::kFactoryResetRequested, true);
   InvokeResetScreen();
-  test::OobeJS().CreateVisibilityWaiter(false, {"overlay-reset"})->Wait();
-  EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
+
   ClickToConfirmButton();
-  test::OobeJS().CreateVisibilityWaiter(true, {"overlay-reset"})->Wait();
+  WaitForConfirmationDialogToOpen();
+
   ClickDismissConfirmationButton();
-  test::OobeJS().CreateVisibilityWaiter(false, {"overlay-reset"})->Wait();
-  test::OobeJS().CreateVisibilityWaiter(true, {"reset"})->Wait();
+  WaitForConfirmationDialogToClose();
+
+  test::OobeJS().ExpectVisible(kResetScreen);
   EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
   CloseResetScreen();
-  test::OobeJS().CreateVisibilityWaiter(false, {"reset"})->Wait();
-  EXPECT_TRUE(ash::LoginScreenTestApi::IsGuestButtonShown());
 
   // Rollback available. Show and cancel from confirmation screen.
   update_engine_client_->set_can_rollback_check_result(true);
   prefs->SetBoolean(prefs::kFactoryResetRequested, true);
   InvokeResetScreen();
   InvokeRollbackOption();
-  test::OobeJS().ExpectHidden("overlay-reset");
+
   ClickToConfirmButton();
-  test::OobeJS().CreateVisibilityWaiter(true, {"overlay-reset"})->Wait();
+  WaitForConfirmationDialogToOpen();
+
   ClickDismissConfirmationButton();
-  test::OobeJS().CreateVisibilityWaiter(false, {"overlay-reset"})->Wait();
-  test::OobeJS().ExpectVisible("reset");
+  WaitForConfirmationDialogToClose();
+
+  test::OobeJS().ExpectVisible(kResetScreen);
   CloseResetScreen();
-  test::OobeJS().CreateVisibilityWaiter(false, {"reset"})->Wait();
 }
 
 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_ShowAfterBootIfRequested) {
@@ -400,11 +415,9 @@
   EXPECT_TRUE(login_prompt_visible_observer_->signal_emitted());
   EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
 
-  test::OobeJS().CreateVisibilityWaiter(true, {"reset"})->Wait();
+  test::OobeJS().CreateVisibilityWaiter(true, {kResetScreen})->Wait();
   EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
   CloseResetScreen();
-  test::OobeJS().CreateVisibilityWaiter(false, {"reset"})->Wait();
-  EXPECT_TRUE(ash::LoginScreenTestApi::IsGuestButtonShown());
 }
 
 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_RollbackUnavailable) {
@@ -414,8 +427,6 @@
 
 IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, RollbackUnavailable) {
   InvokeResetScreen();
-  EXPECT_TRUE(login_prompt_visible_observer_->signal_emitted());
-  EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
 
   EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(0, FakeSessionManagerClient::Get()->start_device_wipe_call_count());
@@ -427,8 +438,6 @@
   EXPECT_EQ(1, FakeSessionManagerClient::Get()->start_device_wipe_call_count());
   EXPECT_EQ(0, update_engine_client_->rollback_call_count());
   CloseResetScreen();
-  OobeScreenExitWaiter(ResetView::kScreenId).Wait();
-  EXPECT_TRUE(ash::LoginScreenTestApi::IsGuestButtonShown());
 
   // Next invocation leads to rollback view.
   PrefService* prefs = g_browser_process->local_state();
@@ -470,21 +479,15 @@
   EXPECT_EQ(1, FakeSessionManagerClient::Get()->start_device_wipe_call_count());
   EXPECT_EQ(0, update_engine_client_->rollback_call_count());
   CloseResetScreen();
-  OobeScreenExitWaiter(ResetView::kScreenId).Wait();
-  EXPECT_TRUE(ash::LoginScreenTestApi::IsGuestButtonShown());
 
   // Next invocation leads to simple reset, not rollback view.
   prefs->SetBoolean(prefs::kFactoryResetRequested, true);
   InvokeResetScreen();
-  EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
   InvokeRollbackOption();  // Shows rollback.
   EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
   ClickDismissConfirmationButton();
   EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown());
   CloseResetScreen();
-  OobeScreenExitWaiter(ResetView::kScreenId).Wait();
-  EXPECT_TRUE(ash::LoginScreenTestApi::IsGuestButtonShown());
-
   InvokeResetScreen();
   ClickToConfirmButton();
   ClickResetButton();
@@ -492,8 +495,6 @@
   EXPECT_EQ(2, FakeSessionManagerClient::Get()->start_device_wipe_call_count());
   EXPECT_EQ(0, update_engine_client_->rollback_call_count());
   CloseResetScreen();
-  OobeScreenExitWaiter(ResetView::kScreenId).Wait();
-  EXPECT_TRUE(ash::LoginScreenTestApi::IsGuestButtonShown());
 
   prefs->SetBoolean(prefs::kFactoryResetRequested, true);
   InvokeResetScreen();
@@ -519,7 +520,7 @@
   EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(0, FakeSessionManagerClient::Get()->start_device_wipe_call_count());
   EXPECT_EQ(0, update_engine_client_->rollback_call_count());
-  test::OobeJS().ExpectHasNoClass("revert-promise-view", {"reset"});
+  test::OobeJS().ExpectHasNoClass("revert-promise-view", {kResetScreen});
 
   InvokeRollbackOption();
   ClickToConfirmButton();
@@ -528,7 +529,7 @@
   EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
   EXPECT_EQ(0, FakeSessionManagerClient::Get()->start_device_wipe_call_count());
   EXPECT_EQ(1, update_engine_client_->rollback_call_count());
-  test::OobeJS().ExpectHasClass("revert-promise-view", {"reset"});
+  test::OobeJS().ExpectHasClass("revert-promise-view", {kResetScreen});
 
   update_engine::StatusResult error_update_status;
   error_update_status.set_current_operation(update_engine::Operation::ERROR);
@@ -560,36 +561,32 @@
   EXPECT_EQ(0, FakeSessionManagerClient::Get()->start_device_wipe_call_count());
   EXPECT_EQ(0, update_engine_client_->rollback_call_count());
 
-  test::OobeJS().ExpectVisible("reset");
-  test::OobeJS().ExpectHasNoClass("rollback-proposal-view", {"reset"});
+  test::OobeJS().ExpectVisible(kResetScreen);
+  test::OobeJS().ExpectHasNoClass("rollback-proposal-view", {kResetScreen});
 
   InvokeRollbackOption();
   test::OobeJS()
-      .CreateHasClassWaiter(true, "rollback-proposal-view", {"reset"})
+      .CreateHasClassWaiter(true, "rollback-proposal-view", {kResetScreen})
       ->Wait();
 
   CloseResetScreen();
-  OobeScreenExitWaiter(ResetView::kScreenId).Wait();
-
   InvokeResetScreen();
-  OobeScreenWaiter(ResetView::kScreenId).Wait();
 
   InvokeRollbackOption();
   test::OobeJS()
-      .CreateHasClassWaiter(true, "rollback-proposal-view", {"reset"})
+      .CreateHasClassWaiter(true, "rollback-proposal-view", {kResetScreen})
       ->Wait();
 }
 
 IN_PROC_BROWSER_TEST_F(ResetTestWithTpmFirmwareUpdate,
                        PRE_ResetFromSigninWithFirmwareUpdate) {
   InvokeResetScreen();
-  EXPECT_TRUE(login_prompt_visible_observer_->signal_emitted());
 
-  test::OobeJS().ExpectHiddenPath({"oobe-reset-md", "tpmFirmwareUpdate"});
+  test::OobeJS().ExpectHiddenPath({kResetScreen, kTpmUpdate});
   ASSERT_TRUE(HasPendingTpmFirmwareUpdateCheck());
   FinishPendingTpmFirmwareUpdateCheck({tpm_firmware_update::Mode::kPowerwash});
 
-  test::OobeJS().ExpectHiddenPath({"oobe-reset-md", "tpmFirmwareUpdate"});
+  test::OobeJS().ExpectHiddenPath({kResetScreen, kTpmUpdate});
   ClickRestartButton();
 }
 
@@ -602,11 +599,10 @@
   FinishPendingTpmFirmwareUpdateCheck({tpm_firmware_update::Mode::kPowerwash});
 
   test::OobeJS()
-      .CreateVisibilityWaiter(true, {"oobe-reset-md", "tpmFirmwareUpdate"})
+      .CreateVisibilityWaiter(true, {kResetScreen, kTpmUpdate})
       ->Wait();
-  test::OobeJS().Evaluate(
-      test::GetOobeElementPath({"oobe-reset-md", "tpmFirmwareUpdateCheckbox"}) +
-      ".fire('click')");
+
+  test::OobeJS().ClickOnPath({kResetScreen, kTpmUpdateCheckbox});
 
   ClickResetButton();
   EXPECT_EQ(0, FakeSessionManagerClient::Get()->start_device_wipe_call_count());
@@ -640,7 +636,7 @@
   FinishPendingTpmFirmwareUpdateCheck({tpm_firmware_update::Mode::kPowerwash});
 
   test::OobeJS()
-      .CreateVisibilityWaiter(true, {"oobe-reset-md", "tpmFirmwareUpdate"})
+      .CreateVisibilityWaiter(true, {kResetScreen, kTpmUpdate})
       ->Wait();
 
   ClickResetButton();
@@ -666,7 +662,7 @@
 
   EXPECT_FALSE(HasPendingTpmFirmwareUpdateCheck());
   test::OobeJS()
-      .CreateVisibilityWaiter(true, {"oobe-reset-md", "tpmFirmwareUpdate"})
+      .CreateVisibilityWaiter(true, {kResetScreen, kTpmUpdate})
       ->Wait();
 
   ClickResetButton();
@@ -702,7 +698,7 @@
 
   EXPECT_FALSE(HasPendingTpmFirmwareUpdateCheck());
   test::OobeJS()
-      .CreateVisibilityWaiter(true, {"oobe-reset-md", "tpmFirmwareUpdate"})
+      .CreateVisibilityWaiter(true, {kResetScreen, kTpmUpdate})
       ->Wait();
 
   ClickResetButton();
@@ -742,12 +738,10 @@
 
   EXPECT_FALSE(HasPendingTpmFirmwareUpdateCheck());
   test::OobeJS()
-      .CreateVisibilityWaiter(true, {"oobe-reset-md", "tpmFirmwareUpdate"})
+      .CreateVisibilityWaiter(true, {kResetScreen, kTpmUpdate})
       ->Wait();
 
-  test::OobeJS().Evaluate(
-      test::GetOobeElementPath({"oobe-reset-md", "tpmFirmwareUpdateCheckbox"}) +
-      ".fire('click')");
+  test::OobeJS().ClickOnPath({kResetScreen, kTpmUpdateCheckbox});
 
   ClickResetButton();
   EXPECT_EQ(0, FakeSessionManagerClient::Get()->start_device_wipe_call_count());
@@ -783,7 +777,7 @@
 
   EXPECT_FALSE(HasPendingTpmFirmwareUpdateCheck());
   test::OobeJS()
-      .CreateVisibilityWaiter(true, {"oobe-reset-md", "tpmFirmwareUpdate"})
+      .CreateVisibilityWaiter(true, {kResetScreen, kTpmUpdate})
       ->Wait();
 
   ClickResetButton();
diff --git a/chrome/browser/chromeos/login/saml/saml_browsertest.cc b/chrome/browser/chromeos/login/saml/saml_browsertest.cc
index 90f4396..f2949f9 100644
--- a/chrome/browser/chromeos/login/saml/saml_browsertest.cc
+++ b/chrome/browser/chromeos/login/saml/saml_browsertest.cc
@@ -1274,6 +1274,7 @@
 
   void ShowGAIALoginForm();
   void ShowSAMLInterstitial();
+  void ClickBackOnSAMLInterstitialPage();
   void ClickNextOnSAMLInterstitialPage();
   void LogInWithSAML(const std::string& user_id,
                      const std::string& auth_sid_cookie,
@@ -1470,6 +1471,10 @@
       ->Wait();
 }
 
+void SAMLPolicyTest::ClickBackOnSAMLInterstitialPage() {
+  test::OobeJS().TapOnPath({"gaia-signin", "interstitial-back"});
+}
+
 void SAMLPolicyTest::ClickNextOnSAMLInterstitialPage() {
   content::DOMMessageQueue message_queue;
   SetupAuthFlowChangeListener();
@@ -1708,6 +1713,12 @@
   WaitForSigninScreen();
 
   ShowSAMLInterstitial();
+  ClickBackOnSAMLInterstitialPage();
+  // Back button should hide OOBE dialog.
+  EXPECT_FALSE(ash::LoginScreenTestApi::IsOobeDialogVisible());
+  EXPECT_TRUE(ash::LoginScreenTestApi::IsAddUserButtonShown());
+
+  ShowSAMLInterstitial();
   ClickNextOnSAMLInterstitialPage();
 
   SigninFrameJS().TypeIntoPath("fake_user", {"Email"});
diff --git a/chrome/browser/chromeos/login/screens/reset_screen.cc b/chrome/browser/chromeos/login/screens/reset_screen.cc
index 95646d1f..33107d5 100644
--- a/chrome/browser/chromeos/login/screens/reset_screen.cc
+++ b/chrome/browser/chromeos/login/screens/reset_screen.cc
@@ -165,17 +165,12 @@
     view_->Bind(this);
     view_->SetScreenState(ResetView::State::kRestartRequired);
     view_->SetIsRollbackAvailable(false);
-    view_->SetIsRollbackChecked(false);
+    view_->SetIsRollbackRequested(false);
     view_->SetIsTpmFirmwareUpdateAvailable(false);
     view_->SetIsTpmFirmwareUpdateChecked(false);
     view_->SetIsTpmFirmwareUpdateEditable(true);
     view_->SetTpmFirmwareUpdateMode(tpm_firmware_update::Mode::kPowerwash);
-    view_->SetIsConfirmational(false);
-#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
-    view_->SetIsGoogleBrandedBuild(true);
-#else
-    view_->SetIsGoogleBrandedBuild(false);
-#endif
+    view_->SetShouldShowConfirmationDialog(false);
   }
 }
 
@@ -312,8 +307,10 @@
     return;
   }
   // Hide Rollback view for the next show.
-  if (view_ && view_->GetIsRollbackAvailable() && view_->GetIsRollbackChecked())
+  if (view_ && view_->GetIsRollbackAvailable() &&
+      view_->GetIsRollbackRequested()) {
     OnToggleRollback();
+  }
   DBusThreadManager::Get()->GetUpdateEngineClient()->RemoveObserver(this);
   exit_callback_.Run();
 }
@@ -325,16 +322,16 @@
   }
 
   if (view_)
-    view_->SetIsConfirmational(false);
+    view_->SetShouldShowConfirmationDialog(false);
 
-  if (view_ && view_->GetIsRollbackChecked() &&
+  if (view_ && view_->GetIsRollbackRequested() &&
       !view_->GetIsRollbackAvailable()) {
     NOTREACHED()
         << "Rollback was checked but not available. Starting powerwash.";
   }
 
   if (view_ && view_->GetIsRollbackAvailable() &&
-      view_->GetIsRollbackChecked()) {
+      view_->GetIsRollbackRequested()) {
     view_->SetScreenState(ResetView::State::kRevertPromise);
     DBusThreadManager::Get()->GetUpdateEngineClient()->AddObserver(this);
     VLOG(1) << "Starting Rollback";
@@ -372,37 +369,37 @@
 void ResetScreen::OnToggleRollback() {
   // Hide Rollback if visible.
   if (view_ && view_->GetIsRollbackAvailable() &&
-      view_->GetIsRollbackChecked()) {
+      view_->GetIsRollbackRequested()) {
     VLOG(1) << "Hiding rollback view on reset screen";
-    view_->SetIsRollbackChecked(false);
+    view_->SetIsRollbackRequested(false);
     return;
   }
 
   // Show Rollback if available.
   VLOG(1) << "Requested rollback availability"
           << view_->GetIsRollbackAvailable();
-  if (view_->GetIsRollbackAvailable() && !view_->GetIsRollbackChecked()) {
+  if (view_->GetIsRollbackAvailable() && !view_->GetIsRollbackRequested()) {
     UMA_HISTOGRAM_ENUMERATION(
         "Reset.ChromeOS.PowerwashDialogShown",
         reset::DIALOG_SHORTCUT_OFFERING_ROLLBACK_AVAILABLE,
         reset::DIALOG_VIEW_TYPE_SIZE);
-    view_->SetIsRollbackChecked(true);
+    view_->SetIsRollbackRequested(true);
   }
 }
 
 void ResetScreen::OnShowConfirm() {
   reset::DialogViewType dialog_type =
-      view_->GetIsRollbackChecked()
+      view_->GetIsRollbackRequested()
           ? reset::DIALOG_SHORTCUT_CONFIRMING_POWERWASH_AND_ROLLBACK
           : reset::DIALOG_SHORTCUT_CONFIRMING_POWERWASH_ONLY;
   UMA_HISTOGRAM_ENUMERATION("Reset.ChromeOS.PowerwashDialogShown", dialog_type,
                             reset::DIALOG_VIEW_TYPE_SIZE);
 
-  view_->SetIsConfirmational(true);
+  view_->SetShouldShowConfirmationDialog(true);
 }
 
 void ResetScreen::OnConfirmationDismissed() {
-  view_->SetIsConfirmational(false);
+  view_->SetConfirmationDialogClosed();
 }
 
 void ResetScreen::ShowHelpArticle(HelpAppLauncher::HelpTopic topic) {
diff --git a/chrome/browser/chromeos/login/test/js_checker.cc b/chrome/browser/chromeos/login/test/js_checker.cc
index f43633d..404bf6fd1 100644
--- a/chrome/browser/chromeos/login/test/js_checker.cc
+++ b/chrome/browser/chromeos/login/test/js_checker.cc
@@ -131,6 +131,17 @@
   return std::make_unique<TestPredicateWaiter>(predicate);
 }
 
+std::unique_ptr<TestConditionWaiter> JSChecker::CreateAttributePresenceWaiter(
+    const std::string& attribute,
+    bool presence,
+    std::initializer_list<base::StringPiece> element_ids) {
+  std::string condition = ElementHasAttributeCondition(attribute, element_ids);
+  if (!presence) {
+    condition = "!(" + condition + ")";
+  }
+  return CreateWaiter(condition);
+}
+
 std::unique_ptr<TestConditionWaiter> JSChecker::CreateVisibilityWaiter(
     bool visibility,
     std::initializer_list<base::StringPiece> element_ids) {
diff --git a/chrome/browser/chromeos/login/test/js_checker.h b/chrome/browser/chromeos/login/test/js_checker.h
index fa4a106..cc79f97d 100644
--- a/chrome/browser/chromeos/login/test/js_checker.h
+++ b/chrome/browser/chromeos/login/test/js_checker.h
@@ -61,6 +61,15 @@
   WARN_UNUSED_RESULT std::unique_ptr<TestConditionWaiter> CreateWaiter(
       const std::string& js_condition);
 
+  // Waiter that waits until the given attribute is (not) present.
+  // WARNING! This does not cover the case where ATTRIBUTE=false.
+  // Should only be used for boolean attributes.
+  WARN_UNUSED_RESULT std::unique_ptr<TestConditionWaiter>
+  CreateAttributePresenceWaiter(
+      const std::string& attribute,
+      bool presence,
+      std::initializer_list<base::StringPiece> element_ids);
+
   // Waiter that waits until specified element is (not) hidden.
   WARN_UNUSED_RESULT std::unique_ptr<TestConditionWaiter>
   CreateVisibilityWaiter(bool visibility,
diff --git a/chrome/browser/chromeos/policy/status_collector/child_status_collector.cc b/chrome/browser/chromeos/policy/status_collector/child_status_collector.cc
index 93aaa1e..dfd604b 100644
--- a/chrome/browser/chromeos/policy/status_collector/child_status_collector.cc
+++ b/chrome/browser/chromeos/policy/status_collector/child_status_collector.cc
@@ -295,7 +295,7 @@
     return false;
   }
 
-  const chromeos::app_time::AppActivityReportInterface* app_activity_reporting =
+  chromeos::app_time::AppActivityReportInterface* app_activity_reporting =
       chromeos::app_time::AppActivityReportInterface::Get(profile_);
   DCHECK(app_activity_reporting);
 
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 319afa3..209adc3 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -3607,7 +3607,10 @@
   {
     "name": "unsafely-treat-insecure-origin-as-secure",
     "owners": [ "security-dev" ],
-    "expiry_milestone": 82
+    // This flag is supported for bypassing security restrictions on HTTP pages,
+    // and is required for Android/ChromeOS devices where setting commandline
+    // flags is difficult or impossible.
+    "expiry_milestone": -1
   },
   {
     "name": "update-menu-item-custom-summary",
diff --git a/chrome/browser/flag-never-expire-list.json b/chrome/browser/flag-never-expire-list.json
index b54c48b..da85db7 100644
--- a/chrome/browser/flag-never-expire-list.json
+++ b/chrome/browser/flag-never-expire-list.json
@@ -84,6 +84,7 @@
   "translate-android-manual-trigger",
   "ui-disable-partial-swap",
   "ui-slow-animations",
+  "unsafely-treat-insecure-origin-as-secure",
   "update-menu-item-custom-summary",
   "use-angle",
   "use-fake-device-for-media-stream",
diff --git a/chrome/browser/metrics/process_memory_metrics_emitter.cc b/chrome/browser/metrics/process_memory_metrics_emitter.cc
index 8d4984d..c98be44 100644
--- a/chrome/browser/metrics/process_memory_metrics_emitter.cc
+++ b/chrome/browser/metrics/process_memory_metrics_emitter.cc
@@ -4,6 +4,10 @@
 
 #include "chrome/browser/metrics/process_memory_metrics_emitter.h"
 
+#include <set>
+#include <string>
+#include <utility>
+
 #include "base/bind.h"
 #include "base/compiler_specific.h"
 #include "base/containers/flat_set.h"
@@ -757,6 +761,9 @@
 
   if (memory_dump_in_progress_ || get_process_urls_in_progress_)
     return;
+  // The memory dump can be done, yet |global_dump_| not set if:
+  // - Process metrics collection fails first.
+  // - Process Infos arrive later.
   if (!global_dump_)
     return;
 
@@ -909,6 +916,8 @@
     // processes.
     per_tab_metrics.RecordPmfs(GetUkmRecorder());
   }
+
+  global_dump_ = nullptr;
 }
 
 namespace {
diff --git a/chrome/browser/metrics/process_memory_metrics_emitter.h b/chrome/browser/metrics/process_memory_metrics_emitter.h
index b277247..30855b4a 100644
--- a/chrome/browser/metrics/process_memory_metrics_emitter.h
+++ b/chrome/browser/metrics/process_memory_metrics_emitter.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_METRICS_PROCESS_MEMORY_METRICS_EMITTER_H_
 #define CHROME_BROWSER_METRICS_PROCESS_MEMORY_METRICS_EMITTER_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/callback.h"
diff --git a/chrome/browser/metrics/process_memory_metrics_emitter_unittest.cc b/chrome/browser/metrics/process_memory_metrics_emitter_unittest.cc
index 9a9a92ab..7149d73 100644
--- a/chrome/browser/metrics/process_memory_metrics_emitter_unittest.cc
+++ b/chrome/browser/metrics/process_memory_metrics_emitter_unittest.cc
@@ -4,6 +4,10 @@
 
 #include "chrome/browser/metrics/process_memory_metrics_emitter.h"
 
+#include <memory>
+#include <string>
+#include <utility>
+
 #include "base/containers/flat_map.h"
 #include "base/memory/ref_counted.h"
 #include "base/process/process_handle.h"
@@ -783,6 +787,25 @@
   CheckMemoryUkmEntryMetrics(expected_entries);
 }
 
+TEST_F(ProcessMemoryMetricsEmitterTest, GlobalDumpFailed) {
+  GlobalMemoryDumpPtr global_dump(
+      memory_instrumentation::mojom::GlobalMemoryDump::New());
+  MetricMap expected_metrics = GetExpectedRendererMetrics();
+  AddPageMetrics(expected_metrics);
+  PopulateRendererMetrics(global_dump, expected_metrics, kTestRendererPid201);
+
+  scoped_refptr<ProcessMemoryMetricsEmitterFake> emitter(
+      new ProcessMemoryMetricsEmitterFake(test_ukm_recorder_));
+  emitter->ReceivedMemoryDump(
+      false, GlobalMemoryDump::MoveFrom(std::move(global_dump)));
+  emitter->ReceivedProcessInfos(GetProcessInfo(test_ukm_recorder_));
+
+  // Should not record any metrics since the memory dump failed, and don't
+  // crash.
+  auto entries = test_ukm_recorder_.GetEntriesByName(UkmEntry::kEntryName);
+  ASSERT_EQ(entries.size(), 0u);
+}
+
 TEST_F(ProcessMemoryMetricsEmitterTest, ProcessInfoHasTwoURLs) {
   GlobalMemoryDumpPtr global_dump(
       memory_instrumentation::mojom::GlobalMemoryDump::New());
diff --git a/chrome/browser/resources/chromeos/login/BUILD.gn b/chrome/browser/resources/chromeos/login/BUILD.gn
index d3fc733..6c205d3 100644
--- a/chrome/browser/resources/chromeos/login/BUILD.gn
+++ b/chrome/browser/resources/chromeos/login/BUILD.gn
@@ -35,11 +35,11 @@
     ":oobe_dialog",
     ":oobe_enable_kiosk",
     ":oobe_eula",
+    ":oobe_help_dialog",
     ":oobe_i18n_behavior",
     ":oobe_i18n_dropdown",
     ":oobe_network",
     ":oobe_reset",
-    ":oobe_reset_confirmation_overlay",
     ":oobe_select",
     ":oobe_supervision_transition",
     ":oobe_update",
@@ -252,6 +252,10 @@
   ]
 }
 
+js_library("oobe_help_dialog") {
+  deps = [ ":oobe_i18n_behavior" ]
+}
+
 js_library("oobe_i18n_dropdown") {
   deps = [ ":oobe_types" ]
 }
@@ -263,10 +267,6 @@
   ]
 }
 
-js_library("oobe_reset_confirmation_overlay") {
-  deps = [ ":oobe_i18n_behavior" ]
-}
-
 js_library("oobe_reset") {
   deps = [
     ":oobe_dialog_host_behavior",
diff --git a/chrome/browser/resources/chromeos/login/custom_elements_login.html b/chrome/browser/resources/chromeos/login/custom_elements_login.html
index 82c1fe4c..d4788fe 100644
--- a/chrome/browser/resources/chromeos/login/custom_elements_login.html
+++ b/chrome/browser/resources/chromeos/login/custom_elements_login.html
@@ -25,7 +25,6 @@
 <include src="oobe_network_icons.html">
 <include src="oobe_enable_kiosk.html">
 <include src="oobe_reset.html">
-<include src="oobe_reset_confirmation_overlay.html">
 <include src="oobe_supervision_transition.html">
 <include src="oobe_terms_of_service.html">
 <include src="encryption_migration.html">
diff --git a/chrome/browser/resources/chromeos/login/custom_elements_login.js b/chrome/browser/resources/chromeos/login/custom_elements_login.js
index 82675db..94cff01 100644
--- a/chrome/browser/resources/chromeos/login/custom_elements_login.js
+++ b/chrome/browser/resources/chromeos/login/custom_elements_login.js
@@ -34,7 +34,6 @@
 // <include src="arc_terms_of_service.js">
 // <include src="oobe_enable_kiosk.js">
 // <include src="oobe_reset.js">
-// <include src="oobe_reset_confirmation_overlay.js">
 // <include src="encryption_migration.js">
 // <include src="oobe_supervision_transition.js">
 // <include src="sync_consent.js">
diff --git a/chrome/browser/resources/chromeos/login/custom_elements_oobe.html b/chrome/browser/resources/chromeos/login/custom_elements_oobe.html
index f6150b3..09fef7a 100644
--- a/chrome/browser/resources/chromeos/login/custom_elements_oobe.html
+++ b/chrome/browser/resources/chromeos/login/custom_elements_oobe.html
@@ -24,7 +24,6 @@
 <include src="oobe_enable_kiosk.html">
 <include src="oobe_hid_detection.html">
 <include src="oobe_reset.html">
-<include src="oobe_reset_confirmation_overlay.html">
 <include src="oobe_terms_of_service.html">
 <include src="oobe_update.html">
 <include src="oobe_i18n_dropdown.html">
diff --git a/chrome/browser/resources/chromeos/login/custom_elements_oobe.js b/chrome/browser/resources/chromeos/login/custom_elements_oobe.js
index 2634bf4f..d2c8159f 100644
--- a/chrome/browser/resources/chromeos/login/custom_elements_oobe.js
+++ b/chrome/browser/resources/chromeos/login/custom_elements_oobe.js
@@ -37,7 +37,6 @@
 // <include src="oobe_terms_of_service.js">
 // <include src="oobe_hid_detection.js">
 // <include src="oobe_reset.js">
-// <include src="oobe_reset_confirmation_overlay.js">
 // <include src="oobe_update.js">
 // <include src="oobe_i18n_dropdown.js">
 // <include src="oobe_welcome_dialog.js">
diff --git a/chrome/browser/resources/chromeos/login/md_login.html b/chrome/browser/resources/chromeos/login/md_login.html
index 0815557..3f96c869 100644
--- a/chrome/browser/resources/chromeos/login/md_login.html
+++ b/chrome/browser/resources/chromeos/login/md_login.html
@@ -49,7 +49,6 @@
 <script src="chrome://oobe/strings.js"></script>
 <link rel="stylesheet" href="api_keys_notice.css">
 <link rel="stylesheet" href="oobe_screen_enable_debugging.css">
-<link rel="stylesheet" href="oobe_screen_reset.css">
 <link rel="stylesheet" href="oobe_screen_autolaunch.css">
 <link rel="stylesheet" href="oobe_screen_auto_enrollment_check.css">
 <link rel="stylesheet" href="oobe_screen_supervision_transition.css">
diff --git a/chrome/browser/resources/chromeos/login/md_login.js b/chrome/browser/resources/chromeos/login/md_login.js
index 8e83e1a..fdde4b9 100644
--- a/chrome/browser/resources/chromeos/login/md_login.js
+++ b/chrome/browser/resources/chromeos/login/md_login.js
@@ -19,7 +19,6 @@
 // <include
 // src="../../../../../ui/login/account_picker/chromeos_user_pod_row.js">
 // <include src="cr_ui.js">
-// <include src="oobe_screen_reset.js">
 // <include src="oobe_screen_autolaunch.js">
 // <include src="oobe_screen_supervision_transition.js">
 // <include src="oobe_screen_assistant_optin_flow.js">
@@ -69,7 +68,6 @@
       cr.ui.login.DisplayManager.initialize();
       login.WrongHWIDScreen.register();
       login.AccountPickerScreen.register();
-      login.ResetScreen.register();
       login.AutolaunchScreen.register();
       login.ErrorMessageScreen.register();
       login.TPMErrorMessageScreen.register();
diff --git a/chrome/browser/resources/chromeos/login/md_login_screens.html b/chrome/browser/resources/chromeos/login/md_login_screens.html
index 91af2f8..32c2aae 100644
--- a/chrome/browser/resources/chromeos/login/md_login_screens.html
+++ b/chrome/browser/resources/chromeos/login/md_login_screens.html
@@ -1,4 +1,4 @@
-<include src="oobe_screen_reset.html">
+<oobe-reset id="reset" class="step" hidden></oobe-reset>
 <include src="oobe_screen_autolaunch.html">
 <oobe-adb-sideloading-screen id="adb-sideloading" class="step hidden">
 </oobe-adb-sideloading-screen>
diff --git a/chrome/browser/resources/chromeos/login/md_screen_container.html b/chrome/browser/resources/chromeos/login/md_screen_container.html
index 0ca9154e..41dd6e2 100644
--- a/chrome/browser/resources/chromeos/login/md_screen_container.html
+++ b/chrome/browser/resources/chromeos/login/md_screen_container.html
@@ -15,4 +15,3 @@
 <div id="bubble" class="bubble faded" hidden></div>
 <include src="md_top_header_bar.html">
 <include src="../../../../../ui/login/account_picker/chromeos_user_pod_template.html">
-<include src="oobe_screen_reset_confirmation_overlay.html">
diff --git a/chrome/browser/resources/chromeos/login/oobe.html b/chrome/browser/resources/chromeos/login/oobe.html
index 06354b0..a6e6e81 100644
--- a/chrome/browser/resources/chromeos/login/oobe.html
+++ b/chrome/browser/resources/chromeos/login/oobe.html
@@ -54,7 +54,6 @@
 <link rel="stylesheet" href="api_keys_notice.css">
 
 <link rel="stylesheet" href="oobe_screen_enable_debugging.css">
-<link rel="stylesheet" href="oobe_screen_reset.css">
 <link rel="stylesheet" href="oobe_screen_autolaunch.css">
 <link rel="stylesheet" href="oobe_screen_auto_enrollment_check.css">
 <link rel="stylesheet" href="oobe_screen_supervision_transition.css">
diff --git a/chrome/browser/resources/chromeos/login/oobe.js b/chrome/browser/resources/chromeos/login/oobe.js
index 06adacf..82f9da0 100644
--- a/chrome/browser/resources/chromeos/login/oobe.js
+++ b/chrome/browser/resources/chromeos/login/oobe.js
@@ -20,7 +20,6 @@
 // <include
 // src="../../../../../ui/login/account_picker/chromeos_user_pod_row.js">
 // <include src="cr_ui.js">
-// <include src="oobe_screen_reset.js">
 // <include src="oobe_screen_autolaunch.js">
 // <include src="oobe_screen_supervision_transition.js">
 // <include src="oobe_screen_assistant_optin_flow.js">
@@ -74,7 +73,6 @@
       login.UpdateScreen.register();
       login.AutoEnrollmentCheckScreen.register();
       login.EnableDebuggingScreen.register();
-      login.ResetScreen.register();
       login.AutolaunchScreen.register();
       login.AccountPickerScreen.register();
       login.OAuthEnrollmentScreen.register();
diff --git a/chrome/browser/resources/chromeos/login/oobe_help_dialog.css b/chrome/browser/resources/chromeos/login/oobe_help_dialog.css
index cc995df7..d5dd9faf 100644
--- a/chrome/browser/resources/chromeos/login/oobe_help_dialog.css
+++ b/chrome/browser/resources/chromeos/login/oobe_help_dialog.css
@@ -3,7 +3,7 @@
  * found in the LICENSE file. */
 
 
-#help-dialog {
+#helpDialog {
   border: 0;
   border-radius: 8px;
   box-shadow: 0 1px 3px 0 rgba(var(--google-grey-800-rgb), 0.3),
@@ -14,8 +14,7 @@
   width: 512px;
 }
 
-#help-dialog-title ::slotted(h1),
-#help-dialog-title .fallback {
+#helpDialogTitle {
   color: var(--oobe-header-text-color);
   @apply --oobe-help-dialog-header-font;
   margin: 0;
@@ -23,13 +22,13 @@
   user-select: none;
 }
 
-#content-container {
+#contentContainer {
   color: var(--oobe-text-color);
   @apply --oobe-default-font;
   padding-bottom: 20px;
 }
 
-#button-container {
+#buttonContainer {
   display: flex;
   justify-content: flex-end;
   min-height: 0;
diff --git a/chrome/browser/resources/chromeos/login/oobe_help_dialog.html b/chrome/browser/resources/chromeos/login/oobe_help_dialog.html
index f37107f..f071647f 100644
--- a/chrome/browser/resources/chromeos/login/oobe_help_dialog.html
+++ b/chrome/browser/resources/chromeos/login/oobe_help_dialog.html
@@ -18,30 +18,34 @@
 
   Alternatively, one can set their own title and content into the 'title'
   and 'content' slots.
+
+  Buttons are optional and go into the 'buttons' slot. If none are specified,
+  a default button with the text 'Close' will be shown. Users might want to
+  trigger some action on their side by using 'on-close=myMethod'.
 -->
 <dom-module id="oobe-help-dialog">
   <template>
     <link rel="stylesheet" href="oobe_fonts.css">
     <link rel="stylesheet" href="oobe_help_dialog.css">
-    <dialog id="help-dialog" part="dialog" aria-labelledby="help-dialog-title">
+    <dialog id="helpDialog" part="dialog" aria-labelledby="helpDialogTitle">
       <!-- Title -->
-      <div id="help-dialog-title">
-        <slot name="title">
-            <h1 class="fallback">[[i18nDynamic(locale, titleKey)]]</h1>
-        </slot>
+      <div id="helpDialogTitle">
+        <slot name="title">[[i18nDynamic(locale, titleKey)]]</slot>
       </div>
       <!-- Content to be shown -->
-      <div id="content-container"
+      <div id="contentContainer"
           class="flex-grow layout vertical not-resizable">
         <slot name="content">
-            <h1>[[i18nDynamic(locale, contentKey)]]</h1>
+          [[i18nDynamic(locale, contentKey)]]
         </slot>
       </div>
       <!-- Close Button -->
-      <div id="button-container" class="layout horizontal">
-        <oobe-text-button inverse id="closeButton" on-click="hideDialog"
+      <div id="buttonContainer" class="layout horizontal">
+        <slot name="buttons">
+          <oobe-text-button inverse id="closeButton" on-click="hideDialog"
             text-key="oobeModalDialogClose">
-        </oobe-text-button>
+          </oobe-text-button>
+        </slot>
       </div>
     </dialog>
   </template>
diff --git a/chrome/browser/resources/chromeos/login/oobe_help_dialog.js b/chrome/browser/resources/chromeos/login/oobe_help_dialog.js
index 92f953c..af17849 100644
--- a/chrome/browser/resources/chromeos/login/oobe_help_dialog.js
+++ b/chrome/browser/resources/chromeos/login/oobe_help_dialog.js
@@ -26,12 +26,12 @@
 
   /* Shows the help dialog and changes the focus to the close button. */
   showDialog: function() {
-    this.$['help-dialog'].showModal();
+    this.$.helpDialog.showModal();
     this.$.closeButton.focus();
   },
 
   hideDialog: function() {
-    this.$['help-dialog'].close();
+    this.$.helpDialog.close();
   },
 
 });
diff --git a/chrome/browser/resources/chromeos/login/oobe_reset.css b/chrome/browser/resources/chromeos/login/oobe_reset.css
index bb23996..83120f4 100644
--- a/chrome/browser/resources/chromeos/login/oobe_reset.css
+++ b/chrome/browser/resources/chromeos/login/oobe_reset.css
@@ -19,15 +19,13 @@
 }
 
 #tpmFirmwareUpdate {
-  margin-bottom: 20px;
-  margin-inline-start: 20px;
-  margin-top: 23px; /* = 36 - font size */
-  width: 100%;
+  margin-top: 20px;
 }
 
-#tpmFirmwareUpdateCheckbox {
-  margin-top: 2px;
-  size: 16px;
+#illustration {
+  max-height: 80%;
+  max-width: 100%;
+  object-fit: contain;
 }
 
 #tpmFirmwareUpdateContainer {
@@ -35,8 +33,3 @@
   line-height: 20px;
   pointer-events: auto;
 }
-
-#illustration {
-  height: 264px;
-  width: 264px;
-}
diff --git a/chrome/browser/resources/chromeos/login/oobe_reset.html b/chrome/browser/resources/chromeos/login/oobe_reset.html
index 39f33b1..9f854caf 100644
--- a/chrome/browser/resources/chromeos/login/oobe_reset.html
+++ b/chrome/browser/resources/chromeos/login/oobe_reset.html
@@ -6,7 +6,7 @@
 <link rel="import" href="chrome://resources/html/i18n_behavior.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
 
-<dom-module id="oobe-reset-md">
+<dom-module id="oobe-reset">
   <template>
     <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="chrome://resources/css/throbber.css">
@@ -20,28 +20,25 @@
           icon1x="oobe-32:alert" icon2x="oobe-64:alert">
       </hd-iron-icon>
       <div slot="subtitle" class="powerwash-warning">
-        <div hidden="[[!isState_(uiState_, 'powerwash-proposal-view')]]">
-          [[i18nDynamic(locale, 'resetPowerwashWarningDetails')]]
-        </div>
-        <div hidden="[[!isState_(uiState_, 'powerwash-proposal-view')]]">
-          [[i18nDynamic(locale, 'resetWarningDataDetails')]]
-        </div>
-        <div hidden="[[!isState_(uiState_, 'rollback-proposal-view')]]">
-          [[i18nDynamic(locale, 'resetPowerwashRollbackWarningDetails')]]
-        </div>
-        <div hidden="[[!isState_(uiState_, 'rollback-proposal-view')]]">
-          [[i18nDynamic(locale, 'resetWarningDataDetails')]]
-        </div>
-        <div hidden="[[!isState_(uiState_, 'restart-required-view')]]">
+        <!-- Subtitle:  Restart required  -->
+        <div hidden="[[!inRestartRequiredState_]]">
           [[i18nDynamic(locale, 'resetRestartMessage')]]
         </div>
-        <a id="powerwash-help-link-md" href="#"
-            class="oobe-local-link"
-            hidden="[[isHelpLinkHidden_(uiState_, isGoogleBranded_)]]"
-            on-tap="onLearnMoreTap_">
-          [[i18nDynamic(locale, 'learnMore')]]
-        </a>
-        <div hidden="[[!isState_(uiState_, 'revert-promise-view')]]">
+        <!-- Subtitle: Powerwash state (depends on powerwash mode) -->
+        <div hidden="[[!inPowerwashState_]]">
+          <div>[[powerwashStateSubtitle_]]</div>
+          <div>[[i18nDynamic(locale, 'resetWarningDataDetails')]]</div>
+        </div>
+        <!-- Help Link - Hidden when reverting/rolling back. -->
+        <if expr="_google_chrome">
+          <a id="powerwash-help-link-md" href="#"
+              class="oobe-local-link"
+              hidden="[[inRevertState_]]"
+             on-tap="onLearnMoreTap_">[[i18nDynamic(locale, 'learnMore')]]
+          </a>
+        </if>
+        <!-- Spinner - Shown when the revert process is ongoing -->
+        <div hidden="[[!inRevertState_]]">
           <div>
             [[i18nDynamic(locale, 'resetRevertPromise')]]
           </div>
@@ -53,49 +50,62 @@
           </div>
         </div>
       </div>
-      <div slot="footer" class="flex layout vertical center center-justified">
+      <div slot="footer" class="flex layout vertical">
+        <!-- Reset screen illustration -->
         <img id="illustration" srcset="images/1x/reset_illustration_1x.svg 1x,
                                        images/2x/reset_illustration_2x.svg 2x"
-            i18n-values="alt:resetScreenIllustrationTitle"
-            class="oobe-illustration">
+            i18n-values="alt:resetScreenIllustrationTitle">
+        <!-- TPM Update - Only shown during powerwash state -->
         <div id="tpmFirmwareUpdate" class="layout horizontal"
-            hidden="[[!tpmFirmwareUpdateAvailable_]]">
+            hidden="[[!inPowerwashState_]]">
           <cr-checkbox id="tpmFirmwareUpdateCheckbox"
-              checked="{{tpmFirmwareUpdateChecked_}}"
-              disabled="[[!tpmFirmwareUpdateEditable_]]"
+              checked="{{tpmUpdateChecked_}}"
+              disabled="[[!tpmUpdateEditable_]]"
+              hidden="[[!tpmUpdateAvailable_]]"
               on-change="onTPMFirmwareUpdateChanged_">
-              <div id="tpmFirmwareUpdateContainer">
-                <span>
-                  [[i18nDynamic(locale, 'resetTPMFirmwareUpdate')]]
-                </span>
+            <div id="tpmFirmwareUpdateContainer">
+              <span>
+                [[i18nDynamic(locale, 'resetTPMFirmwareUpdate')]]
+              </span>
+              <if expr="_google_chrome">
                 <a href="#"
-                    hidden="[[isHelpLinkHidden_(uiState_, isGoogleBranded_)]]"
-					          class="oobe-local-link"
-                    on-tap="onTPMFirmwareUpdateLearnMore_">
-                  [[i18nDynamic(locale, 'learnMore')]]
-                </a>
-              </div>
+                    class="oobe-local-link"
+                    on-tap="onTPMFirmwareUpdateLearnMore_"
+                    >[[i18nDynamic(locale, 'learnMore')]]</a>
+              </if>
+            </div>
           </cr-checkbox>
         </div>
       </div>
       <div slot="bottom-buttons" class="flex layout horizontal">
         <div class="flex"></div>
+        <!-- Cancel button, only disabled when reverting -->
         <oobe-text-button border on-tap="onCancelTap_" text-key="cancelButton"
-            hidden="[[isCancelHidden_(uiState_)]]"></oobe-text-button>
+            disabled="[[inRevertState_]]"></oobe-text-button>
+        <!-- Restart button -->
         <oobe-text-button inverse on-tap="onRestartTap_" class="focus-on-show"
             text-key="resetButtonRestart"
-            hidden="[[!isState_(uiState_, 'restart-required-view')]]">
+            hidden="[[!inRestartRequiredState_]]">
         </oobe-text-button>
+        <!-- Powerwash button (depends on powerwash mode) -->
         <oobe-text-button inverse on-tap="onPowerwashTap_" class="focus-on-show"
-            text-key="resetButtonPowerwashAndRollback"
-            hidden="[[!isState_(uiState_, 'rollback-proposal-view')]]"
-            disabled="[[tpmFirmwareUpdateChecked_]]">
-        </oobe-text-button>
-        <oobe-text-button inverse on-tap="onPowerwashTap_" class="focus-on-show"
-            text-key="resetButtonPowerwash"
-            hidden="[[!isState_(uiState_, 'powerwash-proposal-view')]]">
+            hidden="[[!inPowerwashState_]]"
+            text-key="[[powerwashButtonTextKey_]]"
+            disabled="[[powerwashButtonDisabled_]]">
         </oobe-text-button>
       </div>
     </oobe-dialog>
+
+    <!-- Powerwash confirmation dialog (depends on powerwash mode) -->
+    <oobe-help-dialog id="confirmationDialog" on-close="onDialogClosed_">
+      <div slot="title">[[confirmationDialogTitle_]]</div>
+      <div slot="content">[[confirmationDialogText_]]</div>
+      <div slot="buttons">
+        <oobe-text-button id="cancelButton" border on-tap="onDialogCancelTap_"
+            text-key="cancel"></oobe-text-button>
+        <oobe-text-button inverse on-tap="onDialogContinueTap_"
+            text-key="confirmResetButton"></oobe-text-button>
+      </div>
+    </oobe-help-dialog>
   </template>
 </dom-module>
diff --git a/chrome/browser/resources/chromeos/login/oobe_reset.js b/chrome/browser/resources/chromeos/login/oobe_reset.js
index bccf020..511e498 100644
--- a/chrome/browser/resources/chromeos/login/oobe_reset.js
+++ b/chrome/browser/resources/chromeos/login/oobe_reset.js
@@ -6,130 +6,392 @@
  * @fileoverview Polymer element for displaying material design reset screen.
  */
 
-Polymer({
-  is: 'oobe-reset-md',
+(function() {
+/** @enum {number} */
+const RESET_SCREEN_STATE = {
+  'RESTART_REQUIRED': 0,
+  'REVERT_PROMISE': 1,
+  'POWERWASH_PROPOSAL': 2,  // supports 2 ui-states - With or without rollback
+  'ERROR': 3,
+};
 
-  behaviors: [OobeI18nBehavior, OobeDialogHostBehavior],
+// When the screen is in the powerwash proposal state, it depends on the mode
+/** @enum {number} */
+const POWERWASH_MODE = {
+  'POWERWASH_WITH_ROLLBACK': 0,
+  'POWERWASH_ONLY': 1,
+};
+
+// Powerwash mode details. Used by the UI for the two different modes
+/** @type {Map<POWERWASH_MODE, Object<string,string>>} */
+const POWERWASH_MODE_DETAILS = new Map([
+  [
+    POWERWASH_MODE.POWERWASH_WITH_ROLLBACK, {
+      subtitleText: 'resetPowerwashRollbackWarningDetails',
+      dialogTitle: 'confirmRollbackTitle',
+      dialogContent: 'confirmRollbackMessage',
+      buttonTextKey: 'resetButtonPowerwashAndRollback',
+    }
+  ],
+  [
+    POWERWASH_MODE.POWERWASH_ONLY, {
+      subtitleText: 'resetPowerwashWarningDetails',
+      dialogTitle: 'confirmPowerwashTitle',
+      dialogContent: 'confirmPowerwashMessage',
+      buttonTextKey: 'resetButtonPowerwash',
+    }
+  ],
+]);
+
+Polymer({
+  is: 'oobe-reset',
+
+  behaviors: [OobeI18nBehavior, OobeDialogHostBehavior, LoginScreenBehavior],
+
+  EXTERNAL_API: [
+    'setIsRollbackAvailable',
+    'setIsRollbackRequested',
+    'setIsTpmFirmwareUpdateAvailable',
+    'setIsTpmFirmwareUpdateChecked',
+    'setIsTpmFirmwareUpdateEditable',
+    'setTpmFirmwareUpdateMode',
+    'setShouldShowConfirmationDialog',
+    'setScreenState',
+  ],
 
   properties: {
-    /**
-     * State of the screen corresponding to the css style set by
-     * oobe_screen_reset.js.
-     */
-    uiState_: String,
+
+    /* The current state of the screen as set from the C++ side. */
+    /** @type {RESET_SCREEN_STATE} */
+    screenState_: {
+      type: Number,
+      value: RESET_SCREEN_STATE.RESTART_REQUIRED,
+      observer: 'onScreenStateChanged_',
+    },
+
+    /** @type {boolean}  Whether rollback is available */
+    isRollbackAvailable_: {
+      type: Boolean,
+      value: false,
+      observer: 'updatePowerwashModeBasedOnRollbackOptions_',
+    },
 
     /**
-     * Flag that determines whether help link is shown.
+     * @type {boolean}
+     *  Whether the rollback option was chosen by the user.
      */
-    isGoogleBranded_: Boolean,
+    isRollbackRequested_: {
+      type: Boolean,
+      value: false,
+      observer: 'updatePowerwashModeBasedOnRollbackOptions_',
+    },
 
     /**
      * Whether to show the TPM firmware update checkbox.
      */
-    tpmFirmwareUpdateAvailable_: Boolean,
+    tpmUpdateAvailable_: Boolean,
 
     /**
      * If the checkbox to request a TPM firmware update is checked.
      */
-    tpmFirmwareUpdateChecked_: Boolean,
+    tpmUpdateChecked_: Boolean,
 
     /**
      * If the checkbox to request a TPM firmware update is editable.
      */
-    tpmFirmwareUpdateEditable_: Boolean,
+    tpmUpdateEditable_: Boolean,
 
     /**
-     * Reference to OOBE screen object.
-     * @type {!OobeTypes.Screen}
+     * The current TPM update mode.
      */
-    screen: {
-      type: Object,
+    tpmUpdateMode_: String,
+
+    // Title to be shown on the confirmation dialog.
+    confirmationDialogTitle_: {
+      type: String,
+      computed: 'getConfirmationDialogTitle_(locale, powerwashMode_)',
     },
+
+    // Content to be shown on the confirmation dialog.
+    confirmationDialogText_: {
+      type: String,
+      computed: 'getConfirmationDialogText_(locale, powerwashMode_)',
+    },
+
+    // The subtitle to be shown while the screen is in POWERWASH_PROPOSAL
+    powerwashStateSubtitle_: {
+      type: String,
+      computed: 'getPowerwashStateSubtitle_(locale, powerwashMode_)'
+    },
+
+    // The text shown on the powerwash button. (depends on powerwash mode)
+    powerwashButtonTextKey_: {
+      type: String,
+      computed: 'getPowerwashButtonTextKey_(locale, powerwashMode_)'
+    },
+
+    // Whether the powerwash button is disabled.
+    powerwashButtonDisabled_: {
+      type: Boolean,
+      computed: 'isPowerwashDisabled_(powerwashMode_, tpmUpdateChecked_)',
+    },
+
+    // The chosen powerwash mode
+    /**@type {POWERWASH_MODE} */
+    powerwashMode_: {
+      type: Number,
+      value: POWERWASH_MODE.POWERWASH_ONLY,
+    },
+
+    // Simple variables that reflect the current screen state
+    // Only modified by the observer of 'screenState_'
+    inRestartRequiredState_: {
+      type: Boolean,
+      value: true,
+    },
+
+    inRevertState_: {
+      type: Boolean,
+      value: false,
+    },
+
+    inPowerwashState_: {
+      type: Boolean,
+      value: false,
+    },
+  },
+
+  /** @override */
+  ready() {
+    this.initializeLoginScreen('ResetScreen', {
+      resetAllowed: false,
+      enableDebuggingAllowed: false,
+    });
   },
 
   focus() {
     this.$.resetDialog.focus();
   },
 
-  /** @private */
-  isState_(uiState_, state_) {
-    return uiState_ == state_;
-  },
-
-  /** @private */
-  isCancelHidden_(uiState_) {
-    return uiState_ == 'revert-promise-view';
-  },
-
-  /** @private */
-  isHelpLinkHidden_(uiState_, isGoogleBranded_) {
-    return !isGoogleBranded_ || (uiState_ == 'revert-promise-view');
-  },
-
-  /** @private */
-  isTPMFirmwareUpdateHidden_(uiState_, tpmFirmwareUpdateAvailable_) {
-    var inProposalView = [
-      'powerwash-proposal-view', 'rollback-proposal-view'
-    ].includes(uiState_);
-    return !(tpmFirmwareUpdateAvailable_ && inProposalView);
+  /* ---------- EXTERNAL API BEGIN ---------- */
+  /** @param {boolean} rollbackAvailable  */
+  setIsRollbackAvailable(rollbackAvailable) {
+    this.isRollbackAvailable_ = rollbackAvailable;
   },
 
   /**
+   * @param {boolean} rollbackRequested
+   */
+  setIsRollbackRequested(rollbackRequested) {
+    this.isRollbackRequested_ = rollbackRequested;
+  },
+
+  /** @param {boolean} value  */
+  setIsTpmFirmwareUpdateAvailable(value) {
+    this.tpmUpdateAvailable_ = value;
+  },
+
+  /** @param {boolean} value  */
+  setIsTpmFirmwareUpdateChecked(value) {
+    this.tpmUpdateChecked_ = value;
+  },
+
+  /** @param {boolean} value  */
+  setIsTpmFirmwareUpdateEditable(value) {
+    this.tpmUpdateEditable_ = value;
+  },
+
+  /** @param {string} value  */
+  setTpmFirmwareUpdateMode(value) {
+    this.tpmUpdateMode_ = value;
+  },
+
+  /** @param {boolean} should_show  */
+  setShouldShowConfirmationDialog(should_show) {
+    if (should_show) {
+      this.$.confirmationDialog.showDialog();
+    } else {
+      this.$.confirmationDialog.hideDialog();
+    }
+  },
+
+  /** @param {RESET_SCREEN_STATE} state  */
+  setScreenState(state) {
+    this.screenState_ = state;
+  },
+  /* ---------- EXTERNAL API END ---------- */
+
+  /**
+   *  When rollback is available and requested, the powerwash mode changes
+   *  to POWERWASH_WITH_ROLLBACK.
+   *  @private
+   */
+  updatePowerwashModeBasedOnRollbackOptions_() {
+    if (this.isRollbackAvailable_ && this.isRollbackRequested_) {
+      this.powerwashMode_ = POWERWASH_MODE.POWERWASH_WITH_ROLLBACK;
+      this.classList.add('rollback-proposal-view');
+    } else {
+      this.powerwashMode_ = POWERWASH_MODE.POWERWASH_ONLY;
+      this.classList.remove('rollback-proposal-view');
+    }
+  },
+
+  /** @private */
+  onScreenStateChanged_() {
+    if (this.screenState_ == RESET_SCREEN_STATE.REVERT_PROMISE) {
+      announceAccessibleMessage(this.i18n('resetRevertSpinnerMessage'));
+      this.classList.add('revert-promise-view');
+    } else {
+      this.classList.remove('revert-promise-view');
+    }
+
+    this.inRevertState_ =
+        (this.screenState_ == RESET_SCREEN_STATE.REVERT_PROMISE);
+    this.inRestartRequiredState_ =
+        (this.screenState_ == RESET_SCREEN_STATE.RESTART_REQUIRED);
+    this.inPowerwashState_ =
+        (this.screenState_ == RESET_SCREEN_STATE.POWERWASH_PROPOSAL);
+  },
+
+  /**
+   * Determines the subtitle based on the current powerwash mode
+   * @param {*} locale
+   * @param {POWERWASH_MODE} mode
+   * @private
+   */
+  getPowerwashStateSubtitle_(locale, mode) {
+    if (this.powerwashMode_ === undefined)
+      return '';
+    const modeDetails = POWERWASH_MODE_DETAILS.get(this.powerwashMode_);
+    return this.i18n(modeDetails.subtitleText);
+  },
+
+  /**
+   * The powerwash button text depends on the powerwash mode
+   * @param {*} locale
+   * @param {POWERWASH_MODE} mode
+   * @private
+   */
+  getPowerwashButtonTextKey_(locale, mode) {
+    if (this.powerwashMode_ === undefined)
+      return '';
+    return POWERWASH_MODE_DETAILS.get(this.powerwashMode_).buttonTextKey;
+  },
+
+  /**
+   * Cannot powerwash with rollback when the TPM update checkbox is checked
+   * @param {POWERWASH_MODE} mode
+   * @param {boolean} tpmUpdateChecked
+   * @private
+   */
+  isPowerwashDisabled_(mode, tpmUpdateChecked) {
+    return this.tpmUpdateChecked_ &&
+        (this.powerwashMode_ == POWERWASH_MODE.POWERWASH_WITH_ROLLBACK);
+  },
+
+  /* ---------- CONFIRMATION DIALOG ---------- */
+
+  /**
+   * Determines the confirmation dialog title.
+   * @param {*} locale
+   * @param {POWERWASH_MODE} mode
+   * @private
+   */
+  getConfirmationDialogTitle_(locale, mode) {
+    if (this.powerwashMode_ === undefined)
+      return '';
+    const modeDetails = POWERWASH_MODE_DETAILS.get(this.powerwashMode_);
+    return this.i18n(modeDetails.dialogTitle);
+  },
+
+  /**
+   * Determines the confirmation dialog content
+   * @param {*} locale
+   * @param {POWERWASH_MODE} mode
+   * @private
+   */
+  getConfirmationDialogText_(locale, mode) {
+    if (this.powerwashMode_ === undefined)
+      return '';
+    const modeDetails = POWERWASH_MODE_DETAILS.get(this.powerwashMode_);
+    return this.i18n(modeDetails.dialogContent);
+  },
+
+  /**
+   * On-tap event handler for confirmation dialog continue button.
+   * @private
+   */
+  onDialogContinueTap_() {
+    this.userActed('powerwash-pressed');
+  },
+
+  /**
+   * On-tap event handler for confirmation dialog cancel button.
+   * @private
+   */
+  onDialogCancelTap_() {
+    this.$.confirmationDialog.hideDialog();
+    this.userActed('reset-confirm-dismissed');
+  },
+
+  /**
+   * Catch 'close' event through escape key
+   * @private
+   */
+  onDialogClosed_() {
+    this.userActed('reset-confirm-dismissed');
+  },
+
+  /* ---------- SIMPLE EVENT HANDLERS ---------- */
+  /**
    * On-tap event handler for cancel button.
-   *
    * @private
    */
   onCancelTap_() {
-    chrome.send('login.ResetScreen.userActed', ['cancel-reset']);
+    this.userActed('cancel-reset');
   },
 
   /**
    * On-tap event handler for restart button.
-   *
    * @private
    */
   onRestartTap_() {
-    chrome.send('login.ResetScreen.userActed', ['restart-pressed']);
+    this.userActed('restart-pressed');
   },
 
   /**
    * On-tap event handler for powerwash button.
-   *
    * @private
    */
   onPowerwashTap_() {
-    chrome.send('login.ResetScreen.userActed', ['show-confirmation']);
+    this.userActed('show-confirmation');
   },
 
   /**
    * On-tap event handler for learn more link.
-   *
    * @private
    */
   onLearnMoreTap_() {
-    chrome.send('login.ResetScreen.userActed', ['learn-more-link']);
+    this.userActed('learn-more-link');
   },
 
   /**
    * Change handler for TPM firmware update checkbox.
-   *
    * @private
    */
   onTPMFirmwareUpdateChanged_() {
-    this.screen.onTPMFirmwareUpdateChanged_(
-        this.$.tpmFirmwareUpdateCheckbox.checked);
+    const checked = this.$.tpmFirmwareUpdateCheckbox.checked;
+    chrome.send('ResetScreen.setTpmFirmwareUpdateChecked', [checked]);
   },
 
   /**
    * On-tap event handler for the TPM firmware update learn more link.
-   *
    * @param {!Event} event
    * @private
    */
   onTPMFirmwareUpdateLearnMore_(event) {
-    chrome.send(
-        'login.ResetScreen.userActed', ['tpm-firmware-update-learn-more-link']);
+    this.userActed('tpm-firmware-update-learn-more-link');
     event.stopPropagation();
   },
-
 });
+})();
diff --git a/chrome/browser/resources/chromeos/login/oobe_reset_confirmation_overlay.css b/chrome/browser/resources/chromeos/login/oobe_reset_confirmation_overlay.css
deleted file mode 100644
index 7df54e0..0000000
--- a/chrome/browser/resources/chromeos/login/oobe_reset_confirmation_overlay.css
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright 2017 The Chromium Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-.reset-popup {
-  background: white;
-  border-radius: 2px;
-  border-width: 0;
-  box-shadow: 0 0 16px rgba(0, 0, 0, .12), 0 16px 16px rgba(0, 0, 0, .24);
-  min-height: 158px;
-  padding: 0;
-  position: relative;
-  width: 512px;
-  z-index: 10;
-}
-
-.reset-popup h1 {
-  color: var(--google-grey-900);
-  font-family: var(--oobe-button-font-family);
-  font-size: 15px;
-  margin-bottom: 0;
-  margin-top: 0;
-  padding: 16px 20px;
-}
-
-.reset-popup-content-area {
-  @apply --oobe-default-font;
-  color: rgba(0, 0, 0, .54);
-  line-height: 20px;
-  padding: 0 20px 20.5px;
-}
-
-oobe-text-button {
-  color: #5a5a5a;
-  margin-bottom: 16px;
-  margin-inline-end: 16px;
-}
-
-#cancelButton {
-  margin-inline-end: 4px;
-}
diff --git a/chrome/browser/resources/chromeos/login/oobe_reset_confirmation_overlay.html b/chrome/browser/resources/chromeos/login/oobe_reset_confirmation_overlay.html
deleted file mode 100644
index f11345d..0000000
--- a/chrome/browser/resources/chromeos/login/oobe_reset_confirmation_overlay.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!-- Copyright 2017 The Chromium Authors. All rights reserved.
-     Use of this source code is governed by a BSD-style license that can be
-     found in the LICENSE file. -->
-
-<dom-module id="reset-confirm-overlay-md">
-  <template>
-    <link rel="stylesheet" href="oobe_flex_layout.css">
-    <link rel="stylesheet" href="oobe_reset_confirmation_overlay.css">
-    <dialog id="dialog" class="reset-popup not-resizable">
-        <h1 hidden="[[!isPowerwashView_]]">
-          [[i18nDynamic(locale, 'confirmPowerwashTitle')]]
-        </h1>
-        <h1 hidden="[[isPowerwashView_]]">
-          [[i18nDynamic(locale, 'confirmRollbackTitle')]]
-        </h1>
-      <div class="reset-popup-content-area">
-        <div hidden="[[!isPowerwashView_]]">
-          [[i18nDynamic(locale, 'confirmPowerwashMessage')]]
-        </div>
-        <div hidden="[[isPowerwashView_]]">
-          [[i18nDynamic(locale, 'confirmRollbackMessage')]]
-        </div>
-      </div>
-      <div slot="bottom-buttons" class="flex layout horizontal">
-        <div class="flex"></div>
-        <oobe-text-button id="cancelButton" border on-tap="onCancelTap_"
-            text-key="cancel"></oobe-text-button>
-        <oobe-text-button inverse on-tap="onContinueTap_"
-            text-key="confirmResetButton"></oobe-text-button>
-      </div>
-    </dialog>
-  </template>
-</dom-module>
diff --git a/chrome/browser/resources/chromeos/login/oobe_reset_confirmation_overlay.js b/chrome/browser/resources/chromeos/login/oobe_reset_confirmation_overlay.js
deleted file mode 100644
index 6221bde..0000000
--- a/chrome/browser/resources/chromeos/login/oobe_reset_confirmation_overlay.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/**
- * @fileoverview Polymer element for displaying material design reset
- * confirmation overlay screen.
- */
-
-Polymer({
-  is: 'reset-confirm-overlay-md',
-
-  behaviors: [OobeI18nBehavior],
-
-  properties: {
-    isPowerwashView_: Boolean,
-  },
-
-  open() {
-    if (!this.$.dialog.open)
-      this.$.dialog.showModal();
-  },
-
-  close() {
-    if (this.$.dialog.open)
-      this.$.dialog.close();
-  },
-
-  /**
-   * On-tap event handler for continue button.
-   */
-  onContinueTap_() {
-    this.close();
-    chrome.send('login.ResetScreen.userActed', ['powerwash-pressed']);
-  },
-
-  /**
-   * On-tap event handler for cancel button.
-   */
-  onCancelTap_() {
-    this.close();
-    chrome.send('login.ResetScreen.userActed', ['reset-confirm-dismissed']);
-  },
-});
diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_reset.css b/chrome/browser/resources/chromeos/login/oobe_screen_reset.css
deleted file mode 100644
index 3bc306f7..0000000
--- a/chrome/browser/resources/chromeos/login/oobe_screen_reset.css
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Copyright 2013 The Chromium Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#reset {
-  display: flex;
-  font-size: 16px;
-  min-height: 0;
-  text-align: start;
-}
diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_reset.html b/chrome/browser/resources/chromeos/login/oobe_screen_reset.html
deleted file mode 100644
index dca7380..0000000
--- a/chrome/browser/resources/chromeos/login/oobe_screen_reset.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<div class="step faded hidden" id="reset" role="group"
-    i18n-values="aria-label:resetScreenAccessibleTitle" hidden>
-  <oobe-reset-md id="oobe-reset-md"></oobe-reset-md>
-</div>
diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_reset.js b/chrome/browser/resources/chromeos/login/oobe_screen_reset.js
deleted file mode 100644
index 47cc546..0000000
--- a/chrome/browser/resources/chromeos/login/oobe_screen_reset.js
+++ /dev/null
@@ -1,230 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/**
- * @fileoverview Device reset screen implementation.
- */
-
-login.createScreen('ResetScreen', 'reset', function() {
-  var USER_ACTION_CANCEL_RESET = 'cancel-reset';
-  var USER_ACTION_RESET_CONFIRM_DISMISSED = 'reset-confirm-dismissed';
-
-  /* Possible UI states of the reset screen. */
-  const RESET_SCREEN_UI_STATE = {
-    REVERT_PROMISE: 'ui-state-revert-promise',
-    RESTART_REQUIRED: 'ui-state-restart-required',
-    POWERWASH_PROPOSAL: 'ui-state-powerwash-proposal',
-    ROLLBACK_PROPOSAL: 'ui-state-rollback-proposal',
-    ERROR: 'ui-state-error',
-  };
-
-  const RESET_SCREEN_STATE = {
-    RESTART_REQUIRED: 0,
-    REVERT_PROMISE: 1,
-    POWERWASH_PROPOSAL: 2,  // supports 2 ui-states
-    ERROR: 3,
-  };
-
-  return {
-    EXTERNAL_API: [
-      'setIsRollbackAvailable',
-      'setIsRollbackChecked',
-      'setIsTpmFirmwareUpdateAvailable',
-      'setIsTpmFirmwareUpdateChecked',
-      'setIsTpmFirmwareUpdateEditable',
-      'setTpmFirmwareUpdateMode',
-      'setIsConfirmational',
-      'setIsGoogleBrandedBuild',
-      'setScreenState',
-    ],
-
-    /** @type {boolean} */
-    isRollbackAvailable_: false,
-    /** @type {boolean} */
-    isRollbackChecked_: false,
-    /** @type {boolean} */
-    isTpmFirmwareUpdateAvailable_: false,
-    /** @type {boolean} */
-    isTpmFirmwareUpdateChecked_: false,
-    /** @type {boolean} */
-    isTpmFirmwareUpdateEditable_: false,
-    /** @type {RESET_SCREEN_UI_STATE} */
-    tpmFirmwareUpdateMode_: RESET_SCREEN_UI_STATE.REVERT_PROMISE,
-    /** @type {boolean} */
-    isConfirmational_: false,
-    /** @type {RESET_SCREEN_STATE} */
-    screenState_: RESET_SCREEN_STATE.RESTART_REQUIRED,
-
-    setIsRollbackAvailable(rollbackAvailable) {
-      this.isRollbackAvailable_ = rollbackAvailable;
-      this.setRollbackOptionView();
-    },
-
-    setIsRollbackChecked(rollbackChecked) {
-      this.isRollbackChecked_ = rollbackChecked;
-      this.setRollbackOptionView();
-    },
-
-    setIsTpmFirmwareUpdateAvailable(value) {
-      this.isTpmFirmwareUpdateAvailable_ = value;
-      this.setTPMFirmwareUpdateView_();
-    },
-
-    setIsTpmFirmwareUpdateChecked(value) {
-      this.isTpmFirmwareUpdateChecked_ = value;
-      this.setTPMFirmwareUpdateView_();
-    },
-
-    setIsTpmFirmwareUpdateEditable(value) {
-      this.isTpmFirmwareUpdateEditable_ = value;
-      this.setTPMFirmwareUpdateView_();
-    },
-
-    setTpmFirmwareUpdateMode(value) {
-      this.tpmFirmwareUpdateMode_ = value;
-    },
-
-    setIsConfirmational(isConfirmational) {
-      this.isConfirmational_ = isConfirmational;
-      if (isConfirmational) {
-        if (this.screenState_ != RESET_SCREEN_STATE.POWERWASH_PROPOSAL)
-          return;
-        $('overlay-reset').removeAttribute('hidden');
-        $('reset-confirm-overlay-md').open();
-      } else {
-        $('overlay-reset').setAttribute('hidden', true);
-        $('reset-confirm-overlay-md').close();
-      }
-    },
-
-    setIsGoogleBrandedBuild(isGoogleBranded) {
-      $('oobe-reset-md').isGoogleBranded_ = isGoogleBranded;
-    },
-
-    setScreenState(state) {
-      this.screenState_ = state;
-
-      if (state == RESET_SCREEN_STATE.RESTART_REQUIRED)
-        this.ui_state = RESET_SCREEN_UI_STATE.RESTART_REQUIRED;
-      if (state == RESET_SCREEN_STATE.REVERT_PROMISE)
-        this.ui_state = RESET_SCREEN_UI_STATE.REVERT_PROMISE;
-      else if (state == RESET_SCREEN_STATE.POWERWASH_PROPOSAL)
-        this.ui_state = RESET_SCREEN_UI_STATE.POWERWASH_PROPOSAL;
-      this.setDialogView_();
-      if (state == RESET_SCREEN_STATE.REVERT_PROMISE) {
-        announceAccessibleMessage(
-            loadTimeData.getString('resetRevertSpinnerMessage'));
-      }
-      this.setTPMFirmwareUpdateView_();
-    },
-
-    /** @override */
-    decorate() {
-      $('oobe-reset-md').screen = this;
-    },
-
-    /**
-     * Returns a control which should receive an initial focus.
-     */
-    get defaultControl() {
-      return $('oobe-reset-md');
-    },
-
-    /**
-     * Cancels the reset and drops the user back to the login screen.
-     */
-    cancel() {
-      if (this.isConfirmational_) {
-        $('reset').send(
-            login.Screen.CALLBACK_USER_ACTED,
-            USER_ACTION_RESET_CONFIRM_DISMISSED);
-        return;
-      }
-      this.send(login.Screen.CALLBACK_USER_ACTED, USER_ACTION_CANCEL_RESET);
-    },
-
-    /**
-     * Event handler that is invoked just before the screen in shown.
-     * @param {Object} data Screen init payload.
-     */
-    onBeforeShow(data) {},
-
-    /** Event handler that is invoked after the screen is shown. */
-    onAfterShow() {
-      Oobe.resetSigninUI(false);
-    },
-
-    /**
-     * Sets css style for corresponding state of the screen.
-     * @private
-     */
-    setDialogView_(state) {
-      state = this.ui_state;
-      this.classList.toggle(
-          'revert-promise-view', state == RESET_SCREEN_UI_STATE.REVERT_PROMISE);
-      this.classList.toggle(
-          'restart-required-view',
-          state == RESET_SCREEN_UI_STATE.RESTART_REQUIRED);
-      this.classList.toggle(
-          'powerwash-proposal-view',
-          state == RESET_SCREEN_UI_STATE.POWERWASH_PROPOSAL);
-      this.classList.toggle(
-          'rollback-proposal-view',
-          state == RESET_SCREEN_UI_STATE.ROLLBACK_PROPOSAL);
-      var resetMd = $('oobe-reset-md');
-      var resetOverlayMd = $('reset-confirm-overlay-md');
-      if (state == RESET_SCREEN_UI_STATE.RESTART_REQUIRED) {
-        resetMd.uiState_ = 'restart-required-view';
-      }
-      if (state == RESET_SCREEN_UI_STATE.POWERWASH_PROPOSAL) {
-        resetMd.uiState_ = 'powerwash-proposal-view';
-        resetOverlayMd.isPowerwashView_ = true;
-      }
-      if (state == RESET_SCREEN_UI_STATE.ROLLBACK_PROPOSAL) {
-        resetMd.uiState_ = 'rollback-proposal-view';
-        resetOverlayMd.isPowerwashView_ = false;
-      }
-      if (state == RESET_SCREEN_UI_STATE.REVERT_PROMISE) {
-        resetMd.uiState_ = 'revert-promise-view';
-      }
-    },
-
-    setRollbackOptionView() {
-      if (this.isConfirmational_)
-        return;
-      if (this.screenState_ != RESET_SCREEN_STATE.POWERWASH_PROPOSAL)
-        return;
-
-      if (this.isRollbackAvailable_ && this.isRollbackChecked_) {
-        this.ui_state = RESET_SCREEN_UI_STATE.ROLLBACK_PROPOSAL;
-      } else {
-        this.ui_state = RESET_SCREEN_UI_STATE.POWERWASH_PROPOSAL;
-      }
-      this.setDialogView_();
-      this.setTPMFirmwareUpdateView_();
-    },
-
-    setTPMFirmwareUpdateView_() {
-      $('oobe-reset-md').tpmFirmwareUpdateAvailable_ =
-          this.ui_state == RESET_SCREEN_UI_STATE.POWERWASH_PROPOSAL &&
-          this.isTpmFirmwareUpdateAvailable_;
-      $('oobe-reset-md').tpmFirmwareUpdateChecked_ =
-          this.isTpmFirmwareUpdateChecked_;
-      $('oobe-reset-md').tpmFirmwareUpdateEditable_ =
-          this.isTpmFirmwareUpdateEditable_;
-    },
-
-    onTPMFirmwareUpdateChanged_(value) {
-      chrome.send('ResetScreen.setTpmFirmwareUpdateChecked', [value]);
-    },
-
-    /**
-     * Updates localized content of the screen that is not updated via template.
-     */
-    updateLocalizedContent() {
-      $('oobe-reset-md').i18nUpdateLocale();
-      $('reset-confirm-overlay-md').i18nUpdateLocale();
-    },
-  };
-});
diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_reset_confirmation_overlay.html b/chrome/browser/resources/chromeos/login/oobe_screen_reset_confirmation_overlay.html
deleted file mode 100644
index 15b693c8..0000000
--- a/chrome/browser/resources/chromeos/login/oobe_screen_reset_confirmation_overlay.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<div id="overlay-reset" class="popup-overlay" hidden>
-  <reset-confirm-overlay-md id="reset-confirm-overlay-md">
-  </reset-confirm-overlay-md>
-</div>
diff --git a/chrome/browser/resources/chromeos/login/oobe_screens.html b/chrome/browser/resources/chromeos/login/oobe_screens.html
index 0fab704..fa03324 100644
--- a/chrome/browser/resources/chromeos/login/oobe_screens.html
+++ b/chrome/browser/resources/chromeos/login/oobe_screens.html
@@ -5,7 +5,8 @@
 <oobe-adb-sideloading-screen id="adb-sideloading" class="step hidden">
 </oobe-adb-sideloading-screen>
 <include src="oobe_screen_enable_debugging.html">
-<include src="oobe_screen_reset.html">
+<oobe-reset class="step" id="reset" hidden>
+</oobe-reset>
 <include src="oobe_screen_autolaunch.html">
 <kiosk-enable id="kiosk-enable" class="step hidden">
 </kiosk-enable>
diff --git a/chrome/browser/resources/chromeos/login/screen_gaia_signin.html b/chrome/browser/resources/chromeos/login/screen_gaia_signin.html
index 0563711..72aafa76 100644
--- a/chrome/browser/resources/chromeos/login/screen_gaia_signin.html
+++ b/chrome/browser/resources/chromeos/login/screen_gaia_signin.html
@@ -39,7 +39,9 @@
           slot="bottom-buttons" class="relative flex layout horizontal">
         <div id="buttons-container" class="flex layout horizontal center">
           <oobe-back-button id="signin-back-button"
-              disabled="[[!navigationEnabled_]]"></oobe-back-button>
+              disabled="[[!navigationEnabled_]]"
+              on-click="onBackButtonClicked_">
+          </oobe-back-button>
           <div class="flex">
           </div>
           <oobe-text-button id="secondary-action-button"
@@ -91,7 +93,11 @@
           </a>
         </p>
       </div>
-      <div slot="bottom-buttons" class="flex layout horizontal end-justified">
+      <div slot="bottom-buttons" class="flex layout horizontal">
+        <oobe-back-button id="interstitial-back" on-tap="onBackButtonClicked_">
+        </oobe-back-button>
+        <div class="flex">
+        </div>
         <oobe-next-button on-tap="onSamlInterstitialNext_"
             id="interstitial-next" class="focus-on-show"></oobe-next-button>
       </div>
diff --git a/chrome/browser/resources/chromeos/login/screen_gaia_signin.js b/chrome/browser/resources/chromeos/login/screen_gaia_signin.js
index 03e5469..6a773b3 100644
--- a/chrome/browser/resources/chromeos/login/screen_gaia_signin.js
+++ b/chrome/browser/resources/chromeos/login/screen_gaia_signin.js
@@ -415,8 +415,6 @@
           eventName, authenticatorEventListeners[eventName].bind(this));
     }
 
-    this.$['signin-back-button'].addEventListener(
-        'click', this.onBackButtonClicked_.bind(this));
     this.$['offline-gaia'].addEventListener(
         'offline-gaia-cancel', this.cancel.bind(this));
 
@@ -1327,8 +1325,7 @@
 
     // TODO(crbug.com/470893): Figure out whether/which of these exit conditions
     // are useful.
-    if (this.screenMode_ == AuthMode.SAML_INTERSTITIAL ||
-        this.isWhitelistErrorShown_ || this.authCompleted_) {
+    if (this.isWhitelistErrorShown_ || this.authCompleted_) {
       return;
     }
 
diff --git a/chrome/browser/resources/settings/autofill_page/autofill_page.html b/chrome/browser/resources/settings/autofill_page/autofill_page.html
index 7d6e8fb3..5cdf751 100644
--- a/chrome/browser/resources/settings/autofill_page/autofill_page.html
+++ b/chrome/browser/resources/settings/autofill_page/autofill_page.html
@@ -52,10 +52,9 @@
       </template>
       <template is="dom-if" route-path="/passwords/check">
         <settings-subpage
-            associated-control="[[$$('#passwordManagerButton')]]"
             page-title="$i18n{checkPasswords}"
             learn-more-url="$i18n{passwordCheckLearnMoreURL}">
-          <password-check></password-check>
+          <settings-password-check></settings-password-check>
         </settings-subpage>
       </template>
       <template is="dom-if" route-path="/payments">
diff --git a/chrome/browser/resources/settings/autofill_page/password_check.html b/chrome/browser/resources/settings/autofill_page/password_check.html
index 4f3cedb..53e74718 100644
--- a/chrome/browser/resources/settings/autofill_page/password_check.html
+++ b/chrome/browser/resources/settings/autofill_page/password_check.html
@@ -1,7 +1,42 @@
 <link rel="import" href="chrome://resources/html/polymer.html">
 
-<dom-module id="password-check">
+<link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html">
+<link rel="import" href="../i18n_setup.html">
+<link rel="import" href="../settings_shared_css.html">
+<link rel="import" href="chrome://resources/cr_elements/icons.html">
+<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
+<link rel="import" href="chrome://resources/html/i18n_behavior.html">
+
+<dom-module id="settings-password-check">
   <template>
+
+    <style include="settings-shared">
+      #leak-passwords-icon {
+        --iron-icon-fill-color: var(--google-red-600);
+        padding-inline-end: 20px;
+      }
+    </style>
+    <div class="settings-box first two-line" id="leakCheckHeader">
+      <!--TODO(https://crbug.com/1047726) add background to icon-->
+      <iron-icon id="leak-passwords-icon" icon="cr:warning"></iron-icon>
+      <div class="start settings-box-text">
+        <div>
+          $i18n{checkedPasswords}
+          <span class="secondary inline" id="lastCompletedCheck">
+            &bull; [[getLastCompletedCheck_(passwordLeakCount_)]]
+          </span>
+        </div>
+        <div class="secondary" id="passwordLeakCount"
+            name="[[passwordLeakCount_]]">
+          [[getLeakedPasswordsCount_(passwordLeakCount_)]]
+        </div>
+      </div>
+      <cr-button id="controlPasswordCheckButton"
+          on-click="onPasswordCheckButtonClick_">
+        $i18n{checkPasswordsAgain}
+      </cr-button>
+    </div>
+    <div class="settings-box"></div>
   </template>
   <script src="password_check.js"></script>
 </dom-module>
diff --git a/chrome/browser/resources/settings/autofill_page/password_check.js b/chrome/browser/resources/settings/autofill_page/password_check.js
index fbe703a8..1eff823 100644
--- a/chrome/browser/resources/settings/autofill_page/password_check.js
+++ b/chrome/browser/resources/settings/autofill_page/password_check.js
@@ -4,4 +4,52 @@
 
 Polymer({
   is: 'settings-password-check',
+
+  behaviors: [I18nBehavior],
+
+  properties: {
+    /** @private */
+    passwordLeakCount_: {
+      type: Number,
+      value: 0,
+    },
+
+    /** @private */
+    lastCompletedCheck_: Date,
+  },
+
+  /**
+   * @type {PasswordManagerProxy}
+   * @private
+   */
+  passwordManager_: null,
+
+  /** @override */
+  attached() {
+    // It's just a placeholder at the moment.
+    this.passwordLeakCount_ = 5;
+
+    // Set the manager. These can be overridden by tests.
+    this.passwordManager_ = PasswordManagerImpl.getInstance();
+  },
+
+  /**
+   * Start/Stop bulk password check.
+   * @private
+   */
+  onPasswordCheckButtonClick_() {
+    // TODO(https://crbug.com/1047726): By click on this button user should be
+    // able to 'Cancel' current check.
+    this.passwordManager_.startBulkPasswordCheck();
+  },
+
+  getLeakedPasswordsCount_() {
+    return this.i18n('checkPasswordLeakCount', this.passwordLeakCount_);
+  },
+
+  getLastCompletedCheck_() {
+    // TODO(https://crbug.com/1047726): use lastCompletedCheck_ to return proper
+    // passed time from the last password check.
+    return '5 min ago';
+  },
 });
diff --git a/chrome/browser/resources/settings/autofill_page/password_manager_proxy.js b/chrome/browser/resources/settings/autofill_page/password_manager_proxy.js
index 6081027..e4c5e18 100644
--- a/chrome/browser/resources/settings/autofill_page/password_manager_proxy.js
+++ b/chrome/browser/resources/settings/autofill_page/password_manager_proxy.js
@@ -148,6 +148,11 @@
    * @return {!Promise<(boolean)>} A promise that resolves to the opt-in state.
    */
   isOptedInForAccountStorage() {}
+
+  /**
+   * Requests the start of the bulk password check.
+   */
+  startBulkPasswordCheck() {}
 }
 
 /** @typedef {chrome.passwordsPrivate.PasswordUiEntry} */
@@ -289,6 +294,9 @@
       chrome.passwordsPrivate.isOptedInForAccountStorage(resolve);
     });
   }
+
+  /** @override */
+  startBulkPasswordCheck() {}
 }
 
 cr.addSingletonGetter(PasswordManagerImpl);
diff --git a/chrome/browser/resources/settings/safety_check_page/safety_check_page.html b/chrome/browser/resources/settings/safety_check_page/safety_check_page.html
index 9b3eb08..12198101 100644
--- a/chrome/browser/resources/settings/safety_check_page/safety_check_page.html
+++ b/chrome/browser/resources/settings/safety_check_page/safety_check_page.html
@@ -5,6 +5,7 @@
 <link rel="import" href="chrome://resources/html/assert.html">
 <link rel="import" href="chrome://resources/html/i18n_behavior.html">
 <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html">
+<link rel="import" href="chrome://resources/polymer/v1_0/iron-collapse/iron-collapse.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
 <link rel="import" href="../i18n_setup.html">
 <link rel="import" href="../prefs/prefs_behavior.html">
@@ -17,9 +18,9 @@
     <!-- // TODO(crbug.com/1010001): Release block M82 beta:
         Support dark mode. -->
     <style include="settings-shared">
-      .icon-blue {
-        fill: var(--google-blue-600);
-      }
+      #safetyCheckCollapse .list-item.selected {
+         min-height: var(--settings-row-two-line-min-height);
+       }
 
       iron-icon {
         display: flex;
@@ -27,6 +28,14 @@
         padding-inline-end: var(--cr-icon-button-margin-start);
         width: var(--cr-link-row-icon-width, var(--cr-icon-size));
       }
+
+      .icon-blue {
+        fill: var(--google-blue-600);
+      }
+
+      .icon-red {
+        fill: var(--google-red-600);
+      }
     </style>
     <div class="settings-box first two-line">
       <iron-icon icon="[[getParentIcon_(parentStatus_)]]"
@@ -36,14 +45,15 @@
       <div class="start settings-box-text" no-search>
         [[getParentPrimaryLabelText_(parentStatus_)]]
       </div>
-      <template is="dom-if" if="[[showParentButton_(parentStatus_)]]" restamp>
+      <template is="dom-if" if="[[shouldShowParentButton_(parentStatus_)]]"
+          restamp>
         <div class="separator"></div>
         <cr-button id="safetyCheckParentButton"
             on-click="onRunSafetyCheckClick_" no-search>
           $i18n{safetyCheckParentButton}
         </cr-button>
       </template>
-      <template is="dom-if" if="[[showParentIconButton_(parentStatus_)]]"
+      <template is="dom-if" if="[[shouldShowParentIconButton_(parentStatus_)]]"
           restamp>
         <div class="separator"></div>
         <cr-icon-button id="safetyCheckParentIconButton"
@@ -52,6 +62,29 @@
         </cr-icon-button>
       </template>
     </div>
+    <iron-collapse id="safetyCheckCollapse"
+        opened="[[shouldShowChildren_(parentStatus_)]]">
+      <div class="settings-box two-line">
+        <iron-icon icon="[[getPasswordsIcon_(passwordsStatus_)]]"
+            src="[[getPasswordsIconSrc_(passwordsStatus_)]]"
+            class$="[[getPasswordsIconClass_(passwordsStatus_)]]">
+        </iron-icon>
+        <div class="start settings-box-text">
+          <div>$i18n{safetyCheckPasswordsPrimaryLabel}</div>
+          <div class="secondary" no-search>
+            [[getPasswordsSubLabelText_(passwordsStatus_)]]
+          </div>
+        </div>
+        <template is="dom-if"
+            if="[[shouldShowPasswordsButton_(passwordsStatus_)]]" restamp>
+          <div class="separator"></div>
+          <cr-button id="safetyCheckPasswordsButton"
+              on-click="onPasswordsButtonClick_" no-search>
+            [[getPasswordsButtonText_(passwordsStatus_)]]
+          </cr-button>
+        </template>
+      </div>
+    </iron-collapse>
   </template>
   <script src="safety_check_page.js"></script>
 </dom-module>
diff --git a/chrome/browser/resources/settings/safety_check_page/safety_check_page.js b/chrome/browser/resources/settings/safety_check_page/safety_check_page.js
index 3440ed39..f68ecf80 100644
--- a/chrome/browser/resources/settings/safety_check_page/safety_check_page.js
+++ b/chrome/browser/resources/settings/safety_check_page/safety_check_page.js
@@ -131,7 +131,7 @@
    * Triggers the safety check.
    * @private
    */
-  onRunSafetyCheckClick_: function() {
+  runSafetyCheck_: function() {
     // Update UI.
     this.parentStatus_ = ParentStatus.CHECKING;
     // Reset all children states.
@@ -155,27 +155,22 @@
         this.updatesStatus_ = status;
         break;
       case SafetyCheckComponent.PASSWORDS:
-        this.passwordsStatus_ = status;
         this.passwordsCompromisedCount_ = event['passwordsCompromised'];
+        this.passwordsStatus_ = status;
         break;
       case SafetyCheckComponent.SAFE_BROWSING:
         this.safeBrowsingStatus_ = status;
         break;
       case SafetyCheckComponent.EXTENSIONS:
-        this.extensionsStatus_ = status;
         this.badExtensionsCount_ = event['badExtensions'];
+        this.extensionsStatus_ = status;
         break;
       default:
         assertNotReached();
     }
 
     // If all children elements received updates: update parent element.
-    if (this.updatesStatus_ != settings.SafetyCheckUpdatesStatus.CHECKING &&
-        this.passwordsStatus_ != settings.SafetyCheckPasswordsStatus.CHECKING &&
-        this.safeBrowsingStatus_ !=
-            settings.SafetyCheckSafeBrowsingStatus.CHECKING &&
-        this.extensionsStatus_ !=
-            settings.SafetyCheckExtensionsStatus.CHECKING) {
+    if (this.areAllChildrenStatesSet_()) {
       this.parentStatus_ = ParentStatus.AFTER;
     }
   },
@@ -184,7 +179,19 @@
    * @private
    * @return {boolean}
    */
-  showParentButton_: function() {
+  areAllChildrenStatesSet_: function() {
+    return this.updatesStatus_ != settings.SafetyCheckUpdatesStatus.CHECKING &&
+        this.passwordsStatus_ != settings.SafetyCheckPasswordsStatus.CHECKING &&
+        this.safeBrowsingStatus_ !=
+        settings.SafetyCheckSafeBrowsingStatus.CHECKING &&
+        this.extensionsStatus_ != settings.SafetyCheckExtensionsStatus.CHECKING;
+  },
+
+  /**
+   * @private
+   * @return {boolean}
+   */
+  shouldShowParentButton_: function() {
     return this.parentStatus_ == ParentStatus.BEFORE;
   },
 
@@ -192,7 +199,7 @@
    * @private
    * @return {boolean}
    */
-  showParentIconButton_: function() {
+  shouldShowParentIconButton_: function() {
     return this.parentStatus_ == ParentStatus.AFTER;
   },
 
@@ -254,11 +261,152 @@
       case ParentStatus.BEFORE:
       case ParentStatus.CHECKING:
         return 'icon-blue';
-      case ParentStatus.AFTER:
+      default:
         return '';
+    }
+  },
+
+  /** @private */
+  onRunSafetyCheckClick_: function() {
+    this.runSafetyCheck_();
+  },
+
+  /**
+   * @private
+   * @return {boolean}
+   */
+  shouldShowChildren_: function() {
+    return this.parentStatus_ != ParentStatus.BEFORE;
+  },
+
+  /**
+   * @private
+   * @return {boolean}
+   */
+  shouldShowPasswordsButton_: function() {
+    switch (this.passwordsStatus_) {
+      case settings.SafetyCheckPasswordsStatus.COMPROMISED:
+      case settings.SafetyCheckPasswordsStatus.ERROR:
+        return true;
+      default:
+        return false;
+    }
+  },
+
+  /**
+   * @private
+   * @return {string}
+   */
+  getPasswordsSubLabelText_: function() {
+    switch (this.passwordsStatus_) {
+      case settings.SafetyCheckPasswordsStatus.CHECKING:
+        return '';
+      case settings.SafetyCheckPasswordsStatus.SAFE:
+        return this.i18n('safetyCheckPasswordsSubLabelSafe');
+      case settings.SafetyCheckPasswordsStatus.COMPROMISED:
+        if (this.passwordsCompromisedCount_ == 1) {
+          return this.i18n('safetyCheckPasswordsSubLabelCompromisedSingular');
+        }
+        return this.i18n(
+            'safetyCheckPasswordsSubLabelCompromisedPlural',
+            this.passwordsCompromisedCount_);
+      case settings.SafetyCheckPasswordsStatus.OFFLINE:
+        return this.i18n('safetyCheckPasswordsSubLabelOffline');
+      case settings.SafetyCheckPasswordsStatus.NO_PASSWORDS:
+        return this.i18n('safetyCheckPasswordsSubLabelNoPasswords');
+      case settings.SafetyCheckPasswordsStatus.SIGNED_OUT:
+        return this.i18n('safetyCheckPasswordsSubLabelSignedOut');
+      case settings.SafetyCheckPasswordsStatus.QUOTA_LIMIT:
+        return this.i18n('safetyCheckPasswordsSubLabelQuotaLimit');
+      case settings.SafetyCheckPasswordsStatus.TOO_MANY_PASSWORDS:
+        return this.i18n('safetyCheckPasswordsSubLabelTooManyPasswords');
+      case settings.SafetyCheckPasswordsStatus.ERROR:
+        return this.i18n('safetyCheckPasswordsSubLabelError');
       default:
         assertNotReached();
     }
   },
+
+  /**
+   * @private
+   * @return {?string}
+   */
+  getPasswordsIcon_: function() {
+    switch (this.passwordsStatus_) {
+      case settings.SafetyCheckPasswordsStatus.CHECKING:
+        return null;
+      case settings.SafetyCheckPasswordsStatus.SAFE:
+        return 'cr:check';
+      case settings.SafetyCheckPasswordsStatus.COMPROMISED:
+        return 'cr:warning';
+      case settings.SafetyCheckPasswordsStatus.OFFLINE:
+      case settings.SafetyCheckPasswordsStatus.NO_PASSWORDS:
+      case settings.SafetyCheckPasswordsStatus.SIGNED_OUT:
+      case settings.SafetyCheckPasswordsStatus.QUOTA_LIMIT:
+      case settings.SafetyCheckPasswordsStatus.TOO_MANY_PASSWORDS:
+      case settings.SafetyCheckPasswordsStatus.ERROR:
+        return 'cr:info';
+      default:
+        assertNotReached();
+    }
+  },
+
+  /**
+   * @private
+   * @return {?string}
+   */
+  getPasswordsIconSrc_: function() {
+    switch (this.passwordsStatus_) {
+      case settings.SafetyCheckPasswordsStatus.CHECKING:
+        return 'chrome://resources/images/throbber_small.svg';
+      default:
+        return null;
+    }
+  },
+
+  /**
+   * @private
+   * @return {string}
+   */
+  getPasswordsIconClass_: function() {
+    switch (this.passwordsStatus_) {
+      case settings.SafetyCheckPasswordsStatus.CHECKING:
+      case settings.SafetyCheckPasswordsStatus.SAFE:
+        return 'icon-blue';
+      case settings.SafetyCheckPasswordsStatus.COMPROMISED:
+        return 'icon-red';
+      default:
+        return '';
+    }
+  },
+
+  /**
+   * @private
+   * @return {?string}
+   */
+  getPasswordsButtonText_: function() {
+    switch (this.passwordsStatus_) {
+      case settings.SafetyCheckPasswordsStatus.COMPROMISED:
+        return this.i18n('safetyCheckPasswordsButtonCompromised');
+      case settings.SafetyCheckPasswordsStatus.ERROR:
+        return this.i18n('safetyCheckPasswordsButtonError');
+      default:
+        return null;
+    }
+  },
+
+  /** @private */
+  onPasswordsButtonClick_: function() {
+    switch (this.passwordsStatus_) {
+      case settings.SafetyCheckPasswordsStatus.COMPROMISED:
+        // TODO(crbug.com/1010001): Implement once behavior has been agreed on.
+        break;
+      case settings.SafetyCheckPasswordsStatus.ERROR:
+        this.runSafetyCheck_();
+        break;
+      default:
+        break;
+    }
+  },
 });
 })();
diff --git a/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/ShareImageFileUtilsTest.java b/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/ShareImageFileUtilsTest.java
index 9f785f5..4c6702a 100644
--- a/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/ShareImageFileUtilsTest.java
+++ b/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/ShareImageFileUtilsTest.java
@@ -26,6 +26,7 @@
 import org.chromium.base.task.AsyncTask;
 import org.chromium.base.test.util.CallbackHelper;
 import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.base.test.util.DisabledTest;
 import org.chromium.chrome.browser.ChromeActivity;
 import org.chromium.chrome.browser.ChromeSwitches;
 import org.chromium.chrome.test.ChromeActivityTestRule;
@@ -172,6 +173,7 @@
 
     @Test
     @SmallTest
+    @DisabledTest(message = "https://crbug.com/1056176")
     public void clipboardUriDoNotClearTest() throws TimeoutException, IOException {
         generateAnImageToClipboard();
         generateAnImageToClipboard();
@@ -185,6 +187,7 @@
 
     @Test
     @SmallTest
+    @DisabledTest(message = "https://crbug.com/1056176")
     public void clearEverythingIfNoClipboardImageTest() throws TimeoutException, IOException {
         generateAnImageToClipboard();
         generateAnImageToClipboard();
diff --git a/chrome/browser/themes/increased_contrast_theme_supplier.cc b/chrome/browser/themes/increased_contrast_theme_supplier.cc
index f093c6c..0382ad2 100644
--- a/chrome/browser/themes/increased_contrast_theme_supplier.cc
+++ b/chrome/browser/themes/increased_contrast_theme_supplier.cc
@@ -4,11 +4,19 @@
 
 #include "chrome/browser/themes/increased_contrast_theme_supplier.h"
 #include "chrome/browser/themes/theme_properties.h"
+#include "ui/native_theme/native_theme.h"
 
 IncreasedContrastThemeSupplier::IncreasedContrastThemeSupplier(
-    bool is_dark_mode)
-    : CustomThemeSupplier(INCREASED_CONTRAST), is_dark_mode_(is_dark_mode) {}
-IncreasedContrastThemeSupplier::~IncreasedContrastThemeSupplier() {}
+    ui::NativeTheme* native_theme)
+    : CustomThemeSupplier(INCREASED_CONTRAST),
+      native_theme_(native_theme),
+      is_dark_mode_(native_theme->ShouldUseDarkColors()) {
+  native_theme->AddObserver(this);
+}
+
+IncreasedContrastThemeSupplier::~IncreasedContrastThemeSupplier() {
+  native_theme_->RemoveObserver(this);
+}
 
 // TODO(ellyjones): Follow up with a11y designers about these color choices.
 bool IncreasedContrastThemeSupplier::GetColor(int id, SkColor* color) const {
@@ -53,3 +61,8 @@
 bool IncreasedContrastThemeSupplier::CanUseIncognitoColors() const {
   return false;
 }
+
+void IncreasedContrastThemeSupplier::OnNativeThemeUpdated(
+    ui::NativeTheme* native_theme) {
+  is_dark_mode_ = native_theme->ShouldUseDarkColors();
+}
diff --git a/chrome/browser/themes/increased_contrast_theme_supplier.h b/chrome/browser/themes/increased_contrast_theme_supplier.h
index 1cc6f76..975d018f 100644
--- a/chrome/browser/themes/increased_contrast_theme_supplier.h
+++ b/chrome/browser/themes/increased_contrast_theme_supplier.h
@@ -6,13 +6,19 @@
 #define CHROME_BROWSER_THEMES_INCREASED_CONTRAST_THEME_SUPPLIER_H_
 
 #include "chrome/browser/themes/custom_theme_supplier.h"
+#include "ui/native_theme/native_theme_observer.h"
+
+namespace ui {
+class NativeTheme;
+}  // namespace ui
 
 // A theme supplier that maximizes the contrast between UI elements and
 // especially the visual prominence of key UI elements (omnibox, active vs
 // inactive tab distinction).
-class IncreasedContrastThemeSupplier : public CustomThemeSupplier {
+class IncreasedContrastThemeSupplier : public CustomThemeSupplier,
+                                       public ui::NativeThemeObserver {
  public:
-  explicit IncreasedContrastThemeSupplier(bool is_dark_mode);
+  explicit IncreasedContrastThemeSupplier(ui::NativeTheme* theme);
 
   bool GetColor(int id, SkColor* color) const override;
   bool CanUseIncognitoColors() const override;
@@ -21,6 +27,9 @@
   ~IncreasedContrastThemeSupplier() override;
 
  private:
+  void OnNativeThemeUpdated(ui::NativeTheme* native_theme) override;
+
+  ui::NativeTheme* native_theme_;
   bool is_dark_mode_;
 
   DISALLOW_COPY_AND_ASSIGN(IncreasedContrastThemeSupplier);
diff --git a/chrome/browser/themes/theme_service.cc b/chrome/browser/themes/theme_service.cc
index a72f457..842a5c4 100644
--- a/chrome/browser/themes/theme_service.cc
+++ b/chrome/browser/themes/theme_service.cc
@@ -320,8 +320,8 @@
   if (UsingDefaultTheme()) {
     scoped_refptr<CustomThemeSupplier> supplier;
     if (theme_helper_.ShouldUseIncreasedContrastThemeSupplier(observed_theme)) {
-      supplier = base::MakeRefCounted<IncreasedContrastThemeSupplier>(
-          observed_theme->ShouldUseDarkColors());
+      supplier =
+          base::MakeRefCounted<IncreasedContrastThemeSupplier>(observed_theme);
     }
     SwapThemeSupplier(supplier);
   }
@@ -356,8 +356,7 @@
 
   ui::NativeTheme* native_theme = ui::NativeTheme::GetInstanceForNativeUi();
   if (theme_helper_.ShouldUseIncreasedContrastThemeSupplier(native_theme)) {
-    SetCustomDefaultTheme(new IncreasedContrastThemeSupplier(
-        native_theme->ShouldUseDarkColors()));
+    SetCustomDefaultTheme(new IncreasedContrastThemeSupplier(native_theme));
     // Early return here because SetCustomDefaultTheme does ClearAllThemeData
     // and NotifyThemeChanged when it needs to. Without this return, the
     // IncreasedContrastThemeSupplier would get immediately removed if this
diff --git a/chrome/browser/themes/theme_service_unittest.cc b/chrome/browser/themes/theme_service_unittest.cc
index 68ab9e4..9fa21be 100644
--- a/chrome/browser/themes/theme_service_unittest.cc
+++ b/chrome/browser/themes/theme_service_unittest.cc
@@ -35,6 +35,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/gfx/color_palette.h"
 #include "ui/gfx/color_utils.h"
+#include "ui/native_theme/test_native_theme.h"
 
 #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
 #include "chrome/browser/supervised_user/supervised_user_service.h"
@@ -184,6 +185,7 @@
   }
 
  protected:
+  ui::TestNativeTheme native_theme_;
   extensions::ExtensionRegistry* registry_ = nullptr;
   ThemeService* theme_service_ = nullptr;
 };
@@ -460,12 +462,13 @@
 TEST_F(ThemeServiceTest, OmniboxContrast) {
   using TP = ThemeProperties;
   for (bool dark : {false, true}) {
+    native_theme_.SetDarkMode(dark);
     for (bool high_contrast : {false, true}) {
       set_theme_supplier(
           theme_service_,
-          high_contrast
-              ? base::MakeRefCounted<IncreasedContrastThemeSupplier>(dark)
-              : nullptr);
+          high_contrast ? base::MakeRefCounted<IncreasedContrastThemeSupplier>(
+                              &native_theme_)
+                        : nullptr);
       constexpr int contrasting_ids[][2] = {
           {TP::COLOR_OMNIBOX_TEXT, TP::COLOR_OMNIBOX_BACKGROUND},
           {TP::COLOR_OMNIBOX_TEXT, TP::COLOR_OMNIBOX_BACKGROUND_HOVERED},
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 93d691c1..17c0f6c 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -734,8 +734,6 @@
       "android/omnibox/omnibox_view_util.h",
       "android/overlay/overlay_window_android.cc",
       "android/overlay/overlay_window_android.h",
-      "android/page_info/certificate_chain_helper.cc",
-      "android/page_info/certificate_viewer_android.cc",
       "android/page_info/connection_info_popup_android.cc",
       "android/page_info/connection_info_popup_android.h",
       "android/page_info/page_info_controller_android.cc",
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
index dc1f981..917c26e2 100644
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -500,6 +500,9 @@
       <message name="IDS_SAVED_PASSWORDS_NONE_TEXT" desc="Text when there are no saved passwords/exceptions.">
         Saved passwords will appear here.
       </message>
+      <message name="IDS_PASSWORD_NO_RESULT" desc="Text when a password search returned no results.">
+        Can’t find that password. Check your spelling and try again.
+      </message>
       <message name="IDS_PASSWORD_ENTRY_VIEWER_TITLE" desc='Title of the overview screen for a saved password.'>
         Saved password
       </message>
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PASSWORD_NO_RESULT.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PASSWORD_NO_RESULT.png.sha1
new file mode 100644
index 0000000..683a145
--- /dev/null
+++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PASSWORD_NO_RESULT.png.sha1
@@ -0,0 +1 @@
+821ca2ab80b59d7b81213e77ed7efc201dbe31f6
diff --git a/chrome/browser/ui/toolbar/app_menu_model.cc b/chrome/browser/ui/toolbar/app_menu_model.cc
index 55a756b..bc10974 100644
--- a/chrome/browser/ui/toolbar/app_menu_model.cc
+++ b/chrome/browser/ui/toolbar/app_menu_model.cc
@@ -57,6 +57,7 @@
 #include "components/bookmarks/common/bookmark_pref_names.h"
 #include "components/dom_distiller/content/browser/distillable_page_utils.h"
 #include "components/dom_distiller/core/dom_distiller_features.h"
+#include "components/dom_distiller/core/uma_helper.h"
 #include "components/dom_distiller/core/url_utils.h"
 #include "components/prefs/pref_service.h"
 #include "components/signin/public/base/signin_metrics.h"
@@ -422,6 +423,17 @@
                                    delta);
       }
       LogMenuAction(MENU_ACTION_DISTILL_PAGE);
+      if (dom_distiller::url_utils::IsDistilledPage(
+              browser()
+                  ->tab_strip_model()
+                  ->GetActiveWebContents()
+                  ->GetLastCommittedURL())) {
+        dom_distiller::UMAHelper::RecordReaderModeExit(
+            dom_distiller::UMAHelper::ReaderModeEntryPoint::kMenuOption);
+      } else {
+        dom_distiller::UMAHelper::RecordReaderModeEntry(
+            dom_distiller::UMAHelper::ReaderModeEntryPoint::kMenuOption);
+      }
       break;
     case IDC_SAVE_PAGE:
       if (!uma_action_recorded_)
diff --git a/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.cc b/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.cc
index 20bb36b5..a44562c0 100644
--- a/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.cc
+++ b/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.cc
@@ -89,7 +89,7 @@
         CreateSaveCheckbox(controller_->GetStoreLocallyStartState()));
   }
 
-  UpdateButtonLabels();
+  UpdateButtons();
 }
 
 CardUnmaskPromptViews::~CardUnmaskPromptViews() {
@@ -111,7 +111,7 @@
   controls_container_->SetVisible(false);
   overlay_->SetVisible(true);
   progress_throbber_->Start();
-  UpdateButtonLabels();
+  UpdateButtons();
   DialogModelChanged();
   Layout();
 }
@@ -173,7 +173,7 @@
       layout->AddView(std::move(error_icon));
       layout->AddView(std::move(error_label));
     }
-    UpdateButtonLabels();
+    UpdateButtons();
     DialogModelChanged();
   }
 
@@ -261,18 +261,6 @@
   delete this;
 }
 
-int CardUnmaskPromptViews::GetDialogButtons() const {
-  // In permanent error state, only the "close" button is shown.
-  AutofillClient::PaymentsRpcResult result =
-      controller_->GetVerificationResult();
-  if (result == AutofillClient::PERMANENT_FAILURE ||
-      result == AutofillClient::NETWORK_ERROR) {
-    return ui::DIALOG_BUTTON_CANCEL;
-  }
-
-  return ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL;
-}
-
 bool CardUnmaskPromptViews::IsDialogButtonEnabled(
     ui::DialogButton button) const {
   if (button == ui::DIALOG_BUTTON_CANCEL)
@@ -320,7 +308,7 @@
   if (controller_->InputCvcIsValid(new_contents))
     cvc_input_->SetInvalid(false);
 
-  UpdateButtonLabels();
+  UpdateButtons();
   DialogModelChanged();
 }
 
@@ -341,7 +329,7 @@
         IDS_AUTOFILL_CARD_UNMASK_INVALID_EXPIRATION_DATE));
   }
 
-  UpdateButtonLabels();
+  UpdateButtons();
   DialogModelChanged();
 }
 
@@ -474,7 +462,15 @@
   GetWidget()->Close();
 }
 
-void CardUnmaskPromptViews::UpdateButtonLabels() {
+void CardUnmaskPromptViews::UpdateButtons() {
+  // In permanent error state, only the "close" button is shown.
+  AutofillClient::PaymentsRpcResult result =
+      controller_->GetVerificationResult();
+  bool has_ok = result != AutofillClient::PERMANENT_FAILURE &&
+                result != AutofillClient::NETWORK_ERROR;
+  DialogDelegate::set_buttons(has_ok ? ui::DIALOG_BUTTON_OK |
+                                           ui::DIALOG_BUTTON_CANCEL
+                                     : ui::DIALOG_BUTTON_CANCEL);
   DialogDelegate::set_button_label(ui::DIALOG_BUTTON_OK,
                                    controller_->GetOkButtonLabel());
 }
@@ -488,7 +484,7 @@
   input_row_->InvalidateLayout();
   cvc_input_->SetInvalid(false);
   cvc_input_->SetText(base::string16());
-  UpdateButtonLabels();
+  UpdateButtons();
   DialogModelChanged();
   GetWidget()->UpdateWindowTitle();
   instructions_->SetText(controller_->GetInstructionsMessage());
diff --git a/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.h b/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.h
index 1ca9e59..ef01c5e 100644
--- a/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.h
+++ b/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.h
@@ -56,7 +56,6 @@
   ui::ModalType GetModalType() const override;
   base::string16 GetWindowTitle() const override;
   void DeleteDelegate() override;
-  int GetDialogButtons() const override;
   bool IsDialogButtonEnabled(ui::DialogButton button) const override;
   View* GetInitiallyFocusedView() override;
   bool ShouldShowCloseButton() const override;
@@ -80,7 +79,7 @@
   void ShowNewCardLink();
   void ClosePrompt();
 
-  void UpdateButtonLabels();
+  void UpdateButtons();
 
   void LinkClicked();
 
diff --git a/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.cc b/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.cc
index 4e5302f..4913783e 100644
--- a/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.cc
+++ b/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.cc
@@ -351,6 +351,10 @@
     LocalCardMigrationDialogController* controller,
     content::WebContents* web_contents)
     : controller_(controller), web_contents_(web_contents) {
+  DialogDelegate::set_buttons(controller_->AllCardsInvalid()
+                                  ? ui::DIALOG_BUTTON_OK
+                                  : ui::DIALOG_BUTTON_OK |
+                                        ui::DIALOG_BUTTON_CANCEL);
   DialogDelegate::set_button_label(ui::DIALOG_BUTTON_OK, GetOkButtonLabel());
   DialogDelegate::set_button_label(ui::DIALOG_BUTTON_CANCEL,
                                    GetCancelButtonLabel());
@@ -394,14 +398,6 @@
   return false;
 }
 
-int LocalCardMigrationDialogView::GetDialogButtons() const {
-  // Don't show the "View cards" button if all cards are invalid.
-  if (controller_->AllCardsInvalid())
-    return ui::DIALOG_BUTTON_OK;
-
-  return ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL;
-}
-
 // TODO(crbug.com/867194): Update this method when adding feedback.
 bool LocalCardMigrationDialogView::IsDialogButtonEnabled(
     ui::DialogButton button) const {
diff --git a/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.h b/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.h
index 39d7d484..28bfd44 100644
--- a/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.h
+++ b/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.h
@@ -37,7 +37,6 @@
   gfx::Size CalculatePreferredSize() const override;
   ui::ModalType GetModalType() const override;
   bool ShouldShowCloseButton() const override;
-  int GetDialogButtons() const override;
   bool IsDialogButtonEnabled(ui::DialogButton button) const override;
   void WindowClosing() override;
 
diff --git a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc
index 0638a64..becbfeb0 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc
@@ -217,13 +217,9 @@
   }
 
   OmniboxResultView* result = result_view_at(line);
-  result->Invalidate();
-
-  if (HasMatchAt(line) && GetMatchAtIndex(line).associated_keyword.get()) {
-    result->ShowKeyword(IsSelectedIndex(line) &&
-                        model_->selected_line_state() ==
-                            OmniboxPopupModel::KEYWORD);
-  }
+  result->ApplyThemeAndRefreshIcons();
+  result->ShowKeyword(IsSelectedIndex(line) && model_->selected_line_state() ==
+                                                   OmniboxPopupModel::KEYWORD);
 }
 
 void OmniboxPopupContentsView::OnSelectionStateChanged(size_t line) {
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
index 51563f4..ac54445 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
@@ -173,7 +173,7 @@
     }
   }
 
-  Invalidate();
+  ApplyThemeAndRefreshIcons();
   InvalidateLayout();
 }
 
@@ -184,7 +184,7 @@
     animation_->Hide();
 }
 
-void OmniboxResultView::Invalidate(bool force_reapply_styles) {
+void OmniboxResultView::ApplyThemeAndRefreshIcons(bool force_reapply_styles) {
   bool high_contrast =
       GetNativeTheme() && GetNativeTheme()->UsesHighContrastColors();
   // TODO(tapted): Consider using background()->SetNativeControlColor() and
@@ -324,8 +324,8 @@
 }
 
 void OmniboxResultView::OnMatchIconUpdated() {
-  // The new icon will be fetched during Invalidate().
-  Invalidate();
+  // The new icon will be fetched during ApplyThemeAndRefreshIcons().
+  ApplyThemeAndRefreshIcons();
 }
 
 void OmniboxResultView::SetRichSuggestionImage(const gfx::ImageSkia& image) {
@@ -591,7 +591,7 @@
                                 vector_icons::kCloseRoundedIcon,
                                 GetLayoutConstant(LOCATION_BAR_ICON_SIZE),
                                 GetColor(OmniboxPart::RESULTS_ICON));
-  Invalidate(true);
+  ApplyThemeAndRefreshIcons(true);
 }
 
 void OmniboxResultView::ProvideButtonFocusHint() {
@@ -637,7 +637,7 @@
 
 void OmniboxResultView::UpdateHoverState() {
   UpdateRemoveSuggestionVisibility();
-  Invalidate();
+  ApplyThemeAndRefreshIcons();
 }
 
 void OmniboxResultView::OpenMatch(WindowOpenDisposition disposition,
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.h b/chrome/browser/ui/views/omnibox/omnibox_result_view.h
index 25d1f0a..6e174fd4 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_result_view.h
+++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.h
@@ -58,7 +58,9 @@
 
   void ShowKeyword(bool show_keyword);
 
-  void Invalidate(bool force_reapply_styles = false);
+  // Applies the current theme to the current text and widget colors.
+  // Also refreshes the icons which may need to be re-colored as well.
+  void ApplyThemeAndRefreshIcons(bool force_reapply_styles = false);
 
   // Invoked when this result view has been selected or unselected.
   void OnSelectionStateChanged();
diff --git a/chrome/browser/ui/views/reader_mode/reader_mode_icon_view.cc b/chrome/browser/ui/views/reader_mode/reader_mode_icon_view.cc
index 81f2d2b..5ae64e7f 100644
--- a/chrome/browser/ui/views/reader_mode/reader_mode_icon_view.cc
+++ b/chrome/browser/ui/views/reader_mode/reader_mode_icon_view.cc
@@ -8,6 +8,7 @@
 #include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/dom_distiller/core/dom_distiller_features.h"
+#include "components/dom_distiller/core/uma_helper.h"
 #include "components/dom_distiller/core/url_utils.h"
 #include "components/prefs/pref_service.h"
 #include "content/public/browser/navigation_handle.h"
@@ -98,6 +99,17 @@
   return nullptr;
 }
 
+void ReaderModeIconView::OnExecuting(
+    PageActionIconView::ExecuteSource execute_source) {
+  if (active()) {
+    dom_distiller::UMAHelper::RecordReaderModeExit(
+        dom_distiller::UMAHelper::ReaderModeEntryPoint::kOmniboxIcon);
+  } else {
+    dom_distiller::UMAHelper::RecordReaderModeEntry(
+        dom_distiller::UMAHelper::ReaderModeEntryPoint::kOmniboxIcon);
+  }
+}
+
 void ReaderModeIconView::OnResult(
     const dom_distiller::DistillabilityResult& result) {
   Update();
diff --git a/chrome/browser/ui/views/reader_mode/reader_mode_icon_view.h b/chrome/browser/ui/views/reader_mode/reader_mode_icon_view.h
index 52336f3..45df46b1 100644
--- a/chrome/browser/ui/views/reader_mode/reader_mode_icon_view.h
+++ b/chrome/browser/ui/views/reader_mode/reader_mode_icon_view.h
@@ -46,7 +46,7 @@
   // GetBubble() is required by PageActionIconView; however, the icon
   // intentionally does not display a bubble when activated.
   views::BubbleDialogDelegateView* GetBubble() const override;
-  void OnExecuting(PageActionIconView::ExecuteSource execute_source) override {}
+  void OnExecuting(PageActionIconView::ExecuteSource execute_source) override;
 
   void OnResult(const dom_distiller::DistillabilityResult& result) override;
 
diff --git a/chrome/browser/ui/webui/certificate_viewer_webui.cc b/chrome/browser/ui/webui/certificate_viewer_webui.cc
index e686be81..2bd1c78 100644
--- a/chrome/browser/ui/webui/certificate_viewer_webui.cc
+++ b/chrome/browser/ui/webui/certificate_viewer_webui.cc
@@ -26,6 +26,7 @@
 #include "chrome/common/net/x509_certificate_model_nss.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/grit/generated_resources.h"
+#include "components/strings/grit/components_strings.h"
 #include "content/public/browser/host_zoom_map.h"
 #include "content/public/browser/web_contents.h"
 #include "net/cert/x509_util_nss.h"
diff --git a/chrome/browser/ui/webui/chromeos/account_manager_welcome_dialog.cc b/chrome/browser/ui/webui/chromeos/account_manager_welcome_dialog.cc
index 11c680f..254f9e9 100644
--- a/chrome/browser/ui/webui/chromeos/account_manager_welcome_dialog.cc
+++ b/chrome/browser/ui/webui/chromeos/account_manager_welcome_dialog.cc
@@ -14,6 +14,7 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/common/webui_url_constants.h"
 #include "components/prefs/pref_service.h"
+#include "components/user_manager/user_manager.h"
 #include "ui/aura/window.h"
 #include "ui/views/widget/widget.h"
 #include "ui/wm/core/shadow_types.h"
@@ -49,6 +50,10 @@
   }
 
   // Check if the dialog should be shown.
+  if (user_manager::UserManager::Get()
+          ->IsCurrentUserCryptohomeDataEphemeral()) {
+    return false;
+  }
   PrefService* pref_service =
       ProfileManager::GetActiveUserProfile()->GetPrefs();
   const int num_times_shown = pref_service->GetInteger(
diff --git a/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc
index 40d4547c3..473bd73 100644
--- a/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc
@@ -119,9 +119,13 @@
   CallJS("login.ResetScreen.setIsRollbackAvailable", value);
 }
 
-void ResetScreenHandler::SetIsRollbackChecked(bool value) {
-  is_rollback_checked_ = value;
-  CallJS("login.ResetScreen.setIsRollbackChecked", value);
+// Only serve the request if the confirmation dialog isn't being shown.
+void ResetScreenHandler::SetIsRollbackRequested(bool value) {
+  if (is_showing_confirmation_dialog_)
+    return;
+
+  is_rollback_requested_ = value;
+  CallJS("login.ResetScreen.setIsRollbackRequested", value);
 }
 
 void ResetScreenHandler::SetIsTpmFirmwareUpdateAvailable(bool value) {
@@ -143,12 +147,13 @@
   CallJS("login.ResetScreen.setTpmFirmwareUpdateMode", static_cast<int>(value));
 }
 
-void ResetScreenHandler::SetIsConfirmational(bool value) {
-  CallJS("login.ResetScreen.setIsConfirmational", value);
+void ResetScreenHandler::SetShouldShowConfirmationDialog(bool value) {
+  is_showing_confirmation_dialog_ = value;
+  CallJS("login.ResetScreen.setShouldShowConfirmationDialog", value);
 }
 
-void ResetScreenHandler::SetIsGoogleBrandedBuild(bool value) {
-  CallJS("login.ResetScreen.setIsGoogleBrandedBuild", value);
+void ResetScreenHandler::SetConfirmationDialogClosed() {
+  is_showing_confirmation_dialog_ = false;
 }
 
 void ResetScreenHandler::SetScreenState(State value) {
@@ -168,8 +173,8 @@
   return is_rollback_available_;
 }
 
-bool ResetScreenHandler::GetIsRollbackChecked() {
-  return is_rollback_checked_;
+bool ResetScreenHandler::GetIsRollbackRequested() {
+  return is_rollback_requested_;
 }
 
 bool ResetScreenHandler::GetIsTpmFirmwareUpdateChecked() {
diff --git a/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.h
index 3078557..e7feeb5 100644
--- a/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.h
@@ -36,19 +36,19 @@
   };
 
   virtual void SetIsRollbackAvailable(bool value) = 0;
-  virtual void SetIsRollbackChecked(bool value) = 0;
+  virtual void SetIsRollbackRequested(bool value) = 0;
   virtual void SetIsTpmFirmwareUpdateAvailable(bool value) = 0;
   virtual void SetIsTpmFirmwareUpdateChecked(bool value) = 0;
   virtual void SetIsTpmFirmwareUpdateEditable(bool value) = 0;
   virtual void SetTpmFirmwareUpdateMode(tpm_firmware_update::Mode value) = 0;
-  virtual void SetIsConfirmational(bool value) = 0;
-  virtual void SetIsGoogleBrandedBuild(bool value) = 0;
+  virtual void SetShouldShowConfirmationDialog(bool value) = 0;
+  virtual void SetConfirmationDialogClosed() = 0;
   virtual void SetScreenState(State value) = 0;
 
   virtual State GetScreenState() = 0;
   virtual tpm_firmware_update::Mode GetTpmFirmwareUpdateMode() = 0;
   virtual bool GetIsRollbackAvailable() = 0;
-  virtual bool GetIsRollbackChecked() = 0;
+  virtual bool GetIsRollbackRequested() = 0;
   virtual bool GetIsTpmFirmwareUpdateChecked() = 0;
 };
 
@@ -73,18 +73,18 @@
   void DeclareJSCallbacks() override;
   void Initialize() override;
   void SetIsRollbackAvailable(bool value) override;
-  void SetIsRollbackChecked(bool value) override;
+  void SetIsRollbackRequested(bool value) override;
   void SetIsTpmFirmwareUpdateAvailable(bool value) override;
   void SetIsTpmFirmwareUpdateChecked(bool value) override;
   void SetIsTpmFirmwareUpdateEditable(bool value) override;
   void SetTpmFirmwareUpdateMode(tpm_firmware_update::Mode value) override;
-  void SetIsConfirmational(bool value) override;
-  void SetIsGoogleBrandedBuild(bool value) override;
+  void SetShouldShowConfirmationDialog(bool value) override;
+  void SetConfirmationDialogClosed() override;
   void SetScreenState(State value) override;
   State GetScreenState() override;
   tpm_firmware_update::Mode GetTpmFirmwareUpdateMode() override;
   bool GetIsRollbackAvailable() override;
-  bool GetIsRollbackChecked() override;
+  bool GetIsRollbackRequested() override;
   bool GetIsTpmFirmwareUpdateChecked() override;
 
  private:
@@ -98,8 +98,9 @@
   ResetView::State state_ = ResetView::State::kRestartRequired;
   tpm_firmware_update::Mode mode_ = tpm_firmware_update::Mode::kNone;
   bool is_rollback_available_ = false;
-  bool is_rollback_checked_ = false;
+  bool is_rollback_requested_ = false;
   bool is_tpm_firmware_update_checked_ = false;
+  bool is_showing_confirmation_dialog_ = false;
 
   DISALLOW_COPY_AND_ASSIGN(ResetScreenHandler);
 };
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
index e28583e..15df00f 100644
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -738,7 +738,10 @@
       {"autofillPageTitle", IDS_SETTINGS_AUTOFILL},
       {"passwords", IDS_SETTINGS_PASSWORDS},
       {"checkPasswords", IDS_SETTINGS_CHECK_PASSWORDS},
+      {"checkedPasswords", IDS_SETTINGS_CHECKED_PASSWORDS},
       {"checkPasswordsDescription", IDS_SETTINGS_CHECK_PASSWORDS_DESCRIPTION},
+      {"checkPasswordLeakCount", IDS_SETTINGS_LEAKED_PASSWORDS_COUNT},
+      {"checkPasswordsAgain", IDS_SETTINGS_CHECK_PASSWORDS_AGAIN},
       {"creditCards", IDS_AUTOFILL_PAYMENT_METHODS},
       {"noCreditCardsFound", IDS_SETTINGS_PAYMENT_METHODS_NONE},
       {"googlePayments", IDS_SETTINGS_GOOGLE_PAYMENTS},
@@ -1110,6 +1113,30 @@
       {"safetyCheckParentPrimaryLabelAfter",
        IDS_SETTINGS_SAFETY_CHECK_PARENT_PRIMARY_LABEL_AFTER},
       {"safetyCheckParentButton", IDS_SETTINGS_SAFETY_CHECK_PARENT_BUTTON},
+      {"safetyCheckPasswordsPrimaryLabel",
+       IDS_SETTINGS_SAFETY_CHECK_PASSWORDS_PRIMARY_LABEL},
+      {"safetyCheckPasswordsSubLabelSafe",
+       IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_SAFE},
+      {"safetyCheckPasswordsSubLabelCompromisedSingular",
+       IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_COMPROMISED_SINGULAR},
+      {"safetyCheckPasswordsSubLabelCompromisedPlural",
+       IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_COMPROMISED_PLURAL},
+      {"safetyCheckPasswordsSubLabelOffline",
+       IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_OFFLINE},
+      {"safetyCheckPasswordsSubLabelNoPasswords",
+       IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_NO_PASSWORDS},
+      {"safetyCheckPasswordsSubLabelSignedOut",
+       IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_SIGNED_OUT},
+      {"safetyCheckPasswordsSubLabelQuotaLimit",
+       IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_QUOTA_LIMIT},
+      {"safetyCheckPasswordsSubLabelTooManyPasswords",
+       IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_TOO_MANY_PASSWORDS},
+      {"safetyCheckPasswordsSubLabelError",
+       IDS_SAFETY_CHECK_PASSWORDS_SUB_LABEL_ERROR},
+      {"safetyCheckPasswordsButtonCompromised",
+       IDS_SAFETY_CHECK_PASSWORDS_BUTTON_COMPROMISED},
+      {"safetyCheckPasswordsButtonError",
+       IDS_SAFETY_CHECK_PASSWORDS_BUTTON_ERROR},
   };
   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
 
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_dialog_chromeos.cc b/chrome/browser/ui/webui/signin/inline_login_handler_dialog_chromeos.cc
index 035487a..cf06057 100644
--- a/chrome/browser/ui/webui/signin/inline_login_handler_dialog_chromeos.cc
+++ b/chrome/browser/ui/webui/signin/inline_login_handler_dialog_chromeos.cc
@@ -41,6 +41,42 @@
          gaia::AreEmailsSame(active_user->GetDisplayEmail(), email);
 }
 
+GURL GetUrlWithEmailParam(base::StringPiece url_string,
+                          const std::string& email) {
+  GURL url = GURL(url_string);
+  if (!email.empty()) {
+    url = net::AppendQueryParameter(url, "email", email);
+    url = net::AppendQueryParameter(url, "readOnlyEmail", "true");
+  }
+  return url;
+}
+
+GURL GetInlineLoginUrl(const std::string& email) {
+  if (IsDeviceAccountEmail(email)) {
+    // It's a device account re-auth.
+    return GetUrlWithEmailParam(chrome::kChromeUIChromeSigninURL, email);
+  }
+  if (!ProfileManager::GetActiveUserProfile()->GetPrefs()->GetBoolean(
+          chromeos::prefs::kSecondaryGoogleAccountSigninAllowed)) {
+    // Addition of secondary Google Accounts is not allowed.
+    return GURL(chrome::kChromeUIAccountManagerErrorURL);
+  }
+
+  // Addition of secondary Google Accounts is allowed.
+  if (!ProfileManager::GetActiveUserProfile()->IsChild()) {
+    return GetUrlWithEmailParam(chrome::kChromeUIChromeSigninURL, email);
+  }
+  // User type is Child.
+  if (!features::IsEduCoexistenceEnabled()) {
+    return GURL(chrome::kChromeUIAccountManagerErrorURL);
+  }
+  DCHECK_EQ(std::string(chrome::kChromeUIChromeSigninURL).back(), '/');
+  // chrome://chrome-signin/edu
+  const std::string kEduAccountLoginURL =
+      std::string(chrome::kChromeUIChromeSigninURL) + "edu";
+  return GetUrlWithEmailParam(kEduAccountLoginURL, email);
+}
+
 }  // namespace
 
 // static
@@ -50,32 +86,8 @@
     return;
   }
 
-  GURL url;
-  if (ProfileManager::GetActiveUserProfile()->IsChild()) {
-    // chrome://chrome-signin/edu
-    const std::string kEduAccountLoginURL =
-        std::string(chrome::kChromeUIChromeSigninURL) + "edu";
-
-    url = GURL(features::IsEduCoexistenceEnabled()
-                   ? kEduAccountLoginURL
-                   : chrome::kChromeUIAccountManagerErrorURL);
-  } else if (ProfileManager::GetActiveUserProfile()->GetPrefs()->GetBoolean(
-                 chromeos::prefs::kSecondaryGoogleAccountSigninAllowed) ||
-             IsDeviceAccountEmail(email)) {
-    // Addition of secondary Google Accounts is allowed OR it's a primary
-    // account re-auth.
-    url = GURL(chrome::kChromeUIChromeSigninURL);
-    if (!email.empty()) {
-      url = net::AppendQueryParameter(url, "email", email);
-      url = net::AppendQueryParameter(url, "readOnlyEmail", "true");
-    }
-  } else {
-    // Addition of secondary Google Accounts is not allowed.
-    url = GURL(chrome::kChromeUIAccountManagerErrorURL);
-  }
-
   // Will be deleted by |SystemWebDialogDelegate::OnDialogClosed|.
-  dialog = new InlineLoginHandlerDialogChromeOS(url);
+  dialog = new InlineLoginHandlerDialogChromeOS(GetInlineLoginUrl(email));
   dialog->ShowSystemDialog();
 
   // TODO(crbug.com/1016828): Remove/update this after the dialog behavior on
diff --git a/chrome/common/conflicts/module_watcher_win.cc b/chrome/common/conflicts/module_watcher_win.cc
index 730e122..994b1056 100644
--- a/chrome/common/conflicts/module_watcher_win.cc
+++ b/chrome/common/conflicts/module_watcher_win.cc
@@ -12,18 +12,15 @@
 #include <utility>
 
 #include "base/bind.h"
-#include "base/debug/dump_without_crashing.h"
 #include "base/lazy_instance.h"
 #include "base/location.h"
 #include "base/memory/ptr_util.h"
-#include "base/rand_util.h"
 #include "base/sequenced_task_runner.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/lock.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
-#include "base/threading/platform_thread.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/win/scoped_handle.h"
 
@@ -114,11 +111,6 @@
 constexpr char kLdrRegisterDllNotification[] = "LdrRegisterDllNotification";
 constexpr char kLdrUnregisterDllNotification[] = "LdrUnregisterDllNotification";
 
-// It is currently estimated that around 10 DLLs are loaded in a background
-// sequence in Chrome. This number was chosen so that on average 1% of launches
-// will cause a process dump.
-constexpr int kMaxBackgroundLoadedDllCount = 1000;
-
 // Helper function for converting a UNICODE_STRING to a FilePath.
 base::FilePath ToFilePath(const UNICODE_STRING* str) {
   return base::FilePath(
@@ -139,15 +131,13 @@
 
 // static
 std::unique_ptr<ModuleWatcher> ModuleWatcher::Create(
-    OnModuleEventCallback callback,
-    bool report_background_loaded_modules) {
+    OnModuleEventCallback callback) {
   {
     base::AutoLock lock(g_module_watcher_lock.Get());
     // If a ModuleWatcher already exists then bail out.
     if (g_module_watcher_instance)
       return nullptr;
-    g_module_watcher_instance =
-        new ModuleWatcher(report_background_loaded_modules);
+    g_module_watcher_instance = new ModuleWatcher();
   }
 
   // Initialization mustn't occur while holding |g_module_watcher_lock|.
@@ -156,8 +146,6 @@
 }
 
 ModuleWatcher::~ModuleWatcher() {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-
   // Done before acquiring |g_module_watcher_lock|.
   UnregisterDllNotificationCallback();
 
@@ -168,17 +156,10 @@
   g_module_watcher_instance = nullptr;
 }
 
-ModuleWatcher::ModuleWatcher(bool report_background_loaded_modules)
-    : report_background_loaded_modules_(report_background_loaded_modules),
-      background_loaded_dll_count_(0),
-      num_background_loaded_dll_report_(
-          base::RandInt(0, kMaxBackgroundLoadedDllCount)),
-      weak_ptr_factory_(this) {}
+ModuleWatcher::ModuleWatcher() {}
 
 // Initializes the ModuleWatcher instance.
 void ModuleWatcher::Initialize(OnModuleEventCallback callback) {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-
   callback_ = std::move(callback);
   RegisterDllNotificationCallback();
 
@@ -245,18 +226,13 @@
   }
 }
 
-void ModuleWatcher::DumpOnBackgroundLoadedModule() {
-  if (!report_background_loaded_modules_ ||
-      base::PlatformThread::GetCurrentThreadPriority() !=
-          base::ThreadPriority::BACKGROUND) {
-    return;
-  }
-
-  if (background_loaded_dll_count_++ == num_background_loaded_dll_report_) {
-    // DLL loaded on a thread with background priority. This can cause jank on
-    // the UI thread if it tries to acquire the loader lock.
-    base::debug::DumpWithoutCrashing();
-  }
+// static
+ModuleWatcher::OnModuleEventCallback ModuleWatcher::GetCallbackForContext(
+    void* context) {
+  base::AutoLock lock(g_module_watcher_lock.Get());
+  if (context != g_module_watcher_instance)
+    return OnModuleEventCallback();
+  return g_module_watcher_instance->callback_;
 }
 
 // static
@@ -264,16 +240,7 @@
     unsigned long notification_reason,
     const LDR_DLL_NOTIFICATION_DATA* notification_data,
     void* context) {
-  OnModuleEventCallback callback;
-  {
-    base::AutoLock lock(g_module_watcher_lock.Get());
-    if (context == g_module_watcher_instance) {
-      callback = g_module_watcher_instance->callback_;
-
-      g_module_watcher_instance->DumpOnBackgroundLoadedModule();
-    }
-  }
-
+  auto callback = GetCallbackForContext(context);
   if (!callback)
     return;
 
@@ -295,7 +262,5 @@
 }
 
 void ModuleWatcher::RunCallback(const ModuleEvent& event) {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-
   callback_.Run(event);
 }
diff --git a/chrome/common/conflicts/module_watcher_win.h b/chrome/common/conflicts/module_watcher_win.h
index c2fff5a..b050fdf 100644
--- a/chrome/common/conflicts/module_watcher_win.h
+++ b/chrome/common/conflicts/module_watcher_win.h
@@ -11,7 +11,6 @@
 #include "base/files/file_path.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
-#include "base/sequence_checker.h"
 
 class ModuleWatcherTest;
 
@@ -90,9 +89,7 @@
   //
   // Only a single instance of a watcher may exist at any moment. This will
   // return nullptr when trying to create a second watcher.
-  static std::unique_ptr<ModuleWatcher> Create(
-      OnModuleEventCallback callback,
-      bool report_background_loaded_modules);
+  static std::unique_ptr<ModuleWatcher> Create(OnModuleEventCallback callback);
 
   // This can be called on any thread. After destruction the |callback|
   // provided to the constructor will no longer be invoked with module events.
@@ -103,7 +100,7 @@
   friend class ModuleWatcherTest;
 
   // Private to enforce Singleton semantics. See Create above.
-  explicit ModuleWatcher(bool report_background_loaded_modules);
+  ModuleWatcher();
 
   // Initializes the ModuleWatcher instance.
   void Initialize(OnModuleEventCallback callback);
@@ -122,9 +119,9 @@
       scoped_refptr<base::SequencedTaskRunner> task_runner,
       OnModuleEventCallback callback);
 
-  // Dumps the process if executed in a background sequence and
-  // |report_background_loaded_modules_| is true.
-  void DumpOnBackgroundLoadedModule();
+  // Helper function for retrieving the callback associated with a given
+  // LdrNotification context.
+  static OnModuleEventCallback GetCallbackForContext(void* context);
 
   // The loader notification callback. This is actually
   // void CALLBACK LoaderNotificationCallback(
@@ -144,17 +141,6 @@
   // Used by the DllNotification mechanism.
   void* dll_notification_cookie_ = nullptr;
 
-  // Indicates if modules loaded in a background sequence should be reported.
-  const bool report_background_loaded_modules_;
-
-  // The count of DLL that were loaded in a background sequence.
-  int background_loaded_dll_count_;
-
-  // The number of background loaded DLL that will cause a process dump.
-  const int num_background_loaded_dll_report_;
-
-  SEQUENCE_CHECKER(sequence_checker_);
-
   base::WeakPtrFactory<ModuleWatcher> weak_ptr_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(ModuleWatcher);
diff --git a/chrome/common/conflicts/module_watcher_win_unittest.cc b/chrome/common/conflicts/module_watcher_win_unittest.cc
index a5f13527..8de1eb13 100644
--- a/chrome/common/conflicts/module_watcher_win_unittest.cc
+++ b/chrome/common/conflicts/module_watcher_win_unittest.cc
@@ -59,8 +59,7 @@
 
   std::unique_ptr<ModuleWatcher> Create() {
     return ModuleWatcher::Create(
-        base::Bind(&ModuleWatcherTest::OnModuleEvent, base::Unretained(this)),
-        /* report_background_loaded_modules = */ false);
+        base::Bind(&ModuleWatcherTest::OnModuleEvent, base::Unretained(this)));
   }
 
   base::test::TaskEnvironment task_environment_;
diff --git a/chrome/common/conflicts/remote_module_watcher_win.cc b/chrome/common/conflicts/remote_module_watcher_win.cc
index 0161f03..0a28e9e 100644
--- a/chrome/common/conflicts/remote_module_watcher_win.cc
+++ b/chrome/common/conflicts/remote_module_watcher_win.cc
@@ -58,12 +58,10 @@
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
 
   module_event_sink_.Bind(std::move(remote_sink));
-  module_watcher_ = ModuleWatcher::Create(
-      base::BindRepeating(
-          &OnModuleEvent, task_runner_,
-          base::BindRepeating(&RemoteModuleWatcher::HandleModuleEvent,
-                              weak_ptr_factory_.GetWeakPtr())),
-      /*report_background_loaded_modules=*/false);
+  module_watcher_ = ModuleWatcher::Create(base::BindRepeating(
+      &OnModuleEvent, task_runner_,
+      base::BindRepeating(&RemoteModuleWatcher::HandleModuleEvent,
+                          weak_ptr_factory_.GetWeakPtr())));
 }
 
 void RemoteModuleWatcher::HandleModuleEvent(
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index 92b6790..bcacb42 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -948,8 +948,13 @@
 const char kPerAppTimeLimitsLastResetTime[] =
     "child_user.per_app_time_limits.last_reset_time";
 
-// Dictionary pref containing the per-app time limits configuration for child
-// user. Controlled by PerAppTimeLimits policy.
+// Int64 to specify the last timestamp the app activity has been successfully
+// reported.
+const char kPerAppTimeLimitsLastSuccessfulReportTime[] =
+    "child_user.per_app_time_limits.last_successful_report_time";
+
+// Dictionary pref containing the per-app time limits configuration for
+// child user. Controlled by PerAppTimeLimits policy.
 const char kPerAppTimeLimitsPolicy[] = "child_user.per_app_time_limits.policy";
 
 // Dictionary pref containing the whitelisted urls, schemes and applications
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index af52d450..48a537b 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -309,6 +309,7 @@
 extern const char kParentAccessCodeConfig[];
 extern const char kPerAppTimeLimitsAppActivities[];
 extern const char kPerAppTimeLimitsLastResetTime[];
+extern const char kPerAppTimeLimitsLastSuccessfulReportTime[];
 extern const char kPerAppTimeLimitsPolicy[];
 extern const char kPerAppTimeLimitsWhitelistPolicy[];
 extern const char kDeviceWallpaperImageFilePath[];
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/pagecontroller/tests/TabSwitcherControllerTest.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/pagecontroller/tests/TabSwitcherControllerTest.java
index f964c50e..ecd7731 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/pagecontroller/tests/TabSwitcherControllerTest.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/pagecontroller/tests/TabSwitcherControllerTest.java
@@ -20,6 +20,8 @@
 import org.chromium.chrome.test.pagecontroller.controllers.tabswitcher.TabSwitcherMenuController;
 import org.chromium.chrome.test.pagecontroller.rules.ChromeUiApplicationTestRule;
 import org.chromium.chrome.test.pagecontroller.rules.ChromeUiAutomatorTestRule;
+import org.chromium.content_public.browser.test.util.Criteria;
+import org.chromium.content_public.browser.test.util.CriteriaHelper;
 
 /**
  * Tests for the TabSwitcherController.
@@ -47,18 +49,27 @@
         Assert.assertTrue(NewTabPageController.getInstance().isCurrentPageThis());
     }
 
+    private void waitForTabCount(final int count) {
+        CriteriaHelper.pollInstrumentationThread(new Criteria() {
+            @Override
+            public boolean isSatisfied() {
+                return mController.getNumberOfOpenTabs() == count;
+            }
+        });
+    }
+
     @Test
     public void testCloseAllTabs() {
         mController.clickNewTab().openTabSwitcher().clickNewTab().openTabSwitcher();
         mController.clickCloseAllTabs();
-        Assert.assertEquals(0, mController.getNumberOfOpenTabs());
+        waitForTabCount(0);
     }
 
     @Test
     public void testNumberOfOpenTabs() {
         int startTabs = mController.getNumberOfOpenTabs();
         mController.clickNewTab().openTabSwitcher();
-        Assert.assertEquals(startTabs + 1, mController.getNumberOfOpenTabs());
+        waitForTabCount(startTabs + 1);
     }
 
     @Test
diff --git a/chrome/test/chromedriver/chrome/chrome_android_impl.cc b/chrome/test/chromedriver/chrome/chrome_android_impl.cc
index 0a6b969..efd60f9 100644
--- a/chrome/test/chromedriver/chrome/chrome_android_impl.cc
+++ b/chrome/test/chromedriver/chrome/chrome_android_impl.cc
@@ -46,16 +46,15 @@
 
   std::unique_ptr<base::Value> result;
   std::string expression =
-      "[window.screenX, window.screenY, window.outerWidth * "
-      "window.devicePixelRatio, window.outerHeight * window.devicePixelRatio]";
+      "[window.screenX, window.screenY, window.outerWidth, window.outerHeight]";
   status = web_view->EvaluateScript(target_id, expression, &result);
   if (status.IsError())
     return status;
 
-  window->left = result->GetList()[0].GetInt();
-  window->top = result->GetList()[1].GetInt();
-  window->width = result->GetList()[2].GetInt();
-  window->height = result->GetList()[3].GetInt();
+  window->left = static_cast<int>(result->GetList()[0].GetDouble());
+  window->top = static_cast<int>(result->GetList()[1].GetDouble());
+  window->width = static_cast<int>(result->GetList()[2].GetDouble());
+  window->height = static_cast<int>(result->GetList()[3].GetDouble());
   // Android does not use Window.id or have window states
   window->id = 0;
   window->state = "";
diff --git a/chrome/test/chromedriver/test/run_py_tests.py b/chrome/test/chromedriver/test/run_py_tests.py
index e1a0e7d..6fc71ee0 100755
--- a/chrome/test/chromedriver/test/run_py_tests.py
+++ b/chrome/test/chromedriver/test/run_py_tests.py
@@ -3286,19 +3286,20 @@
     size = self._driver.GetWindowRect()
 
     script_size = self._driver.ExecuteScript(
-      "return [window.outerWidth * window.devicePixelRatio,"
-      "window.outerHeight * window.devicePixelRatio, 0, 0]")
+        'return [window.outerWidth, window.outerHeight, 0, 0]')
     self.assertEquals(size, script_size)
 
     script_inner = self._driver.ExecuteScript(
-      "return [window.innerWidth, window.innerHeight]")
-    self.assertLessEqual(script_inner[0], size[0])
-    self.assertLessEqual(script_inner[1], size[1])
-    # Sanity check: screen dimensions in the range 2-20000px
+        'return [window.innerWidth * visualViewport.scale, '
+        'window.innerHeight * visualViewport.scale]')
+    # Subtract inner size by 1 to compensate for rounding errors.
+    self.assertLessEqual(script_inner[0] - 1, size[0])
+    self.assertLessEqual(script_inner[1] - 1, size[1])
+    # Sanity check: screen dimensions in the range 20-20000px
     self.assertLessEqual(size[0], 20000)
     self.assertLessEqual(size[1], 20000)
-    self.assertGreaterEqual(size[0], 2)
-    self.assertGreaterEqual(size[1], 2)
+    self.assertGreaterEqual(size[0], 20)
+    self.assertGreaterEqual(size[1], 20)
 
 class ChromeDownloadDirTest(ChromeDriverBaseTest):
 
diff --git a/chrome/test/data/extensions/test_certificate_provider/extension.crx b/chrome/test/data/extensions/test_certificate_provider/extension.crx
index d20532d5..effa0f8 100644
--- a/chrome/test/data/extensions/test_certificate_provider/extension.crx
+++ b/chrome/test/data/extensions/test_certificate_provider/extension.crx
Binary files differ
diff --git a/chrome/test/data/extensions/test_certificate_provider/extension/background.js b/chrome/test/data/extensions/test_certificate_provider/extension/background.js
index 63ed41c..2b47644 100644
--- a/chrome/test/data/extensions/test_certificate_provider/extension/background.js
+++ b/chrome/test/data/extensions/test_certificate_provider/extension/background.js
@@ -37,7 +37,8 @@
 
 // Listener for the chrome.certificateProvider.onSignDigestRequested event.
 function onSignDigestRequested(request, reportCallback) {
-  requestSignatureFromCpp(request, /*pinUserInput=*/ null, reportCallback);
+  requestSignatureFromCpp(
+      request, /*pinStatus=*/ 'not_requested', /*pin=*/ '', reportCallback);
 }
 
 function requestCertificatesFromCpp(reportCertificatesCallback) {
@@ -57,11 +58,11 @@
 }
 
 function requestSignatureFromCpp(
-    signDigestRequest, pinUserInput, reportSignatureCallback) {
+    signDigestRequest, pinStatus, pin, reportSignatureCallback) {
   chrome.test.sendMessage(
       JSON.stringify([
         'onSignatureRequested', jsonifiableFromSignRequest(signDigestRequest),
-        pinUserInput
+        pinStatus, pin
       ]),
       onSignatureResponseFromCpp.bind(
           null, signDigestRequest, reportSignatureCallback));
@@ -91,12 +92,14 @@
     // we'll request the signature from the C++ handler again.
     chrome.certificateProvider.requestPin(
         parsedResponse.requestPin, requestPinResponse => {
-          const pinUserInput =
-              requestPinResponse && requestPinResponse.userInput ?
+          const pin = (requestPinResponse && requestPinResponse.userInput) ?
               requestPinResponse.userInput :
-              'pin-request-failed';
+              '';
+          const pinStatus = chrome.runtime.lastError ?
+              ('failed:' + chrome.runtime.lastError) :
+              (pin ? 'ok' : 'canceled');
           requestSignatureFromCpp(
-              signDigestRequest, pinUserInput, reportSignatureCallback);
+              signDigestRequest, pinStatus, pin, reportSignatureCallback);
         });
   }
 }
diff --git a/chrome/test/data/webui/settings/cr_settings_browsertest.js b/chrome/test/data/webui/settings/cr_settings_browsertest.js
index 7f82863..9e3993c 100644
--- a/chrome/test/data/webui/settings/cr_settings_browsertest.js
+++ b/chrome/test/data/webui/settings/cr_settings_browsertest.js
@@ -341,6 +341,33 @@
   mocha.run();
 });
 
+/**
+ * Test fixture for
+ * chrome/browser/resources/settings/autofill_page/passwords_check.html.
+ * @constructor
+ * @extends {CrSettingsBrowserTest}
+ */
+function CrSettingsPasswordsCheckTest() {}
+
+CrSettingsPasswordsCheckTest.prototype = {
+  __proto__: CrSettingsBrowserTest.prototype,
+
+  /** @override */
+  browsePreload: 'chrome://settings/autofill_page/passwords_check.html',
+
+  /** @override */
+  extraLibraries: CrSettingsBrowserTest.prototype.extraLibraries.concat([
+    'password_check_test.js',
+    '../test_browser_proxy.js',
+    'passwords_and_autofill_fake_data.js',
+    'test_password_manager_proxy.js',
+  ]),
+};
+
+TEST_F('CrSettingsPasswordsCheckTest', 'All', function() {
+  mocha.run();
+});
+
 GEN('#if defined(OS_CHROMEOS)');
 /**
  * Test fixture for CrOS specific behavior in
diff --git a/chrome/test/data/webui/settings/password_check_test.js b/chrome/test/data/webui/settings/password_check_test.js
new file mode 100644
index 0000000..2e57cfa
--- /dev/null
+++ b/chrome/test/data/webui/settings/password_check_test.js
@@ -0,0 +1,40 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/** @fileoverview Runs the Polymer Check Password tests. */
+
+cr.define('settings_passwords_check', function() {
+  function createCheckPasswordSection() {
+    // Create a passwords-section to use for testing.
+    const passwordsSection =
+        this.document.createElement('settings-password-check');
+    this.document.body.appendChild(passwordsSection);
+    Polymer.dom.flush();
+    return passwordsSection;
+  }
+
+  suite('PasswordsCheckSection', function() {
+    /** @type {TestPasswordManagerProxy} */
+    let passwordManager = null;
+
+    suiteSetup(function() {
+      loadTimeData.overrideValues({enablePasswordCheck: true});
+    });
+
+    setup(function() {
+      PolymerTest.clearBody();
+      // Override the PasswordManagerImpl for testing.
+      passwordManager = new TestPasswordManagerProxy();
+      PasswordManagerImpl.instance_ = passwordManager;
+    });
+
+    // Test verifies that clicking 'Check again' make proper function call to
+    // password manager
+    test('testCheckAgainButton', function() {
+      const checkSection = createCheckPasswordSection();
+      checkSection.$.controlPasswordCheckButton.click();
+      return passwordManager.whenCalled('startBulkPasswordCheck');
+    });
+  });
+});
diff --git a/chrome/test/data/webui/settings/safety_check_page_test.js b/chrome/test/data/webui/settings/safety_check_page_test.js
index 4d44bb3..49e3b6d 100644
--- a/chrome/test/data/webui/settings/safety_check_page_test.js
+++ b/chrome/test/data/webui/settings/safety_check_page_test.js
@@ -17,13 +17,17 @@
     page.remove();
   });
 
-  test('parentBeforeCheckUiTest', function() {
+  /** Tests parent element and collapse. */
+  test('beforeCheckUiTest', function() {
     // Only the text button is present.
     assertTrue(!!page.$$('#safetyCheckParentButton'));
     assertFalse(!!page.$$('#safetyCheckParentIconButton'));
+    // Collapse is not opened.
+    assertFalse(page.$$('#safetyCheckCollapse').opened);
   });
 
-  test('parentDuringCheckUiTest', function() {
+  /** Tests parent element and collapse. */
+  test('duringCheckUiTest', function() {
     // User starts check.
     page.$$('#safetyCheckParentButton').click();
 
@@ -31,9 +35,12 @@
     // No button is present.
     assertFalse(!!page.$$('#safetyCheckParentButton'));
     assertFalse(!!page.$$('#safetyCheckParentIconButton'));
+    // Collapse is opened.
+    assertTrue(page.$$('#safetyCheckCollapse').opened);
   });
 
-  test('parentAfterCheckUiTest', function() {
+  /** Tests parent element and collapse. */
+  test('afterCheckUiTest', function() {
     // User starts check.
     page.$$('#safetyCheckParentButton').click();
 
@@ -60,5 +67,29 @@
     // Only the icon button is present.
     assertFalse(!!page.$$('#safetyCheckParentButton'));
     assertTrue(!!page.$$('#safetyCheckParentIconButton'));
+    // Collapse is opened.
+    assertTrue(page.$$('#safetyCheckCollapse').opened);
+  });
+
+  test('passwordsButtonVisibilityUiTest', function() {
+    // Iterate over all states
+    for (const state of Object.values(settings.SafetyCheckPasswordsStatus)) {
+      cr.webUIListenerCallback('safety-check-status-changed', {
+        safetyCheckComponent: 1, /* PASSWORDS */
+        newState: state,
+      });
+      Polymer.dom.flush();
+
+      // button is only visible in COMPROMISED and ERROR states
+      switch (state) {
+        case settings.SafetyCheckPasswordsStatus.COMPROMISED:
+        case settings.SafetyCheckPasswordsStatus.ERROR:
+          assertTrue(!!page.$$('#safetyCheckPasswordsButton'));
+          break;
+        default:
+          assertFalse(!!page.$$('#safetyCheckPasswordsButton'));
+          break;
+      }
+    }
   });
 });
diff --git a/chrome/test/data/webui/settings/test_password_manager_proxy.js b/chrome/test/data/webui/settings/test_password_manager_proxy.js
index 0370c4b..1b210016 100644
--- a/chrome/test/data/webui/settings/test_password_manager_proxy.js
+++ b/chrome/test/data/webui/settings/test_password_manager_proxy.js
@@ -11,7 +11,7 @@
  */
 class TestPasswordManagerProxy extends TestBrowserProxy {
   constructor() {
-    super(['requestPlaintextPassword']);
+    super(['requestPlaintextPassword', 'startBulkPasswordCheck']);
 
     this.actual_ = new PasswordManagerExpectations();
 
@@ -138,4 +138,9 @@
         expected.listening.accountStorageOptInState,
         actual.listening.accountStorageOptInState);
   }
+
+  /** @override */
+  startBulkPasswordCheck() {
+    this.methodCalled('startBulkPasswordCheck');
+  }
 }
diff --git a/chrome/test/enterprise/e2e/infra/chrome_ent_test_case.py b/chrome/test/enterprise/e2e/infra/chrome_ent_test_case.py
index fec0453a..67efce12 100644
--- a/chrome/test/enterprise/e2e/infra/chrome_ent_test_case.py
+++ b/chrome/test/enterprise/e2e/infra/chrome_ent_test_case.py
@@ -162,7 +162,7 @@
     ui_test_cmd = r'c:\Python27\python.exe -u %s %s' % (file_name, args)
     cmd = (r'python c:\cel\supporting_files\run_ui_test.py --timeout %s -- %s'
           ) % (timeout, ui_test_cmd)
-    return self.RunCommand(instance_name, cmd)
+    return self.RunCommand(instance_name, cmd, timeout=timeout)
 
   def _generatePassword(self):
     """Generates a random password."""
diff --git a/chrome/test/enterprise/e2e/policy/safe_browsing/safe_browsing_ui_test.py b/chrome/test/enterprise/e2e/policy/safe_browsing/safe_browsing_ui_test.py
index 1181f090..296faf0 100644
--- a/chrome/test/enterprise/e2e/policy/safe_browsing/safe_browsing_ui_test.py
+++ b/chrome/test/enterprise/e2e/policy/safe_browsing/safe_browsing_ui_test.py
@@ -12,7 +12,7 @@
 UnsafePageLink = "http://testsafebrowsing.appspot.com/s/malware.html"
 UnsafePageLinkTabText = "Security error"
 
-UnsafeDownloadLink = "http://testsafebrowsing.appspot.com/s/content.exe"
+UnsafeDownloadLink = "http://testsafebrowsing.appspot.com/s/badrep.exe"
 UnsafeDownloadTextRe = ".* is dangerous,\s*so\s*Chrom.* has blocked it"
 
 
diff --git a/chrome/third_party/mozilla_security_manager/BUILD.gn b/chrome/third_party/mozilla_security_manager/BUILD.gn
index a3c23313..327dcc5 100644
--- a/chrome/third_party/mozilla_security_manager/BUILD.gn
+++ b/chrome/third_party/mozilla_security_manager/BUILD.gn
@@ -16,6 +16,7 @@
     "//base",
     "//base:i18n",
     "//chrome/app:generated_resources",
+    "//components/strings:components_strings_grit",
     "//crypto:platform",
     "//net",
     "//third_party/icu",
diff --git a/chrome/third_party/mozilla_security_manager/DEPS b/chrome/third_party/mozilla_security_manager/DEPS
index d51a9ba..0a9b6e6 100644
--- a/chrome/third_party/mozilla_security_manager/DEPS
+++ b/chrome/third_party/mozilla_security_manager/DEPS
@@ -1,3 +1,5 @@
 include_rules = [
-  "+chrome/grit",  # For generated headers
+  # For generated headers
+  "+chrome/grit",
+  "+components/strings/grit"
 ]
diff --git a/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp b/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp
index f00a481..b92ae40 100644
--- a/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp
+++ b/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp
@@ -54,6 +54,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/common/net/x509_certificate_model_nss.h"
 #include "chrome/grit/generated_resources.h"
+#include "components/strings/grit/components_strings.h"
 #include "crypto/scoped_nss_types.h"
 #include "net/base/ip_address.h"
 #include "net/base/ip_endpoint.h"
diff --git a/chromeos/BUILD.gn b/chromeos/BUILD.gn
index 05165f9..21c44cd 100644
--- a/chromeos/BUILD.gn
+++ b/chromeos/BUILD.gn
@@ -287,6 +287,9 @@
       "crostini.VerifyAppWayland.artifact",
       "crostini.VerifyAppX11.artifact",
       "crostini.Webserver.artifact",
+
+      # crbug.com/1056163
+      "hwsec.LoginGuest",
     ]
   }
 
diff --git a/chromeos/constants/chromeos_features.cc b/chromeos/constants/chromeos_features.cc
index 719522e..129d36b 100644
--- a/chromeos/constants/chromeos_features.cc
+++ b/chromeos/constants/chromeos_features.cc
@@ -24,6 +24,11 @@
 const base::Feature kArcAdbSideloadingFeature{
     "ArcAdbSideloading", base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Controls whether to enable support for ARC ADB sideloading for managed
+// accounts and/or devices.
+const base::Feature kArcManagedAdbSideloadingSupport{
+    "ArcManagedAdbSideloadingSupport", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Enables or disables auto screen-brightness adjustment when ambient light
 // changes.
 const base::Feature kAutoScreenBrightness{"AutoScreenBrightness",
diff --git a/chromeos/constants/chromeos_features.h b/chromeos/constants/chromeos_features.h
index b65c970e..3b25514 100644
--- a/chromeos/constants/chromeos_features.h
+++ b/chromeos/constants/chromeos_features.h
@@ -20,6 +20,8 @@
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kArcAdbSideloadingFeature;
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
+extern const base::Feature kArcManagedAdbSideloadingSupport;
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kAutoScreenBrightness;
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kAssistPersonalInfo;
diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/components/browser_ui/strings/android/browser_ui_strings.grd
index 6a2b1f52..debe6a1 100644
--- a/components/browser_ui/strings/android/browser_ui_strings.grd
+++ b/components/browser_ui/strings/android/browser_ui_strings.grd
@@ -337,13 +337,18 @@
         This page is dangerous. Site information
       </message>
 
-     <!-- Cookie controls UI -->
+      <!-- Cookie controls UI -->
       <message name="IDS_COOKIE_CONTROLS_BLOCKED_COOKIES" desc="Text showing the number of blocked cookies on a site.">
         {COOKIE_COUNT, plural,
             =1 {1 cookie blocked}
             other {# cookies blocked}}
       </message>
 
+      <!-- Certificate viewer -->
+      <message name="IDS_CERTTITLE" desc="Dialog box title for viewing security certificates. [CHAR-LIMIT=32]">
+        Certificate viewer
+      </message>
+
     </messages>
   </release>
 </grit>
diff --git a/components/dom_distiller/core/BUILD.gn b/components/dom_distiller/core/BUILD.gn
index d70bbd2..a956479 100644
--- a/components/dom_distiller/core/BUILD.gn
+++ b/components/dom_distiller/core/BUILD.gn
@@ -43,6 +43,8 @@
     "pref_names.h",
     "task_tracker.cc",
     "task_tracker.h",
+    "uma_helper.cc",
+    "uma_helper.h",
     "url_constants.cc",
     "url_constants.h",
     "url_utils.cc",
diff --git a/components/dom_distiller/core/uma_helper.cc b/components/dom_distiller/core/uma_helper.cc
new file mode 100644
index 0000000..66fefc3c
--- /dev/null
+++ b/components/dom_distiller/core/uma_helper.cc
@@ -0,0 +1,25 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/dom_distiller/core/uma_helper.h"
+
+#include "base/metrics/histogram_functions.h"
+
+namespace dom_distiller {
+
+// static
+void UMAHelper::RecordReaderModeEntry(ReaderModeEntryPoint entry_point) {
+  // Use histograms instead of user actions because order doesn't matter.
+  base::UmaHistogramEnumeration("DomDistiller.ReaderMode.EntryPoint",
+                                entry_point);
+}
+
+// static
+void UMAHelper::RecordReaderModeExit(ReaderModeEntryPoint exit_point) {
+  // Use histograms instead of user actions because order doesn't matter.
+  base::UmaHistogramEnumeration("DomDistiller.ReaderMode.ExitPoint",
+                                exit_point);
+}
+
+}  // namespace dom_distiller
diff --git a/components/dom_distiller/core/uma_helper.h b/components/dom_distiller/core/uma_helper.h
new file mode 100644
index 0000000..cd85416
--- /dev/null
+++ b/components/dom_distiller/core/uma_helper.h
@@ -0,0 +1,31 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_DOM_DISTILLER_CORE_UMA_HELPER_H_
+#define COMPONENTS_DOM_DISTILLER_CORE_UMA_HELPER_H_
+
+#include "base/macros.h"
+
+namespace dom_distiller {
+
+// A utility class for logging UMA metrics.
+class UMAHelper {
+ public:
+  // Must agree with ReaderModeEntryPoint in enums.xml.
+  enum class ReaderModeEntryPoint {
+    kOmniboxIcon = 0,
+    kMenuOption = 1,
+    kMaxValue = kMenuOption,
+  };
+
+  static void RecordReaderModeEntry(ReaderModeEntryPoint entry_point);
+  static void RecordReaderModeExit(ReaderModeEntryPoint exit_point);
+
+ private:
+  DISALLOW_IMPLICIT_CONSTRUCTORS(UMAHelper);
+};
+
+}  // namespace dom_distiller
+
+#endif  // COMPONENTS_DOM_DISTILLER_CORE_UMA_HELPER_H_
diff --git a/components/dom_distiller_strings.grdp b/components/dom_distiller_strings.grdp
index 652b91f..dd09132 100644
--- a/components/dom_distiller_strings.grdp
+++ b/components/dom_distiller_strings.grdp
@@ -46,15 +46,6 @@
   <message name="IDS_DOM_DISTILLER_VIEWER_NO_DATA_CONTENT" desc="The text to show in place of reading list article content if there is no data found.">
     No data found.
   </message>
-  <message name="IDS_DOM_DISTILLER_QUALITY_QUESTION" desc="Question to ask the user about whether the text from a web page was extracted correctly.">
-    Was the text extracted correctly?
-  </message>
-  <message name="IDS_DOM_DISTILLER_QUALITY_ANSWER_YES" desc="Text for the answering whether the text from a web page was extracted correctly and the answer is yes.">
-    Yes
-  </message>
-  <message name="IDS_DOM_DISTILLER_QUALITY_ANSWER_NO" desc="Text for the answering whether the text from a web page was extracted correctly and the answer is no.">
-    No
-  </message>
   <message name="IDS_DOM_DISTILLER_WEBUI_TITLE" desc="The title to show on the DOM Distiller debug page.">
     DOM Distiller
   </message>
diff --git a/components/image_fetcher/ios/ios_image_data_fetcher_wrapper_unittest.mm b/components/image_fetcher/ios/ios_image_data_fetcher_wrapper_unittest.mm
index 88d4a7d5..68bc1b1 100644
--- a/components/image_fetcher/ios/ios_image_data_fetcher_wrapper_unittest.mm
+++ b/components/image_fetcher/ios/ios_image_data_fetcher_wrapper_unittest.mm
@@ -8,7 +8,6 @@
 
 #include <memory>
 
-#include "base/mac/scoped_block.h"
 #include "base/memory/ref_counted.h"
 #include "base/stl_util.h"
 #include "base/test/task_environment.h"
@@ -107,11 +106,11 @@
 class IOSImageDataFetcherWrapperTest : public PlatformTest {
  protected:
   IOSImageDataFetcherWrapperTest()
-      : callback_([^(NSData* data) {
+      : callback_(^(NSData* data, const RequestMetadata&) {
           result_data_ = data;
           result_ = [UIImage imageWithData:data];
           called_ = true;
-        } copy]) {
+        }) {
     shared_factory_ =
         base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
             &factory_);
@@ -128,12 +127,12 @@
   // Message loop for the main test thread.
   base::test::TaskEnvironment environment_;
 
-  base::mac::ScopedBlock<ImageDataFetcherBlock> callback_;
+  __strong ImageDataFetcherBlock callback_;
   network::TestURLLoaderFactory factory_;
   scoped_refptr<network::SharedURLLoaderFactory> shared_factory_;
   std::unique_ptr<IOSImageDataFetcherWrapper> image_fetcher_;
-  NSData* result_data_ = nil;
-  UIImage* result_ = nil;
+  __strong NSData* result_data_ = nil;
+  __strong UIImage* result_ = nil;
   bool called_ = false;
 
  private:
diff --git a/components/image_fetcher/ios/webp_decoder.h b/components/image_fetcher/ios/webp_decoder.h
index f498e819..8135b30 100644
--- a/components/image_fetcher/ios/webp_decoder.h
+++ b/components/image_fetcher/ios/webp_decoder.h
@@ -10,7 +10,6 @@
 
 #include <memory>
 
-#import "base/mac/scoped_nsobject.h"
 #include "base/memory/ref_counted.h"
 #include "third_party/libwebp/src/webp/decode.h"
 
@@ -89,8 +88,8 @@
   WebPDecoderConfig config_;
   WebpDecoder::State state_;
   std::unique_ptr<WebPIDecoder, WebPIDecoderDeleter> incremental_decoder_;
-  base::scoped_nsobject<NSData> output_buffer_;
-  base::scoped_nsobject<NSMutableData> features_;
+  __strong NSData* output_buffer_;
+  __strong NSMutableData* features_;
   int has_alpha_;
 };
 
diff --git a/components/image_fetcher/ios/webp_decoder.mm b/components/image_fetcher/ios/webp_decoder.mm
index f411be8..294bbc83 100644
--- a/components/image_fetcher/ios/webp_decoder.mm
+++ b/components/image_fetcher/ios/webp_decoder.mm
@@ -190,7 +190,7 @@
   if (features_)
     [features_ appendData:data];
   else
-    features_.reset([[NSMutableData alloc] initWithData:data]);
+    features_ = [[NSMutableData alloc] initWithData:data];
   VP8StatusCode status =
       WebPGetFeatures(static_cast<const uint8_t*>([features_ bytes]),
                       [features_ length], &config_.input);
@@ -217,16 +217,16 @@
         break;
       }
       WriteTiffHeader(dst, width, height, bytes_per_px, has_alpha_);
-      output_buffer_.reset([[NSData alloc] initWithBytesNoCopy:dst
-                                                        length:total_size
-                                                  freeWhenDone:YES]);
+      output_buffer_ = [[NSData alloc] initWithBytesNoCopy:dst
+                                                    length:total_size
+                                              freeWhenDone:YES];
       config_.output.is_external_memory = 1;
       config_.output.u.RGBA.rgba = dst + kHeaderSize;
       // Start decoding.
       state_ = READING_DATA;
       incremental_decoder_.reset(WebPINewDecoder(&config_.output));
       DoReadData(features_);
-      features_.reset();
+      features_ = nil;
       break;
     }
     case VP8_STATUS_NOT_ENOUGH_DATA:
@@ -276,34 +276,33 @@
     return false;
   DCHECK_EQ(static_cast<const uint8_t*>([output_buffer_ bytes]) + kHeaderSize,
             data_ptr);
-  base::scoped_nsobject<NSData> result_data;
+  NSData* result_data = nil;
   // When the WebP image is larger than |kRecompressionThreshold| it is
   // compressed to JPEG or PNG. Otherwise, the uncompressed TIFF is used.
   DecodedImageFormat format = TIFF;
   if (width * height > kRecompressionThreshold) {
-    base::scoped_nsobject<UIImage> tiff_image(
-        [[UIImage alloc] initWithData:output_buffer_]);
+    UIImage* tiff_image = [[UIImage alloc] initWithData:output_buffer_];
     if (!tiff_image)
       return false;
     // Compress to PNG if the image is transparent, JPEG otherwise.
     // TODO(droger): Use PNG instead of JPEG if the WebP image is lossless.
     if (has_alpha_) {
-      result_data.reset(UIImagePNGRepresentation(tiff_image));
+      result_data = UIImagePNGRepresentation(tiff_image);
       format = PNG;
     } else {
-      result_data.reset(UIImageJPEGRepresentation(tiff_image, kJpegQuality));
+      result_data = UIImageJPEGRepresentation(tiff_image, kJpegQuality);
       format = JPEG;
     }
     if (!result_data)
       return false;
   } else {
-    result_data.reset(output_buffer_);
+    result_data = output_buffer_;
   }
   UMA_HISTOGRAM_ENUMERATION("WebP.DecodedImageFormat", format,
                             DECODED_FORMAT_COUNT);
   delegate_->SetImageFeatures([result_data length], format);
   delegate_->OnDataDecoded(result_data);
-  output_buffer_.reset();
+  output_buffer_ = nil;
   return true;
 }
 
diff --git a/components/image_fetcher/ios/webp_decoder_unittest.mm b/components/image_fetcher/ios/webp_decoder_unittest.mm
index fa723efd..478679ed 100644
--- a/components/image_fetcher/ios/webp_decoder_unittest.mm
+++ b/components/image_fetcher/ios/webp_decoder_unittest.mm
@@ -16,7 +16,6 @@
 #include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/mac/scoped_cftyperef.h"
-#import "base/mac/scoped_nsobject.h"
 #include "base/memory/ref_counted.h"
 #include "base/path_service.h"
 #include "base/stl_util.h"
@@ -47,7 +46,7 @@
  private:
   virtual ~WebpDecoderDelegate() {}
 
-  base::scoped_nsobject<NSMutableData> image_;
+  __strong NSMutableData* image_;
 };
 
 class WebpDecoderTest : public testing::Test {
@@ -169,12 +168,10 @@
 
 TEST_F(WebpDecoderTest, DecodeToJpeg) {
   // Load a WebP image from disk.
-  base::scoped_nsobject<NSData> webp_image(
-      LoadImage(base::FilePath("test.webp")));
+  NSData* webp_image = LoadImage(base::FilePath("test.webp"));
   ASSERT_TRUE(webp_image != nil);
   // Load reference image.
-  base::scoped_nsobject<NSData> jpg_image(
-      LoadImage(base::FilePath("test.jpg")));
+  NSData* jpg_image = LoadImage(base::FilePath("test.jpg"));
   ASSERT_TRUE(jpg_image != nil);
   // Convert to JPEG.
   EXPECT_CALL(*delegate_, OnFinishedDecoding(true)).Times(1);
@@ -188,12 +185,10 @@
 
 TEST_F(WebpDecoderTest, DecodeToPng) {
   // Load a WebP image from disk.
-  base::scoped_nsobject<NSData> webp_image(
-      LoadImage(base::FilePath("test_alpha.webp")));
+  NSData* webp_image = LoadImage(base::FilePath("test_alpha.webp"));
   ASSERT_TRUE(webp_image != nil);
   // Load reference image.
-  base::scoped_nsobject<NSData> png_image(
-      LoadImage(base::FilePath("test_alpha.png")));
+  NSData* png_image = LoadImage(base::FilePath("test_alpha.png"));
   ASSERT_TRUE(png_image != nil);
   // Convert to PNG.
   EXPECT_CALL(*delegate_, OnFinishedDecoding(true)).Times(1);
@@ -207,12 +202,10 @@
 
 TEST_F(WebpDecoderTest, DecodeToTiff) {
   // Load a WebP image from disk.
-  base::scoped_nsobject<NSData> webp_image(
-      LoadImage(base::FilePath("test_small.webp")));
+  NSData* webp_image = LoadImage(base::FilePath("test_small.webp"));
   ASSERT_TRUE(webp_image != nil);
   // Load reference image.
-  base::scoped_nsobject<NSData> tiff_image(
-      LoadImage(base::FilePath("test_small.tiff")));
+  NSData* tiff_image = LoadImage(base::FilePath("test_small.tiff"));
   ASSERT_TRUE(tiff_image != nil);
   // Convert to TIFF.
   EXPECT_CALL(*delegate_, OnFinishedDecoding(true)).Times(1);
@@ -226,12 +219,10 @@
 
 TEST_F(WebpDecoderTest, StreamedDecode) {
   // Load a WebP image from disk.
-  base::scoped_nsobject<NSData> webp_image(
-      LoadImage(base::FilePath("test.webp")));
+  NSData* webp_image = LoadImage(base::FilePath("test.webp"));
   ASSERT_TRUE(webp_image != nil);
   // Load reference image.
-  base::scoped_nsobject<NSData> jpg_image(
-      LoadImage(base::FilePath("test.jpg")));
+  NSData* jpg_image = LoadImage(base::FilePath("test.jpg"));
   ASSERT_TRUE(jpg_image != nil);
   // Convert to JPEG in chunks.
   EXPECT_CALL(*delegate_, OnFinishedDecoding(true)).Times(1);
@@ -240,12 +231,11 @@
   const size_t kChunkSize = 10;
   unsigned int num_chunks = 0;
   while ([webp_image length] > kChunkSize) {
-    base::scoped_nsobject<NSData> chunk(
-        [webp_image subdataWithRange:NSMakeRange(0, kChunkSize)]);
+    NSData* chunk = [webp_image subdataWithRange:NSMakeRange(0, kChunkSize)];
     decoder_->OnDataReceived(chunk);
-    webp_image.reset([webp_image
+    webp_image = [webp_image
         subdataWithRange:NSMakeRange(kChunkSize,
-                                     [webp_image length] - kChunkSize)]);
+                                     [webp_image length] - kChunkSize)];
     ++num_chunks;
   }
   if ([webp_image length] > 0u) {
@@ -261,9 +251,8 @@
 TEST_F(WebpDecoderTest, InvalidFormat) {
   EXPECT_CALL(*delegate_, OnFinishedDecoding(false)).Times(1);
   const char dummy_image[] = "(>'-')> <('-'<) ^('-')^ <('-'<) (>'-')>";
-  base::scoped_nsobject<NSData> data([[NSData alloc]
-      initWithBytes:dummy_image
-             length:base::size(dummy_image)]);
+  NSData* data = [[NSData alloc] initWithBytes:dummy_image
+                                        length:base::size(dummy_image)];
   decoder_->OnDataReceived(data);
   EXPECT_EQ(0u, [delegate_->GetImage() length]);
 }
diff --git a/components/page_info/OWNERS b/components/page_info/OWNERS
new file mode 100644
index 0000000..72c5daf
--- /dev/null
+++ b/components/page_info/OWNERS
@@ -0,0 +1,4 @@
+file://chrome/browser/ui/page_info/OWNERS
+
+# COMPONENT: UI>Browser>Bubbles>PageInfo
+# TEAM: security-enamel@chromium.org
diff --git a/components/page_info/README.md b/components/page_info/README.md
new file mode 100644
index 0000000..2a64d159d
--- /dev/null
+++ b/components/page_info/README.md
@@ -0,0 +1,5 @@
+# Page Info Component
+
+Page Info is a component providing necessary APIs for showing Page Info UI. This
+UI is accesssed by clicking on the security status icon from the omnibox and
+related toolbars.
diff --git a/components/page_info/android/BUILD.gn b/components/page_info/android/BUILD.gn
index dd51f9f..d2ca446 100644
--- a/components/page_info/android/BUILD.gn
+++ b/components/page_info/android/BUILD.gn
@@ -5,7 +5,20 @@
 import("//build/config/android/rules.gni")
 
 static_library("android") {
-  sources = [ "cookie_controls_status.h" ]
+  sources = [
+    "certificate_chain_helper.cc",
+    "certificate_viewer_android.cc",
+    "cookie_controls_status.h",
+  ]
+  deps = [
+    "//base",
+    "//components/page_info/android:jni_headers",
+    "//components/strings:components_strings_grit",
+    "//content/public/browser:browser",
+    "//net:net",
+    "//third_party/boringssl",
+    "//ui/base:base",
+  ]
 }
 
 java_cpp_enum("cookie_controls_status_javagen") {
@@ -17,21 +30,30 @@
     "java/res/layout/cookie_controls_view.xml",
     "java/res/layout/page_info.xml",
     "java/res/layout/page_info_permission_row.xml",
+    "java/res/values/dimens.xml",
     "java/res/values/ids.xml",
   ]
   custom_package = "org.chromium.components.page_info"
-  deps = [ "//components/browser_ui/strings/android:browser_ui_strings_grd" ]
+  deps = [
+    "//components/browser_ui/strings/android:browser_ui_strings_grd",
+    "//ui/android:ui_java_resources",
+  ]
 }
 
 android_library("java") {
   sources = [
+    "java/src/org/chromium/components/page_info/CertificateChainHelper.java",
+    "java/src/org/chromium/components/page_info/CertificateViewer.java",
     "java/src/org/chromium/components/page_info/CookieControlsView.java",
+    "java/src/org/chromium/components/page_info/PageInfoDialog.java",
     "java/src/org/chromium/components/page_info/PageInfoView.java",
+    "java/src/org/chromium/components/page_info/SystemSettingsActivityRequiredListener.java",
   ]
 
   deps = [
     ":java_resources",
     "//base:base_java",
+    "//base:jni_java",
     "//content/public/android:content_java",
     "//third_party/android_deps:android_support_v7_appcompat_java",
     "//third_party/android_deps:androidx_annotation_annotation_java",
@@ -39,4 +61,12 @@
   ]
 
   srcjar_deps = [ ":cookie_controls_status_javagen" ]
+  annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
+}
+
+generate_jni("jni_headers") {
+  sources = [
+    "java/src/org/chromium/components/page_info/CertificateChainHelper.java",
+    "java/src/org/chromium/components/page_info/CertificateViewer.java",
+  ]
 }
diff --git a/components/page_info/android/DEPS b/components/page_info/android/DEPS
index d21e072..657e1e6 100644
--- a/components/page_info/android/DEPS
+++ b/components/page_info/android/DEPS
@@ -1,3 +1,9 @@
 include_rules = [
+  "+components/strings/grit/components_strings.h",
+  "-content/public/android",
+  "+content/public/android/java/src/org/chromium/content_public",
+  "+content/public/browser",
+  "+net/cert",
   "+ui/android",
+  "+ui/base/l10n/l10n_util.h",
 ]
diff --git a/chrome/browser/ui/android/page_info/certificate_chain_helper.cc b/components/page_info/android/certificate_chain_helper.cc
similarity index 94%
rename from chrome/browser/ui/android/page_info/certificate_chain_helper.cc
rename to components/page_info/android/certificate_chain_helper.cc
index e8e9124..2a14c79 100644
--- a/chrome/browser/ui/android/page_info/certificate_chain_helper.cc
+++ b/components/page_info/android/certificate_chain_helper.cc
@@ -5,7 +5,7 @@
 #include "base/android/jni_android.h"
 #include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
-#include "chrome/android/chrome_jni_headers/CertificateChainHelper_jni.h"
+#include "components/page_info/android/jni_headers/CertificateChainHelper_jni.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/ssl_status.h"
diff --git a/chrome/browser/ui/android/page_info/certificate_viewer_android.cc b/components/page_info/android/certificate_viewer_android.cc
similarity index 87%
rename from chrome/browser/ui/android/page_info/certificate_viewer_android.cc
rename to components/page_info/android/certificate_viewer_android.cc
index e4761e4..10ad6e6 100644
--- a/chrome/browser/ui/android/page_info/certificate_viewer_android.cc
+++ b/components/page_info/android/certificate_viewer_android.cc
@@ -4,23 +4,14 @@
 
 #include "base/android/jni_string.h"
 #include "base/logging.h"
-#include "chrome/android/chrome_jni_headers/CertificateViewer_jni.h"
-#include "chrome/browser/certificate_viewer.h"
-#include "chrome/grit/generated_resources.h"
-#include "net/cert/x509_certificate.h"
+#include "components/page_info/android/jni_headers/CertificateViewer_jni.h"
+#include "components/strings/grit/components_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 
 using base::android::ConvertUTF8ToJavaString;
 using base::android::JavaParamRef;
 using base::android::ScopedJavaLocalRef;
 
-void ShowCertificateViewer(content::WebContents* web_contents,
-                           gfx::NativeWindow parent,
-                           net::X509Certificate* cert) {
-  // For Android, showing the certificate is always handled in Java.
-  NOTREACHED();
-}
-
 static ScopedJavaLocalRef<jstring> JNI_CertificateViewer_GetCertIssuedToText(
     JNIEnv* env) {
   return ConvertUTF8ToJavaString(
diff --git a/components/page_info/android/java/res/values/dimens.xml b/components/page_info/android/java/res/values/dimens.xml
new file mode 100644
index 0000000..3c20abf
--- /dev/null
+++ b/components/page_info/android/java/res/values/dimens.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2020 The Chromium Authors. All rights reserved.
+     Use of this source code is governed by a BSD-style license that can be
+     found in the LICENSE file. -->
+<resources>
+    <dimen name="connection_info_padding_wide">24dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/CertificateChainHelper.java b/components/page_info/android/java/src/org/chromium/components/page_info/CertificateChainHelper.java
similarity index 92%
rename from chrome/android/java/src/org/chromium/chrome/browser/page_info/CertificateChainHelper.java
rename to components/page_info/android/java/src/org/chromium/components/page_info/CertificateChainHelper.java
index 8ecf7fdc..56b978c1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/CertificateChainHelper.java
+++ b/components/page_info/android/java/src/org/chromium/components/page_info/CertificateChainHelper.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.page_info;
+package org.chromium.components.page_info;
 
 import org.chromium.base.annotations.NativeMethods;
 import org.chromium.content_public.browser.WebContents;
@@ -11,7 +11,6 @@
  * Helper class for obtaining site certificate chain from WebContents.
  */
 public class CertificateChainHelper {
-
     public static byte[][] getCertificateChain(WebContents webContents) {
         return CertificateChainHelperJni.get().getCertificateChain(webContents);
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/CertificateViewer.java b/components/page_info/android/java/src/org/chromium/components/page_info/CertificateViewer.java
similarity index 94%
rename from chrome/android/java/src/org/chromium/chrome/browser/page_info/CertificateViewer.java
rename to components/page_info/android/java/src/org/chromium/components/page_info/CertificateViewer.java
index 182d0ff3..397f19f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/CertificateViewer.java
+++ b/components/page_info/android/java/src/org/chromium/components/page_info/CertificateViewer.java
@@ -2,14 +2,13 @@
 // 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.page_info;
+package org.chromium.components.page_info;
 
 import android.app.Dialog;
 import android.content.Context;
 import android.graphics.Typeface;
 import android.net.http.SslCertificate;
 import android.support.v4.view.ViewCompat;
-import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.Window;
@@ -22,8 +21,8 @@
 import android.widget.TextView;
 
 import org.chromium.base.ApiCompatibilityUtils;
+import org.chromium.base.Log;
 import org.chromium.base.annotations.NativeMethods;
-import org.chromium.chrome.R;
 
 import java.io.ByteArrayInputStream;
 import java.security.MessageDigest;
@@ -40,7 +39,7 @@
 /**
  * UI component for displaying certificate information.
  */
-class CertificateViewer implements OnItemSelectedListener {
+public class CertificateViewer implements OnItemSelectedListener {
     private static final String X_509 = "X.509";
     private static final int SUBJECTALTERNATIVENAME_DNSNAME_ID = 2;
     private static final int SUBJECTALTERNATIVENAME_IPADDRESS_ID = 7;
@@ -77,9 +76,8 @@
             addCertificate(derData[i]);
         }
 
-        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(mContext,
-                android.R.layout.simple_spinner_item,
-                mTitles) {
+        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
+                mContext, android.R.layout.simple_spinner_item, mTitles) {
             @Override
             public View getView(int position, View convertView, ViewGroup parent) {
                 TextView view = (TextView) super.getView(position, convertView, parent);
@@ -136,8 +134,8 @@
             if (mCertificateFactory == null) {
                 mCertificateFactory = CertificateFactory.getInstance(X_509);
             }
-            Certificate cert = mCertificateFactory.generateCertificate(
-                    new ByteArrayInputStream(derData));
+            Certificate cert =
+                    mCertificateFactory.generateCertificate(new ByteArrayInputStream(derData));
             addCertificateDetails(cert, getDigest(derData, "SHA-256"), getDigest(derData, "SHA-1"));
         } catch (CertificateException e) {
             Log.e("CertViewer", "Error parsing certificate" + e.toString());
@@ -212,8 +210,7 @@
         t.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
         t.setPadding(mPadding, mPadding / 2, mPadding, 0);
         t.setText(label);
-        ApiCompatibilityUtils.setTextAppearance(
-                t, R.style.TextAppearance_TextMediumThick_Primary);
+        ApiCompatibilityUtils.setTextAppearance(t, R.style.TextAppearance_TextMediumThick_Primary);
         certificateView.addView(t);
         return t;
     }
@@ -276,14 +273,12 @@
     @Override
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
         for (int i = 0; i < mViews.size(); ++i) {
-            mViews.get(i).setVisibility(
-                    i == position ? LinearLayout.VISIBLE : LinearLayout.GONE);
+            mViews.get(i).setVisibility(i == position ? LinearLayout.VISIBLE : LinearLayout.GONE);
         }
     }
 
     @Override
-    public void onNothingSelected(AdapterView<?> parent) {
-    }
+    public void onNothingSelected(AdapterView<?> parent) {}
 
     @NativeMethods
     interface Natives {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoDialog.java b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoDialog.java
similarity index 97%
rename from chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoDialog.java
rename to components/page_info/android/java/src/org/chromium/components/page_info/PageInfoDialog.java
index 2b8e303..ae14cc5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoDialog.java
+++ b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoDialog.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.page_info;
+package org.chromium.components.page_info;
 
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
@@ -22,7 +22,6 @@
 
 import androidx.annotation.NonNull;
 
-import org.chromium.components.page_info.PageInfoView;
 import org.chromium.ui.interpolators.BakedBezierInterpolator;
 import org.chromium.ui.modaldialog.DialogDismissalCause;
 import org.chromium.ui.modaldialog.ModalDialogManager;
@@ -32,7 +31,7 @@
 /**
  * Represents the dialog containing the page info view.
  */
-class PageInfoDialog {
+public class PageInfoDialog {
     private static final int ENTER_START_DELAY_MS = 100;
     private static final int ENTER_EXIT_DURATION_MS = 200;
     private static final int CLOSE_CLEANUP_DELAY_MS = 10;
@@ -146,7 +145,7 @@
                         // onAnimationEnd is called during the final frame of the animation.
                         // Delay the cleanup by a tiny amount to give this frame a chance to
                         // be displayed before we destroy the dialog.
-                        mView.postDelayed(this ::superDismiss, CLOSE_CLEANUP_DELAY_MS);
+                        mView.postDelayed(this::superDismiss, CLOSE_CLEANUP_DELAY_MS);
                     }).start();
                 }
             }
diff --git a/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoView.java b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoView.java
index 25b39fb5..14051591 100644
--- a/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoView.java
+++ b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoView.java
@@ -358,7 +358,7 @@
         ImageView permissionIcon = permissionRow.findViewById(R.id.page_info_permission_icon);
         permissionIcon.setImageDrawable(UiUtils.getTintedDrawable(getContext(), params.iconResource,
                 params.iconTintColorResource != 0 ? params.iconTintColorResource
-                                                  : org.chromium.ui.R.color.default_icon_color));
+                                                  : R.color.default_icon_color));
 
         if (params.warningTextResource != 0) {
             TextView permissionUnavailable =
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/SystemSettingsActivityRequiredListener.java b/components/page_info/android/java/src/org/chromium/components/page_info/SystemSettingsActivityRequiredListener.java
similarity index 76%
rename from chrome/android/java/src/org/chromium/chrome/browser/page_info/SystemSettingsActivityRequiredListener.java
rename to components/page_info/android/java/src/org/chromium/components/page_info/SystemSettingsActivityRequiredListener.java
index d76ca044..a95b0f3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/SystemSettingsActivityRequiredListener.java
+++ b/components/page_info/android/java/src/org/chromium/components/page_info/SystemSettingsActivityRequiredListener.java
@@ -2,13 +2,13 @@
 // 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.page_info;
+package org.chromium.components.page_info;
 
 import android.content.Intent;
 
 /**
  * Extracted to allow testing of PermissionParamsListBuilder.
  */
-interface SystemSettingsActivityRequiredListener {
+public interface SystemSettingsActivityRequiredListener {
     void onSystemSettingsActivityRequired(Intent intentOverride);
 }
diff --git a/components/page_info_strings.grdp b/components/page_info_strings.grdp
index a5678ae..fb34520c 100644
--- a/components/page_info_strings.grdp
+++ b/components/page_info_strings.grdp
@@ -534,4 +534,49 @@
   <message name="IDS_PAGE_INFO_VR_TURN_OFF_BUTTON_TEXT" desc="Label on the button that's used to turn off the VR presentation.">
     End
   </message>
+
+  <!-- Certificate viewer dialog strings that are shared across all the platforms -->
+  <message name="IDS_CERT_INFO_SUBJECT_GROUP" desc="The label of the Issued To group in the general page of the certificate info dialog">
+    Issued To
+  </message>
+  <message name="IDS_CERT_INFO_ISSUER_GROUP" desc="The label of the Issued By group in the general page of the certificate info dialog">
+    Issued By
+  </message>
+  <message name="IDS_CERT_INFO_COMMON_NAME_LABEL" desc="The label of the Common Name field in the general page of the certificate info dialog.  (CN) is the name of this field in the standard">
+    Common Name (CN)
+  </message>
+  <message name="IDS_CERT_INFO_ORGANIZATION_LABEL" desc="The label of the Organization field in the general page of the certificate info dialog.  (O) is the name of this field in the standard">
+    Organization (O)
+  </message>
+  <message name="IDS_CERT_INFO_ORGANIZATIONAL_UNIT_LABEL" desc="The label of the Organizational Unit field in the general page of the certificate info dialog.  (OU) is the name of this field in the standard">
+    Organizational Unit (OU)
+  </message>
+  <message name="IDS_CERT_INFO_SERIAL_NUMBER_LABEL" desc="The label of the Serial Number field in the general page of the certificate info dialog.">
+    Serial Number
+  </message>
+  <message name="IDS_CERT_INFO_VALIDITY_GROUP" desc="The label of the group showing the validity (issued and expired dates) in the general page of the certificate info dialog">
+    Validity Period
+  </message>
+  <message name="IDS_CERT_INFO_ISSUED_ON_LABEL" desc="The label of the Issued On field in the general page of the certificate info dialog">
+    Issued On
+  </message>
+  <message name="IDS_CERT_INFO_EXPIRES_ON_LABEL" desc="The label of the Issued On field in the general page of the certificate info dialog">
+    Expires On
+  </message>
+  <message name="IDS_CERT_INFO_FINGERPRINTS_GROUP" desc="The label of the group showing the certificate fingerprints in the general page of the certificate info dialog">
+    Fingerprints
+  </message>
+  <message name="IDS_CERT_INFO_SHA256_FINGERPRINT_LABEL" desc="The label of the SHA-256 Fingerprint field in the general page of the certificate info dialog">
+    SHA-256 Fingerprint
+  </message>
+  <message name="IDS_CERT_INFO_SHA1_FINGERPRINT_LABEL" desc="The label of the SHA-1 Fingerprint field in the general page of the certificate info dialog">
+    SHA-1 Fingerprint
+  </message>
+
+  <message name="IDS_CERT_DETAILS_EXTENSIONS" desc="The label of the Extensions element in the details page of the certificate info dialog.">
+    Extensions
+  </message>
+  <message name="IDS_CERT_X509_SUBJECT_ALT_NAME" desc="description of extension Certificate Subject Alternative Name">
+    Certificate Subject Alternative Name
+  </message>
 </grit-part>
diff --git a/components/password_manager/core/browser/ui/compromised_credentials_provider.cc b/components/password_manager/core/browser/ui/compromised_credentials_provider.cc
index c89326e..19be996 100644
--- a/components/password_manager/core/browser/ui/compromised_credentials_provider.cc
+++ b/components/password_manager/core/browser/ui/compromised_credentials_provider.cc
@@ -44,6 +44,40 @@
   using is_transparent = void;
 };
 
+// This function takes two lists of compromised credentials and saved passwords
+// and joins them, producing a new list that contains an entry for each element
+// of |saved_passwords| whose signon_realm and username are also present in
+// |compromised_credentials|.
+std::vector<CredentialWithPassword>
+JoinCompromisedCredentialsWithSavedPasswords(
+    base::span<const CompromisedCredentials> compromised_credentials,
+    SavedPasswordsPresenter::SavedPasswordsView saved_passwords) {
+  std::vector<CredentialWithPassword> compromised_credentials_with_passwords;
+  compromised_credentials_with_passwords.reserve(
+      compromised_credentials.size());
+
+  // Since a single (signon_realm, username) pair might have multiple
+  // corresponding entries in saved_passwords, we are using a multiset and doing
+  // look-up via equal_range. In most cases the resulting |range| should have a
+  // size of 1, however.
+  std::multiset<CredentialView, CredentialLess> credentials(
+      saved_passwords.begin(), saved_passwords.end());
+  for (const auto& compromised_credential : compromised_credentials) {
+    auto range = credentials.equal_range(compromised_credential);
+    // Make use of a set to only filter out repeated passwords, if any.
+    base::flat_set<base::string16> passwords;
+    std::for_each(range.first, range.second, [&](const CredentialView& view) {
+      if (passwords.insert(view.password).second) {
+        compromised_credentials_with_passwords.emplace_back(
+            compromised_credential);
+        compromised_credentials_with_passwords.back().password = view.password;
+      }
+    });
+  }
+
+  return compromised_credentials_with_passwords;
+}
+
 }  // namespace
 
 bool operator==(const CredentialWithPassword& lhs,
@@ -67,11 +101,12 @@
     scoped_refptr<PasswordStore> store,
     SavedPasswordsPresenter* presenter)
     : store_(std::move(store)), presenter_(presenter) {
-  DCHECK(store_);
   store_->AddDatabaseCompromisedCredentialsObserver(this);
+  presenter_->AddObserver(this);
 }
 
 CompromisedCredentialsProvider::~CompromisedCredentialsProvider() {
+  presenter_->RemoveObserver(this);
   store_->RemoveDatabaseCompromisedCredentialsObserver(this);
 }
 
@@ -81,7 +116,7 @@
 
 CompromisedCredentialsProvider::CredentialsView
 CompromisedCredentialsProvider::GetCompromisedCredentials() const {
-  return compromised_credentials_;
+  return compromised_credentials_with_passwords_;
 }
 
 void CompromisedCredentialsProvider::AddObserver(Observer* observer) {
@@ -98,41 +133,32 @@
   store_->GetAllCompromisedCredentials(this);
 }
 
-// This function takes two lists of compromised credentials and saved passwords
-// and joins them, producing a new list that contains an entry for each element
-// of |saved_passwords| whose signon_realm and username are also present in
-// |compromised_credentials|.
+// Re-computes the list of compromised credentials with passwords after
+// obtaining a new list of compromised credentials.
 void CompromisedCredentialsProvider::OnGetCompromisedCredentials(
     std::vector<CompromisedCredentials> compromised_credentials) {
-  compromised_credentials_.clear();
-  compromised_credentials_.reserve(compromised_credentials.size());
+  compromised_credentials_ = std::move(compromised_credentials);
+  compromised_credentials_with_passwords_ =
+      JoinCompromisedCredentialsWithSavedPasswords(
+          compromised_credentials_, presenter_->GetSavedPasswords());
+  NotifyCompromisedCredentialsChanged();
+}
 
-  SavedPasswordsPresenter::SavedPasswordsView saved_passwords =
-      presenter_->GetSavedPasswords();
-  // Since a single (signon_realm, username) pair might have multiple
-  // corresponding entries in saved_passwords, we are using a multiset and doing
-  // look-up via equal_range. In most cases the resulting |range| should have a
-  // size of 1, however.
-  std::multiset<CredentialView, CredentialLess> credentials(
-      saved_passwords.begin(), saved_passwords.end());
-  for (const auto& compromised_credential : compromised_credentials) {
-    auto range = credentials.equal_range(compromised_credential);
-    // Make use of a set to only filter out repeated passwords, if any.
-    base::flat_set<base::string16> passwords;
-    std::for_each(range.first, range.second, [&](const CredentialView& view) {
-      if (passwords.insert(view.password).second) {
-        compromised_credentials_.emplace_back(compromised_credential);
-        compromised_credentials_.back().password = view.password;
-      }
-    });
-  }
-
+// Re-computes the list of compromised credentials with passwords after
+// obtaining a new list of saved passwords.
+void CompromisedCredentialsProvider::OnSavedPasswordsChanged(
+    SavedPasswordsPresenter::SavedPasswordsView saved_passwords) {
+  compromised_credentials_with_passwords_ =
+      JoinCompromisedCredentialsWithSavedPasswords(compromised_credentials_,
+                                                   saved_passwords);
   NotifyCompromisedCredentialsChanged();
 }
 
 void CompromisedCredentialsProvider::NotifyCompromisedCredentialsChanged() {
-  for (auto& observer : observers_)
-    observer.OnCompromisedCredentialsChanged(compromised_credentials_);
+  for (auto& observer : observers_) {
+    observer.OnCompromisedCredentialsChanged(
+        compromised_credentials_with_passwords_);
+  }
 }
 
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/ui/compromised_credentials_provider.h b/components/password_manager/core/browser/ui/compromised_credentials_provider.h
index d624f99..53d8132 100644
--- a/components/password_manager/core/browser/ui/compromised_credentials_provider.h
+++ b/components/password_manager/core/browser/ui/compromised_credentials_provider.h
@@ -13,12 +13,11 @@
 #include "components/password_manager/core/browser/compromised_credentials_consumer.h"
 #include "components/password_manager/core/browser/compromised_credentials_table.h"
 #include "components/password_manager/core/browser/password_store.h"
+#include "components/password_manager/core/browser/ui/saved_passwords_presenter.h"
 #include "url/gurl.h"
 
 namespace password_manager {
 
-class SavedPasswordsPresenter;
-
 // Simple struct that augments the CompromisedCredentials with a password.
 struct CredentialWithPassword : CompromisedCredentials {
   // Enable explicit construction from the parent struct. This will leave
@@ -40,7 +39,8 @@
 // notified about changes to the list.
 class CompromisedCredentialsProvider
     : public PasswordStore::DatabaseCompromisedCredentialsObserver,
-      public CompromisedCredentialsConsumer {
+      public CompromisedCredentialsConsumer,
+      public SavedPasswordsPresenter::Observer {
  public:
 
   using CredentialsView = base::span<const CredentialWithPassword>;
@@ -76,7 +76,12 @@
   void OnGetCompromisedCredentials(
       std::vector<CompromisedCredentials> compromised_credentials) override;
 
-  // Notify observers about changes to |compromised_credentials_|.
+  // SavedPasswordsPresenter::Observer:
+  void OnSavedPasswordsChanged(
+      SavedPasswordsPresenter::SavedPasswordsView passwords) override;
+
+  // Notify observers about changes to
+  // |compromised_credentials_with_passwords_|.
   void NotifyCompromisedCredentialsChanged();
 
   // The password store containing the compromised credentials.
@@ -87,7 +92,10 @@
   SavedPasswordsPresenter* presenter_ = nullptr;
 
   // Cache of the most recently obtained compromised credentials.
-  std::vector<CredentialWithPassword> compromised_credentials_;
+  std::vector<CompromisedCredentials> compromised_credentials_;
+
+  // Cache of the most recently obtained compromised credentials with passwords.
+  std::vector<CredentialWithPassword> compromised_credentials_with_passwords_;
 
   base::ObserverList<Observer, /*check_empty=*/true> observers_;
 };
diff --git a/components/password_manager/core/browser/ui/compromised_credentials_provider_unittest.cc b/components/password_manager/core/browser/ui/compromised_credentials_provider_unittest.cc
index c1e63d57..65daec85 100644
--- a/components/password_manager/core/browser/ui/compromised_credentials_provider_unittest.cc
+++ b/components/password_manager/core/browser/ui/compromised_credentials_provider_unittest.cc
@@ -93,14 +93,15 @@
 }  // namespace
 
 // Tests whether adding and removing an observer works as expected.
-TEST_F(CompromisedCredentialsProviderTest, NotifyObservers) {
+TEST_F(CompromisedCredentialsProviderTest,
+       NotifyObserversAboutCompromisedCredentialChanges) {
   std::vector<CompromisedCredentials> credentials = {
       MakeCompromised(kExampleCom, kUsername1)};
 
   StrictMockCompromisedCredentialsProviderObserver observer;
   provider().AddObserver(&observer);
 
-  // Adding a credential should notify observers.
+  // Adding a compromised credential should notify observers.
   EXPECT_CALL(observer, OnCompromisedCredentialsChanged);
   store().AddCompromisedCredentials(credentials[0]);
   RunUntilIdle();
@@ -135,6 +136,38 @@
   EXPECT_THAT(store().compromised_credentials(), ElementsAreArray(credentials));
 }
 
+// Tests whether adding and removing an observer works as expected.
+TEST_F(CompromisedCredentialsProviderTest,
+       NotifyObserversAboutSavedPasswordsChanges) {
+  StrictMockCompromisedCredentialsProviderObserver observer;
+  provider().AddObserver(&observer);
+
+  PasswordForm saved_password =
+      MakeSavedPassword(kExampleCom, kUsername1, kPassword1);
+
+  // Adding a saved password should notify observers.
+  EXPECT_CALL(observer, OnCompromisedCredentialsChanged);
+  store().AddLogin(saved_password);
+  RunUntilIdle();
+
+  // Updating a saved password should notify observers.
+  saved_password.password_value = base::ASCIIToUTF16(kPassword2);
+  EXPECT_CALL(observer, OnCompromisedCredentialsChanged);
+  store().UpdateLogin(saved_password);
+  RunUntilIdle();
+
+  // Removing a saved password should notify observers.
+  EXPECT_CALL(observer, OnCompromisedCredentialsChanged);
+  store().RemoveLogin(saved_password);
+  RunUntilIdle();
+
+  // After an observer is removed it should no longer receive notifications.
+  provider().RemoveObserver(&observer);
+  EXPECT_CALL(observer, OnCompromisedCredentialsChanged).Times(0);
+  store().AddLogin(saved_password);
+  RunUntilIdle();
+}
+
 // Tests that the provider is able to join a single password with a compromised
 // credential.
 TEST_F(CompromisedCredentialsProviderTest, JoinSingleCredentials) {
@@ -174,6 +207,48 @@
               ElementsAre(expected1, expected2));
 }
 
+// Tests that the provider reacts whenever the saved passwords or the
+// compromised credentials change.
+TEST_F(CompromisedCredentialsProviderTest, ReactToChangesInBothTables) {
+  std::vector<PasswordForm> passwords = {
+      MakeSavedPassword(kExampleCom, kUsername1, kPassword1),
+      MakeSavedPassword(kExampleCom, kUsername2, kPassword2)};
+
+  std::vector<CompromisedCredentials> credentials = {
+      MakeCompromised(kExampleCom, kUsername1),
+      MakeCompromised(kExampleCom, kUsername2)};
+
+  std::vector<CredentialWithPassword> expected(credentials.begin(),
+                                               credentials.end());
+  expected[0].password = passwords[0].password_value;
+  expected[1].password = passwords[1].password_value;
+
+  store().AddLogin(passwords[0]);
+  RunUntilIdle();
+  EXPECT_THAT(provider().GetCompromisedCredentials(), IsEmpty());
+
+  store().AddCompromisedCredentials(credentials[0]);
+  RunUntilIdle();
+  EXPECT_THAT(provider().GetCompromisedCredentials(), ElementsAre(expected[0]));
+
+  store().AddLogin(passwords[1]);
+  RunUntilIdle();
+  EXPECT_THAT(provider().GetCompromisedCredentials(), ElementsAre(expected[0]));
+
+  store().AddCompromisedCredentials(credentials[1]);
+  RunUntilIdle();
+  EXPECT_THAT(provider().GetCompromisedCredentials(),
+              ElementsAreArray(expected));
+
+  store().RemoveLogin(passwords[0]);
+  RunUntilIdle();
+  EXPECT_THAT(provider().GetCompromisedCredentials(), ElementsAre(expected[1]));
+
+  store().RemoveLogin(passwords[1]);
+  RunUntilIdle();
+  EXPECT_THAT(provider().GetCompromisedCredentials(), IsEmpty());
+}
+
 // Tests that the provider is able to join multiple passwords with compromised
 // credentials.
 TEST_F(CompromisedCredentialsProviderTest, JoinMultipleCredentials) {
diff --git a/components/policy/core/common/BUILD.gn b/components/policy/core/common/BUILD.gn
index 5f7522b..c1e06d2 100644
--- a/components/policy/core/common/BUILD.gn
+++ b/components/policy/core/common/BUILD.gn
@@ -6,6 +6,12 @@
 import("//build/config/jumbo.gni")
 import("//testing/libfuzzer/fuzzer_test.gni")
 
+# Reset sources_assignment_filter for the BUILD.gn file to prevent
+# regression during the migration of Chromium away from the feature.
+# See build/no_sources_assignment_filter.md for more information.
+# TODO(crbug.com/1018739): remove this when migration is done.
+set_sources_assignment_filter([])
+
 group("common") {
   if (is_component_build) {
     public_deps = [ "//components/policy" ]
@@ -106,12 +112,6 @@
     "policy_details.h",
     "policy_load_status.cc",
     "policy_load_status.h",
-    "policy_loader_ios.h",
-    "policy_loader_ios.mm",
-    "policy_loader_mac.h",
-    "policy_loader_mac.mm",
-    "policy_loader_win.cc",
-    "policy_loader_win.h",
     "policy_map.cc",
     "policy_map.h",
     "policy_merger.cc",
@@ -126,8 +126,6 @@
     "policy_service_impl.h",
     "policy_statistics_collector.cc",
     "policy_statistics_collector.h",
-    "preferences_mac.cc",
-    "preferences_mac.h",
     "remote_commands/remote_command_job.cc",
     "remote_commands/remote_command_job.h",
     "remote_commands/remote_commands_factory.cc",
@@ -181,6 +179,10 @@
   ]
 
   if (is_win) {
+    sources += [
+      "policy_loader_win.cc",
+      "policy_loader_win.h",
+    ]
     libs = [
       "netapi32.lib",
       "ntdsapi.lib",
@@ -245,10 +247,24 @@
       "mac_util.cc",
       "mac_util.h",
     ]
-    libs = [ "CoreFoundation.framework" ]
+    frameworks = [ "CoreFoundation.framework" ]
 
     if (is_mac) {
-      libs += [ "SystemConfiguration.framework" ]
+      sources += [
+        "policy_loader_mac.h",
+        "policy_loader_mac.mm",
+        "preferences_mac.cc",
+        "preferences_mac.h",
+      ]
+      frameworks += [ "SystemConfiguration.framework" ]
+    }
+
+    if (is_ios) {
+      sources += [
+        "policy_loader_ios.h",
+        "policy_loader_ios.mm",
+      ]
+      configs += [ "//build/config/compiler:enable_arc" ]
     }
   }
 }
@@ -282,8 +298,6 @@
     "mock_policy_service.h",
     "policy_test_utils.cc",
     "policy_test_utils.h",
-    "preferences_mock_mac.cc",
-    "preferences_mock_mac.h",
     "remote_commands/test_remote_command_job.cc",
     "remote_commands/test_remote_command_job.h",
     "remote_commands/testing_remote_commands_server.cc",
@@ -297,6 +311,13 @@
     ]
   }
 
+  if (is_mac) {
+    sources += [
+      "preferences_mock_mac.cc",
+      "preferences_mock_mac.h",
+    ]
+  }
+
   public_deps = [
     ":common",
     "//base",
@@ -346,9 +367,6 @@
     "generate_policy_source_unittest.cc",
     "plist_writer_unittest.cc",
     "policy_bundle_unittest.cc",
-    "policy_loader_ios_unittest.mm",
-    "policy_loader_mac_unittest.cc",
-    "policy_loader_win_unittest.cc",
     "policy_map_unittest.cc",
     "policy_service_impl_unittest.cc",
     "policy_statistics_collector_unittest.cc",
@@ -395,11 +413,23 @@
   }
   if (is_mac || is_ios) {
     sources += [ "mac_util_unittest.cc" ]
+
+    if (is_mac) {
+      sources += [ "policy_loader_mac_unittest.cc" ]
+    }
+
+    if (is_ios) {
+      sources += [ "policy_loader_ios_unittest.mm" ]
+      configs += [ "//build/config/compiler:enable_arc" ]
+    }
   }
   if (is_win || is_linux) {
     # Needed by policy_loader_win_unittest.cc and preg_parser_unittest.cc
     data = [ "//chrome/test/data/policy/" ]
   }
+  if (is_win) {
+    sources += [ "policy_loader_win_unittest.cc" ]
+  }
 
   deps = [
     ":test_support",
diff --git a/components/policy/core/common/policy_loader_ios.h b/components/policy/core/common/policy_loader_ios.h
index 15b0c5b2..1df6a39 100644
--- a/components/policy/core/common/policy_loader_ios.h
+++ b/components/policy/core/common/policy_loader_ios.h
@@ -5,7 +5,6 @@
 #ifndef COMPONENTS_POLICY_CORE_COMMON_POLICY_LOADER_IOS_H_
 #define COMPONENTS_POLICY_CORE_COMMON_POLICY_LOADER_IOS_H_
 
-#include "base/mac/scoped_nsobject.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequenced_task_runner.h"
@@ -36,7 +35,7 @@
                                              PolicyBundle* bundle);
 
   // Used to manage the registration for NSNotificationCenter notifications.
-  base::scoped_nsobject<id> notification_observer_;
+  __strong id notification_observer_;
 
   // Timestamp of the last notification.
   // Used to coalesce repeated notifications into a single Load() call.
diff --git a/components/policy/core/common/policy_loader_ios.mm b/components/policy/core/common/policy_loader_ios.mm
index 74714349..02ec436 100644
--- a/components/policy/core/common/policy_loader_ios.mm
+++ b/components/policy/core/common/policy_loader_ios.mm
@@ -11,7 +11,6 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/logging.h"
-#include "base/mac/scoped_nsobject.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/sequenced_task_runner.h"
 #include "components/policy/core/common/mac_util.h"
@@ -20,6 +19,10 @@
 #include "components/policy/core/common/policy_namespace.h"
 #include "components/policy/policy_constants.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 // This policy loader loads a managed app configuration from the NSUserDefaults.
 // For example code from Apple see:
 // https://developer.apple.com/library/ios/samplecode/sc2279/Introduction/Intro.html
@@ -84,7 +87,6 @@
 
 - (void)dealloc {
   [[NSNotificationCenter defaultCenter] removeObserver:self];
-  [super dealloc];
 }
 
 @end
@@ -104,9 +106,9 @@
   DCHECK(task_runner()->RunsTasksInCurrentSequence());
   base::RepeatingClosure callback = base::BindRepeating(
       &PolicyLoaderIOS::UserDefaultsChanged, weak_factory_.GetWeakPtr());
-  notification_observer_.reset(
+  notification_observer_ =
       [[PolicyNotificationObserver alloc] initWithCallback:callback
-                                                taskRunner:task_runner()]);
+                                                taskRunner:task_runner()];
 }
 
 std::unique_ptr<PolicyBundle> PolicyLoaderIOS::Load() {
@@ -123,15 +125,15 @@
       NSLog(@"Ignoring EncodedChromePolicy because ChromePolicy is present.");
   } else if (encodedChromePolicy &&
              [encodedChromePolicy isKindOfClass:[NSString class]]) {
-    base::scoped_nsobject<NSData> data(
+    NSData* data =
         [[NSData alloc] initWithBase64EncodedString:encodedChromePolicy
-                                            options:0]);
+                                            options:0];
     if (!data) {
       NSLog(@"Invalid Base64 encoding of EncodedChromePolicy");
     } else {
       NSError* error = nil;
       NSDictionary* properties = [NSPropertyListSerialization
-          propertyListWithData:data.get()
+          propertyListWithData:data
                        options:NSPropertyListImmutable
                         format:NULL
                          error:&error];
@@ -174,7 +176,7 @@
   // NSDictionary is toll-free bridged to CFDictionaryRef, which is a
   // CFPropertyListRef.
   std::unique_ptr<base::Value> value =
-      PropertyToValue(static_cast<CFPropertyListRef>(dictionary));
+      PropertyToValue((__bridge CFPropertyListRef)(dictionary));
   base::DictionaryValue* dict = NULL;
   if (value && value->GetAsDictionary(&dict)) {
     PolicyMap& map = bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, ""));
diff --git a/components/policy/core/common/policy_loader_ios_unittest.mm b/components/policy/core/common/policy_loader_ios_unittest.mm
index 6ecb4888b..483f8318 100644
--- a/components/policy/core/common/policy_loader_ios_unittest.mm
+++ b/components/policy/core/common/policy_loader_ios_unittest.mm
@@ -24,6 +24,10 @@
 #include "components/policy/core/common/policy_types.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 namespace policy {
 
 namespace {
@@ -129,9 +133,7 @@
   NSString* key = base::SysUTF8ToNSString(policy_name);
   base::ScopedCFTypeRef<CFPropertyListRef> value(
       ValueToProperty(*policy_value));
-  AddPolicies(@{
-      key: static_cast<NSArray*>(value.get())
-  });
+  AddPolicies(@{key : (__bridge NSArray*)(value.get())});
 }
 
 void TestHarness::InstallDictionaryPolicy(
@@ -140,9 +142,7 @@
   NSString* key = base::SysUTF8ToNSString(policy_name);
   base::ScopedCFTypeRef<CFPropertyListRef> value(
       ValueToProperty(*policy_value));
-  AddPolicies(@{
-      key: static_cast<NSDictionary*>(value.get())
-  });
+  AddPolicies(@{key : (__bridge NSDictionary*)(value.get())});
 }
 
 // static
@@ -165,8 +165,7 @@
 void TestHarness::AddChromePolicy(NSDictionary* policy) {
   NSString* key = @"ChromePolicy";
   NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
-  base::scoped_nsobject<NSMutableDictionary> chromePolicy(
-      [[NSMutableDictionary alloc] init]);
+  NSMutableDictionary* chromePolicy = [[NSMutableDictionary alloc] init];
 
   NSDictionary* previous = [defaults dictionaryForKey:key];
   if (previous)
@@ -185,15 +184,14 @@
   NSString* key = @"EncodedChromePolicy";
   NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
 
-  base::scoped_nsobject<NSMutableDictionary> chromePolicy(
-      [[NSMutableDictionary alloc] init]);
+  NSMutableDictionary* chromePolicy = [[NSMutableDictionary alloc] init];
 
   NSString* previous = [defaults stringForKey:key];
   if (previous) {
-    base::scoped_nsobject<NSData> data(
-        [[NSData alloc] initWithBase64EncodedString:previous options:0]);
+    NSData* data = [[NSData alloc] initWithBase64EncodedString:previous
+                                                       options:0];
     NSDictionary* properties = [NSPropertyListSerialization
-        propertyListWithData:data.get()
+        propertyListWithData:data
                      options:NSPropertyListImmutable
                       format:NULL
                        error:NULL];
diff --git a/components/update_client/updater_state.cc b/components/update_client/updater_state.cc
index 5d05c86..acf81df 100644
--- a/components/update_client/updater_state.cc
+++ b/components/update_client/updater_state.cc
@@ -84,13 +84,13 @@
 
 std::string UpdaterState::NormalizeTimeDelta(const base::TimeDelta& delta) {
   const base::TimeDelta two_weeks = base::TimeDelta::FromDays(14);
-  const base::TimeDelta two_months = base::TimeDelta::FromDays(60);
+  const base::TimeDelta two_months = base::TimeDelta::FromDays(56);
 
   std::string val;  // Contains the value to return in hours.
   if (delta <= two_weeks) {
     val = "0";
   } else if (two_weeks < delta && delta <= two_months) {
-    val = "408";  // 2 weeks in hours.
+    val = "336";  // 2 weeks in hours.
   } else {
     val = "1344";  // 2*28 days in hours.
   }
diff --git a/components/update_client/updater_state_unittest.cc b/components/update_client/updater_state_unittest.cc
index e916adf..ea724b077 100644
--- a/components/update_client/updater_state_unittest.cc
+++ b/components/update_client/updater_state_unittest.cc
@@ -75,7 +75,12 @@
   updater_state.last_autoupdate_started_ =
       base::Time::NowFromSystemTime() - base::TimeDelta::FromDays(15);
   attributes = updater_state.BuildAttributes();
-  EXPECT_STREQ("408", attributes.at("laststarted").c_str());
+  EXPECT_STREQ("336", attributes.at("laststarted").c_str());
+
+  updater_state.last_autoupdate_started_ =
+      base::Time::NowFromSystemTime() - base::TimeDelta::FromDays(58);
+  attributes = updater_state.BuildAttributes();
+  EXPECT_STREQ("1344", attributes.at("laststarted").c_str());
 
   updater_state.last_autoupdate_started_ =
       base::Time::NowFromSystemTime() - base::TimeDelta::FromDays(90);
@@ -90,7 +95,7 @@
   updater_state.last_checked_ =
       base::Time::NowFromSystemTime() - base::TimeDelta::FromDays(15);
   attributes = updater_state.BuildAttributes();
-  EXPECT_STREQ("408", attributes.at("lastchecked").c_str());
+  EXPECT_STREQ("336", attributes.at("lastchecked").c_str());
 
   updater_state.last_checked_ =
       base::Time::NowFromSystemTime() - base::TimeDelta::FromDays(90);
diff --git a/content/browser/accessibility/browser_accessibility_state_impl.cc b/content/browser/accessibility/browser_accessibility_state_impl.cc
index a248bc9..8f778dfc 100644
--- a/content/browser/accessibility/browser_accessibility_state_impl.cc
+++ b/content/browser/accessibility/browser_accessibility_state_impl.cc
@@ -12,6 +12,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "content/browser/renderer_host/render_widget_host_impl.h"
 #include "content/browser/web_contents/web_contents_impl.h"
@@ -80,9 +81,8 @@
   // gives us better numbers.
 
   // Some things can be done on another thread safely.
-  base::PostDelayedTask(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostDelayedTask(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(
           &BrowserAccessibilityStateImpl::UpdateHistogramsOnOtherThread, this),
       base::TimeDelta::FromSeconds(ACCESSIBILITY_HISTOGRAM_DELAY_SECS));
diff --git a/content/browser/appcache/appcache_service_impl.cc b/content/browser/appcache/appcache_service_impl.cc
index f3c2ada..60db213 100644
--- a/content/browser/appcache/appcache_service_impl.cc
+++ b/content/browser/appcache/appcache_service_impl.cc
@@ -17,6 +17,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/single_thread_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "content/browser/appcache/appcache.h"
 #include "content/browser/appcache/appcache_disk_cache_ops.h"
@@ -377,9 +378,8 @@
 AppCacheServiceImpl::AppCacheServiceImpl(
     storage::QuotaManagerProxy* quota_manager_proxy,
     base::WeakPtr<StoragePartitionImpl> partition)
-    : db_task_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::USER_VISIBLE,
+    : db_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
            base::TaskShutdownBehavior::BLOCK_SHUTDOWN})),
       appcache_policy_(nullptr),
       quota_manager_proxy_(quota_manager_proxy),
diff --git a/content/browser/background_fetch/storage/image_helpers.cc b/content/browser/background_fetch/storage/image_helpers.cc
index 200d1fd..f8573d64 100644
--- a/content/browser/background_fetch/storage/image_helpers.cc
+++ b/content/browser/background_fetch/storage/image_helpers.cc
@@ -8,6 +8,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "ui/gfx/image/image.h"
 
 namespace content {
@@ -46,10 +47,9 @@
   // Do the serialization on a seperate thread to avoid blocking on
   // expensive operations (image conversions), then post back to current
   // thread and continue normally.
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(),
-       base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
+      {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
        base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&ConvertAndSerializeIcon, icon), std::move(callback));
 }
@@ -60,10 +60,9 @@
   // Do the deserialization on a seperate thread to avoid blocking on
   // expensive operations (image conversions), then post back to current
   // thread and continue normally.
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(),
-       base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
+      {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
        base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&DeserializeAndConvertIcon, std::move(serialized_icon)),
       base::BindOnce(std::move(callback)));
diff --git a/content/browser/blob_storage/chrome_blob_storage_context.cc b/content/browser/blob_storage/chrome_blob_storage_context.cc
index 33a732d..f90e9fce 100644
--- a/content/browser/blob_storage/chrome_blob_storage_context.cc
+++ b/content/browser/blob_storage/chrome_blob_storage_context.cc
@@ -17,6 +17,7 @@
 #include "base/single_thread_task_runner.h"
 #include "base/supports_user_data.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner.h"
 #include "content/public/browser/blob_handle.h"
 #include "content/public/browser/browser_context.h"
@@ -117,9 +118,8 @@
     // If we're not incognito mode, schedule all of our file tasks to enable
     // disk on the storage context.
     if (!context->IsOffTheRecord() && io_thread_valid) {
-      file_task_runner = base::CreateTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::USER_VISIBLE,
+      file_task_runner = base::ThreadPool::CreateTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
            base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
       // Removes our old blob directories if they exist.
       BrowserThread::PostBestEffortTask(
diff --git a/content/browser/browser_child_process_host_impl_receiver_bindings.cc b/content/browser/browser_child_process_host_impl_receiver_bindings.cc
index 7913587..8b1434f0 100644
--- a/content/browser/browser_child_process_host_impl_receiver_bindings.cc
+++ b/content/browser/browser_child_process_host_impl_receiver_bindings.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/no_destructor.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "components/discardable_memory/public/mojom/discardable_shared_memory_manager.mojom.h"
 #include "components/discardable_memory/service/discardable_shared_memory_manager.h"
@@ -78,9 +79,8 @@
   }
 
   if (auto r = receiver.As<blink::mojom::DWriteFontProxy>()) {
-    base::CreateSequencedTaskRunner({base::ThreadPool(),
-                                     base::TaskPriority::USER_BLOCKING,
-                                     base::MayBlock()})
+    base::ThreadPool::CreateSequencedTaskRunner(
+        {base::TaskPriority::USER_BLOCKING, base::MayBlock()})
         ->PostTask(FROM_HERE,
                    base::BindOnce(&DWriteFontProxyImpl::Create, std::move(r)));
     return;
diff --git a/content/browser/cache_storage/cache_storage_context_impl.cc b/content/browser/cache_storage/cache_storage_context_impl.cc
index bdf4f9c9..eae6bba 100644
--- a/content/browser/cache_storage/cache_storage_context_impl.cc
+++ b/content/browser/cache_storage/cache_storage_context_impl.cc
@@ -9,6 +9,7 @@
 #include "base/files/file_path.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "content/browser/blob_storage/chrome_blob_storage_context.h"
 #include "content/browser/cache_storage/cache_storage_dispatcher_host.h"
@@ -33,8 +34,8 @@
 scoped_refptr<base::SequencedTaskRunner> CreateSchedulerTaskRunner() {
   if (!base::FeatureList::IsEnabled(kCacheStorageSequenceFeature))
     return base::CreateSingleThreadTaskRunner({BrowserThread::IO});
-  return base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::TaskPriority::USER_VISIBLE});
+  return base::ThreadPool::CreateSequencedTaskRunner(
+      {base::TaskPriority::USER_VISIBLE});
 }
 
 }  // namespace
@@ -62,9 +63,8 @@
   special_storage_policy_ = std::move(special_storage_policy);
 
   scoped_refptr<base::SequencedTaskRunner> cache_task_runner =
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::USER_VISIBLE,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
            base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
 
   task_runner_->PostTask(
diff --git a/content/browser/child_process_task_port_provider_mac_unittest.cc b/content/browser/child_process_task_port_provider_mac_unittest.cc
index 409e945..3f0c02d2 100644
--- a/content/browser/child_process_task_port_provider_mac_unittest.cc
+++ b/content/browser/child_process_task_port_provider_mac_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/mac/scoped_mach_port.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_timeouts.h"
 #include "content/common/child_process.mojom.h"
@@ -171,7 +172,7 @@
   ASSERT_TRUE(base::mac::CreateMachPort(&receive_right, &send_right));
 
   scoped_refptr<base::SequencedTaskRunner> task_runner =
-      base::CreateSequencedTaskRunner({base::ThreadPool()});
+      base::ThreadPool::CreateSequencedTaskRunner({});
 
   MockChildProcess child_process;
   EXPECT_CALL(child_process, GetTaskPort(_))
diff --git a/content/browser/device/device_service.cc b/content/browser/device/device_service.cc
index ac9994f..f15cdfc1 100644
--- a/content/browser/device/device_service.cc
+++ b/content/browser/device/device_service.cc
@@ -8,6 +8,7 @@
 #include "base/no_destructor.h"
 #include "base/single_thread_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/sequence_local_storage_slot.h"
 #include "build/build_config.h"
 #include "content/public/browser/browser_task_traits.h"
@@ -83,8 +84,8 @@
   // thread affinity on the clients. We therefore require a single-thread
   // runner.
   scoped_refptr<base::SingleThreadTaskRunner> device_blocking_task_runner =
-      base::CreateSingleThreadTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                          base::TaskPriority::BEST_EFFORT});
+      base::ThreadPool::CreateSingleThreadTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT});
 
   // Bind the lifetime of the service instance to that of the sequence it's
   // running on.
diff --git a/content/browser/devtools/devtools_http_handler.cc b/content/browser/devtools/devtools_http_handler.cc
index 6518a57..2936289f 100644
--- a/content/browser/devtools/devtools_http_handler.cc
+++ b/content/browser/devtools/devtools_http_handler.cc
@@ -23,6 +23,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread.h"
 #include "base/values.h"
 #include "build/build_config.h"
@@ -223,10 +224,9 @@
   if (socket_factory)
     thread->task_runner()->DeleteSoon(FROM_HERE, std::move(socket_factory));
   if (thread) {
-    base::PostTask(
+    base::ThreadPool::PostTask(
         FROM_HERE,
-        {base::ThreadPool(), base::WithBaseSyncPrimitives(),
-         base::TaskPriority::BEST_EFFORT},
+        {base::WithBaseSyncPrimitives(), base::TaskPriority::BEST_EFFORT},
         BindOnce([](std::unique_ptr<base::Thread>) {}, std::move(thread)));
   }
 }
diff --git a/content/browser/devtools/devtools_pipe_handler.cc b/content/browser/devtools/devtools_pipe_handler.cc
index ed19058..d6b4f273 100644
--- a/content/browser/devtools/devtools_pipe_handler.cc
+++ b/content/browser/devtools/devtools_pipe_handler.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "content/browser/devtools/devtools_pipe_handler.h"
+#include "base/task/thread_pool.h"
 
 #if defined(OS_WIN)
 #include <io.h>
@@ -293,9 +294,9 @@
 
   // If there is no write thread, only take care of the read thread.
   if (!write_thread_) {
-    base::PostTask(
+    base::ThreadPool::PostTask(
         FROM_HERE,
-        {base::ThreadPool(), base::MayBlock(), base::WithBaseSyncPrimitives(),
+        {base::MayBlock(), base::WithBaseSyncPrimitives(),
          base::TaskPriority::BEST_EFFORT},
         base::BindOnce([](base::Thread* rthread) { delete rthread; },
                        read_thread_.release()));
@@ -325,9 +326,9 @@
                                 pipe_reader_.release()));
 
   // Post background task that would join and destroy the threads.
-  base::PostTask(
+  base::ThreadPool::PostTask(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::WithBaseSyncPrimitives(),
+      {base::MayBlock(), base::WithBaseSyncPrimitives(),
        base::TaskPriority::BEST_EFFORT},
       base::BindOnce(
           [](base::Thread* rthread, base::Thread* wthread) {
diff --git a/content/browser/devtools/protocol/devtools_mhtml_helper.cc b/content/browser/devtools/protocol/devtools_mhtml_helper.cc
index 4014ed1a..7442d71e 100644
--- a/content/browser/devtools/protocol/devtools_mhtml_helper.cc
+++ b/content/browser/devtools/protocol/devtools_mhtml_helper.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "content/browser/web_contents/web_contents_impl.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
@@ -41,10 +42,9 @@
     std::unique_ptr<PageHandler::CaptureSnapshotCallback> callback) {
   scoped_refptr<DevToolsMHTMLHelper> helper =
       new DevToolsMHTMLHelper(page_handler, std::move(callback));
-  base::PostTask(
+  base::ThreadPool::PostTask(
       FROM_HERE,
-      {base::ThreadPool(),
-       // Requires IO.
+      {// Requires IO.
        base::MayBlock(),
 
        // TaskShutdownBehavior: use SKIP_ON_SHUTDOWN so that the helper's
@@ -71,9 +71,8 @@
   mhtml_file_ = storage::ShareableFileReference::GetOrCreate(
       mhtml_snapshot_path_,
       storage::ShareableFileReference::DELETE_ON_FINAL_RELEASE,
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(),
-           // Requires IO.
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {// Requires IO.
            base::MayBlock(),
 
            // Because we are using DELETE_ON_FINAL_RELEASE here, the
@@ -111,15 +110,15 @@
     ReportFailure("Failed to generate MHTML");
     return;
   }
-  base::PostTask(FROM_HERE,
-                 {base::ThreadPool(),
-                  // Requires IO.
-                  base::MayBlock(),
+  base::ThreadPool::PostTask(
+      FROM_HERE,
+      {// Requires IO.
+       base::MayBlock(),
 
-                  // TaskShutdownBehavior: use SKIP_ON_SHUTDOWN so that the
-                  // helper's fields do not suddenly become invalid.
-                  base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
-                 base::BindOnce(&DevToolsMHTMLHelper::ReadMHTML, this));
+       // TaskShutdownBehavior: use SKIP_ON_SHUTDOWN so that the
+       // helper's fields do not suddenly become invalid.
+       base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
+      base::BindOnce(&DevToolsMHTMLHelper::ReadMHTML, this));
 }
 
 void DevToolsMHTMLHelper::ReadMHTML() {
diff --git a/content/browser/devtools/protocol/page_handler.cc b/content/browser/devtools/protocol/page_handler.cc
index 61aec8f..37a3ec6 100644
--- a/content/browser/devtools/protocol/page_handler.cc
+++ b/content/browser/devtools/protocol/page_handler.cc
@@ -20,6 +20,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "content/browser/child_process_security_policy_impl.h"
@@ -1081,9 +1082,8 @@
     --frames_in_flight_;
     return;
   }
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&EncodeSkBitmap, bitmap, screencast_format_,
                      screencast_quality_),
       base::BindOnce(&PageHandler::ScreencastFrameEncoded,
diff --git a/content/browser/devtools/service_worker_devtools_agent_host.cc b/content/browser/devtools/service_worker_devtools_agent_host.cc
index bb293f3..1901d466 100644
--- a/content/browser/devtools/service_worker_devtools_agent_host.cc
+++ b/content/browser/devtools/service_worker_devtools_agent_host.cc
@@ -205,11 +205,15 @@
     return;
   }
   const url::Origin origin = url::Origin::Create(url_);
+  // TODO(https://crbug.com/1039613): Get the COEP value for the service worker
+  // and pass it to each factory bundle.
   auto script_bundle = EmbeddedWorkerInstance::CreateFactoryBundleOnUI(
       rph, worker_route_id_, origin,
+      network::mojom::CrossOriginEmbedderPolicyValue::kNone,
       ContentBrowserClient::URLLoaderFactoryType::kServiceWorkerScript);
   auto subresource_bundle = EmbeddedWorkerInstance::CreateFactoryBundleOnUI(
       rph, worker_route_id_, origin,
+      network::mojom::CrossOriginEmbedderPolicyValue::kNone,
       ContentBrowserClient::URLLoaderFactoryType::kServiceWorkerSubResource);
 
   if (ServiceWorkerContext::IsServiceWorkerOnUIEnabled()) {
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc
index 7c97f790..96f31d7 100644
--- a/content/browser/download/download_manager_impl.cc
+++ b/content/browser/download/download_manager_impl.cc
@@ -22,6 +22,7 @@
 #include "base/supports_user_data.h"
 #include "base/synchronization/lock.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "components/download/database/in_progress/download_entry.h"
 #include "components/download/public/common/download_create_info.h"
@@ -319,9 +320,8 @@
       next_download_id_(download::DownloadItem::kInvalidId),
       is_history_download_id_retrieved_(false),
       should_persist_new_download_(false),
-      disk_access_task_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::BEST_EFFORT,
+      disk_access_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN})) {
   DCHECK(browser_context);
 
diff --git a/content/browser/file_system/file_system_operation_runner_unittest.cc b/content/browser/file_system/file_system_operation_runner_unittest.cc
index 56c6cf3..11fedd3 100644
--- a/content/browser/file_system/file_system_operation_runner_unittest.cc
+++ b/content/browser/file_system/file_system_operation_runner_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/run_loop.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread_restrictions.h"
@@ -195,8 +196,7 @@
     base::FilePath base_dir = base_.GetPath();
     file_system_context_ = base::MakeRefCounted<FileSystemContext>(
         base::ThreadTaskRunnerHandle::Get().get(),
-        base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock()})
-            .get(),
+        base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()}).get(),
         storage::ExternalMountPoints::CreateRefCounted().get(),
         base::MakeRefCounted<storage::MockSpecialStoragePolicy>().get(),
         nullptr, std::vector<std::unique_ptr<storage::FileSystemBackend>>(),
diff --git a/content/browser/file_system/file_system_url_loader_factory_browsertest.cc b/content/browser/file_system/file_system_url_loader_factory_browsertest.cc
index d2df90c..a25a2e7 100644
--- a/content/browser/file_system/file_system_url_loader_factory_browsertest.cc
+++ b/content/browser/file_system/file_system_url_loader_factory_browsertest.cc
@@ -15,6 +15,7 @@
 #include "base/i18n/unicodestring.h"
 #include "base/rand_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/bind_test_util.h"
 #include "build/build_config.h"
 #include "content/browser/file_system/file_system_url_loader_factory.h"
@@ -170,7 +171,7 @@
   void SetUpOnMainThread() override {
     io_task_runner_ = base::CreateSingleThreadTaskRunner({BrowserThread::IO});
     blocking_task_runner_ =
-        base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock()});
+        base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()});
 
     special_storage_policy_ =
         base::MakeRefCounted<storage::MockSpecialStoragePolicy>();
diff --git a/content/browser/font_service.cc b/content/browser/font_service.cc
index 1045a36..c903502 100644
--- a/content/browser/font_service.cc
+++ b/content/browser/font_service.cc
@@ -6,6 +6,7 @@
 
 #include "base/no_destructor.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "components/services/font/font_service_app.h"
 
 namespace content {
@@ -14,8 +15,8 @@
 
 base::SequencedTaskRunner* GetServiceTaskRunner() {
   static base::NoDestructor<scoped_refptr<base::SequencedTaskRunner>>
-      task_runner{base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(), base::WithBaseSyncPrimitives(),
+      task_runner{base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::WithBaseSyncPrimitives(),
            base::TaskPriority::USER_BLOCKING})};
   return task_runner->get();
 }
diff --git a/content/browser/font_unique_name_lookup/font_unique_name_lookup.cc b/content/browser/font_unique_name_lookup/font_unique_name_lookup.cc
index 1e14abc0..e590ca10 100644
--- a/content/browser/font_unique_name_lookup/font_unique_name_lookup.cc
+++ b/content/browser/font_unique_name_lookup/font_unique_name_lookup.cc
@@ -14,6 +14,7 @@
 #include "base/path_service.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "third_party/blink/public/common/font_unique_name_lookup/font_table_matcher.h"
@@ -351,9 +352,9 @@
 }
 
 void FontUniqueNameLookup::ScheduleLoadOrUpdateTable() {
-  base::PostTask(
+  base::ThreadPool::PostTask(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
        base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(
           [](FontUniqueNameLookup* instance) {
diff --git a/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.cc b/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.cc
index 8f6822d..3e59246 100644
--- a/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.cc
+++ b/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.cc
@@ -10,6 +10,7 @@
 #include "base/macros.h"
 #include "base/no_destructor.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "content/browser/font_unique_name_lookup/font_unique_name_lookup.h"
 #include "content/public/common/content_features.h"
 #include "mojo/public/cpp/bindings/callback_helpers.h"
@@ -35,9 +36,8 @@
 scoped_refptr<base::SequencedTaskRunner>
 FontUniqueNameLookupService::GetTaskRunner() {
   static base::NoDestructor<scoped_refptr<base::SequencedTaskRunner>> runner(
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
            base::TaskPriority::USER_BLOCKING}));
   return *runner;
 }
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 1e052a9..23b7648 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -29,6 +29,7 @@
 #include "base/process/kill.h"
 #include "base/stl_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/trace_event/traced_value.h"
@@ -5648,9 +5649,8 @@
     if (common_params->url.SchemeIs(url::kContentScheme)) {
       // Only content:// URLs can load content:// subresources
       auto content_factory = std::make_unique<ContentURLLoaderFactory>(
-          base::CreateSequencedTaskRunner(
-              {base::ThreadPool(), base::MayBlock(),
-               base::TaskPriority::BEST_EFFORT,
+          base::ThreadPool::CreateSequencedTaskRunner(
+              {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
                base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}));
       non_network_url_loader_factories_.emplace(url::kContentScheme,
                                                 std::move(content_factory));
diff --git a/content/browser/hyphenation/hyphenation_impl.cc b/content/browser/hyphenation/hyphenation_impl.cc
index 20f4cd8..92bd145 100644
--- a/content/browser/hyphenation/hyphenation_impl.cc
+++ b/content/browser/hyphenation/hyphenation_impl.cc
@@ -15,6 +15,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 
 namespace {
@@ -67,9 +68,8 @@
 // static
 scoped_refptr<base::SequencedTaskRunner> HyphenationImpl::GetTaskRunner() {
   static base::NoDestructor<scoped_refptr<base::SequencedTaskRunner>> runner(
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
            base::TaskPriority::USER_BLOCKING}));
   return *runner;
 }
diff --git a/content/browser/indexed_db/indexed_db_backing_store_unittest.cc b/content/browser/indexed_db/indexed_db_backing_store_unittest.cc
index fed4010..0d2a062 100644
--- a/content/browser/indexed_db/indexed_db_backing_store_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_backing_store_unittest.cc
@@ -24,6 +24,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/task_environment.h"
 #include "base/time/default_clock.h"
@@ -487,17 +488,16 @@
                                          int64_t size) {
     auto uuid = base::GenerateGUID();
     mojo::PendingRemote<blink::mojom::Blob> remote;
-    base::CreateSequencedTaskRunner({base::ThreadPool()})
-        ->PostTask(
-            FROM_HERE,
-            base::BindOnce(
-                [](std::string uuid,
-                   mojo::PendingReceiver<blink::mojom::Blob> pending_receiver) {
-                  mojo::MakeSelfOwnedReceiver(
-                      std::make_unique<storage::FakeBlob>(uuid),
-                      std::move(pending_receiver));
-                },
-                uuid, remote.InitWithNewPipeAndPassReceiver()));
+    base::ThreadPool::CreateSequencedTaskRunner({})->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            [](std::string uuid,
+               mojo::PendingReceiver<blink::mojom::Blob> pending_receiver) {
+              mojo::MakeSelfOwnedReceiver(
+                  std::make_unique<storage::FakeBlob>(uuid),
+                  std::move(pending_receiver));
+            },
+            uuid, remote.InitWithNewPipeAndPassReceiver()));
     IndexedDBExternalObject info(std::move(remote), uuid, file_name, type,
                                  last_modified, size);
     return info;
@@ -507,17 +507,16 @@
                                          int64_t size) {
     auto uuid = base::GenerateGUID();
     mojo::PendingRemote<blink::mojom::Blob> remote;
-    base::CreateSequencedTaskRunner({base::ThreadPool()})
-        ->PostTask(
-            FROM_HERE,
-            base::BindOnce(
-                [](std::string uuid,
-                   mojo::PendingReceiver<blink::mojom::Blob> pending_receiver) {
-                  mojo::MakeSelfOwnedReceiver(
-                      std::make_unique<storage::FakeBlob>(uuid),
-                      std::move(pending_receiver));
-                },
-                uuid, remote.InitWithNewPipeAndPassReceiver()));
+    base::ThreadPool::CreateSequencedTaskRunner({})->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            [](std::string uuid,
+               mojo::PendingReceiver<blink::mojom::Blob> pending_receiver) {
+              mojo::MakeSelfOwnedReceiver(
+                  std::make_unique<storage::FakeBlob>(uuid),
+                  std::move(pending_receiver));
+            },
+            uuid, remote.InitWithNewPipeAndPassReceiver()));
     IndexedDBExternalObject info(std::move(remote), uuid, type, size);
     return info;
   }
@@ -525,19 +524,18 @@
   IndexedDBExternalObject CreateNativeFileSystemHandle() {
     auto id = base::UnguessableToken::Create();
     mojo::PendingRemote<blink::mojom::NativeFileSystemTransferToken> remote;
-    base::CreateSequencedTaskRunner({base::ThreadPool()})
-        ->PostTask(
-            FROM_HERE,
-            base::BindOnce(
-                [](base::UnguessableToken id,
-                   mojo::PendingReceiver<
-                       blink::mojom::NativeFileSystemTransferToken>
-                       pending_receiver) {
-                  mojo::MakeSelfOwnedReceiver(
-                      std::make_unique<FakeNativeFileSystemTransferToken>(id),
-                      std::move(pending_receiver));
-                },
-                id, remote.InitWithNewPipeAndPassReceiver()));
+    base::ThreadPool::CreateSequencedTaskRunner({})->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            [](base::UnguessableToken id,
+               mojo::PendingReceiver<
+                   blink::mojom::NativeFileSystemTransferToken>
+                   pending_receiver) {
+              mojo::MakeSelfOwnedReceiver(
+                  std::make_unique<FakeNativeFileSystemTransferToken>(id),
+                  std::move(pending_receiver));
+            },
+            id, remote.InitWithNewPipeAndPassReceiver()));
     IndexedDBExternalObject info(std::move(remote));
     return info;
   }
diff --git a/content/browser/indexed_db/indexed_db_context_impl.cc b/content/browser/indexed_db/indexed_db_context_impl.cc
index b8b6030..b62416d9 100644
--- a/content/browser/indexed_db/indexed_db_context_impl.cc
+++ b/content/browser/indexed_db/indexed_db_context_impl.cc
@@ -19,6 +19,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/time/default_clock.h"
 #include "base/time/time.h"
@@ -103,9 +104,8 @@
     : base::RefCountedDeleteOnSequence<IndexedDBContextImpl>(
           custom_task_runner
               ? custom_task_runner
-              : (base::CreateSequencedTaskRunner(
-                    {base::ThreadPool(), base::MayBlock(),
-                     base::WithBaseSyncPrimitives(),
+              : (base::ThreadPool::CreateSequencedTaskRunner(
+                    {base::MayBlock(), base::WithBaseSyncPrimitives(),
                      base::TaskPriority::USER_VISIBLE,
                      // BLOCK_SHUTDOWN to support clearing session-only storage.
                      base::TaskShutdownBehavior::BLOCK_SHUTDOWN}))),
diff --git a/content/browser/indexed_db/indexed_db_dispatcher_host.cc b/content/browser/indexed_db/indexed_db_dispatcher_host.cc
index 9c57054f..51b8edb 100644
--- a/content/browser/indexed_db/indexed_db_dispatcher_host.cc
+++ b/content/browser/indexed_db/indexed_db_dispatcher_host.cc
@@ -14,6 +14,7 @@
 #include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "content/browser/indexed_db/cursor_impl.h"
 #include "content/browser/indexed_db/file_stream_reader_to_data_pipe.h"
@@ -198,9 +199,8 @@
     int ipc_process_id,
     scoped_refptr<IndexedDBContextImpl> indexed_db_context)
     : indexed_db_context_(std::move(indexed_db_context)),
-      file_task_runner_(
-          base::CreateTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                  base::TaskPriority::USER_VISIBLE})),
+      file_task_runner_(base::ThreadPool::CreateTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE})),
       ipc_process_id_(ipc_process_id) {
   DETACH_FROM_SEQUENCE(sequence_checker_);
   DCHECK(indexed_db_context_);
diff --git a/content/browser/indexed_db/indexed_db_internals_ui.cc b/content/browser/indexed_db/indexed_db_internals_ui.cc
index da390c9..e64498dd 100644
--- a/content/browser/indexed_db/indexed_db_internals_ui.cc
+++ b/content/browser/indexed_db/indexed_db_internals_ui.cc
@@ -12,6 +12,7 @@
 #include "base/files/file_util.h"
 #include "base/macros.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/platform_thread.h"
 #include "base/values.h"
 #include "content/browser/indexed_db/indexed_db_context_impl.h"
@@ -313,9 +314,9 @@
 }
 
 FileDeleter::~FileDeleter() {
-  base::PostTask(
+  base::ThreadPool::PostTask(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
        base::TaskShutdownBehavior::BLOCK_SHUTDOWN},
       base::BindOnce(base::IgnoreResult(&base::DeleteFile),
                      std::move(temp_dir_), true));
diff --git a/content/browser/loader/file_url_loader_factory.cc b/content/browser/loader/file_url_loader_factory.cc
index 437f6181..3108484a4 100644
--- a/content/browser/loader/file_url_loader_factory.cc
+++ b/content/browser/loader/file_url_loader_factory.cc
@@ -23,6 +23,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "content/browser/web_package/web_bundle_utils.h"
@@ -801,8 +802,8 @@
     : profile_path_(profile_path),
       shared_cors_origin_access_list_(
           std::move(shared_cors_origin_access_list)),
-      task_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(), task_priority,
+      task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), task_priority,
            base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})) {}
 
 FileURLLoaderFactory::~FileURLLoaderFactory() = default;
@@ -917,8 +918,8 @@
   // TODO(crbug.com/924416): Re-evaluate how TaskPriority is set here and in
   // other file URL-loading-related code. Some callers require USER_VISIBLE
   // (i.e., BEST_EFFORT is not enough).
-  auto task_runner = base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE,
+  auto task_runner = base::ThreadPool::CreateSequencedTaskRunner(
+      {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
        base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
   task_runner->PostTask(
       FROM_HERE,
diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/browser/loader/navigation_url_loader_impl.cc
index 5c2642dd..3e5616d 100644
--- a/content/browser/loader/navigation_url_loader_impl.cc
+++ b/content/browser/loader/navigation_url_loader_impl.cc
@@ -17,6 +17,7 @@
 #include "base/optional.h"
 #include "base/stl_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "components/download/public/common/download_stats.h"
@@ -1389,10 +1390,10 @@
 #if defined(OS_ANDROID)
   non_network_url_loader_factories_.emplace(
       url::kContentScheme,
-      std::make_unique<ContentURLLoaderFactory>(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::BEST_EFFORT,
-           base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})));
+      std::make_unique<ContentURLLoaderFactory>(
+          base::ThreadPool::CreateSequencedTaskRunner(
+              {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+               base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})));
 #endif
 
   std::set<std::string> known_schemes;
diff --git a/content/browser/native_file_system/native_file_system_file_writer_impl.cc b/content/browser/native_file_system/native_file_system_file_writer_impl.cc
index f359f07..ccaadc6 100644
--- a/content/browser/native_file_system/native_file_system_file_writer_impl.cc
+++ b/content/browser/native_file_system/native_file_system_file_writer_impl.cc
@@ -6,6 +6,7 @@
 #include "base/files/file_util.h"
 #include "base/logging.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "components/services/quarantine/quarantine.h"
 #include "content/browser/native_file_system/native_file_system_error.h"
 #include "content/browser/native_file_system/native_file_system_manager_impl.h"
@@ -323,9 +324,10 @@
   if (!file_writer || hash_result != base::File::FILE_OK) {
     // If writer was deleted, or calculating the hash failed try deleting the
     // swap file and invoke the callback.
-    base::PostTask(FROM_HERE, {base::ThreadPool(), base::MayBlock()},
-                   base::BindOnce(base::IgnoreResult(&base::DeleteFile),
-                                  swap_path, /*recursive=*/false));
+    base::ThreadPool::PostTask(
+        FROM_HERE, {base::MayBlock()},
+        base::BindOnce(base::IgnoreResult(&base::DeleteFile), swap_path,
+                       /*recursive=*/false));
     std::move(callback).Run(native_file_system_error::FromStatus(
         NativeFileSystemStatus::kOperationAborted,
         "Failed to perform Safe Browsing check."));
@@ -364,9 +366,10 @@
   // Writer is gone, or safe browsing check failed. In this case we should
   // try deleting the swap file and call the callback to report that close
   // failed.
-  base::PostTask(FROM_HERE, {base::ThreadPool(), base::MayBlock()},
-                 base::BindOnce(base::IgnoreResult(&base::DeleteFile),
-                                swap_path, /*recursive=*/false));
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::MayBlock()},
+      base::BindOnce(base::IgnoreResult(&base::DeleteFile), swap_path,
+                     /*recursive=*/false));
   std::move(callback).Run(native_file_system_error::FromStatus(
       NativeFileSystemStatus::kOperationAborted,
       "Write operation blocked by Safe Browsing."));
@@ -409,8 +412,8 @@
 
   GURL referrer_url = manager()->is_off_the_record() ? GURL() : context().url;
 
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE, {base::ThreadPool(), base::MayBlock()},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock()},
       base::BindOnce(&AnnotateFileSync,
                      GetContentClient()
                          ->browser()
@@ -445,8 +448,8 @@
     HashCallback callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK_EQ(swap_url().type(), storage::kFileSystemTypeNativeLocal);
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE, {base::ThreadPool(), base::MayBlock()},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock()},
       base::BindOnce(&ReadAndComputeSHA256ChecksumAndSize, swap_url().path()),
       base::BindOnce(
           [](HashCallback callback, HashResult result) {
diff --git a/content/browser/native_file_system/native_file_system_manager_impl.cc b/content/browser/native_file_system/native_file_system_manager_impl.cc
index 55b097b1..4a49bf3 100644
--- a/content/browser/native_file_system/native_file_system_manager_impl.cc
+++ b/content/browser/native_file_system/native_file_system_manager_impl.cc
@@ -9,6 +9,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/strcat.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "content/browser/native_file_system/file_system_chooser.h"
 #include "content/browser/native_file_system/fixed_native_file_system_permission_grant.h"
 #include "content/browser/native_file_system/native_file_system.pb.h"
@@ -745,10 +746,8 @@
   if (options.type() == blink::mojom::ChooseFileSystemEntryType::kSaveFile) {
     DCHECK_EQ(entries.size(), 1u);
     // Create file if it doesn't yet exist, and truncate file if it does exist.
-    base::PostTaskAndReplyWithResult(
-        FROM_HERE,
-        {base::ThreadPool(), base::TaskPriority::USER_BLOCKING,
-         base::MayBlock()},
+    base::ThreadPool::PostTaskAndReplyWithResult(
+        FROM_HERE, {base::TaskPriority::USER_BLOCKING, base::MayBlock()},
         base::BindOnce(&CreateOrTruncateFile, entries.front()),
         base::BindOnce(
             &NativeFileSystemManagerImpl::DidCreateOrTruncateSaveFile, this,
diff --git a/content/browser/net/cookie_store_factory.cc b/content/browser/net/cookie_store_factory.cc
index 3090f7e..9335459 100644
--- a/content/browser/net/cookie_store_factory.cc
+++ b/content/browser/net/cookie_store_factory.cc
@@ -10,6 +10,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "net/cookies/cookie_constants.h"
@@ -60,9 +61,8 @@
     }
 
     if (!background_task_runner.get()) {
-      background_task_runner = base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           net::GetCookieStoreBackgroundSequencePriority(),
+      background_task_runner = base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), net::GetCookieStoreBackgroundSequencePriority(),
            base::TaskShutdownBehavior::BLOCK_SHUTDOWN});
     }
 
diff --git a/content/browser/network_context_client_base_impl.cc b/content/browser/network_context_client_base_impl.cc
index ab493c7..a095086b 100644
--- a/content/browser/network_context_client_base_impl.cc
+++ b/content/browser/network_context_client_base_impl.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner.h"
 #include "build/build_config.h"
 #include "content/browser/child_process_security_policy_impl.h"
@@ -70,9 +71,8 @@
     const std::vector<base::FilePath>& file_paths,
     network::mojom::NetworkContextClient::OnFileUploadRequestedCallback
         callback) {
-  base::PostTask(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_BLOCKING},
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_BLOCKING},
       base::BindOnce(&HandleFileUploadRequest, process_id, async, file_paths,
                      std::move(callback),
                      base::SequencedTaskRunnerHandle::Get()));
diff --git a/content/browser/notifications/platform_notification_context_impl.cc b/content/browser/notifications/platform_notification_context_impl.cc
index d68765b..2d76a71 100644
--- a/content/browser/notifications/platform_notification_context_impl.cc
+++ b/content/browser/notifications/platform_notification_context_impl.cc
@@ -13,6 +13,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/stl_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "content/browser/notifications/blink_notification_service_impl.h"
 #include "content/browser/notifications/notification_database.h"
 #include "content/browser/notifications/notification_trigger_constants.h"
@@ -999,9 +1000,8 @@
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
   if (!task_runner_) {
-    task_runner_ =
-        base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                         base::TaskPriority::USER_VISIBLE});
+    task_runner_ = base::ThreadPool::CreateSequencedTaskRunner(
+        {base::MayBlock(), base::TaskPriority::USER_VISIBLE});
   }
 
   task_runner_->PostTask(
diff --git a/content/browser/plugin_service_impl.cc b/content/browser/plugin_service_impl.cc
index dc10e9e..8f0f145 100644
--- a/content/browser/plugin_service_impl.cc
+++ b/content/browser/plugin_service_impl.cc
@@ -20,6 +20,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "base/threading/thread.h"
 #include "build/build_config.h"
@@ -116,8 +117,8 @@
 }
 
 void PluginServiceImpl::Init() {
-  plugin_list_task_runner_ = base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE,
+  plugin_list_task_runner_ = base::ThreadPool::CreateSequencedTaskRunner(
+      {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
        base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
 
   // Setup the sequence checker right after setting up the task runner.
diff --git a/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.cc b/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.cc
index de346ae..9878cbd 100644
--- a/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.cc
+++ b/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.cc
@@ -390,9 +390,8 @@
   scanning_error_reasons_.clear();
 
   scoped_refptr<base::SequencedTaskRunner> results_collection_task_runner =
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::BEST_EFFORT,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN});
 
   results_collection_task_runner->PostTask(
@@ -455,9 +454,9 @@
     // Specify base::ThreadPolicy::MUST_USE_FOREGROUND because in
     // https://crbug.com/960263 we observed a priority inversion when running
     // DWrite worker tasks in the background.
-    base::PostTaskAndReplyWithResult(
+    base::ThreadPool::PostTaskAndReplyWithResult(
         FROM_HERE,
-        {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+        {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
          base::ThreadPolicy::MUST_USE_FOREGROUND,
          base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
         base::BindOnce(
diff --git a/content/browser/renderer_host/media/aec_dump_manager_impl.cc b/content/browser/renderer_host/media/aec_dump_manager_impl.cc
index e341ced..b1df9bbb 100644
--- a/content/browser/renderer_host/media/aec_dump_manager_impl.cc
+++ b/content/browser/renderer_host/media/aec_dump_manager_impl.cc
@@ -7,6 +7,7 @@
 #include "base/files/file.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "content/browser/webrtc/webrtc_internals.h"
 #include "mojo/public/cpp/base/file_mojom_traits.h"
 
@@ -71,10 +72,9 @@
           .AddExtensionASCII(kAecDumpFileNameAddition)
           .AddExtensionASCII(base::NumberToString(id));
 
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(),
-       base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
+      {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
        base::TaskPriority::USER_BLOCKING},
       base::BindOnce(&CreateDumpFile, file_path_extended),
       base::BindOnce(&AecDumpManagerImpl::StartDump, weak_factory_.GetWeakPtr(),
@@ -90,9 +90,8 @@
   auto it = agents_.find(id);
   if (it == agents_.end()) {
     // Post the file close to avoid blocking the current thread.
-    base::PostTask(
-        FROM_HERE,
-        {base::ThreadPool(), base::TaskPriority::LOWEST, base::MayBlock()},
+    base::ThreadPool::PostTask(
+        FROM_HERE, {base::TaskPriority::LOWEST, base::MayBlock()},
         base::BindOnce([](base::File) {}, std::move(file)));
     return;
   }
diff --git a/content/browser/renderer_host/media/media_devices_manager.cc b/content/browser/renderer_host/media/media_devices_manager.cc
index f355780c..10610f0 100644
--- a/content/browser/renderer_host/media/media_devices_manager.cc
+++ b/content/browser/renderer_host/media/media_devices_manager.cc
@@ -53,9 +53,7 @@
 struct {
   uint16_t width;
   uint16_t height;
-} const kFallbackVideoResolutions[] = {{1920, 1080}, {1280, 720}, {960, 720},
-                                       {640, 480},   {640, 360},  {320, 240},
-                                       {320, 180}};
+} const kFallbackVideoResolutions[] = {{1920, 1080}, {1280, 720}, {640, 480}};
 
 // Frame rates for sources with no support for capability enumeration.
 const uint16_t kFallbackVideoFrameRates[] = {30, 60};
diff --git a/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.cc b/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.cc
index df3b97b..2e7b09c 100644
--- a/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.cc
+++ b/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.cc
@@ -10,6 +10,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "content/browser/child_process_security_policy_impl.h"
 #include "content/public/browser/browser_thread.h"
 #include "ppapi/c/pp_errors.h"
@@ -65,9 +66,8 @@
     : host_(host),
       path_(path),
       render_process_id_(render_process_id),
-      task_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::USER_VISIBLE,
+      task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
            base::TaskShutdownBehavior::BLOCK_SHUTDOWN})) {}
 
 PepperExternalFileRefBackend::~PepperExternalFileRefBackend() {}
diff --git a/content/browser/renderer_host/pepper/pepper_file_io_host.cc b/content/browser/renderer_host/pepper/pepper_file_io_host.cc
index 056c4900..9db5ca4 100644
--- a/content/browser/renderer_host/pepper/pepper_file_io_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_file_io_host.cc
@@ -11,6 +11,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "content/browser/renderer_host/pepper/pepper_file_ref_host.h"
 #include "content/browser/renderer_host/pepper/pepper_file_system_browser_host.h"
 #include "content/browser/renderer_host/pepper/pepper_security_helper.h"
@@ -109,9 +110,8 @@
                                    PP_Resource resource)
     : ResourceHost(host->GetPpapiHost(), instance, resource),
       browser_ppapi_host_(host),
-      task_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::USER_VISIBLE,
+      task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
            base::TaskShutdownBehavior::BLOCK_SHUTDOWN})),
       file_(task_runner_.get()),
       open_flags_(0),
diff --git a/content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc b/content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc
index fe3311b..be208ad 100644
--- a/content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc
@@ -11,6 +11,7 @@
 #include "base/files/file_enumerator.h"
 #include "base/files/file_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "content/browser/child_process_security_policy_impl.h"
 #include "content/browser/renderer_host/pepper/pepper_security_helper.h"
 #include "content/public/browser/browser_ppapi_host.h"
@@ -81,8 +82,8 @@
   // the plugin has multiple threads, it cannot make assumptions about
   // ordering of IPC message sends, so it cannot make assumptions
   // about ordering of operations caused by those IPC messages.
-  return base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE,
+  return base::ThreadPool::CreateSequencedTaskRunner(
+      {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
        base::TaskShutdownBehavior::BLOCK_SHUTDOWN});
 }
 
diff --git a/content/browser/renderer_host/pepper/pepper_truetype_font_host.cc b/content/browser/renderer_host/pepper/pepper_truetype_font_host.cc
index edf3ce2..bfbc0a5 100644
--- a/content/browser/renderer_host/pepper/pepper_truetype_font_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_truetype_font_host.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "content/browser/renderer_host/pepper/pepper_truetype_font.h"
 #include "content/public/browser/browser_ppapi_host.h"
@@ -30,8 +31,8 @@
   font_ = PepperTrueTypeFont::Create();
   // Initialize the font on a ThreadPool thread. This must complete before
   // using |font_|.
-  task_runner_ = base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT});
+  task_runner_ = base::ThreadPool::CreateSequencedTaskRunner(
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT});
   SerializedTrueTypeFontDesc* actual_desc =
       new SerializedTrueTypeFontDesc(desc);
   base::PostTaskAndReplyWithResult(
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index 9aea3b40..ad6818fb 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -55,6 +55,7 @@
 #include "base/synchronization/lock.h"
 #include "base/system/sys_info.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/thread_annotations.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_restrictions.h"
@@ -2250,11 +2251,11 @@
           },
           weak_factory_.GetWeakPtr()));
 
-  registry->AddInterface(base::BindRepeating(&MimeRegistryImpl::Create),
-                         base::CreateSequencedTaskRunner(
-                             {base::ThreadPool(), base::MayBlock(),
-                              base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
-                              base::TaskPriority::USER_BLOCKING}));
+  registry->AddInterface(
+      base::BindRepeating(&MimeRegistryImpl::Create),
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
+           base::TaskPriority::USER_BLOCKING}));
 #if BUILDFLAG(USE_MINIKIN_HYPHENATION)
   registry->AddInterface(
       base::BindRepeating(&hyphenation::HyphenationImpl::Create),
@@ -2271,9 +2272,8 @@
 #if defined(OS_WIN)
   registry->AddInterface(
       base::BindRepeating(&DWriteFontProxyImpl::Create),
-      base::CreateSequencedTaskRunner({base::ThreadPool(),
-                                       base::TaskPriority::USER_BLOCKING,
-                                       base::MayBlock()}));
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::TaskPriority::USER_BLOCKING, base::MayBlock()}));
 #endif
 
   registry->AddInterface(
@@ -2331,8 +2331,8 @@
 
   registry->AddInterface(
       base::BindRepeating(&FileUtilitiesHostImpl::Create, GetID()),
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                       base::TaskPriority::USER_VISIBLE}));
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE}));
 
   // Note, the base::Unretained() is safe because the target object has an IO
   // thread deleter and the callback is also targeting the IO thread.  When
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index e261f327..46590bd 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -24,6 +24,7 @@
 #include "base/single_thread_task_runner.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/system/sys_info.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "cc/base/math_util.h"
@@ -1361,9 +1362,8 @@
     const SkBitmap& bitmap) {
   JNIEnv* env = base::android::AttachCurrentThread();
   if (!bitmap.drawsNothing()) {
-    auto task_runner = base::CreateSequencedTaskRunner(
-        {base::ThreadPool(), base::MayBlock(),
-         base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
+    auto task_runner = base::ThreadPool::CreateSequencedTaskRunner(
+        {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
     base::PostTaskAndReplyWithResult(
         task_runner.get(), FROM_HERE,
         base::BindOnce(&CompressAndSaveBitmap, path, bitmap),
diff --git a/content/browser/scheduler/responsiveness/jank_monitor.cc b/content/browser/scheduler/responsiveness/jank_monitor.cc
index 0e44bdf2..288fe15d 100644
--- a/content/browser/scheduler/responsiveness/jank_monitor.cc
+++ b/content/browser/scheduler/responsiveness/jank_monitor.cc
@@ -5,6 +5,7 @@
 #include "content/browser/scheduler/responsiveness/jank_monitor.h"
 
 #include "base/compiler_specific.h"
+#include "base/task/thread_pool.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "ui/base/ui_base_features.h"
@@ -57,7 +58,7 @@
   io_thread_exec_state_ = std::make_unique<ThreadExecutionState>();
 
   // Then the monitor thread.
-  monitor_task_runner_ = base::CreateSequencedTaskRunner({base::ThreadPool()});
+  monitor_task_runner_ = base::ThreadPool::CreateSequencedTaskRunner({});
 
   // Finally set up the MetricSource.
   metric_source_ = CreateMetricSource();
diff --git a/content/browser/screenlock_monitor/screenlock_monitor_device_source_win.cc b/content/browser/screenlock_monitor/screenlock_monitor_device_source_win.cc
index 5cb6645..1cc7bf4 100644
--- a/content/browser/screenlock_monitor/screenlock_monitor_device_source_win.cc
+++ b/content/browser/screenlock_monitor/screenlock_monitor_device_source_win.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/win/message_window.h"
 
 namespace content {
@@ -25,8 +26,8 @@
       base::BindOnce(base::IgnoreResult(&::WTSRegisterSessionNotification),
                      window_->hwnd(), NOTIFY_FOR_ALL_SESSIONS);
 
-  base::CreateCOMSTATaskRunner({base::ThreadPool()})
-      ->PostTask(FROM_HERE, std::move(wts_register));
+  base::ThreadPool::CreateCOMSTATaskRunner({})->PostTask(
+      FROM_HERE, std::move(wts_register));
 }
 
 ScreenlockMonitorDeviceSource::SessionMessageWindow::~SessionMessageWindow() {
diff --git a/content/browser/service_worker/embedded_worker_instance.cc b/content/browser/service_worker/embedded_worker_instance.cc
index 335828ad..66cd921 100644
--- a/content/browser/service_worker/embedded_worker_instance.cc
+++ b/content/browser/service_worker/embedded_worker_instance.cc
@@ -117,12 +117,14 @@
 //
 // This also sets up two URLLoaderFactoryBundles, one for
 // ServiceWorkerScriptLoaderFactory and the other is for passing to the
-// renderer. These bundles include factories for non-network URLs like
-// chrome-extension:// as needed.
+// renderer. |cross_origin_embedder_policy| is respected to make these bundles.
+// These bundles include factories for non-network URLs like chrome-extension://
+// as needed.
 void SetupOnUIThread(
     int embedded_worker_id,
     base::WeakPtr<ServiceWorkerProcessManager> process_manager,
     bool can_use_existing_process,
+    network::mojom::CrossOriginEmbedderPolicyValue cross_origin_embedder_policy,
     blink::mojom::EmbeddedWorkerStartParamsPtr params,
     mojo::PendingReceiver<blink::mojom::EmbeddedWorkerInstanceClient> receiver,
     ServiceWorkerContextCore* context,
@@ -229,7 +231,7 @@
   if (!params->is_installed) {
     factory_bundle_for_new_scripts =
         EmbeddedWorkerInstance::CreateFactoryBundleOnUI(
-            rph, routing_id, origin,
+            rph, routing_id, origin, cross_origin_embedder_policy,
             ContentBrowserClient::URLLoaderFactoryType::kServiceWorkerScript);
   }
 
@@ -239,7 +241,7 @@
   // service worker terminates itself when the connection breaks, so a new
   // instance can be started.
   factory_bundle_for_renderer = EmbeddedWorkerInstance::CreateFactoryBundleOnUI(
-      rph, routing_id, origin,
+      rph, routing_id, origin, cross_origin_embedder_policy,
       ContentBrowserClient::URLLoaderFactoryType::kServiceWorkerSubResource);
 
   // TODO(crbug.com/862854): Support changes to
@@ -527,6 +529,8 @@
   }
 
   void Start(blink::mojom::EmbeddedWorkerStartParamsPtr params,
+             network::mojom::CrossOriginEmbedderPolicyValue
+                 cross_origin_embedder_policy,
              StatusCallback sent_start_callback) {
     DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId());
     DCHECK(instance_->context_);
@@ -555,8 +559,9 @@
     if (ServiceWorkerContext::IsServiceWorkerOnUIEnabled()) {
       SetupOnUIThread(
           instance_->embedded_worker_id(), process_manager,
-          can_use_existing_process, std::move(params), std::move(receiver_),
-          context.get(), context, base::nullopt,
+          can_use_existing_process, std::move(cross_origin_embedder_policy),
+          std::move(params), std::move(receiver_), context.get(), context,
+          base::nullopt,
           base::BindOnce(&StartTask::OnSetupCompleted,
                          weak_factory_.GetWeakPtr(), process_manager));
     } else {
@@ -564,7 +569,8 @@
           FROM_HERE,
           base::BindOnce(
               &SetupOnUIThread, instance_->embedded_worker_id(),
-              process_manager, can_use_existing_process, std::move(params),
+              process_manager, can_use_existing_process,
+              std::move(cross_origin_embedder_policy), std::move(params),
               std::move(receiver_), context.get(), context,
               base::make_optional<base::Time>(base::Time::Now()),
               base::BindOnce(&StartTask::OnSetupCompleted,
@@ -730,7 +736,9 @@
       base::BindOnce(&EmbeddedWorkerInstance::Detach, base::Unretained(this)));
   inflight_start_task_.reset(
       new StartTask(this, params->script_url, std::move(receiver), start_time));
-  inflight_start_task_->Start(std::move(params), std::move(callback));
+  inflight_start_task_->Start(std::move(params),
+                              owner_version_->cross_origin_embedder_policy(),
+                              std::move(callback));
 }
 
 void EmbeddedWorkerInstance::Stop() {
@@ -1029,6 +1037,7 @@
     RenderProcessHost* rph,
     int routing_id,
     const url::Origin& origin,
+    network::mojom::CrossOriginEmbedderPolicyValue cross_origin_embedder_policy,
     ContentBrowserClient::URLLoaderFactoryType factory_type) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   auto factory_bundle =
@@ -1056,7 +1065,12 @@
   devtools_instrumentation::WillCreateURLLoaderFactoryForServiceWorker(
       rph, routing_id, &default_factory_receiver);
 
-  // TODO(yhirano): Support COEP.
+  factory_params->client_security_state =
+      network::mojom::ClientSecurityState::New();
+  // TODO(https://crbug.com/1056122): Plumb other fields to support report only
+  // mode.
+  factory_params->client_security_state->cross_origin_embedder_policy.value =
+      std::move(cross_origin_embedder_policy);
 
   rph->CreateURLLoaderFactory(std::move(default_factory_receiver),
                               std::move(factory_params));
diff --git a/content/browser/service_worker/embedded_worker_instance.h b/content/browser/service_worker/embedded_worker_instance.h
index ece4c32..9801849 100644
--- a/content/browser/service_worker/embedded_worker_instance.h
+++ b/content/browser/service_worker/embedded_worker_instance.h
@@ -226,6 +226,8 @@
       RenderProcessHost* rph,
       int routing_id,
       const url::Origin& origin,
+      network::mojom::CrossOriginEmbedderPolicyValue
+          cross_origin_embedder_policy,
       ContentBrowserClient::URLLoaderFactoryType factory_type);
 
  private:
diff --git a/content/browser/service_worker/service_worker_context_wrapper.cc b/content/browser/service_worker/service_worker_context_wrapper.cc
index 687115c..ae253b0 100644
--- a/content/browser/service_worker/service_worker_context_wrapper.cc
+++ b/content/browser/service_worker/service_worker_context_wrapper.cc
@@ -21,6 +21,7 @@
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "content/browser/blob_storage/chrome_blob_storage_context.h"
 #include "content/browser/loader/navigation_url_loader_impl.h"
@@ -241,9 +242,8 @@
   // TODO(falken): Only block shutdown for that particular task, when someday
   // task runners support mixing task shutdown behaviors.
   scoped_refptr<base::SequencedTaskRunner> database_task_runner =
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskShutdownBehavior::BLOCK_SHUTDOWN});
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskShutdownBehavior::BLOCK_SHUTDOWN});
   std::unique_ptr<blink::PendingURLLoaderFactoryBundle>
       non_network_pending_loader_factory_bundle_for_update_check;
   if (blink::ServiceWorkerUtils::IsImportedScriptUpdateCheckEnabled()) {
diff --git a/content/browser/speech/tts_linux.cc b/content/browser/speech/tts_linux.cc
index 8bf1b751..2c6d2d0 100644
--- a/content/browser/speech/tts_linux.cc
+++ b/content/browser/speech/tts_linux.cc
@@ -15,6 +15,7 @@
 #include "base/memory/singleton.h"
 #include "base/synchronization/lock.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "content/browser/speech/tts_platform_impl.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
@@ -111,9 +112,8 @@
   if (!command_line.HasSwitch(switches::kEnableSpeechDispatcher))
     return;
 
-  base::PostTask(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&TtsPlatformImplLinux::Initialize,
                      base::Unretained(this)));
 }
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc
index 787a38a..91447ff5 100644
--- a/content/browser/storage_partition_impl.cc
+++ b/content/browser/storage_partition_impl.cc
@@ -25,6 +25,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/syslog_logging.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/sequence_local_storage_slot.h"
 #include "base/time/default_clock.h"
 #include "build/build_config.h"
@@ -1475,9 +1476,8 @@
   if (!is_in_memory_ &&
       base::FeatureList::IsEnabled(features::kConversionMeasurement)) {
     conversion_manager_ = std::make_unique<ConversionManager>(
-        path,
-        base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                         base::TaskPriority::BEST_EFFORT}));
+        path, base::ThreadPool::CreateSequencedTaskRunner(
+                  {base::MayBlock(), base::TaskPriority::BEST_EFFORT}));
   }
 
   GeneratedCodeCacheSettings settings =
diff --git a/content/browser/storage_partition_impl_map.cc b/content/browser/storage_partition_impl_map.cc
index 7b81f47..e5063b28 100644
--- a/content/browser/storage_partition_impl_map.cc
+++ b/content/browser/storage_partition_impl_map.cc
@@ -21,6 +21,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "content/browser/appcache/chrome_appcache_service.h"
@@ -319,9 +320,8 @@
 StoragePartitionImplMap::StoragePartitionImplMap(
     BrowserContext* browser_context)
     : browser_context_(browser_context),
-      file_access_runner_(
-          base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                           base::TaskPriority::BEST_EFFORT})),
+      file_access_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT})),
       resource_context_initialized_(false) {}
 
 StoragePartitionImplMap::~StoragePartitionImplMap() {
@@ -396,9 +396,8 @@
   base::FilePath domain_root = browser_context_->GetPath().Append(
       GetStoragePartitionDomainPath(partition_domain));
 
-  base::PostTask(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&BlockingObliteratePath, browser_context_->GetPath(),
                      domain_root, paths_to_keep,
                      base::ThreadTaskRunnerHandle::Get(),
diff --git a/content/browser/theme_helper_mac.h b/content/browser/theme_helper_mac.h
index 56665d5..6fcf04fb 100644
--- a/content/browser/theme_helper_mac.h
+++ b/content/browser/theme_helper_mac.h
@@ -5,6 +5,7 @@
 #ifndef CONTENT_BROWSER_THEME_HELPER_MAC_H_
 #define CONTENT_BROWSER_THEME_HELPER_MAC_H_
 
+#include "base/containers/span.h"
 #include "base/macros.h"
 #include "base/memory/read_only_shared_memory_region.h"
 #include "base/memory/writable_shared_memory_region.h"
@@ -12,6 +13,7 @@
 #include "content/public/browser/notification_registrar.h"
 #include "third_party/blink/public/common/sandbox_support/sandbox_support_mac.h"
 #include "third_party/blink/public/platform/mac/web_scrollbar_theme.h"
+#include "third_party/skia/include/core/SkColor.h"
 
 #if __OBJC__
 @class SystemThemeObserver;
@@ -39,9 +41,16 @@
   ~ThemeHelperMac() override;
 
   // Looks up the blink::MacSystemColorID corresponding to the NSColor
-  // selector and stores them in the |writable_color_map_| table.
+  // selector and stores them in the |writable_color_map_| table. Looks up
+  // colors for both light and dark appearances.
   void LoadSystemColors();
 
+  // Looks up system colors for the current appearance, either a light or
+  // dark appearance and stores them in values. The values parameter is the part
+  // of writable_color_map_ where the colors for the current appearance should
+  // be stored.
+  void LoadSystemColorsForCurrentAppearance(base::span<SkColor> values);
+
   // Overridden from NotificationObserver:
   void Observe(int type,
                const NotificationSource& source,
@@ -50,7 +59,9 @@
   // ObjC object that observes notifications from the system.
   SystemThemeObserver* theme_observer_;  // strong
 
-  // Writable and mapped array of SkColor values, indexed by MacSystemColorID.
+  // Writable and mapped array of SkColor values, indexed by MacSystemColorID
+  // for a light appearance. Colors for a dark appearance in indexed by
+  // MacSystemColorID starting at index MacSystemColorID::kCount.
   base::WritableSharedMemoryMapping writable_color_map_;
 
   // Read-only handle to the |writable_color_map_| that can be duplicated for
diff --git a/content/browser/theme_helper_mac.mm b/content/browser/theme_helper_mac.mm
index 3a35ab5..d278aaf 100644
--- a/content/browser/theme_helper_mac.mm
+++ b/content/browser/theme_helper_mac.mm
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/command_line.h"
+#include "base/containers/span.h"
 #include "base/mac/mac_util.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/strings/sys_string_conversions.h"
@@ -300,7 +301,8 @@
 ThemeHelperMac::ThemeHelperMac() {
   // Allocate a region for the SkColor value table and map it.
   auto writable_region = base::WritableSharedMemoryRegion::Create(
-      sizeof(SkColor) * blink::kMacSystemColorIDCount);
+      sizeof(SkColor) * blink::kMacSystemColorIDCount *
+      blink::kMacSystemColorSchemeCount);
   writable_color_map_ = writable_region.Map();
   // Downgrade the region to read-only after it has been mapped.
   read_only_color_map_ = base::WritableSharedMemoryRegion::ConvertToReadOnly(
@@ -321,20 +323,8 @@
   [theme_observer_ release];
 }
 
-void ThemeHelperMac::LoadSystemColors() {
-  base::span<SkColor> values = writable_color_map_.GetMemoryAsSpan<SkColor>(
-      blink::kMacSystemColorIDCount);
-  // Ensure light mode appearance in web content even if the topchrome is in
-  // dark mode.
-  // TODO(lgrey): Add a second map for content dark mode for the
-  // `prefers-color-scheme` media query: https://crbug.com/889087.
-  NSAppearance* savedAppearance;
-  if (@available(macOS 10.14, *)) {
-    savedAppearance = [NSAppearance currentAppearance];
-    [NSAppearance
-        setCurrentAppearance:[NSAppearance
-                                 appearanceNamed:NSAppearanceNameAqua]];
-  }
+void ThemeHelperMac::LoadSystemColorsForCurrentAppearance(
+    base::span<SkColor> values) {
   for (size_t i = 0; i < blink::kMacSystemColorIDCount; ++i) {
     blink::MacSystemColorID color_id = static_cast<blink::MacSystemColorID>(i);
     switch (color_id) {
@@ -431,9 +421,39 @@
         break;
     }
   }
+}
+
+void ThemeHelperMac::LoadSystemColors() {
+  static_assert(blink::kMacSystemColorSchemeCount == 2,
+                "Light and dark color scheme system colors loaded.");
+  base::span<SkColor> values = writable_color_map_.GetMemoryAsSpan<SkColor>(
+      blink::kMacSystemColorIDCount * blink::kMacSystemColorSchemeCount);
+
+  NSAppearance* savedAppearance;
   if (@available(macOS 10.14, *)) {
-    [NSAppearance setCurrentAppearance:savedAppearance];
+    savedAppearance = [NSAppearance currentAppearance];
+    // Ensure light mode appearance in web content even if the topchrome is in
+    // dark mode.
+    [NSAppearance
+        setCurrentAppearance:[NSAppearance
+                                 appearanceNamed:NSAppearanceNameAqua]];
   }
+
+  LoadSystemColorsForCurrentAppearance(
+      values.subspan(0, static_cast<size_t>(blink::MacSystemColorID::kCount)));
+
+  if (@available(macOS 10.14, *)) {
+    [NSAppearance
+        setCurrentAppearance:[NSAppearance
+                                 appearanceNamed:NSAppearanceNameDarkAqua]];
+  }
+
+  LoadSystemColorsForCurrentAppearance(
+      values.subspan(static_cast<size_t>(blink::MacSystemColorID::kCount),
+                     static_cast<size_t>(blink::MacSystemColorID::kCount)));
+
+  if (@available(macOS 10.14, *))
+    [NSAppearance setCurrentAppearance:savedAppearance];
 }
 
 void ThemeHelperMac::Observe(int type,
diff --git a/content/browser/tracing/cast_tracing_agent.cc b/content/browser/tracing/cast_tracing_agent.cc
index d441017..67e1e56 100644
--- a/content/browser/tracing/cast_tracing_agent.cc
+++ b/content/browser/tracing/cast_tracing_agent.cc
@@ -14,6 +14,7 @@
 #include "base/sequence_checker.h"
 #include "base/strings/string_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/trace_event/trace_config.h"
 #include "chromecast/tracing/system_tracer.h"
 #include "chromecast/tracing/system_tracing_common.h"
@@ -202,9 +203,8 @@
 
   CastDataSource()
       : DataSourceBase(tracing::mojom::kSystemTraceDataSourceName),
-        worker_task_runner_(base::CreateSequencedTaskRunner(
-            {base::ThreadPool(), base::MayBlock(),
-             base::TaskPriority::BEST_EFFORT,
+        worker_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+            {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
              base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})) {
     DETACH_FROM_SEQUENCE(perfetto_sequence_checker_);
   }
diff --git a/content/browser/tracing/cros_tracing_agent.cc b/content/browser/tracing/cros_tracing_agent.cc
index 40751bd2..1f3cd1d8 100644
--- a/content/browser/tracing/cros_tracing_agent.cc
+++ b/content/browser/tracing/cros_tracing_agent.cc
@@ -14,6 +14,7 @@
 #include "base/no_destructor.h"
 #include "base/sequence_checker.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/trace_event/trace_config.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/debug_daemon/debug_daemon_client.h"
@@ -51,8 +52,8 @@
       return;
     }
     debug_daemon_->SetStopAgentTracingTaskRunner(
-        base::CreateSequencedTaskRunner(
-            {base::ThreadPool(), base::MayBlock(),
+        base::ThreadPool::CreateSequencedTaskRunner(
+            {base::MayBlock(),
              base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}));
     debug_daemon_->StartAgentTracing(
         trace_config,
diff --git a/content/browser/tracing/perfetto_file_tracer.cc b/content/browser/tracing/perfetto_file_tracer.cc
index 36ecf12..4efdf2b 100644
--- a/content/browser/tracing/perfetto_file_tracer.cc
+++ b/content/browser/tracing/perfetto_file_tracer.cc
@@ -11,6 +11,7 @@
 #include "base/files/file_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "build/build_config.h"
 #include "components/tracing/common/trace_startup_config.h"
@@ -93,9 +94,8 @@
 }
 
 PerfettoFileTracer::PerfettoFileTracer()
-    : background_task_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::BEST_EFFORT,
+    : background_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::BLOCK_SHUTDOWN})),
       background_drainer_(background_task_runner_) {
   GetTracingService().BindConsumerHost(
@@ -132,9 +132,8 @@
 void PerfettoFileTracer::SetBackgroundTaskPriorityForTesting(
     base::TaskPriority priority) {
   background_drainer_.Reset();
-  background_task_runner_ = base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), priority,
-       base::TaskShutdownBehavior::BLOCK_SHUTDOWN});
+  background_task_runner_ = base::ThreadPool::CreateSequencedTaskRunner(
+      {base::MayBlock(), priority, base::TaskShutdownBehavior::BLOCK_SHUTDOWN});
   background_drainer_ =
       base::SequenceBound<BackgroundDrainer>(background_task_runner_);
 }
diff --git a/content/browser/tracing/tracing_controller_impl_data_endpoint.cc b/content/browser/tracing/tracing_controller_impl_data_endpoint.cc
index 27a7352..98c312d 100644
--- a/content/browser/tracing/tracing_controller_impl_data_endpoint.cc
+++ b/content/browser/tracing/tracing_controller_impl_data_endpoint.cc
@@ -11,6 +11,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/strings/pattern.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "content/browser/tracing/tracing_controller_impl.h"
 #include "content/public/browser/browser_task_traits.h"
@@ -58,8 +59,8 @@
                                  base::TaskPriority write_priority)
       : file_path_(trace_file_path),
         completion_callback_(std::move(callback)),
-        may_block_task_runner_(base::CreateSequencedTaskRunner(
-            {base::ThreadPool(), base::MayBlock(), write_priority})) {}
+        may_block_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+            {base::MayBlock(), write_priority})) {}
 
   void ReceiveTraceChunk(std::unique_ptr<std::string> chunk) override {
     may_block_task_runner_->PostTask(
@@ -125,10 +126,10 @@
                               bool compress_with_background_priority)
       : endpoint_(endpoint),
         already_tried_open_(false),
-        background_task_runner_(base::CreateSequencedTaskRunner(
-            {base::ThreadPool(), compress_with_background_priority
-                                     ? base::TaskPriority::BEST_EFFORT
-                                     : base::TaskPriority::USER_VISIBLE})) {}
+        background_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+            {compress_with_background_priority
+                 ? base::TaskPriority::BEST_EFFORT
+                 : base::TaskPriority::USER_VISIBLE})) {}
 
   void ReceiveTraceChunk(std::unique_ptr<std::string> chunk) override {
     background_task_runner_->PostTask(
diff --git a/content/browser/tracing/tracing_service_controller.cc b/content/browser/tracing/tracing_service_controller.cc
index 46ad25d..8ce3ade 100644
--- a/content/browser/tracing/tracing_service_controller.cc
+++ b/content/browser/tracing/tracing_service_controller.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
@@ -78,9 +79,8 @@
   if (!service_) {
     auto receiver = service_.BindNewPipeAndPassReceiver();
     if (base::FeatureList::IsEnabled(features::kTracingServiceInProcess)) {
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
            base::WithBaseSyncPrimitives(), base::TaskPriority::USER_BLOCKING})
           ->PostTask(FROM_HERE, base::BindOnce(&BindNewInProcessInstance,
                                                std::move(receiver)));
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc
index a3dc3ee..2079504 100644
--- a/content/browser/web_contents/web_contents_view_aura.cc
+++ b/content/browser/web_contents/web_contents_view_aura.cc
@@ -19,6 +19,7 @@
 #include "base/message_loop/message_loop_current.h"
 #include "base/no_destructor.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "components/viz/common/features.h"
 #include "content/browser/browser_plugin/browser_plugin_guest.h"
@@ -520,9 +521,9 @@
 
 void WebContentsViewAura::AsyncDropTempFileDeleter::DeleteFileAsync(
     const base::FilePath& path) const {
-  base::PostTask(
+  base::ThreadPool::PostTask(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
        base::TaskShutdownBehavior::BLOCK_SHUTDOWN},
       base::BindOnce(base::IgnoreResult(&base::DeleteFile), std::move(path),
                      false));
diff --git a/content/browser/web_contents/web_contents_view_mac.mm b/content/browser/web_contents/web_contents_view_mac.mm
index fdc4d636..e2c6cb6 100644
--- a/content/browser/web_contents/web_contents_view_mac.mm
+++ b/content/browser/web_contents/web_contents_view_mac.mm
@@ -12,6 +12,7 @@
 #import "base/mac/scoped_sending_event.h"
 #include "base/message_loop/message_loop_current.h"
 #import "base/message_loop/message_pump_mac.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
 #include "components/remote_cocoa/browser/ns_view_ids.h"
 #include "components/remote_cocoa/common/application.mojom.h"
@@ -547,10 +548,8 @@
         new PromiseFileFinalizer(std::move(drag_file_downloader)));
   } else {
     // The writer will take care of closing and deletion.
-    base::PostTask(
-        FROM_HERE,
-        {base::ThreadPool(), base::TaskPriority::USER_VISIBLE,
-         base::MayBlock()},
+    base::ThreadPool::PostTask(
+        FROM_HERE, {base::TaskPriority::USER_VISIBLE, base::MayBlock()},
         base::BindOnce(&PromiseWriterHelper, drop_data, std::move(file)));
   }
 
diff --git a/content/browser/web_package/web_bundle_blob_data_source_unittest.cc b/content/browser/web_package/web_bundle_blob_data_source_unittest.cc
index 17a76527..c63be59 100644
--- a/content/browser/web_package/web_bundle_blob_data_source_unittest.cc
+++ b/content/browser/web_package/web_bundle_blob_data_source_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/run_loop.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "content/public/test/browser_task_environment.h"
 #include "mojo/public/cpp/system/data_pipe_utils.h"
 #include "storage/browser/blob/blob_storage_context.h"
@@ -32,7 +33,7 @@
     ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
     context_ = std::make_unique<storage::BlobStorageContext>(
         data_dir_.GetPath(), data_dir_.GetPath(),
-        base::CreateTaskRunner({base::ThreadPool(), base::MayBlock()}));
+        base::ThreadPool::CreateTaskRunner({base::MayBlock()}));
     storage::BlobStorageLimits limits;
     limits.max_ipc_memory_size = kTestBlobStorageMaxBytesDataItemSize;
     limits.max_shared_memory_size = kTestBlobStorageMaxBytesDataItemSize;
diff --git a/content/browser/web_package/web_bundle_reader.cc b/content/browser/web_package/web_bundle_reader.cc
index 9546a63f..4f6f582 100644
--- a/content/browser/web_package/web_bundle_reader.cc
+++ b/content/browser/web_package/web_bundle_reader.cc
@@ -10,6 +10,7 @@
 #include "base/numerics/safe_math.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "content/browser/web_package/web_bundle_blob_data_source.h"
 #include "content/browser/web_package/web_bundle_source.h"
 #include "content/public/browser/browser_task_traits.h"
@@ -25,8 +26,8 @@
 
 WebBundleReader::SharedFile::SharedFile(
     std::unique_ptr<WebBundleSource> source) {
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE, {base::ThreadPool(), base::MayBlock()},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock()},
       base::BindOnce(
           [](std::unique_ptr<WebBundleSource> source)
               -> std::unique_ptr<base::File> { return source->OpenFile(); },
@@ -55,9 +56,8 @@
 WebBundleReader::SharedFile::~SharedFile() {
   // Move the last reference to |file_| that leads an internal blocking call
   // that is not permitted here.
-  base::PostTask(
-      FROM_HERE,
-      {base::ThreadPool(), base::TaskPriority::BEST_EFFORT, base::MayBlock()},
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::TaskPriority::BEST_EFFORT, base::MayBlock()},
       base::BindOnce([](std::unique_ptr<base::File> file) {},
                      std::move(file_)));
 }
@@ -68,8 +68,8 @@
   if (duplicate_callback_.is_null())
     return;
 
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE, {base::ThreadPool(), base::MayBlock()},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock()},
       base::BindOnce(
           [](base::File* file) -> base::File { return file->Duplicate(); },
           file_.get()),
diff --git a/content/browser/webui/web_ui_url_loader_factory.cc b/content/browser/webui/web_ui_url_loader_factory.cc
index 1f165c3..e53d382 100644
--- a/content/browser/webui/web_ui_url_loader_factory.cc
+++ b/content/browser/webui/web_ui_url_loader_factory.cc
@@ -14,6 +14,7 @@
 #include "base/single_thread_task_runner.h"
 #include "base/strings/string_piece.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "content/browser/bad_message.h"
 #include "content/browser/blob_storage/blob_internals_url_loader.h"
 #include "content/browser/blob_storage/chrome_blob_storage_context.h"
@@ -137,8 +138,8 @@
   // Since the bytes are from the memory mapped resource file, copying the
   // data can lead to disk access. Needs to be posted to a SequencedTaskRunner
   // as Mojo requires a SequencedTaskRunnerHandle in scope.
-  base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::TaskPriority::USER_BLOCKING, base::MayBlock(),
+  base::ThreadPool::CreateSequencedTaskRunner(
+      {base::TaskPriority::USER_BLOCKING, base::MayBlock(),
        base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN})
       ->PostTask(FROM_HERE, base::BindOnce(ReadData, std::move(headers),
                                            replacements, replace_in_js, source,
diff --git a/content/child/child_process_sandbox_support_impl_mac.cc b/content/child/child_process_sandbox_support_impl_mac.cc
index 635e053..c669755 100644
--- a/content/child/child_process_sandbox_support_impl_mac.cc
+++ b/content/child/child_process_sandbox_support_impl_mac.cc
@@ -61,14 +61,23 @@
       out_descriptor);
 }
 
-SkColor WebSandboxSupportMac::GetSystemColor(blink::MacSystemColorID color_id) {
+SkColor WebSandboxSupportMac::GetSystemColor(
+    blink::MacSystemColorID color_id,
+    blink::WebColorScheme color_scheme) {
   if (!color_map_.IsValid()) {
     DLOG(ERROR) << "GetSystemColor does not have a valid color_map_";
     return SK_ColorMAGENTA;
   }
-  base::span<const SkColor> color_map =
-      color_map_.GetMemoryAsSpan<SkColor>(blink::kMacSystemColorIDCount);
-  return color_map[static_cast<size_t>(color_id)];
+  static_assert(blink::kMacSystemColorSchemeCount == 2,
+                "Light and dark color scheme system colors loaded.");
+  base::span<const SkColor> color_map = color_map_.GetMemoryAsSpan<SkColor>(
+      blink::kMacSystemColorIDCount * blink::kMacSystemColorSchemeCount);
+  base::span<const SkColor> color_map_for_scheme =
+      color_map.subspan(color_scheme == blink::WebColorScheme::kDark
+                            ? blink::kMacSystemColorIDCount
+                            : 0,
+                        blink::kMacSystemColorIDCount);
+  return color_map_for_scheme[static_cast<size_t>(color_id)];
 }
 
 void WebSandboxSupportMac::OnGotSystemColors(
diff --git a/content/child/child_process_sandbox_support_impl_mac.h b/content/child/child_process_sandbox_support_impl_mac.h
index ebd68cff..b12e623 100644
--- a/content/child/child_process_sandbox_support_impl_mac.h
+++ b/content/child/child_process_sandbox_support_impl_mac.h
@@ -28,7 +28,8 @@
   bool LoadFont(CTFontRef font,
                 base::ScopedCFTypeRef<CTFontDescriptorRef>* out_descriptor,
                 uint32_t* font_id) override;
-  SkColor GetSystemColor(blink::MacSystemColorID color_id) override;
+  SkColor GetSystemColor(blink::MacSystemColorID color_id,
+                         blink::WebColorScheme color_scheme) override;
 
  private:
   void OnGotSystemColors(base::ReadOnlySharedMemoryRegion region);
diff --git a/content/child/dwrite_font_proxy/dwrite_font_proxy_win.cc b/content/child/dwrite_font_proxy/dwrite_font_proxy_win.cc
index 65654eff..f569898 100644
--- a/content/child/dwrite_font_proxy/dwrite_font_proxy_win.cc
+++ b/content/child/dwrite_font_proxy/dwrite_font_proxy_win.cc
@@ -17,6 +17,7 @@
 #include "base/no_destructor.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/trace_event/trace_event.h"
 #include "content/child/dwrite_font_proxy/dwrite_localized_strings_win.h"
 #include "content/public/child/child_thread.h"
@@ -360,9 +361,8 @@
 void DWriteFontCollectionProxy::SetProxy(
     mojo::PendingRemote<blink::mojom::DWriteFontProxy> proxy) {
   font_proxy_ = blink::mojom::ThreadSafeDWriteFontProxyPtr::Create(
-      std::move(proxy),
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::WithBaseSyncPrimitives()}));
+      std::move(proxy), base::ThreadPool::CreateSequencedTaskRunner(
+                            {base::WithBaseSyncPrimitives()}));
 }
 
 blink::mojom::DWriteFontProxy& DWriteFontCollectionProxy::GetFontProxy() {
diff --git a/content/gpu/gpu_service_factory.cc b/content/gpu/gpu_service_factory.cc
index 5bba3cab..21d9d6d 100644
--- a/content/gpu/gpu_service_factory.cc
+++ b/content/gpu/gpu_service_factory.cc
@@ -8,6 +8,7 @@
 
 #include "base/no_destructor.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "media/media_buildflags.h"
@@ -61,8 +62,8 @@
   task_runner = task_runner_;
 #else
   // TODO(crbug.com/786169): Check whether this needs to be single threaded.
-  task_runner = base::CreateSingleThreadTaskRunner(
-      {base::ThreadPool(), base::TaskPriority::USER_BLOCKING});
+  task_runner = base::ThreadPool::CreateSingleThreadTaskRunner(
+      {base::TaskPriority::USER_BLOCKING});
 #endif  // defined(OS_WIN)
 
   using FactoryCallback =
diff --git a/content/public/test/test_utils_unittest.cc b/content/public/test/test_utils_unittest.cc
index 22130cf..f5c4f01c 100644
--- a/content/public/test/test_utils_unittest.cc
+++ b/content/public/test/test_utils_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/run_loop.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/task_environment.h"
 #include "base/threading/platform_thread.h"
@@ -19,8 +20,8 @@
   base::test::TaskEnvironment task_environment;
 
   bool thread_pool_task_completed = false;
-  base::PostTask(
-      FROM_HERE, {base::ThreadPool()}, base::BindLambdaForTesting([&]() {
+  base::ThreadPool::PostTask(
+      FROM_HERE, {}, base::BindLambdaForTesting([&]() {
         base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100));
         thread_pool_task_completed = true;
       }));
diff --git a/content/renderer/browser_exposed_renderer_interfaces.cc b/content/renderer/browser_exposed_renderer_interfaces.cc
index 72dce52..5603238 100644
--- a/content/renderer/browser_exposed_renderer_interfaces.cc
+++ b/content/renderer/browser_exposed_renderer_interfaces.cc
@@ -14,6 +14,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner.h"
 #include "base/time/time.h"
 #include "content/common/frame.mojom.h"
@@ -195,9 +196,8 @@
 
   if (base::FeatureList::IsEnabled(
           blink::features::kOffMainThreadServiceWorkerStartup)) {
-    auto task_runner = base::CreateSingleThreadTaskRunner(
-        {base::ThreadPool(), base::MayBlock(),
-         base::TaskPriority::USER_BLOCKING,
+    auto task_runner = base::ThreadPool::CreateSingleThreadTaskRunner(
+        {base::MayBlock(), base::TaskPriority::USER_BLOCKING,
          base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
     binders->Add(
         base::BindRepeating(&EmbeddedWorkerInstanceClientImpl::CreateForRequest,
diff --git a/content/renderer/compositor/layer_tree_view.cc b/content/renderer/compositor/layer_tree_view.cc
index c519647..117bf60 100644
--- a/content/renderer/compositor/layer_tree_view.cc
+++ b/content/renderer/compositor/layer_tree_view.cc
@@ -17,6 +17,7 @@
 #include "base/single_thread_task_runner.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/time/time.h"
 #include "base/values.h"
@@ -85,10 +86,10 @@
     // The image worker thread needs to allow waiting since it makes discardable
     // shared memory allocations which need to make synchronous calls to the
     // IO thread.
-    params.image_worker_task_runner = base::CreateSequencedTaskRunner(
-        {base::ThreadPool(), base::WithBaseSyncPrimitives(),
-         base::TaskPriority::USER_VISIBLE,
-         base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN});
+    params.image_worker_task_runner =
+        base::ThreadPool::CreateSequencedTaskRunner(
+            {base::WithBaseSyncPrimitives(), base::TaskPriority::USER_VISIBLE,
+             base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN});
   }
   if (!is_threaded) {
     // Single-threaded web tests, and unit tests.
diff --git a/content/renderer/loader/code_cache_loader_impl.cc b/content/renderer/loader/code_cache_loader_impl.cc
index d60c501..35b3058 100644
--- a/content/renderer/loader/code_cache_loader_impl.cc
+++ b/content/renderer/loader/code_cache_loader_impl.cc
@@ -5,6 +5,7 @@
 #include "content/renderer/loader/code_cache_loader_impl.h"
 #include "base/bind.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "mojo/public/cpp/base/big_buffer.h"
 #include "third_party/blink/public/platform/platform.h"
 
@@ -26,7 +27,7 @@
       base::WaitableEvent::ResetPolicy::AUTOMATIC,
       base::WaitableEvent::InitialState::NOT_SIGNALED);
   scoped_refptr<base::SingleThreadTaskRunner> task_runner =
-      base::CreateSingleThreadTaskRunner({base::ThreadPool()});
+      base::ThreadPool::CreateSingleThreadTaskRunner({});
 
   // Also watch for terminate requests from the main thread when running on
   // worker threads.
diff --git a/content/renderer/loader/resource_dispatcher.cc b/content/renderer/loader/resource_dispatcher.cc
index 3c7ee3f..1e145c72 100644
--- a/content/renderer/loader/resource_dispatcher.cc
+++ b/content/renderer/loader/resource_dispatcher.cc
@@ -18,6 +18,7 @@
 #include "base/strings/string_util.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "content/common/inter_process_time_ticks_converter.h"
@@ -449,7 +450,7 @@
   // pointers to |sync_load_response| and |event| as this stack frame will
   // survive until the request is complete.
   scoped_refptr<base::SingleThreadTaskRunner> task_runner =
-      base::CreateSingleThreadTaskRunner({base::ThreadPool()});
+      base::ThreadPool::CreateSingleThreadTaskRunner({});
   task_runner->PostTask(
       FROM_HERE,
       base::BindOnce(&SyncLoadContext::StartAsyncWithWaitableEvent,
diff --git a/content/renderer/loader/web_worker_fetch_context_impl.cc b/content/renderer/loader/web_worker_fetch_context_impl.cc
index 8790edd..08ed1ee6 100644
--- a/content/renderer/loader/web_worker_fetch_context_impl.cc
+++ b/content/renderer/loader/web_worker_fetch_context_impl.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/single_thread_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "content/child/child_thread_impl.h"
 #include "content/child/thread_safe_sender.h"
@@ -655,9 +656,8 @@
       service_worker_container_host.InitWithNewPipeAndPassReceiver());
   // To avoid potential dead-lock while synchronous loading, create the
   // SubresourceLoaderFactory on a background thread.
-  auto task_runner = base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::MayBlock(),
-       base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
+  auto task_runner = base::ThreadPool::CreateSequencedTaskRunner(
+      {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
   task_runner->PostTask(
       FROM_HERE,
       base::BindOnce(
diff --git a/content/renderer/media/audio/audio_device_factory.cc b/content/renderer/media/audio/audio_device_factory.cc
index 11ddcb5..be414804 100644
--- a/content/renderer/media/audio/audio_device_factory.cc
+++ b/content/renderer/media/audio/audio_device_factory.cc
@@ -11,6 +11,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/no_destructor.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/platform_thread.h"
 #include "build/build_config.h"
 #include "content/common/content_constants_internal.h"
@@ -195,8 +196,8 @@
 
   // There's one process wide instance that lives on the render thread.
   static base::NoDestructor<AudioRendererSinkCacheImpl> cache(
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::TaskPriority::BEST_EFFORT,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}),
       base::BindRepeating(&AudioDeviceFactory::NewAudioRendererSink,
                           blink::WebAudioDeviceSourceType::kNone),
diff --git a/content/renderer/mhtml_handle_writer.cc b/content/renderer/mhtml_handle_writer.cc
index 8a0cfc50..56f303b 100644
--- a/content/renderer/mhtml_handle_writer.cc
+++ b/content/renderer/mhtml_handle_writer.cc
@@ -7,6 +7,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "content/common/download/mhtml_file_writer.mojom.h"
 #include "content/public/renderer/render_thread.h"
 #include "third_party/blink/public/platform/web_thread_safe_data.h"
@@ -96,9 +97,8 @@
   mhtml_contents_ = std::move(mhtml_contents);
 
   scoped_refptr<base::SequencedTaskRunner> task_runner =
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
 
   task_runner->PostTask(
       FROM_HERE, base::BindOnce(&MHTMLProducerHandleWriter::BeginWatchingHandle,
@@ -174,4 +174,4 @@
   // Buffer is full, return to automatically re-arm the watcher.
 }
 
-}  // namespace content
\ No newline at end of file
+}  // namespace content
diff --git a/content/renderer/pepper/host_globals.cc b/content/renderer/pepper/host_globals.cc
index 1a4558a..dd3e6db 100644
--- a/content/renderer/pepper/host_globals.cc
+++ b/content/renderer/pepper/host_globals.cc
@@ -11,6 +11,7 @@
 #include "base/rand_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner.h"
 #include "content/public/common/content_switches.h"
 #include "content/renderer/pepper/pepper_plugin_instance_impl.h"
@@ -189,8 +190,7 @@
 
 base::TaskRunner* HostGlobals::GetFileTaskRunner() {
   if (!file_task_runner_)
-    file_task_runner_ =
-        base::CreateTaskRunner({base::ThreadPool(), base::MayBlock()});
+    file_task_runner_ = base::ThreadPool::CreateTaskRunner({base::MayBlock()});
   return file_task_runner_.get();
 }
 
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 605216c..faa3a77c 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -42,6 +42,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
@@ -751,17 +752,18 @@
   void WriteContents(std::vector<WebThreadSafeData> mhtml_contents) {
     // Using base::Unretained is safe, as calls to WriteContents() always
     // deletes |handle| upon Finish().
-    base::PostTask(
-        FROM_HERE, {base::ThreadPool(), base::MayBlock()},
+    base::ThreadPool::PostTask(
+        FROM_HERE, {base::MayBlock()},
         base::BindOnce(&MHTMLHandleWriter::WriteContents,
                        base::Unretained(handle_), std::move(mhtml_contents)));
   }
 
   // Within the context of the delegate, only for premature write finish.
   void Finish(mojom::MhtmlSaveStatus save_status) {
-    base::PostTask(FROM_HERE, {base::ThreadPool(), base::MayBlock()},
-                   base::BindOnce(&MHTMLHandleWriter::Finish,
-                                  base::Unretained(handle_), save_status));
+    base::ThreadPool::PostTask(
+        FROM_HERE, {base::MayBlock()},
+        base::BindOnce(&MHTMLHandleWriter::Finish, base::Unretained(handle_),
+                       save_status));
   }
 
  private:
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index b2dccedd..9aa93fb 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -35,6 +35,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/simple_thread.h"
 #include "base/threading/thread_local.h"
 #include "base/threading/thread_restrictions.h"
@@ -966,9 +967,9 @@
     // be the same thread on which the rendering context was initialized. This
     // is why this must be a SingleThreadTaskRunner instead of a
     // SequencedTaskRunner.
-    video_frame_compositor_task_runner_ = base::CreateSingleThreadTaskRunner(
-        {base::ThreadPool(), base::MayBlock(),
-         base::TaskPriority::USER_VISIBLE});
+    video_frame_compositor_task_runner_ =
+        base::ThreadPool::CreateSingleThreadTaskRunner(
+            {base::MayBlock(), base::TaskPriority::USER_VISIBLE});
   }
 
   return video_frame_compositor_task_runner_;
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc
index 84b0b31..c7bfe84 100644
--- a/content/renderer/renderer_blink_platform_impl.cc
+++ b/content/renderer/renderer_blink_platform_impl.cc
@@ -25,6 +25,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
@@ -917,8 +918,8 @@
   if (!code_cache_host_) {
     code_cache_host_ = mojo::SharedRemote<blink::mojom::CodeCacheHost>(
         std::move(code_cache_host_remote_),
-        base::CreateSequencedTaskRunner(
-            {base::ThreadPool(), base::WithBaseSyncPrimitives()}));
+        base::ThreadPool::CreateSequencedTaskRunner(
+            {base::WithBaseSyncPrimitives()}));
   }
   return *code_cache_host_;
 }
diff --git a/content/renderer/service_worker/service_worker_provider_context.cc b/content/renderer/service_worker/service_worker_provider_context.cc
index 43c3f10..c2d7a63 100644
--- a/content/renderer/service_worker/service_worker_provider_context.cc
+++ b/content/renderer/service_worker/service_worker_provider_context.cc
@@ -14,6 +14,7 @@
 #include "base/sequenced_task_runner_helpers.h"
 #include "base/stl_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "content/public/common/service_names.mojom.h"
@@ -130,9 +131,8 @@
 
     // Create a SubresourceLoaderFactory on a background thread to avoid
     // extra contention on the main thread.
-    auto task_runner = base::CreateSequencedTaskRunner(
-        {base::ThreadPool(), base::MayBlock(),
-         base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
+    auto task_runner = base::ThreadPool::CreateSequencedTaskRunner(
+        {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
     task_runner->PostTask(
         FROM_HERE,
         base::BindOnce(
diff --git a/crypto/nss_util_chromeos.cc b/crypto/nss_util_chromeos.cc
index 4a8a8521..d6ddeb7 100644
--- a/crypto/nss_util_chromeos.cc
+++ b/crypto/nss_util_chromeos.cc
@@ -29,6 +29,7 @@
 #include "base/strings/string_piece.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "base/threading/thread_checker.h"
 #include "base/threading/thread_restrictions.h"
@@ -206,10 +207,9 @@
     std::unique_ptr<TPMModuleAndSlot> tpm_args(
         new TPMModuleAndSlot(chaps_module_));
     TPMModuleAndSlot* tpm_args_ptr = tpm_args.get();
-    base::PostTaskAndReply(
+    base::ThreadPool::PostTaskAndReply(
         FROM_HERE,
-        {base::ThreadPool(), base::MayBlock(),
-         base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+        {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
         base::BindOnce(&ChromeOSTokenManager::InitializeTPMTokenInThreadPool,
                        system_slot_id, tpm_args_ptr),
         base::BindOnce(
@@ -360,10 +360,9 @@
     std::unique_ptr<TPMModuleAndSlot> tpm_args(
         new TPMModuleAndSlot(chaps_module_));
     TPMModuleAndSlot* tpm_args_ptr = tpm_args.get();
-    base::PostTaskAndReply(
+    base::ThreadPool::PostTaskAndReply(
         FROM_HERE,
-        {base::ThreadPool(), base::MayBlock(),
-         base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+        {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
         base::BindOnce(&ChromeOSTokenManager::InitializeTPMTokenInThreadPool,
                        slot_id, tpm_args_ptr),
         base::BindOnce(&ChromeOSTokenManager::OnInitializedTPMForChromeOSUser,
diff --git a/device/bluetooth/bluetooth_adapter_winrt.cc b/device/bluetooth/bluetooth_adapter_winrt.cc
index 0d50c4f..182ce50 100644
--- a/device/bluetooth/bluetooth_adapter_winrt.cc
+++ b/device/bluetooth/bluetooth_adapter_winrt.cc
@@ -30,6 +30,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_thread_priority.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/win/core_winrt_util.h"
@@ -665,9 +666,8 @@
 
   // Some of the initialization work requires loading libraries and should not
   // be run on the browser main thread.
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&BluetoothAdapterWinrt::PerformSlowInitTasks),
       base::BindOnce(&BluetoothAdapterWinrt::CompleteInitAgile,
                      weak_ptr_factory_.GetWeakPtr(), std::move(init_cb)));
diff --git a/device/bluetooth/bluetooth_low_energy_device_watcher_mac.h b/device/bluetooth/bluetooth_low_energy_device_watcher_mac.h
index 94924ae..23cdbd0 100644
--- a/device/bluetooth/bluetooth_low_energy_device_watcher_mac.h
+++ b/device/bluetooth/bluetooth_low_energy_device_watcher_mac.h
@@ -18,6 +18,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/task/cancelable_task_tracker.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "device/bluetooth/bluetooth_export.h"
 
 @class NSDictionary;
@@ -76,9 +77,8 @@
 
   // Thread runner to watch, read, and parse bluetooth property list file.
   scoped_refptr<base::SequencedTaskRunner> file_thread_task_runner_ =
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::BEST_EFFORT,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN});
   scoped_refptr<base::SequencedTaskRunner> ui_thread_task_runner_;
   LowEnergyDeviceListUpdatedCallback low_energy_device_list_updated_callback_;
diff --git a/device/bluetooth/bluetooth_task_manager_win.cc b/device/bluetooth/bluetooth_task_manager_win.cc
index 91b9f72..839dd7fe 100644
--- a/device/bluetooth/bluetooth_task_manager_win.cc
+++ b/device/bluetooth/bluetooth_task_manager_win.cc
@@ -18,6 +18,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "device/bluetooth/bluetooth_classic_win.h"
 #include "device/bluetooth/bluetooth_device.h"
 #include "device/bluetooth/bluetooth_init_win.h"
@@ -268,8 +269,8 @@
 
 void BluetoothTaskManagerWin::Initialize() {
   DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
-  InitializeWithBluetoothTaskRunner(base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+  InitializeWithBluetoothTaskRunner(base::ThreadPool::CreateSequencedTaskRunner(
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
        base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}));
 }
 
diff --git a/device/bluetooth/dbus/fake_bluetooth_device_client.cc b/device/bluetooth/dbus/fake_bluetooth_device_client.cc
index eed08d1a..7c62bf8b 100644
--- a/device/bluetooth/dbus/fake_bluetooth_device_client.cc
+++ b/device/bluetooth/dbus/fake_bluetooth_device_client.cc
@@ -26,6 +26,7 @@
 #include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "device/bluetooth/bluez/bluetooth_service_attribute_value_bluez.h"
@@ -533,10 +534,10 @@
     return;
   }
 
-  base::PostTask(FROM_HERE,
-                 {base::ThreadPool(), base::MayBlock(),
-                  base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-                 base::BindOnce(&SimulatedProfileSocket, fds[0]));
+  base::ThreadPool::PostTask(
+      FROM_HERE,
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      base::BindOnce(&SimulatedProfileSocket, fds[0]));
 
   base::ScopedFD fd(fds[1]);
 
diff --git a/device/fido/win/authenticator.cc b/device/fido/win/authenticator.cc
index 88f8804..40eae96 100644
--- a/device/fido/win/authenticator.cc
+++ b/device/fido/win/authenticator.cc
@@ -17,6 +17,7 @@
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "device/fido/authenticator_supported_options.h"
 #include "device/fido/ctap_get_assertion_request.h"
 #include "device/fido/ctap_make_credential_request.h"
@@ -65,9 +66,8 @@
   }
   is_pending_ = true;
 
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::TaskPriority::USER_BLOCKING, base::MayBlock()},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::TaskPriority::USER_BLOCKING, base::MayBlock()},
       base::BindOnce(&AuthenticatorMakeCredentialBlocking, win_api_,
                      current_window_, cancellation_id_, std::move(request)),
       base::BindOnce(&WinWebAuthnApiAuthenticator::MakeCredentialDone,
@@ -108,9 +108,8 @@
 
   is_pending_ = true;
 
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::TaskPriority::USER_BLOCKING, base::MayBlock()},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::TaskPriority::USER_BLOCKING, base::MayBlock()},
       base::BindOnce(&AuthenticatorGetAssertionBlocking, win_api_,
                      current_window_, cancellation_id_, std::move(request)),
       base::BindOnce(&WinWebAuthnApiAuthenticator::GetAssertionDone,
diff --git a/docs/testing/writing_js_unit_tests.md b/docs/testing/writing_js_unit_tests.md
index 522f754..68e5346 100644
--- a/docs/testing/writing_js_unit_tests.md
+++ b/docs/testing/writing_js_unit_tests.md
@@ -366,7 +366,7 @@
 [oobe_webui_browsertest.js](https://cs.chromium.org/chromium/src/chrome/test/data/chromeos/oobe_webui_browsertest.js) -
 makes the browser fullscreen before running the JS test.
 
-[saml_password_attributes_test.unitjs](https://cs.chromium.org/chromium/src/chrome/browser/resources/chromeos/login/saml_password_attributes_test.unitjs) -
+[saml_password_attributes_test.unitjs](https://cs.chromium.org/chromium/src/chrome/browser/resources/gaia_auth_host/saml_password_attributes_test.unitjs) -
 loads an XML file into a JS global variable before running the JS test.
 
 Another thing that will make your life a little bit easier is being able to
diff --git a/extensions/browser/api/execute_code_function.cc b/extensions/browser/api/execute_code_function.cc
index fbbc41bf..8edb9d9 100644
--- a/extensions/browser/api/execute_code_function.cc
+++ b/extensions/browser/api/execute_code_function.cc
@@ -9,6 +9,7 @@
 
 #include "base/bind.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "extensions/browser/component_extension_resource_manager.h"
 #include "extensions/browser/extension_api_frame_id_map.h"
@@ -247,10 +248,9 @@
         ui::ResourceBundle::GetSharedInstance().LoadDataResourceString(
             resource_id));
 
-    base::PostTaskAndReplyWithResult(
+    base::ThreadPool::PostTaskAndReplyWithResult(
         FROM_HERE,
-        {base::ThreadPool(), base::MayBlock(),
-         base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
+        {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
         base::BindOnce(
             &ExecuteCodeFunction::LocalizeComponentResourceInBackground, this,
             std::move(data), extension_id, extension_path,
diff --git a/extensions/browser/api/file_handlers/app_file_handler_util.cc b/extensions/browser/api/file_handlers/app_file_handler_util.cc
index f657d53b..9a97dc59f 100644
--- a/extensions/browser/api/file_handlers/app_file_handler_util.cc
+++ b/extensions/browser/api/file_handlers/app_file_handler_util.cc
@@ -13,6 +13,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "components/services/app_service/public/cpp/file_handler_info.h"
 #include "content/public/browser/browser_context.h"
@@ -175,10 +176,8 @@
       continue;
     }
 #endif
-    base::PostTaskAndReplyWithResult(
-        FROM_HERE,
-        {base::ThreadPool(), base::TaskPriority::USER_BLOCKING,
-         base::MayBlock()},
+    base::ThreadPool::PostTaskAndReplyWithResult(
+        FROM_HERE, {base::TaskPriority::USER_BLOCKING, base::MayBlock()},
         base::BindOnce(&PrepareNativeLocalFileForWritableApp, path,
                        is_directory),
         base::BindOnce(&WritableFileChecker::OnPrepareFileDone, this, path));
diff --git a/extensions/browser/api/file_handlers/directory_util.cc b/extensions/browser/api/file_handlers/directory_util.cc
index 72370500..4ccac11e 100644
--- a/extensions/browser/api/file_handlers/directory_util.cc
+++ b/extensions/browser/api/file_handlers/directory_util.cc
@@ -8,6 +8,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "content/public/browser/browser_context.h"
 #include "net/base/filename_util.h"
@@ -43,8 +44,8 @@
   }
 #endif
 
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE, {base::ThreadPool(), base::MayBlock()},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock()},
       base::BindOnce(&GetIsDirectoryFromFileInfo, path), std::move(callback));
 }
 
diff --git a/extensions/browser/api/file_handlers/mime_util.cc b/extensions/browser/api/file_handlers/mime_util.cc
index 0860a08..4213753 100644
--- a/extensions/browser/api/file_handlers/mime_util.cc
+++ b/extensions/browser/api/file_handlers/mime_util.cc
@@ -8,6 +8,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "content/public/browser/browser_context.h"
@@ -84,8 +85,8 @@
   std::unique_ptr<std::string> mime_type_from_extension(new std::string);
   std::string* const mime_type_from_extension_ptr =
       mime_type_from_extension.get();
-  base::PostTaskAndReply(
-      FROM_HERE, {base::ThreadPool(), base::MayBlock()},
+  base::ThreadPool::PostTaskAndReply(
+      FROM_HERE, {base::MayBlock()},
       base::BindOnce(base::IgnoreResult(&net::GetMimeTypeFromFile), local_path,
                      mime_type_from_extension_ptr),
       base::BindOnce(&OnGetMimeTypeFromFileForNonNativeLocalPathCompleted,
@@ -126,8 +127,8 @@
   std::unique_ptr<std::string> sniffed_mime_type(
       new std::string(kMimeTypeApplicationOctetStream));
   std::string* const sniffed_mime_type_ptr = sniffed_mime_type.get();
-  base::PostTaskAndReply(
-      FROM_HERE, {base::ThreadPool(), base::MayBlock()},
+  base::ThreadPool::PostTaskAndReply(
+      FROM_HERE, {base::MayBlock()},
       base::BindOnce(&SniffMimeType, local_path, sniffed_mime_type_ptr),
       base::BindOnce(&OnSniffMimeTypeForNativeLocalPathCompleted,
                      std::move(sniffed_mime_type), std::move(callback)));
@@ -158,8 +159,8 @@
   std::unique_ptr<std::string> mime_type_from_extension(new std::string);
   std::string* const mime_type_from_extension_ptr =
       mime_type_from_extension.get();
-  base::PostTaskAndReply(
-      FROM_HERE, {base::ThreadPool(), base::MayBlock()},
+  base::ThreadPool::PostTaskAndReply(
+      FROM_HERE, {base::MayBlock()},
       base::BindOnce(base::IgnoreResult(&net::GetMimeTypeFromFile), local_path,
                      mime_type_from_extension_ptr),
       base::BindOnce(&OnGetMimeTypeFromFileForNativeLocalPathCompleted,
diff --git a/extensions/browser/api/file_system/file_system_api.cc b/extensions/browser/api/file_system/file_system_api.cc
index 3d524d2..08f070e 100644
--- a/extensions/browser/api/file_system/file_system_api.cc
+++ b/extensions/browser/api/file_system/file_system_api.cc
@@ -23,6 +23,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/value_conversions.h"
 #include "base/values.h"
 #include "build/build_config.h"
@@ -333,9 +334,8 @@
     return RespondNow(Error(error));
   }
 
-  base::PostTaskAndReply(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTaskAndReply(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&FileSystemGetWritableEntryFunction::SetIsDirectoryAsync,
                      this),
       base::BindOnce(
@@ -519,9 +519,8 @@
                                       browser_context(), paths[0]);
 #endif
 
-    base::PostTask(
-        FROM_HERE,
-        {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+    base::ThreadPool::PostTask(
+        FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
         base::BindOnce(
             &FileSystemChooseEntryFunction::ConfirmDirectoryAccessAsync, this,
             non_native_path, paths, web_contents));
@@ -768,9 +767,8 @@
     return RespondLater();
   }
 #endif
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&base::DirectoryExists, previous_path),
       std::move(set_initial_path_callback));
 
diff --git a/extensions/browser/api/system_info/system_info_provider.cc b/extensions/browser/api/system_info/system_info_provider.cc
index ecb527d..fc809a8 100644
--- a/extensions/browser/api/system_info/system_info_provider.cc
+++ b/extensions/browser/api/system_info/system_info_provider.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "content/public/browser/browser_thread.h"
 
@@ -14,8 +15,8 @@
 
 SystemInfoProvider::SystemInfoProvider()
     : is_waiting_for_completion_(false),
-      task_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
+      task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(),
            /* default priority, */
            base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})) {}
 
diff --git a/extensions/browser/content_verify_job.cc b/extensions/browser/content_verify_job.cc
index 6e38444..1472ae5 100644
--- a/extensions/browser/content_verify_job.cc
+++ b/extensions/browser/content_verify_job.cc
@@ -11,6 +11,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/stl_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/timer/elapsed_timer.h"
 #include "content/public/browser/browser_thread.h"
 #include "crypto/secure_hash.h"
@@ -99,9 +100,8 @@
   if (test_observer)
     test_observer->JobStarted(extension_id_, relative_path_);
   // Build |hash_reader_|.
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE},
       base::BindOnce(&ContentHashReader::Create, relative_path_, content_hash),
       base::BindOnce(&ContentVerifyJob::OnHashesReady, this));
 }
diff --git a/extensions/browser/extension_protocols.cc b/extensions/browser/extension_protocols.cc
index 4b62159e3..13aa8540 100644
--- a/extensions/browser/extension_protocols.cc
+++ b/extensions/browser/extension_protocols.cc
@@ -34,6 +34,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/timer/elapsed_timer.h"
 #include "build/build_config.h"
@@ -559,8 +560,8 @@
 
     scoped_refptr<ContentVerifier> content_verifier =
         extension_info_map_->content_verifier();
-    base::PostTaskAndReply(
-        FROM_HERE, {base::ThreadPool(), base::MayBlock()},
+    base::ThreadPool::PostTaskAndReply(
+        FROM_HERE, {base::MayBlock()},
         base::BindOnce(&ReadResourceFilePathAndLastModifiedTime, resource,
                        directory_path, base::Unretained(read_file_path),
                        base::Unretained(last_modified_time)),
diff --git a/extensions/browser/image_loader.cc b/extensions/browser/image_loader.cc
index 7c58a7e..d8dcb89 100644
--- a/extensions/browser/image_loader.cc
+++ b/extensions/browser/image_loader.cc
@@ -16,6 +16,7 @@
 #include "base/files/file_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/browser/component_extension_resource_manager.h"
 #include "extensions/browser/extensions_browser_client.h"
@@ -263,9 +264,8 @@
     const std::vector<ImageRepresentation>& info_list,
     ImageLoaderImageCallback callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE},
       base::BindOnce(LoadImagesBlocking, info_list,
                      LoadResourceBitmaps(extension, info_list)),
       base::BindOnce(&ImageLoader::ReplyBack, weak_ptr_factory_.GetWeakPtr(),
@@ -277,9 +277,8 @@
     const std::vector<ImageRepresentation>& info_list,
     ImageLoaderImageFamilyCallback callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE},
       base::BindOnce(LoadImagesBlocking, info_list,
                      LoadResourceBitmaps(extension, info_list)),
       base::BindOnce(&ImageLoader::ReplyBackWithImageFamily,
diff --git a/extensions/browser/updater/update_data_provider.cc b/extensions/browser/updater/update_data_provider.cc
index c22ee7fe..c5b7a3c3 100644
--- a/extensions/browser/updater/update_data_provider.cc
+++ b/extensions/browser/updater/update_data_provider.cc
@@ -13,6 +13,7 @@
 #include "base/optional.h"
 #include "base/strings/string_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "components/crx_file/crx_verifier.h"
 #include "components/update_client/utils.h"
 #include "content/public/browser/browser_task_traits.h"
@@ -148,9 +149,8 @@
           << public_key;
 
   if (!browser_context_) {
-    base::PostTask(
-        FROM_HERE,
-        {base::ThreadPool(), base::TaskPriority::BEST_EFFORT, base::MayBlock()},
+    base::ThreadPool::PostTask(
+        FROM_HERE, {base::TaskPriority::BEST_EFFORT, base::MayBlock()},
         base::BindOnce(base::IgnoreResult(&base::DeleteFile), unpacked_dir,
                        true));
     return;
diff --git a/extensions/browser/web_ui_user_script_loader.cc b/extensions/browser/web_ui_user_script_loader.cc
index 01f1af4e..f3436af 100644
--- a/extensions/browser/web_ui_user_script_loader.cc
+++ b/extensions/browser/web_ui_user_script_loader.cc
@@ -13,6 +13,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/strings/string_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "content/public/browser/browser_context.h"
 #include "extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.h"
@@ -154,9 +155,9 @@
 }
 
 void WebUIUserScriptLoader::OnWebUIURLFetchComplete() {
-  base::PostTask(FROM_HERE, {base::ThreadPool(), base::MayBlock()},
-                 base::BindOnce(&SerializeOnBlockingTask,
-                                base::SequencedTaskRunnerHandle::Get(),
-                                std::move(user_scripts_cache_),
-                                std::move(scripts_loaded_callback_)));
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::MayBlock()},
+      base::BindOnce(
+          &SerializeOnBlockingTask, base::SequencedTaskRunnerHandle::Get(),
+          std::move(user_scripts_cache_), std::move(scripts_loaded_callback_)));
 }
diff --git a/headless/app/headless_shell.cc b/headless/app/headless_shell.cc
index 081da4b..122c3495 100644
--- a/headless/app/headless_shell.cc
+++ b/headless/app/headless_shell.cc
@@ -23,6 +23,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "build/branding_buildflags.h"
 #include "build/build_config.h"
@@ -228,8 +229,8 @@
 void HeadlessShell::OnStart(HeadlessBrowser* browser) {
   browser_ = browser;
   devtools_client_ = HeadlessDevToolsClient::Create();
-  file_task_runner_ = base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT});
+  file_task_runner_ = base::ThreadPool::CreateSequencedTaskRunner(
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT});
 
   HeadlessBrowserContext::Builder context_builder =
       browser_->CreateBrowserContextBuilder();
diff --git a/ios/build/chrome_build.gni b/ios/build/chrome_build.gni
index a041feb2..db1cf388 100644
--- a/ios/build/chrome_build.gni
+++ b/ios/build/chrome_build.gni
@@ -17,6 +17,11 @@
   # Enable credential provider extension.
   ios_enable_credential_provider_extension = false
 
+  # Label of the target providing implementation for AccountVerificationProvider.
+  # Overridden when using the Google-internal repository to build Chrome on iOS.
+  ios_account_verification_provider_target =
+      "//ios/chrome/credential_provider_extension:account_verification_provider"
+
   # Enable multi-window configuration in Info.plist
   ios_enable_multi_window = false
 
diff --git a/ios/chrome/app/application_delegate/app_state_unittest.mm b/ios/chrome/app/application_delegate/app_state_unittest.mm
index 635869b8..129933f 100644
--- a/ios/chrome/app/application_delegate/app_state_unittest.mm
+++ b/ios/chrome/app/application_delegate/app_state_unittest.mm
@@ -8,7 +8,6 @@
 
 #include "base/bind.h"
 #include "base/ios/block_types.h"
-#include "base/mac/scoped_block.h"
 #import "ios/chrome/app/app_startup_parameters.h"
 #import "ios/chrome/app/application_delegate/app_navigation.h"
 #import "ios/chrome/app/application_delegate/app_state_testing.h"
diff --git a/ios/chrome/app/application_delegate/metrics_mediator.mm b/ios/chrome/app/application_delegate/metrics_mediator.mm
index 5f67099..90b22b65 100644
--- a/ios/chrome/app/application_delegate/metrics_mediator.mm
+++ b/ios/chrome/app/application_delegate/metrics_mediator.mm
@@ -11,6 +11,7 @@
 #include "base/metrics/user_metrics_action.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "build/branding_buildflags.h"
 #include "components/crash/core/common/crash_keys.h"
 #include "components/metrics/metrics_pref_names.h"
@@ -282,9 +283,8 @@
   }
 
   app_group::main_app::RecordWidgetUsage();
-  base::PostTask(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&app_group::main_app::ProcessPendingLogs, callback));
 }
 
diff --git a/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm b/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm
index aab3c37b..e22adb08 100644
--- a/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm
+++ b/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm
@@ -7,7 +7,6 @@
 
 #import <Foundation/Foundation.h>
 
-#include "base/mac/scoped_block.h"
 #include "components/metrics/metrics_service.h"
 #import "ios/chrome/app/application_delegate/startup_information.h"
 #include "ios/chrome/browser/application_context.h"
diff --git a/ios/chrome/app/application_delegate/mock_tab_opener.mm b/ios/chrome/app/application_delegate/mock_tab_opener.mm
index d4705ee..ab2454c 100644
--- a/ios/chrome/app/application_delegate/mock_tab_opener.mm
+++ b/ios/chrome/app/application_delegate/mock_tab_opener.mm
@@ -5,7 +5,6 @@
 #include "ios/chrome/app/application_delegate/mock_tab_opener.h"
 
 #include "base/ios/block_types.h"
-#include "base/mac/scoped_block.h"
 #include "ios/chrome/app/application_mode.h"
 #import "ios/chrome/browser/url_loading/url_loading_params.h"
 #include "ui/base/page_transition_types.h"
diff --git a/ios/chrome/app/application_delegate/user_activity_handler_unittest.mm b/ios/chrome/app/application_delegate/user_activity_handler_unittest.mm
index c54daa828..08b76428 100644
--- a/ios/chrome/app/application_delegate/user_activity_handler_unittest.mm
+++ b/ios/chrome/app/application_delegate/user_activity_handler_unittest.mm
@@ -8,7 +8,6 @@
 
 #import <CoreSpotlight/CoreSpotlight.h>
 
-#include "base/mac/scoped_block.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/test/scoped_command_line.h"
diff --git a/ios/chrome/app/deferred_initialization_runner.mm b/ios/chrome/app/deferred_initialization_runner.mm
index 13af70f..2435ee6 100644
--- a/ios/chrome/app/deferred_initialization_runner.mm
+++ b/ios/chrome/app/deferred_initialization_runner.mm
@@ -7,7 +7,6 @@
 #include <stdint.h>
 
 #include "base/logging.h"
-#include "base/mac/scoped_block.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/app/memory_monitor.mm b/ios/chrome/app/memory_monitor.mm
index 5483f8c..aa77d49f 100644
--- a/ios/chrome/app/memory_monitor.mm
+++ b/ios/chrome/app/memory_monitor.mm
@@ -16,6 +16,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/system/sys_info.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #import "ios/chrome/browser/crash_report/breakpad_helper.h"
 #import "ios/chrome/browser/metrics/previous_session_info.h"
@@ -57,17 +58,15 @@
 // |kMemoryMonitorDelayInSeconds|.
 void AsynchronousFreeMemoryMonitor() {
   UpdateMemoryValues();
-  base::PostDelayedTask(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostDelayedTask(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&AsynchronousFreeMemoryMonitor),
       base::TimeDelta::FromSeconds(kMemoryMonitorDelayInSeconds));
 }
 }  // namespace
 
 void StartFreeMemoryMonitor() {
-  base::PostTask(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&AsynchronousFreeMemoryMonitor));
 }
diff --git a/ios/chrome/browser/application_context_impl.cc b/ios/chrome/browser/application_context_impl.cc
index d418a8d..6112a45b 100644
--- a/ios/chrome/browser/application_context_impl.cc
+++ b/ios/chrome/browser/application_context_impl.cc
@@ -17,6 +17,7 @@
 #include "base/path_service.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/time/default_clock.h"
 #include "base/time/default_tick_clock.h"
 #include "components/component_updater/component_updater_service.h"
@@ -416,9 +417,14 @@
   // Register local state preferences.
   RegisterLocalStatePrefs(pref_registry.get());
 
-  local_state_ =
-      ::CreateLocalState(local_state_path, local_state_task_runner_.get(),
-                         pref_registry, GetBrowserPolicyConnector());
+  policy::BrowserPolicyConnector* browser_policy_connector =
+      GetBrowserPolicyConnector();
+  policy::PolicyService* policy_service =
+      browser_policy_connector ? browser_policy_connector->GetPolicyService()
+                               : nullptr;
+  local_state_ = ::CreateLocalState(
+      local_state_path, local_state_task_runner_.get(), pref_registry,
+      policy_service, browser_policy_connector);
   DCHECK(local_state_);
 
   sessions::SessionIdGenerator::GetInstance()->Init(local_state_.get());
@@ -444,9 +450,8 @@
   CHECK(base::PathService::Get(ios::DIR_GLOBAL_GCM_STORE, &store_path));
 
   scoped_refptr<base::SequencedTaskRunner> blocking_task_runner(
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::BEST_EFFORT,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}));
 
   gcm_driver_ = gcm::CreateGCMDriverDesktop(
diff --git a/ios/chrome/browser/autofill/form_suggestion_controller.mm b/ios/chrome/browser/autofill/form_suggestion_controller.mm
index 2647320e..94bd5e5 100644
--- a/ios/chrome/browser/autofill/form_suggestion_controller.mm
+++ b/ios/chrome/browser/autofill/form_suggestion_controller.mm
@@ -7,7 +7,6 @@
 #include <memory>
 
 #include "base/mac/foundation_util.h"
-#include "base/mac/scoped_block.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/ui/autofill_popup_delegate.h"
diff --git a/ios/chrome/browser/browser_state/BUILD.gn b/ios/chrome/browser/browser_state/BUILD.gn
index c126ec50..d91034a 100644
--- a/ios/chrome/browser/browser_state/BUILD.gn
+++ b/ios/chrome/browser/browser_state/BUILD.gn
@@ -75,6 +75,7 @@
     "//components/metrics",
     "//components/net_log",
     "//components/password_manager/core/browser",
+    "//components/policy/core/common",
     "//components/pref_registry",
     "//components/prefs",
     "//components/proxy_config",
@@ -106,6 +107,7 @@
     "//ios/chrome/browser/net",
     "//ios/chrome/browser/ntp_snippets",
     "//ios/chrome/browser/passwords",
+    "//ios/chrome/browser/policy",
     "//ios/chrome/browser/prefs",
     "//ios/chrome/browser/prefs:browser_prefs",
     "//ios/chrome/browser/reading_list",
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state.h b/ios/chrome/browser/browser_state/chrome_browser_state.h
index 35a76d2..4153e63e 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state.h
+++ b/ios/chrome/browser/browser_state/chrome_browser_state.h
@@ -16,6 +16,7 @@
 #include "ios/web/public/browser_state.h"
 #include "net/url_request/url_request_job_factory.h"
 
+class BrowserStatePolicyConnector;
 class ChromeBrowserStateIOData;
 class PrefProxyConfigTracker;
 class PrefService;
@@ -75,6 +76,10 @@
   // ChromeBrowserState, if one exists.
   virtual void DestroyOffTheRecordChromeBrowserState() = 0;
 
+  // Retrieves a pointer to the BrowserStatePolicyConnector that manages policy
+  // for this BrowserState. May return nullptr if policy is disabled.
+  virtual BrowserStatePolicyConnector* GetPolicyConnector() = 0;
+
   // Retrieves a pointer to the PrefService that manages the preferences.
   virtual PrefService* GetPrefs() = 0;
 
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_impl.cc b/ios/chrome/browser/browser_state/chrome_browser_state_impl.cc
index 0210447..2e3d833f 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_impl.cc
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_impl.cc
@@ -13,6 +13,7 @@
 #include "base/threading/thread_restrictions.h"
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
+#include "components/policy/core/common/schema_registry.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/json_pref_store.h"
 #include "components/prefs/pref_service.h"
@@ -28,6 +29,11 @@
 #include "ios/chrome/browser/chrome_paths_internal.h"
 #include "ios/chrome/browser/file_metadata_util.h"
 #include "ios/chrome/browser/net/ios_chrome_url_request_context_getter.h"
+#include "ios/chrome/browser/policy/browser_policy_connector_ios.h"
+#include "ios/chrome/browser/policy/browser_state_policy_connector.h"
+#include "ios/chrome/browser/policy/browser_state_policy_connector_factory.h"
+#include "ios/chrome/browser/policy/policy_features.h"
+#include "ios/chrome/browser/policy/schema_registry_factory.h"
 #include "ios/chrome/browser/pref_names.h"
 #include "ios/chrome/browser/prefs/browser_prefs.h"
 #include "ios/chrome/browser/prefs/ios_chrome_pref_service_factory.h"
@@ -88,12 +94,24 @@
       state_path_, otr_state_path_, base_cache_path);
   DCHECK(directories_created);
 
+  // Bring up the policy system before creating |prefs_|.
+  if (IsEnterprisePolicyEnabled()) {
+    BrowserPolicyConnectorIOS* connector =
+        GetApplicationContext()->GetBrowserPolicyConnector();
+    DCHECK(connector);
+    policy_schema_registry_ = BuildSchemaRegistryForBrowserState(
+        this, connector->GetChromeSchema(), connector->GetSchemaRegistry());
+    policy_connector_ = BuildBrowserStatePolicyConnector(connector);
+  }
+
   RegisterBrowserStatePrefs(pref_registry_.get());
   BrowserStateDependencyManager::GetInstance()
       ->RegisterBrowserStatePrefsForServices(pref_registry_.get());
 
-  prefs_ = CreateBrowserStatePrefs(state_path_, GetIOTaskRunner().get(),
-                                   pref_registry_);
+  prefs_ = CreateBrowserStatePrefs(
+      state_path_, GetIOTaskRunner().get(), pref_registry_,
+      policy_connector_ ? policy_connector_->GetPolicyService() : nullptr,
+      GetApplicationContext()->GetBrowserPolicyConnector());
   // Register on BrowserState.
   user_prefs::UserPrefs::Set(this, prefs_.get());
 
@@ -153,6 +171,14 @@
   otr_state_.reset();
 }
 
+BrowserStatePolicyConnector* ChromeBrowserStateImpl::GetPolicyConnector() {
+  if (policy_connector_.get()) {
+    DCHECK(IsEnterprisePolicyEnabled());
+    return policy_connector_.get();
+  }
+  return nullptr;
+}
+
 PrefService* ChromeBrowserStateImpl::GetPrefs() {
   DCHECK(prefs_);  // Should explicitly be initialized.
   return prefs_.get();
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_impl.h b/ios/chrome/browser/browser_state/chrome_browser_state_impl.h
index 27b3a0a..dc0eb70 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_impl.h
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_impl.h
@@ -11,6 +11,10 @@
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.h"
 
+namespace policy {
+class SchemaRegistry;
+}
+
 namespace sync_preferences {
 class PrefServiceSyncable;
 }
@@ -33,6 +37,7 @@
   ChromeBrowserState* GetOffTheRecordChromeBrowserState() override;
   void DestroyOffTheRecordChromeBrowserState() override;
   PrefProxyConfigTracker* GetProxyConfigTracker() override;
+  BrowserStatePolicyConnector* GetPolicyConnector() override;
   PrefService* GetPrefs() override;
   PrefService* GetOffTheRecordPrefs() override;
   ChromeBrowserStateIOData* GetIOData() override;
@@ -71,8 +76,13 @@
   //  that the declaration occurs AFTER things it depends on as destruction
   //  happens in reverse order of declaration.
 
-  // Keep |prefs_| on top for destruction order because |io_data_| and others
-  // store pointers to |prefs_| and shall be destructed first.
+  // |policy_connector_| and its associated |policy_schema_registry_| must
+  // outlive |prefs_|.
+  std::unique_ptr<policy::SchemaRegistry> policy_schema_registry_;
+  std::unique_ptr<BrowserStatePolicyConnector> policy_connector_;
+
+  // Keep |prefs_| above the rest for destruction order because |io_data_| and
+  // others store pointers to |prefs_| and shall be destructed first.
   scoped_refptr<user_prefs::PrefRegistrySyncable> pref_registry_;
   std::unique_ptr<sync_preferences::PrefServiceSyncable> prefs_;
   std::unique_ptr<sync_preferences::PrefServiceSyncable> otr_prefs_;
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm b/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm
index 59e5997..d109ae4 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm
@@ -14,6 +14,7 @@
 #include "base/logging.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "components/cookie_config/cookie_store_util.h"
 #include "components/net_log/chrome_net_log.h"
 #include "components/prefs/json_pref_store.h"
@@ -161,9 +162,8 @@
       profile_path_.Append(kIOSChromeNetworkPersistentStateFilename));
   network_json_store_ = new JsonPrefStore(
       network_json_store_filepath, std::unique_ptr<PrefFilter>(),
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::BEST_EFFORT,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::BLOCK_SHUTDOWN}));
   network_json_store_->ReadPrefsAsync(nullptr);
 
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_io_data.mm b/ios/chrome/browser/browser_state/chrome_browser_state_io_data.mm
index 45d0bf8..8e753e2 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_io_data.mm
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_io_data.mm
@@ -23,6 +23,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "components/content_settings/core/browser/content_settings_provider.h"
 #include "components/content_settings/core/browser/cookie_settings.h"
@@ -308,9 +309,8 @@
     transport_security_persister_ =
         std::make_unique<net::TransportSecurityPersister>(
             transport_security_state_.get(), profile_params_->path,
-            base::CreateSequencedTaskRunner(
-                {base::ThreadPool(), base::MayBlock(),
-                 base::TaskPriority::BEST_EFFORT,
+            base::ThreadPool::CreateSequencedTaskRunner(
+                {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
                  base::TaskShutdownBehavior::BLOCK_SHUTDOWN}));
   }
 
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.cc b/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.cc
index 96a7a94..8362089 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.cc
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.cc
@@ -15,6 +15,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "components/password_manager/core/browser/password_store.h"
 #include "components/prefs/pref_service.h"
@@ -136,9 +137,8 @@
   // this profile are executed in expected order (what was previously assured by
   // the FILE thread).
   scoped_refptr<base::SequencedTaskRunner> io_task_runner =
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::TaskShutdownBehavior::BLOCK_SHUTDOWN,
-           base::MayBlock()});
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::TaskShutdownBehavior::BLOCK_SHUTDOWN, base::MayBlock()});
 
   std::unique_ptr<ChromeBrowserStateImpl> browser_state_impl(
       new ChromeBrowserStateImpl(io_task_runner, path));
@@ -190,9 +190,9 @@
   // Log the browser state size after a reasonable startup delay.
   base::FilePath path =
       browser_state->GetOriginalChromeBrowserState()->GetStatePath();
-  base::PostDelayedTask(
+  base::ThreadPool::PostDelayedTask(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
        base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&BrowserStateSizeTask, path),
       base::TimeDelta::FromSeconds(112));
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.mm b/ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.mm
index 0b5847a..0650e14 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.mm
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.mm
@@ -13,6 +13,7 @@
 #include "base/mac/foundation_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "components/prefs/pref_service.h"
 #include "google_apis/gaia/gaia_auth_util.h"
 #include "ios/chrome/browser/application_context.h"
@@ -143,9 +144,8 @@
 
   if (is_removing_browser_states) {
     SetHasBrowserStateBeenRemoved(true);
-    base::PostTask(
-        FROM_HERE,
-        {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+    base::ThreadPool::PostTask(
+        FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
         base::BindOnce(&NukeBrowserStates, browser_states_to_nuke));
   }
 }
diff --git a/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_impl.cc b/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_impl.cc
index b9df6f6..b036506 100644
--- a/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_impl.cc
+++ b/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_impl.cc
@@ -63,6 +63,12 @@
   NOTREACHED();
 }
 
+BrowserStatePolicyConnector*
+OffTheRecordChromeBrowserStateImpl::GetPolicyConnector() {
+  // Forward the call to the original (non-OTR) browser state.
+  return GetOriginalChromeBrowserState()->GetPolicyConnector();
+}
+
 PrefService* OffTheRecordChromeBrowserStateImpl::GetPrefs() {
   return prefs_;
 }
diff --git a/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_impl.h b/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_impl.h
index ab890e53..51923e7 100644
--- a/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_impl.h
+++ b/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_impl.h
@@ -26,6 +26,7 @@
   ChromeBrowserState* GetOffTheRecordChromeBrowserState() override;
   void DestroyOffTheRecordChromeBrowserState() override;
   PrefProxyConfigTracker* GetProxyConfigTracker() override;
+  BrowserStatePolicyConnector* GetPolicyConnector() override;
   PrefService* GetPrefs() override;
   PrefService* GetOffTheRecordPrefs() override;
   ChromeBrowserStateIOData* GetIOData() override;
diff --git a/ios/chrome/browser/browser_state/test_chrome_browser_state.h b/ios/chrome/browser/browser_state/test_chrome_browser_state.h
index 711930e..c3789c8 100644
--- a/ios/chrome/browser/browser_state/test_chrome_browser_state.h
+++ b/ios/chrome/browser/browser_state/test_chrome_browser_state.h
@@ -48,6 +48,7 @@
   bool HasOffTheRecordChromeBrowserState() const override;
   ChromeBrowserState* GetOffTheRecordChromeBrowserState() override;
   PrefProxyConfigTracker* GetProxyConfigTracker() override;
+  BrowserStatePolicyConnector* GetPolicyConnector() override;
   PrefService* GetPrefs() override;
   PrefService* GetOffTheRecordPrefs() override;
   ChromeBrowserStateIOData* GetIOData() override;
diff --git a/ios/chrome/browser/browser_state/test_chrome_browser_state.mm b/ios/chrome/browser/browser_state/test_chrome_browser_state.mm
index 20ffb9e..93d0ff2 100644
--- a/ios/chrome/browser/browser_state/test_chrome_browser_state.mm
+++ b/ios/chrome/browser/browser_state/test_chrome_browser_state.mm
@@ -16,6 +16,7 @@
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/bookmarks/common/bookmark_constants.h"
@@ -135,9 +136,8 @@
     std::unique_ptr<sync_preferences::PrefServiceSyncable> prefs,
     TestingFactories testing_factories,
     RefcountedTestingFactories refcounted_testing_factories)
-    : ChromeBrowserState(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskShutdownBehavior::BLOCK_SHUTDOWN})),
+    : ChromeBrowserState(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskShutdownBehavior::BLOCK_SHUTDOWN})),
       state_path_(path),
       prefs_(std::move(prefs)),
       testing_prefs_(nullptr),
@@ -271,6 +271,12 @@
   return nullptr;
 }
 
+BrowserStatePolicyConnector* TestChromeBrowserState::GetPolicyConnector() {
+  // TODO(crbug.com/1055318): Determine what level of support is needed for
+  // unittesting and return a mock or fake here.
+  return nullptr;
+}
+
 PrefService* TestChromeBrowserState::GetPrefs() {
   return prefs_.get();
 }
diff --git a/ios/chrome/browser/chrome_url_util.mm b/ios/chrome/browser/chrome_url_util.mm
index 084d819..15ed15deb 100644
--- a/ios/chrome/browser/chrome_url_util.mm
+++ b/ios/chrome/browser/chrome_url_util.mm
@@ -8,7 +8,6 @@
 
 #include "base/logging.h"
 #include "base/mac/foundation_util.h"
-#include "base/mac/scoped_block.h"
 #include "base/strings/string_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "ios/chrome/browser/chrome_url_constants.h"
diff --git a/ios/chrome/browser/crash_report/breakpad_helper.mm b/ios/chrome/browser/crash_report/breakpad_helper.mm
index 0dfb800..f93fc02c 100644
--- a/ios/chrome/browser/crash_report/breakpad_helper.mm
+++ b/ios/chrome/browser/crash_report/breakpad_helper.mm
@@ -19,6 +19,7 @@
 #include "base/path_service.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "ios/chrome/browser/chrome_paths.h"
 #import "ios/chrome/browser/crash_report/crash_report_user_application_state.h"
 #import "ios/chrome/browser/crash_report/main_thread_freeze_detector.h"
@@ -204,9 +205,8 @@
 void CleanupCrashReports() {
   base::FilePath crash_directory;
   base::PathService::Get(ios::DIR_CRASH_DUMPS, &crash_directory);
-  base::PostTask(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&DeleteAllReportsInDirectory, crash_directory));
 }
 
diff --git a/ios/chrome/browser/download/ar_quick_look_tab_helper.mm b/ios/chrome/browser/download/ar_quick_look_tab_helper.mm
index 84ca77c..392da41 100644
--- a/ios/chrome/browser/download/ar_quick_look_tab_helper.mm
+++ b/ios/chrome/browser/download/ar_quick_look_tab_helper.mm
@@ -14,6 +14,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #import "ios/chrome/browser/download/ar_quick_look_tab_helper_delegate.h"
 #include "ios/chrome/browser/download/download_directory_util.h"
 #include "ios/chrome/browser/download/usdz_mime_type.h"
@@ -110,9 +111,8 @@
   // Take ownership of |download_task| and start the download.
   download_task_ = std::move(download_task);
   download_task_->AddObserver(this);
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE},
       base::BindOnce(&base::CreateDirectory, download_dir),
       base::BindOnce(&ARQuickLookTabHelper::DownloadWithDestinationDir,
                      AsWeakPtr(), download_dir, download_task_.get()));
@@ -155,8 +155,8 @@
     return;
   }
 
-  auto task_runner = base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE});
+  auto task_runner = base::ThreadPool::CreateSequencedTaskRunner(
+      {base::MayBlock(), base::TaskPriority::USER_VISIBLE});
   base::string16 file_name = download_task_->GetSuggestedFilename();
   base::FilePath path = destination_dir.Append(base::UTF16ToUTF8(file_name));
   auto writer = std::make_unique<net::URLFetcherFileWriter>(task_runner, path);
diff --git a/ios/chrome/browser/download/download_directory_util.mm b/ios/chrome/browser/download/download_directory_util.mm
index c8fcca7..b860000 100644
--- a/ios/chrome/browser/download/download_directory_util.mm
+++ b/ios/chrome/browser/download/download_directory_util.mm
@@ -11,6 +11,7 @@
 #include "base/mac/foundation_util.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "ios/web/common/features.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -47,8 +48,7 @@
 void DeleteDownloadsDirectory() {
   // If downloads manager's flag is enabled, keeps downloads folder.
   if (!base::FeatureList::IsEnabled(web::features::kEnablePersistentDownloads))
-    base::PostTask(
-        FROM_HERE,
-        {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+    base::ThreadPool::PostTask(
+        FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
         base::BindOnce(&DeleteDownloadsDirectorySync));
 }
diff --git a/ios/chrome/browser/external_files/external_file_remover_impl.mm b/ios/chrome/browser/external_files/external_file_remover_impl.mm
index 3898037..7f7b944f 100644
--- a/ios/chrome/browser/external_files/external_file_remover_impl.mm
+++ b/ios/chrome/browser/external_files/external_file_remover_impl.mm
@@ -9,6 +9,7 @@
 #include "base/logging.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/bookmarks/browser/url_and_title.h"
@@ -221,9 +222,8 @@
   const NSInteger kMinimumAgeInDays = 30;
   NSInteger age_in_days = all_files ? 0 : kMinimumAgeInDays;
 
-  base::PostTaskAndReply(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTaskAndReply(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&RemoveFilesWithOptions, referenced_files, age_in_days),
       base::Bind(&RunCallback, base::Passed(&closure_runner)));
 }
diff --git a/ios/chrome/browser/feature_engagement/tracker_factory_util.mm b/ios/chrome/browser/feature_engagement/tracker_factory_util.mm
index 66fd086d..bac45aa 100644
--- a/ios/chrome/browser/feature_engagement/tracker_factory_util.mm
+++ b/ios/chrome/browser/feature_engagement/tracker_factory_util.mm
@@ -8,6 +8,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "components/feature_engagement/public/tracker.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/chrome_constants.h"
@@ -32,8 +33,8 @@
       ChromeBrowserState::FromBrowserState(context);
 
   scoped_refptr<base::SequencedTaskRunner> background_task_runner =
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                       base::TaskPriority::BEST_EFFORT});
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT});
 
   base::FilePath storage_dir = browser_state->GetStatePath().Append(
       kIOSFeatureEngagementTrackerStorageDirname);
diff --git a/ios/chrome/browser/gcm/ios_chrome_gcm_profile_service_factory.cc b/ios/chrome/browser/gcm/ios_chrome_gcm_profile_service_factory.cc
index e9839f1..ecd068c 100644
--- a/ios/chrome/browser/gcm/ios_chrome_gcm_profile_service_factory.cc
+++ b/ios/chrome/browser/gcm/ios_chrome_gcm_profile_service_factory.cc
@@ -10,6 +10,7 @@
 #include "base/no_destructor.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "build/branding_buildflags.h"
 #include "components/gcm_driver/gcm_client_factory.h"
 #include "components/gcm_driver/gcm_profile_service.h"
@@ -94,9 +95,8 @@
   DCHECK(!context->IsOffTheRecord());
 
   scoped_refptr<base::SequencedTaskRunner> blocking_task_runner(
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::BEST_EFFORT,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}));
   ChromeBrowserState* browser_state =
       ChromeBrowserState::FromBrowserState(context);
diff --git a/ios/chrome/browser/ios_chrome_main_parts.mm b/ios/chrome/browser/ios_chrome_main_parts.mm
index 73b4274..74aa943f 100644
--- a/ios/chrome/browser/ios_chrome_main_parts.mm
+++ b/ios/chrome/browser/ios_chrome_main_parts.mm
@@ -13,6 +13,7 @@
 #include "base/path_service.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/time/default_tick_clock.h"
 #include "components/content_settings/core/browser/cookie_settings.h"
 #include "components/content_settings/core/common/content_settings_pattern.h"
@@ -100,9 +101,8 @@
   // remaining BACKGROUND+BLOCK_SHUTDOWN tasks is bumped by the ThreadPool on
   // shutdown.
   scoped_refptr<base::SequencedTaskRunner> local_state_task_runner =
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::BEST_EFFORT,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::BLOCK_SHUTDOWN});
 
   base::FilePath local_state_path;
diff --git a/ios/chrome/browser/json_parser/in_process_json_parser.cc b/ios/chrome/browser/json_parser/in_process_json_parser.cc
index a7aca30..b8d7ac2 100644
--- a/ios/chrome/browser/json_parser/in_process_json_parser.cc
+++ b/ios/chrome/browser/json_parser/in_process_json_parser.cc
@@ -8,6 +8,7 @@
 #include "base/json/json_reader.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 
@@ -41,9 +42,8 @@
 void InProcessJsonParser::Parse(const std::string& unsafe_json,
                                 SuccessCallback success_callback,
                                 ErrorCallback error_callback) {
-  base::PostTask(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&ParseJsonOnBackgroundThread,
                      base::ThreadTaskRunnerHandle::Get(), unsafe_json,
                      std::move(success_callback), std::move(error_callback)));
diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm
index ed8024fb..4f2f299 100644
--- a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm
+++ b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm
@@ -23,6 +23,7 @@
 #include "base/rand_util.h"
 #include "base/strings/string16.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/platform_thread.h"
 #include "components/crash/core/common/crash_keys.h"
 #include "components/history/core/browser/history_service.h"
@@ -112,13 +113,13 @@
     } else {
       // When metrics reporting is not enabled, any existing files should be
       // deleted in order to preserve user privacy.
-      base::PostTask(FROM_HERE,
-                     {base::ThreadPool(), base::MayBlock(),
-                      base::TaskPriority::BEST_EFFORT,
-                      base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
-                     base::BindOnce(base::IgnoreResult(&base::DeleteFile),
-                                    std::move(browser_metrics_upload_dir),
-                                    /*recursive=*/true));
+      base::ThreadPool::PostTask(
+          FROM_HERE,
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+           base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
+          base::BindOnce(base::IgnoreResult(&base::DeleteFile),
+                         std::move(browser_metrics_upload_dir),
+                         /*recursive=*/true));
     }
   }
   return file_metrics_provider;
diff --git a/ios/chrome/browser/net/cookie_util.mm b/ios/chrome/browser/net/cookie_util.mm
index 6ce1710..788dee8 100644
--- a/ios/chrome/browser/net/cookie_util.mm
+++ b/ios/chrome/browser/net/cookie_util.mm
@@ -14,6 +14,7 @@
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #import "ios/net/cookies/cookie_store_ios.h"
 #import "ios/net/cookies/system_cookie_store.h"
@@ -46,8 +47,8 @@
   return scoped_refptr<net::SQLitePersistentCookieStore>(
       new net::SQLitePersistentCookieStore(
           path, base::CreateSingleThreadTaskRunner({web::WebThread::IO}),
-          base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                           base::TaskPriority::BEST_EFFORT}),
+          base::ThreadPool::CreateSequencedTaskRunner(
+              {base::MayBlock(), base::TaskPriority::BEST_EFFORT}),
           restore_old_session_cookies, crypto_delegate));
 }
 
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_store_factory.cc b/ios/chrome/browser/passwords/ios_chrome_password_store_factory.cc
index a180a47..7dda681 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_store_factory.cc
+++ b/ios/chrome/browser/passwords/ios_chrome_password_store_factory.cc
@@ -12,6 +12,7 @@
 #include "base/no_destructor.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "components/keyed_service/core/service_access_type.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
@@ -90,8 +91,8 @@
   // TODO(crbug.com/741660): Create the task runner inside password_manager
   // component instead.
   scoped_refptr<base::SequencedTaskRunner> db_task_runner(
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                       base::TaskPriority::USER_VISIBLE}));
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE}));
 
   scoped_refptr<password_manager::PasswordStore> store =
       new password_manager::PasswordStoreDefault(std::move(login_db));
diff --git a/ios/chrome/browser/policy/BUILD.gn b/ios/chrome/browser/policy/BUILD.gn
index 9b44a61..42424b2 100644
--- a/ios/chrome/browser/policy/BUILD.gn
+++ b/ios/chrome/browser/policy/BUILD.gn
@@ -6,14 +6,21 @@
   sources = [
     "browser_policy_connector_ios.h",
     "browser_policy_connector_ios.mm",
+    "browser_state_policy_connector.h",
+    "browser_state_policy_connector.mm",
+    "browser_state_policy_connector_factory.h",
+    "browser_state_policy_connector_factory.mm",
     "configuration_policy_handler_list_factory.h",
     "configuration_policy_handler_list_factory.mm",
+    "schema_registry_factory.h",
+    "schema_registry_factory.mm",
   ]
 
   deps = [
     "//base",
     "//components/policy:generated",
     "//components/policy/core/common",
+    "//ios/chrome/browser/browser_state",
     "//services/network/public/cpp",
   ]
 
diff --git a/ios/chrome/browser/policy/browser_policy_connector_ios.h b/ios/chrome/browser/policy/browser_policy_connector_ios.h
index 7b96109c..7ebf67c7 100644
--- a/ios/chrome/browser/policy/browser_policy_connector_ios.h
+++ b/ios/chrome/browser/policy/browser_policy_connector_ios.h
@@ -28,6 +28,11 @@
 
   ~BrowserPolicyConnectorIOS() override;
 
+  // Returns the platform provider used by this BrowserPolicyConnectorIOS. Can
+  // be overridden for testing via
+  // BrowserPolicyConnectorBase::SetPolicyProviderForTesting().
+  policy::ConfigurationPolicyProvider* GetPlatformProvider();
+
   // BrowserPolicyConnector.
   void Init(PrefService* local_state,
             scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory)
@@ -42,7 +47,6 @@
 
  private:
   std::unique_ptr<policy::ConfigurationPolicyProvider> CreatePlatformProvider();
-  policy::ConfigurationPolicyProvider* GetPlatformProvider();
 
   // Owned by base class.
   policy::ConfigurationPolicyProvider* platform_provider_ = nullptr;
diff --git a/ios/chrome/browser/policy/browser_policy_connector_ios.mm b/ios/chrome/browser/policy/browser_policy_connector_ios.mm
index 666f4d41..c96337eb 100644
--- a/ios/chrome/browser/policy/browser_policy_connector_ios.mm
+++ b/ios/chrome/browser/policy/browser_policy_connector_ios.mm
@@ -14,6 +14,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/system/sys_info.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "components/policy/core/common/async_policy_provider.h"
 #include "components/policy/core/common/cloud/device_management_service.h"
 #include "components/policy/core/common/configuration_policy_provider.h"
@@ -38,6 +39,12 @@
 
 BrowserPolicyConnectorIOS::~BrowserPolicyConnectorIOS() {}
 
+ConfigurationPolicyProvider* BrowserPolicyConnectorIOS::GetPlatformProvider() {
+  ConfigurationPolicyProvider* provider =
+      BrowserPolicyConnectorBase::GetPolicyProviderForTesting();
+  return provider ? provider : platform_provider_;
+}
+
 void BrowserPolicyConnectorIOS::Init(
     PrefService* local_state,
     scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) {
@@ -69,16 +76,10 @@
 
 std::unique_ptr<ConfigurationPolicyProvider>
 BrowserPolicyConnectorIOS::CreatePlatformProvider() {
-  std::unique_ptr<AsyncPolicyLoader> loader(new PolicyLoaderIOS(
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                       base::TaskPriority::BEST_EFFORT})));
+  std::unique_ptr<AsyncPolicyLoader> loader(
+      new PolicyLoaderIOS(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT})));
 
   return std::make_unique<AsyncPolicyProvider>(GetSchemaRegistry(),
                                                std::move(loader));
 }
-
-ConfigurationPolicyProvider* BrowserPolicyConnectorIOS::GetPlatformProvider() {
-  ConfigurationPolicyProvider* provider =
-      BrowserPolicyConnectorBase::GetPolicyProviderForTesting();
-  return provider ? provider : platform_provider_;
-}
diff --git a/ios/chrome/browser/policy/browser_state_policy_connector.h b/ios/chrome/browser/policy/browser_state_policy_connector.h
new file mode 100644
index 0000000..2841c29
--- /dev/null
+++ b/ios/chrome/browser/policy/browser_state_policy_connector.h
@@ -0,0 +1,54 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_POLICY_BROWSER_STATE_POLICY_CONNECTOR_H_
+#define IOS_CHROME_BROWSER_POLICY_BROWSER_STATE_POLICY_CONNECTOR_H_
+
+#include <memory>
+#include <vector>
+
+class BrowserPolicyConnectorIOS;
+
+namespace policy {
+class ConfigurationPolicyProvider;
+class PolicyService;
+}  // namespace policy
+
+// BrowserStatePolicyConnector creates and manages the per-BrowserState policy
+// components and their integration with PrefService.
+class BrowserStatePolicyConnector {
+ public:
+  BrowserStatePolicyConnector();
+  ~BrowserStatePolicyConnector();
+  BrowserStatePolicyConnector(const BrowserStatePolicyConnector&) = delete;
+  BrowserStatePolicyConnector& operator=(const BrowserStatePolicyConnector&) =
+      delete;
+
+  // Initializes this connector.
+  void Init(BrowserPolicyConnectorIOS* browser_policy_connector);
+
+  // Shuts this connector down in preparation for destruction.
+  void Shutdown();
+
+  // Returns the PolicyService managed by this connector.  This is never
+  // nullptr.
+  policy::PolicyService* GetPolicyService() const {
+    return policy_service_.get();
+  }
+
+ private:
+  // |policy_providers_| contains a list of the policy providers available for
+  // the PolicyService of this connector, in decreasing order of priority.
+  //
+  // Note: All the providers appended to this vector must eventually become
+  // initialized for every policy domain, otherwise some subsystems will never
+  // use the policies exposed by the PolicyService!
+  // The default ConfigurationPolicyProvider::IsInitializationComplete()
+  // result is true, so take care if a provider overrides that.
+  std::vector<policy::ConfigurationPolicyProvider*> policy_providers_;
+
+  std::unique_ptr<policy::PolicyService> policy_service_;
+};
+
+#endif  // IOS_CHROME_BROWSER_POLICY_BROWSER_STATE_POLICY_CONNECTOR_H_
diff --git a/ios/chrome/browser/policy/browser_state_policy_connector.mm b/ios/chrome/browser/policy/browser_state_policy_connector.mm
new file mode 100644
index 0000000..d8e3ffda
--- /dev/null
+++ b/ios/chrome/browser/policy/browser_state_policy_connector.mm
@@ -0,0 +1,24 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/policy/browser_state_policy_connector.h"
+
+#include "components/policy/core/common/policy_service_impl.h"
+#include "ios/chrome/browser/policy/browser_policy_connector_ios.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+BrowserStatePolicyConnector::BrowserStatePolicyConnector() = default;
+BrowserStatePolicyConnector::~BrowserStatePolicyConnector() = default;
+
+void BrowserStatePolicyConnector::Init(
+    BrowserPolicyConnectorIOS* browser_policy_connector) {
+  policy_providers_ = browser_policy_connector->GetPolicyProviders();
+  policy_service_ =
+      std::make_unique<policy::PolicyServiceImpl>(policy_providers_);
+}
+
+void BrowserStatePolicyConnector::Shutdown() {}
diff --git a/ios/chrome/browser/policy/browser_state_policy_connector_factory.h b/ios/chrome/browser/policy/browser_state_policy_connector_factory.h
new file mode 100644
index 0000000..641ea717
--- /dev/null
+++ b/ios/chrome/browser/policy/browser_state_policy_connector_factory.h
@@ -0,0 +1,16 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_POLICY_BROWSER_STATE_POLICY_CONNECTOR_FACTORY_H_
+#define IOS_CHROME_BROWSER_POLICY_BROWSER_STATE_POLICY_CONNECTOR_FACTORY_H_
+
+#include <memory>
+
+class BrowserPolicyConnectorIOS;
+class BrowserStatePolicyConnector;
+
+std::unique_ptr<BrowserStatePolicyConnector> BuildBrowserStatePolicyConnector(
+    BrowserPolicyConnectorIOS* browser_policy_connector);
+
+#endif  // IOS_CHROME_BROWSER_POLICY_BROWSER_STATE_POLICY_CONNECTOR_FACTORY_H_
diff --git a/ios/chrome/browser/policy/browser_state_policy_connector_factory.mm b/ios/chrome/browser/policy/browser_state_policy_connector_factory.mm
new file mode 100644
index 0000000..22c258ae
--- /dev/null
+++ b/ios/chrome/browser/policy/browser_state_policy_connector_factory.mm
@@ -0,0 +1,23 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/policy/browser_state_policy_connector_factory.h"
+
+#include "base/logging.h"
+#include "ios/chrome/browser/policy/browser_state_policy_connector.h"
+#include "ios/chrome/browser/policy/policy_features.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+std::unique_ptr<BrowserStatePolicyConnector> BuildBrowserStatePolicyConnector(
+    BrowserPolicyConnectorIOS* browser_policy_connector) {
+  DCHECK(IsEnterprisePolicyEnabled());
+
+  auto connector = std::make_unique<BrowserStatePolicyConnector>();
+
+  connector->Init(browser_policy_connector);
+  return connector;
+}
diff --git a/ios/chrome/browser/policy/schema_registry_factory.h b/ios/chrome/browser/policy/schema_registry_factory.h
new file mode 100644
index 0000000..44d1d5e
--- /dev/null
+++ b/ios/chrome/browser/policy/schema_registry_factory.h
@@ -0,0 +1,23 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_POLICY_SCHEMA_REGISTRY_FACTORY_H_
+#define IOS_CHROME_BROWSER_POLICY_SCHEMA_REGISTRY_FACTORY_H_
+
+#include <memory>
+
+class ChromeBrowserState;
+
+namespace policy {
+class CombinedSchemaRegistry;
+class Schema;
+class SchemaRegistry;
+}  // namespace policy
+
+std::unique_ptr<policy::SchemaRegistry> BuildSchemaRegistryForBrowserState(
+    ChromeBrowserState* browser_state,
+    const policy::Schema& chrome_schema,
+    policy::CombinedSchemaRegistry* global_registry);
+
+#endif  // IOS_CHROME_BROWSER_POLICY_SCHEMA_REGISTRY_FACTORY_H_
diff --git a/ios/chrome/browser/policy/schema_registry_factory.mm b/ios/chrome/browser/policy/schema_registry_factory.mm
new file mode 100644
index 0000000..635e93bd
--- /dev/null
+++ b/ios/chrome/browser/policy/schema_registry_factory.mm
@@ -0,0 +1,39 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/policy/schema_registry_factory.h"
+
+#include "base/logging.h"
+#include "components/policy/core/common/policy_namespace.h"
+#include "components/policy/core/common/schema.h"
+#include "components/policy/core/common/schema_registry.h"
+#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
+#include "ios/chrome/browser/policy/policy_features.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+std::unique_ptr<policy::SchemaRegistry> BuildSchemaRegistryForBrowserState(
+    ChromeBrowserState* browser_state,
+    const policy::Schema& chrome_schema,
+    policy::CombinedSchemaRegistry* global_registry) {
+  DCHECK(IsEnterprisePolicyEnabled());
+  DCHECK(!browser_state->IsOffTheRecord());
+
+  auto registry = std::make_unique<policy::SchemaRegistry>();
+
+  if (chrome_schema.valid()) {
+    registry->RegisterComponent(
+        policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, ""),
+        chrome_schema);
+  }
+  registry->SetDomainReady(policy::POLICY_DOMAIN_CHROME);
+
+  if (global_registry) {
+    global_registry->Track(registry.get());
+  }
+
+  return registry;
+}
diff --git a/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.cc b/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.cc
index ec1acb6..db7d0d3 100644
--- a/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.cc
+++ b/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.cc
@@ -40,11 +40,11 @@
 void PrepareFactory(sync_preferences::PrefServiceSyncableFactory* factory,
                     const base::FilePath& pref_filename,
                     base::SequencedTaskRunner* pref_io_task_runner,
+                    policy::PolicyService* policy_service,
                     policy::BrowserPolicyConnector* policy_connector) {
-  if (policy_connector) {
+  if (policy_service || policy_connector) {
     DCHECK(IsEnterprisePolicyEnabled());
-    policy::PolicyService* policy_service =
-        policy_connector->GetPolicyService();
+    DCHECK(policy_service && policy_connector);
     factory->SetManagedPolicies(policy_service, policy_connector);
     factory->SetRecommendedPolicies(policy_service, policy_connector);
   }
@@ -63,9 +63,10 @@
     const base::FilePath& pref_filename,
     base::SequencedTaskRunner* pref_io_task_runner,
     const scoped_refptr<PrefRegistry>& pref_registry,
+    policy::PolicyService* policy_service,
     policy::BrowserPolicyConnector* policy_connector) {
   sync_preferences::PrefServiceSyncableFactory factory;
-  PrepareFactory(&factory, pref_filename, pref_io_task_runner,
+  PrepareFactory(&factory, pref_filename, pref_io_task_runner, policy_service,
                  policy_connector);
   return factory.Create(pref_registry.get());
 }
@@ -73,7 +74,9 @@
 std::unique_ptr<sync_preferences::PrefServiceSyncable> CreateBrowserStatePrefs(
     const base::FilePath& browser_state_path,
     base::SequencedTaskRunner* pref_io_task_runner,
-    const scoped_refptr<user_prefs::PrefRegistrySyncable>& pref_registry) {
+    const scoped_refptr<user_prefs::PrefRegistrySyncable>& pref_registry,
+    policy::PolicyService* policy_service,
+    policy::BrowserPolicyConnector* policy_connector) {
   // chrome_prefs::CreateProfilePrefs uses ProfilePrefStoreManager to create
   // the preference store however since Chrome on iOS does not need to track
   // preference modifications (as applications are sand-boxed), it can use a
@@ -81,7 +84,7 @@
   // on platforms that do not track preference modifications).
   sync_preferences::PrefServiceSyncableFactory factory;
   PrepareFactory(&factory, browser_state_path.Append(kPreferencesFilename),
-                 pref_io_task_runner, nullptr);
+                 pref_io_task_runner, policy_service, policy_connector);
   std::unique_ptr<sync_preferences::PrefServiceSyncable> pref_service =
       factory.CreateSyncable(pref_registry.get());
   return pref_service;
diff --git a/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.h b/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.h
index 6e936c4..21fa71a8 100644
--- a/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.h
+++ b/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.h
@@ -19,6 +19,7 @@
 
 namespace policy {
 class BrowserPolicyConnector;
+class PolicyService;
 }
 
 namespace sync_preferences {
@@ -38,12 +39,15 @@
     const base::FilePath& pref_filename,
     base::SequencedTaskRunner* pref_io_task_runner,
     const scoped_refptr<PrefRegistry>& pref_registry,
+    policy::PolicyService* policy_service,
     policy::BrowserPolicyConnector* policy_connector);
 
 std::unique_ptr<sync_preferences::PrefServiceSyncable> CreateBrowserStatePrefs(
     const base::FilePath& browser_state_path,
     base::SequencedTaskRunner* pref_io_task_runner,
-    const scoped_refptr<user_prefs::PrefRegistrySyncable>& pref_registry);
+    const scoped_refptr<user_prefs::PrefRegistrySyncable>& pref_registry,
+    policy::PolicyService* policy_service,
+    policy::BrowserPolicyConnector* policy_connector);
 
 // Creates an incognito copy of |pref_service| that shares most prefs but uses
 // a fresh non-persistent overlay for the user pref store.
diff --git a/ios/chrome/browser/reading_list/offline_page_tab_helper.mm b/ios/chrome/browser/reading_list/offline_page_tab_helper.mm
index 02b3a77b..837dc715 100644
--- a/ios/chrome/browser/reading_list/offline_page_tab_helper.mm
+++ b/ios/chrome/browser/reading_list/offline_page_tab_helper.mm
@@ -12,6 +12,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/timer/timer.h"
 #include "components/reading_list/core/offline_url_utils.h"
 #include "components/reading_list/core/reading_list_entry.h"
@@ -283,9 +284,9 @@
           .DirName();
 
   base::FilePath offline_path = entry->DistilledPath();
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_BLOCKING,
+      {base::MayBlock(), base::TaskPriority::USER_BLOCKING,
        base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
       base::BindOnce(&GetOfflineData, offline_root, offline_path),
       base::BindOnce(&OfflinePageTabHelper::LoadData, base::Unretained(this),
diff --git a/ios/chrome/browser/reading_list/reading_list_download_service.cc b/ios/chrome/browser/reading_list/reading_list_download_service.cc
index c436f7fc..2af1f99e 100644
--- a/ios/chrome/browser/reading_list/reading_list_download_service.cc
+++ b/ios/chrome/browser/reading_list/reading_list_download_service.cc
@@ -14,6 +14,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "components/reading_list/core/offline_url_utils.h"
 #include "components/reading_list/core/reading_list_entry.h"
 #include "components/reading_list/core/reading_list_model.h"
@@ -169,9 +170,9 @@
         break;
     }
   }
-  base::PostTaskAndReply(
+  base::ThreadPool::PostTaskAndReply(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE,
+      {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
        base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
       base::Bind(&::CleanUpFiles, OfflineRoot(), processed_directories),
       base::Bind(&ReadingListDownloadService::DownloadUnprocessedEntries,
diff --git a/ios/chrome/browser/reading_list/url_downloader.cc b/ios/chrome/browser/reading_list/url_downloader.cc
index 2024d122..5f7fab60 100644
--- a/ios/chrome/browser/reading_list/url_downloader.cc
+++ b/ios/chrome/browser/reading_list/url_downloader.cc
@@ -14,6 +14,7 @@
 #include "base/path_service.h"
 #include "base/stl_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "components/reading_list/core/offline_url_utils.h"
 #include "ios/chrome/browser/chrome_paths.h"
 #include "ios/chrome/browser/dom_distiller/distiller_viewer.h"
@@ -59,9 +60,8 @@
       base_directory_(chrome_profile_path),
       mime_type_(),
       url_loader_factory_(std::move(url_loader_factory)),
-      task_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::BEST_EFFORT,
+      task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})),
       task_tracker_() {}
 
diff --git a/ios/chrome/browser/sessions/session_service_ios.mm b/ios/chrome/browser/sessions/session_service_ios.mm
index ffd9c9e..ba977971 100644
--- a/ios/chrome/browser/sessions/session_service_ios.mm
+++ b/ios/chrome/browser/sessions/session_service_ios.mm
@@ -18,6 +18,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "base/time/time.h"
 #import "ios/chrome/browser/sessions/session_ios.h"
@@ -86,9 +87,8 @@
 
 - (instancetype)init {
   scoped_refptr<base::SequencedTaskRunner> taskRunner =
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::BEST_EFFORT,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::BLOCK_SHUTDOWN});
   return [self initWithTaskRunner:taskRunner];
 }
diff --git a/ios/chrome/browser/share_extension/share_extension_item_receiver.mm b/ios/chrome/browser/share_extension/share_extension_item_receiver.mm
index d688e057..da76ff9 100644
--- a/ios/chrome/browser/share_extension/share_extension_item_receiver.mm
+++ b/ios/chrome/browser/share_extension/share_extension_item_receiver.mm
@@ -15,6 +15,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/reading_list/core/reading_list_model.h"
@@ -132,9 +133,8 @@
   if (self) {
     _readingListModel = readingListModel;
     _bookmarkModel = bookmarkModel;
-    _taskRunner =
-        base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                         base::TaskPriority::BEST_EFFORT});
+    _taskRunner = base::ThreadPool::CreateSequencedTaskRunner(
+        {base::MayBlock(), base::TaskPriority::BEST_EFFORT});
 
     [[NSNotificationCenter defaultCenter]
         addObserver:self
diff --git a/ios/chrome/browser/snapshots/snapshot_cache.mm b/ios/chrome/browser/snapshots/snapshot_cache.mm
index 2fc38e5..fb79b7ff 100644
--- a/ios/chrome/browser/snapshots/snapshot_cache.mm
+++ b/ios/chrome/browser/snapshots/snapshot_cache.mm
@@ -14,13 +14,13 @@
 #include "base/files/file_util.h"
 #import "base/ios/crb_protocol_observers.h"
 #include "base/logging.h"
-#include "base/mac/scoped_nsobject.h"
 #include "base/path_service.h"
 #include "base/sequence_checker.h"
 #include "base/sequenced_task_runner.h"
 #include "base/stl_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "base/threading/scoped_blocking_call.h"
 #import "ios/chrome/browser/snapshots/snapshot_cache_observer.h"
@@ -284,9 +284,8 @@
     _cacheDirectory = cacheDirectory;
     _snapshotsScale = snapshotsScale;
 
-    _taskRunner =
-        base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                         base::TaskPriority::USER_VISIBLE});
+    _taskRunner = base::ThreadPool::CreateSequencedTaskRunner(
+        {base::MayBlock(), base::TaskPriority::USER_VISIBLE});
 
     _observers = [SnapshotCacheObservers observers];
     _markedIDs = [[NSMutableSet alloc] init];
@@ -353,13 +352,12 @@
 
   __weak SnapshotLRUCache* weakLRUCache = _lruCache;
   base::PostTaskAndReplyWithResult(
-      _taskRunner.get(), FROM_HERE,
-      base::BindOnce(^base::scoped_nsobject<UIImage>() {
+      _taskRunner.get(), FROM_HERE, base::BindOnce(^UIImage*() {
         // Retrieve the image on a high priority thread.
-        return base::scoped_nsobject<UIImage>(ReadImageForSessionFromDisk(
-            sessionID, IMAGE_TYPE_COLOR, snapshotsScale, cacheDirectory));
+        return ReadImageForSessionFromDisk(sessionID, IMAGE_TYPE_COLOR,
+                                           snapshotsScale, cacheDirectory);
       }),
-      base::BindOnce(^(base::scoped_nsobject<UIImage> image) {
+      base::BindOnce(^(UIImage* image) {
         if (image)
           [weakLRUCache setObject:image forKey:sessionID];
         callback(image);
@@ -543,8 +541,7 @@
 
   __weak SnapshotCache* weakSelf = self;
   base::PostTaskAndReplyWithResult(
-      _taskRunner.get(), FROM_HERE,
-      base::BindOnce(^base::scoped_nsobject<UIImage>() {
+      _taskRunner.get(), FROM_HERE, base::BindOnce(^UIImage*() {
         // If the image is not in the cache, load it from disk.
         UIImage* localImage = image;
         if (!localImage) {
@@ -553,9 +550,9 @@
         }
         if (localImage)
           localImage = GreyImage(localImage);
-        return base::scoped_nsobject<UIImage>(localImage);
+        return localImage;
       }),
-      base::BindOnce(^(base::scoped_nsobject<UIImage> greyImage) {
+      base::BindOnce(^(UIImage* greyImage) {
         [weakSelf saveGreyImage:greyImage forKey:sessionID];
       }));
 }
@@ -620,13 +617,12 @@
 
   __weak SnapshotCache* weakSelf = self;
   base::PostTaskAndReplyWithResult(
-      _taskRunner.get(), FROM_HERE,
-      base::BindOnce(^base::scoped_nsobject<UIImage>() {
+      _taskRunner.get(), FROM_HERE, base::BindOnce(^UIImage*() {
         // Retrieve the image on a high priority thread.
-        return base::scoped_nsobject<UIImage>(ReadImageForSessionFromDisk(
-            sessionID, IMAGE_TYPE_GREYSCALE, snapshotsScale, cacheDirectory));
+        return ReadImageForSessionFromDisk(sessionID, IMAGE_TYPE_GREYSCALE,
+                                           snapshotsScale, cacheDirectory);
       }),
-      base::BindOnce(^(base::scoped_nsobject<UIImage> image) {
+      base::BindOnce(^(UIImage* image) {
         if (image) {
           callback(image);
           return;
diff --git a/ios/chrome/browser/snapshots/snapshots_util.mm b/ios/chrome/browser/snapshots/snapshots_util.mm
index b940c52..13801b66 100644
--- a/ios/chrome/browser/snapshots/snapshots_util.mm
+++ b/ios/chrome/browser/snapshots/snapshots_util.mm
@@ -14,6 +14,7 @@
 #include "base/stl_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -40,9 +41,8 @@
   // list of snapshots stored on the device can't be obtained programmatically.
   std::vector<base::FilePath> snapshots_paths;
   GetSnapshotsPaths(&snapshots_paths);
-  base::PostTaskAndReply(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTaskAndReply(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&DeleteAllFiles, std::move(snapshots_paths)),
       std::move(callback));
 }
diff --git a/ios/chrome/browser/test/perf_test_with_bvc_ios.mm b/ios/chrome/browser/test/perf_test_with_bvc_ios.mm
index 64445f5..d6db722 100644
--- a/ios/chrome/browser/test/perf_test_with_bvc_ios.mm
+++ b/ios/chrome/browser/test/perf_test_with_bvc_ios.mm
@@ -116,7 +116,6 @@
   SessionRestorationBrowserAgent::FromBrowser(otr_browser_.get())
       ->RestoreSessionWindow(session.sessionWindows[0]);
 
-  command_dispatcher_ = [[CommandDispatcher alloc] init];
   // Create the browser view controller with its testing factory.
   bvc_factory_ = [[BrowserViewControllerDependencyFactory alloc]
       initWithBrowserState:chrome_browser_state_.get()
@@ -126,7 +125,6 @@
                    dependencyFactory:bvc_factory_
           applicationCommandEndpoint:nil
          browsingDataCommandEndpoint:nil
-                   commandDispatcher:command_dispatcher_
       browserContainerViewController:[[BrowserContainerViewController alloc]
                                          init]];
   [bvc_ setActive:YES];
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow.mm b/ios/chrome/browser/ui/authentication/authentication_flow.mm
index 8bbdf83..4f688d88 100644
--- a/ios/chrome/browser/ui/authentication/authentication_flow.mm
+++ b/ios/chrome/browser/ui/authentication/authentication_flow.mm
@@ -5,7 +5,6 @@
 #import "ios/chrome/browser/ui/authentication/authentication_flow.h"
 
 #include "base/logging.h"
-#include "base/mac/scoped_block.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/main/browser.h"
 #include "ios/chrome/browser/signin/authentication_service.h"
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm b/ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm
index 0ba339a4..8b71d18 100644
--- a/ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm
@@ -7,7 +7,6 @@
 #include <memory>
 
 #include "base/bind.h"
-#import "base/mac/scoped_block.h"
 #include "base/memory/ptr_util.h"
 #import "base/test/ios/wait_util.h"
 #include "components/pref_registry/pref_registry_syncable.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.mm b/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.mm
index 5d9d932..432b9484 100644
--- a/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.mm
+++ b/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.mm
@@ -106,10 +106,12 @@
               self.browser->GetBrowserState(), self);
 
   signin::IdentityManager* identityManager =
-      IdentityManagerFactory::GetForBrowserState(self.browserState);
+      IdentityManagerFactory::GetForBrowserState(
+          self.browser->GetBrowserState());
   self.mediator = [[AddAccountSigninMediator alloc]
       initWithIdentityInteractionManager:self.identityInteractionManager
-                             prefService:self.browserState->GetPrefs()
+                             prefService:self.browser->GetBrowserState()
+                                             ->GetPrefs()
                          identityManager:identityManager];
   self.mediator.delegate = self;
   [self.mediator handleSigninIntent:self.signinIntent
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_coordinator.h b/ios/chrome/browser/ui/authentication/signin/signin_coordinator.h
index 4de31039..8699b24 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_coordinator.h
+++ b/ios/chrome/browser/ui/authentication/signin/signin_coordinator.h
@@ -15,8 +15,6 @@
 class Browser;
 @class ChromeIdentity;
 
-@protocol ApplicationCommands;
-@protocol BrowsingDataCommands;
 @protocol SyncPresenter;
 
 // Called when the sign-in dialog is closed.
diff --git a/ios/chrome/browser/ui/authentication/signin/user_signin/BUILD.gn b/ios/chrome/browser/ui/authentication/signin/user_signin/BUILD.gn
index ef27784..91388250 100644
--- a/ios/chrome/browser/ui/authentication/signin/user_signin/BUILD.gn
+++ b/ios/chrome/browser/ui/authentication/signin/user_signin/BUILD.gn
@@ -9,11 +9,16 @@
   sources = [
     "user_signin_coordinator.h",
     "user_signin_coordinator.mm",
+    "user_signin_mediator.h",
+    "user_signin_mediator.mm",
     "user_signin_view_controller.h",
     "user_signin_view_controller.mm",
   ]
   deps = [
     "//ios/chrome/app/strings",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/ui/authentication",
+    "//ios/chrome/browser/ui/authentication/signin:signin_protected",
     "//ios/chrome/browser/ui/authentication/unified_consent",
     "//ios/chrome/browser/ui/collection_view/cells",
     "//ios/chrome/browser/ui/util",
diff --git a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_coordinator.mm b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_coordinator.mm
index 658d0f5d..7b94650 100644
--- a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_coordinator.mm
+++ b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_coordinator.mm
@@ -5,6 +5,11 @@
 
 #import "ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_coordinator.h"
 
+#import "base/metrics/user_metrics.h"
+#import "ios/chrome/browser/signin/authentication_service_factory.h"
+#import "ios/chrome/browser/ui/authentication/authentication_flow.h"
+#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h"
+#import "ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator.h"
 #import "ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_view_controller.h"
 #import "ios/chrome/browser/ui/authentication/unified_consent/unified_consent_coordinator.h"
 
@@ -16,7 +21,8 @@
 using signin_metrics::PromoAction;
 
 @interface UserSigninCoordinator () <UnifiedConsentCoordinatorDelegate,
-                                     UserSigninViewControllerDelegate>
+                                     UserSigninViewControllerDelegate,
+                                     UserSigninMediatorDelegate>
 
 // Coordinator that handles the user consent before the user signs in.
 @property(nonatomic, strong)
@@ -25,6 +31,8 @@
 @property(nonatomic, strong) SigninCoordinator* addAccountSigninCoordinator;
 // View controller that handles the sign-in UI.
 @property(nonatomic, strong) UserSigninViewController* viewController;
+// Mediator that handles the sign-in authentication state.
+@property(nonatomic, strong) UserSigninMediator* mediator;
 // Suggested identity shown at sign-in.
 @property(nonatomic, strong) ChromeIdentity* defaultIdentity;
 // View where the sign-in button was displayed.
@@ -52,13 +60,18 @@
   return self;
 }
 
-#pragma mark - ChromeCoordinator
+#pragma mark - SigninCoordinator
 
 - (void)start {
   [super start];
   self.viewController = [[UserSigninViewController alloc] init];
   self.viewController.delegate = self;
 
+  self.mediator = [[UserSigninMediator alloc]
+      initWithAuthenticationService:AuthenticationServiceFactory::
+                                        GetForBrowserState(self.browserState)];
+  self.mediator.delegate = self;
+
   self.unifiedConsentCoordinator = [[UnifiedConsentCoordinator alloc]
       initWithBaseViewController:nil
                          browser:self.browser];
@@ -81,8 +94,6 @@
 
 - (void)stop {
   [super stop];
-  [self.addAccountSigninCoordinator stop];
-  self.addAccountSigninCoordinator = nil;
   self.unifiedConsentCoordinator = nil;
 }
 
@@ -108,7 +119,7 @@
 - (void)unifiedConsentCoordinatorNeedPrimaryButtonUpdate:
     (UnifiedConsentCoordinator*)coordinator {
   DCHECK_EQ(self.unifiedConsentCoordinator, coordinator);
-  [self.viewController updatePrimaryButtonStyle];
+  [self userSigninMediatorNeedPrimaryButtonUpdate];
 }
 
 #pragma mark - UserSigninViewControllerDelegate
@@ -139,4 +150,51 @@
   [self.unifiedConsentCoordinator scrollToBottom];
 }
 
+- (void)userSigninViewControllerDidTapOnSkipSignin {
+  [self.mediator cancelSignin];
+}
+
+#pragma mark - UserSigninMediatorDelegate
+
+- (void)userSigninMediatorSigninFinishedWithResult:
+    (SigninCoordinatorResult)signinResult {
+  [self recordSigninMetricsWithResult:signinResult];
+
+  __weak UserSigninCoordinator* weakSelf = self;
+  ProceduralBlock completion = ^void() {
+    [weakSelf
+        runCompletionCallbackWithSigninResult:signinResult
+                                     identity:weakSelf.unifiedConsentCoordinator
+                                                  .selectedIdentity];
+  };
+
+  [self.viewController dismissViewControllerAnimated:YES completion:completion];
+
+  self.unifiedConsentCoordinator.delegate = nil;
+  self.unifiedConsentCoordinator = nil;
+}
+
+- (void)userSigninMediatorNeedPrimaryButtonUpdate {
+  [self.viewController updatePrimaryButtonStyle];
+}
+
+- (void)recordSigninMetricsWithResult:(SigninCoordinatorResult)signinResult {
+  switch (signinResult) {
+    case SigninCoordinatorResultSuccess: {
+      signin_metrics::LogSigninAccessPointCompleted(self.accessPoint,
+                                                    self.promoAction);
+      break;
+    }
+    case SigninCoordinatorResultCanceledByUser: {
+      base::RecordAction(base::UserMetricsAction("Signin_Undo_Signin"));
+      break;
+    }
+    case SigninCoordinatorResultInterrupted: {
+      // TODO(crbug.com/951145): Add metric when the sign-in has been
+      // interrupted.
+      break;
+    }
+  }
+}
+
 @end
diff --git a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator.h b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator.h
new file mode 100644
index 0000000..faf83d9
--- /dev/null
+++ b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator.h
@@ -0,0 +1,46 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_USER_SIGNIN_USER_SIGNIN_MEDIATOR_H_
+#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_USER_SIGNIN_USER_SIGNIN_MEDIATOR_H_
+
+#import <Foundation/Foundation.h>
+#import "components/signin/public/base/signin_metrics.h"
+#import "ios/chrome/browser/ui/authentication/signin/signin_enums.h"
+
+@class AuthenticationFlow;
+class AuthenticationService;
+
+// Delegate that handles interactions with unified consent coordinator.
+@protocol UserSigninMediatorDelegate
+
+// Updates sign-in state for the UserSigninCoordinator following sign-in
+// finishing its workflow.
+- (void)userSigninMediatorSigninFinishedWithResult:
+    (SigninCoordinatorResult)signinResult;
+
+// Updates the primary button for the user sign-in screen.
+- (void)userSigninMediatorNeedPrimaryButtonUpdate;
+
+@end
+
+// Mediator that handles the sign-in operation.
+@interface UserSigninMediator : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
+- (instancetype)initWithAuthenticationService:
+    (AuthenticationService*)authenticationService NS_DESIGNATED_INITIALIZER;
+
+// The delegate.
+@property(nonatomic, weak) id<UserSigninMediatorDelegate> delegate;
+
+// Property denoting whether the authentication operation is complete.
+@property(nonatomic, assign) BOOL isAuthenticationCompleted;
+
+// Reverts the sign-in operation.
+- (void)cancelSignin;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_USER_SIGNIN_USER_SIGNIN_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator.mm b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator.mm
new file mode 100644
index 0000000..ff9423e
--- /dev/null
+++ b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator.mm
@@ -0,0 +1,64 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator.h"
+
+#include <memory>
+
+#include "base/logging.h"
+#import "base/metrics/user_metrics.h"
+#import "ios/chrome/browser/signin/authentication_service.h"
+#import "ios/chrome/browser/ui/authentication/authentication_flow.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@interface UserSigninMediator ()
+
+// Manager for the authentication flow.
+@property(nonatomic, strong) AuthenticationFlow* authenticationFlow;
+// Chrome interface to the iOS shared authentication library.
+@property(nonatomic, assign) AuthenticationService* authenticationService;
+
+@end
+
+@implementation UserSigninMediator
+
+#pragma mark - Public
+
+- (instancetype)initWithAuthenticationService:
+    (AuthenticationService*)authenticationService {
+  self = [super init];
+  if (self) {
+    _authenticationService = authenticationService;
+  }
+  return self;
+}
+
+- (void)cancelSignin {
+  if (!self.isAuthenticationCompleted) {
+    [self.delegate userSigninMediatorSigninFinishedWithResult:
+                       SigninCoordinatorResultCanceledByUser];
+    self.isAuthenticationCompleted = YES;
+  } else if (self.isAuthenticationInProgress) {
+    // TODO(crbug.com/971989): Do not remove until the migration has been
+    // completed to ensure that the metrics calculated remain the same
+    // throughout the code changes.
+    base::RecordAction(base::UserMetricsAction("Signin_Undo_Signin"));
+    [self.authenticationFlow cancelAndDismiss];
+    self.authenticationService->SignOut(signin_metrics::ABORT_SIGNIN,
+                                        /*force_clear_browsing_data=*/false,
+                                        nil);
+    [self.delegate userSigninMediatorNeedPrimaryButtonUpdate];
+  }
+}
+
+#pragma mark - State
+
+- (BOOL)isAuthenticationInProgress {
+  return self.authenticationFlow != nil;
+}
+
+@end
diff --git a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_view_controller.h b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_view_controller.h
index 5a31c61..f7a2e3c 100644
--- a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_view_controller.h
+++ b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_view_controller.h
@@ -20,6 +20,9 @@
 // Performs scroll operation on unified consent screen.
 - (void)userSigninViewControllerDidScrollOnUnifiedConsent;
 
+// Performs operations to skip sign-in or undo existing sign-in.
+- (void)userSigninViewControllerDidTapOnSkipSignin;
+
 @end
 
 // View controller used to show sign-in UI.
@@ -29,7 +32,7 @@
 @property(nonatomic, weak) id<UserSigninViewControllerDelegate> delegate;
 
 // View controller that handles the user consent before the user signs in.
-@property UIViewController* unifiedConsentViewController;
+@property(nonatomic, weak) UIViewController* unifiedConsentViewController;
 
 // Informs the view controller that the unified consent has reached the bottom
 // of the screen.
diff --git a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_view_controller.mm b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_view_controller.mm
index 899be9d..d127dec5 100644
--- a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_view_controller.mm
+++ b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_view_controller.mm
@@ -257,8 +257,7 @@
 #pragma mark - Events
 
 - (void)onSkipSigninButtonPressed:(id)sender {
-  // TODO(crbug.com/971989): Populate action.
-  NOTIMPLEMENTED();
+  [self.delegate userSigninViewControllerDidTapOnSkipSignin];
 }
 
 - (void)onConfirmationButtonPressed:(id)sender {
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_mediator.mm b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_mediator.mm
index bd4822fc..10b783d 100644
--- a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_mediator.mm
+++ b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_mediator.mm
@@ -6,7 +6,6 @@
 
 #include "base/ios/block_types.h"
 #include "base/mac/foundation_util.h"
-#include "base/mac/scoped_block.h"
 #import "base/strings/sys_string_conversions.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/common/autofill_features.h"
diff --git a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
index ded7ff6..1c94d3e 100644
--- a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
@@ -291,7 +291,6 @@
                    dependencyFactory:factory
           applicationCommandEndpoint:self.applicationCommandHandler
          browsingDataCommandEndpoint:self.browsingDataCommandHandler
-                   commandDispatcher:self.dispatcher
       browserContainerViewController:self.browserContainerCoordinator
                                          .viewController];
 }
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.h b/ios/chrome/browser/ui/browser_view/browser_view_controller.h
index 5e3cf9ba..6255bd80 100644
--- a/ios/chrome/browser/ui/browser_view/browser_view_controller.h
+++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.h
@@ -21,7 +21,6 @@
 @protocol BrowsingDataCommands;
 @class BrowserContainerViewController;
 @class BrowserViewControllerDependencyFactory;
-@class CommandDispatcher;
 @protocol FindInPageCommands;
 @protocol OmniboxFocuser;
 @protocol PasswordBreachCommands;
@@ -53,7 +52,6 @@
             (id<ApplicationCommands>)applicationCommandEndpoint
        browsingDataCommandEndpoint:
            (id<BrowsingDataCommands>)browsingDataCommandEndpoint
-                 commandDispatcher:(CommandDispatcher*)commandDispatcher
     browserContainerViewController:
         (BrowserContainerViewController*)browserContainerViewController
     NS_DESIGNATED_INITIALIZER;
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
index 938488f..a449b1a9 100644
--- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -716,7 +716,6 @@
             (id<ApplicationCommands>)applicationCommandEndpoint
        browsingDataCommandEndpoint:
            (id<BrowsingDataCommands>)browsingDataCommandEndpoint
-                 commandDispatcher:(CommandDispatcher*)commandDispatcher
     browserContainerViewController:
         (BrowserContainerViewController*)browserContainerViewController {
   self = [super initWithNibName:nil bundle:base::mac::FrameworkBundle()];
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller_unittest.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller_unittest.mm
index 58ebfb81..ef0f7de 100644
--- a/ios/chrome/browser/ui/browser_view/browser_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_view_controller_unittest.mm
@@ -64,8 +64,6 @@
 namespace {
 class BrowserViewControllerTest : public BlockCleanupTest {
  public:
-  BrowserViewControllerTest() : web_state_list_(&web_state_list_delegate_) {}
-
  protected:
   void SetUp() override {
     BlockCleanupTest::SetUp();
@@ -94,22 +92,6 @@
     chrome_browser_state_ = test_cbs_builder.Build();
     ASSERT_TRUE(chrome_browser_state_->CreateHistoryService(true));
 
-    // Set up mock TabModel.
-    id tabModel = [OCMockObject niceMockForClass:[TabModel class]];
-    OCMStub([tabModel webStateList]).andReturn(&web_state_list_);
-    OCMStub([tabModel browserState])
-        .andReturn(
-            // As OCMock compare types as string, the cast is required otherwise
-            // it will complain that the value has an incompatible type.
-            static_cast<ChromeBrowserState*>(chrome_browser_state_.get()));
-
-    // Enable web usage for the mock TabModel's WebStateList.
-    WebStateListWebUsageEnabler* enabler =
-        WebStateListWebUsageEnablerFactory::GetInstance()->GetForBrowserState(
-            chrome_browser_state_.get());
-    enabler->SetWebStateList([tabModel webStateList]);
-    enabler->SetWebUsageEnabled(true);
-
     id passKitController =
         [OCMockObject niceMockForClass:[PKAddPassesViewController class]];
     passKitViewController_ = passKitController;
@@ -121,20 +103,16 @@
         mockForClass:[BrowserViewControllerDependencyFactory class]];
     [[[factory stub] andReturn:bvcHelper_] newBrowserViewControllerHelper];
 
-    tabModel_ = tabModel;
     dependencyFactory_ = factory;
-    command_dispatcher_ = [[CommandDispatcher alloc] init];
-    id mockPageInfoCommandHandler =
-        OCMProtocolMock(@protocol(PageInfoCommands));
-    [command_dispatcher_ startDispatchingToTarget:mockPageInfoCommandHandler
-                                      forProtocol:@protocol(PageInfoCommands)];
-    id mockApplicationCommandHandler =
-        OCMProtocolMock(@protocol(ApplicationCommands));
 
-    [[tabModel stub] closeAllTabs];
+    browser_ = std::make_unique<TestBrowser>(chrome_browser_state_.get());
 
-    browser_ =
-        std::make_unique<TestBrowser>(chrome_browser_state_.get(), tabModel_);
+    WebStateListWebUsageEnabler* enabler =
+        WebStateListWebUsageEnablerFactory::GetInstance()->GetForBrowserState(
+            chrome_browser_state_.get());
+    enabler->SetWebStateList(browser_->GetWebStateList());
+    enabler->SetWebUsageEnabled(true);
+
     SessionRestorationBrowserAgent::CreateForBrowser(
         browser_.get(), [[TestSessionService alloc] init]);
 
@@ -148,15 +126,20 @@
     [browser_->GetCommandDispatcher()
         startDispatchingToTarget:mockTextZoomCommandHandler
                      forProtocol:@protocol(TextZoomCommands)];
+    id mockPageInfoCommandHandler =
+        OCMProtocolMock(@protocol(PageInfoCommands));
+    [browser_->GetCommandDispatcher()
+        startDispatchingToTarget:mockPageInfoCommandHandler
+                     forProtocol:@protocol(PageInfoCommands)];
 
     // Create three web states.
     for (int i = 0; i < 3; i++) {
       web::WebState::CreateParams params(chrome_browser_state_.get());
       std::unique_ptr<web::WebState> webState = web::WebState::Create(params);
       AttachTabHelpers(webState.get(), NO);
-      tabModel_.webStateList->InsertWebState(0, std::move(webState), 0,
-                                             WebStateOpener());
-      tabModel_.webStateList->ActivateWebStateAt(0);
+      browser_->GetWebStateList()->InsertWebState(0, std::move(webState), 0,
+                                                  WebStateOpener());
+      browser_->GetWebStateList()->ActivateWebStateAt(0);
     }
 
     // Load TemplateURLService.
@@ -166,12 +149,14 @@
     template_url_service->Load();
 
     // Instantiate the BVC.
+    id mockApplicationCommandHandler =
+        OCMProtocolMock(@protocol(ApplicationCommands));
+
     bvc_ = [[BrowserViewController alloc]
                        initWithBrowser:browser_.get()
                      dependencyFactory:factory
             applicationCommandEndpoint:mockApplicationCommandHandler
            browsingDataCommandEndpoint:nil
-                     commandDispatcher:command_dispatcher_
         browserContainerViewController:[[BrowserContainerViewController alloc]
                                            init]];
 
@@ -186,15 +171,14 @@
     [bvc_ shutdown];
 
     // Cleanup to avoid debugger crash in non empty observer lists.
-    WebStateList* web_state_list = tabModel_.webStateList;
-    web_state_list->CloseAllWebStates(
+    browser_->GetWebStateList()->CloseAllWebStates(
         WebStateList::ClosingFlags::CLOSE_NO_FLAGS);
 
     BlockCleanupTest::TearDown();
   }
 
   web::WebState* ActiveWebState() {
-    return tabModel_.webStateList->GetActiveWebState();
+    return browser_->GetWebStateList()->GetActiveWebState();
   }
 
   MOCK_METHOD0(OnCompletionCalled, void());
@@ -207,9 +191,6 @@
   web::WebTaskEnvironment task_environment_;
   IOSChromeScopedTestingLocalState local_state_;
   std::unique_ptr<TestChromeBrowserState> chrome_browser_state_;
-  FakeWebStateListDelegate web_state_list_delegate_;
-  WebStateList web_state_list_;
-  TabModel* tabModel_;
   std::unique_ptr<Browser> browser_;
   BrowserViewControllerHelper* bvcHelper_;
   PKAddPassesViewController* passKitViewController_;
@@ -264,7 +245,7 @@
 // Verifies the the next/previous tab commands from the keyboard work OK.
 TEST_F(BrowserViewControllerTest, TestFocusNextPrevious) {
   // Add more web states.
-  WebStateList* web_state_list = tabModel_.webStateList;
+  WebStateList* web_state_list = browser_->GetWebStateList();
   // This test assumes there are exactly three web states in the list.
   ASSERT_EQ(web_state_list->count(), 3);
 
@@ -290,7 +271,7 @@
 // Tests that WebState::WasShown() and WebState::WasHidden() is properly called
 // for WebState activations in the BrowserViewController's WebStateList.
 TEST_F(BrowserViewControllerTest, UpdateWebStateVisibility) {
-  WebStateList* web_state_list = tabModel_.webStateList;
+  WebStateList* web_state_list = browser_->GetWebStateList();
   ASSERT_EQ(3, web_state_list->count());
 
   // Activate each WebState in the list and check the visibility.
diff --git a/ios/chrome/browser/ui/download/download_manager_mediator.mm b/ios/chrome/browser/ui/download/download_manager_mediator.mm
index c981e4c..244c3a3 100644
--- a/ios/chrome/browser/ui/download/download_manager_mediator.mm
+++ b/ios/chrome/browser/ui/download/download_manager_mediator.mm
@@ -12,6 +12,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "ios/chrome/browser/download/download_directory_util.h"
 #import "ios/chrome/browser/download/google_drive_app_util.h"
 #include "ios/chrome/grit/ios_strings.h"
@@ -58,9 +59,8 @@
   // "Start Download" button.
   [consumer_ setState:kDownloadManagerStateInProgress];
 
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE},
       base::BindOnce(&base::CreateDirectory, download_dir),
       base::BindOnce(&DownloadManagerMediator::DownloadWithDestinationDir,
                      weak_ptr_factory_.GetWeakPtr(), download_dir, task_));
@@ -80,8 +80,8 @@
     return;
   }
 
-  auto task_runner = base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT});
+  auto task_runner = base::ThreadPool::CreateSequencedTaskRunner(
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT});
   base::string16 file_name = task_->GetSuggestedFilename();
   base::FilePath path = destination_dir.Append(base::UTF16ToUTF8(file_name));
   auto writer = std::make_unique<net::URLFetcherFileWriter>(task_runner, path);
diff --git a/ios/chrome/browser/ui/first_run/first_run_util.mm b/ios/chrome/browser/ui/first_run/first_run_util.mm
index 1afc254..494d052 100644
--- a/ios/chrome/browser/ui/first_run/first_run_util.mm
+++ b/ios/chrome/browser/ui/first_run/first_run_util.mm
@@ -10,6 +10,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
@@ -143,9 +144,8 @@
 void WriteFirstRunSentinelAndRecordMetrics(ChromeBrowserState* browserState,
                                            BOOL sign_in_attempted,
                                            BOOL has_sso_account) {
-  base::PostTask(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&CreateSentinel));
   RecordFirstRunMetricsInternal(browserState, sign_in_attempted,
                                 has_sso_account);
diff --git a/ios/chrome/browser/ui/image_util/image_saver.mm b/ios/chrome/browser/ui/image_util/image_saver.mm
index 226ff12..28af9e77 100644
--- a/ios/chrome/browser/ui/image_util/image_saver.mm
+++ b/ios/chrome/browser/ui/image_util/image_saver.mm
@@ -11,6 +11,7 @@
 #include "base/format_macros.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "components/image_fetcher/ios/ios_image_data_fetcher_wrapper.h"
 #include "components/strings/grit/components_strings.h"
@@ -124,9 +125,9 @@
 - (void)saveImage:(NSData*)data
     withFileExtension:(NSString*)fileExtension
            completion:(void (^)(BOOL, NSError*))completion {
-  base::PostTask(
+  base::ThreadPool::PostTask(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
        base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
       base::BindOnce(^{
         base::ScopedBlockingCall scoped_blocking_call(
@@ -151,10 +152,9 @@
                   creationRequestForAssetFromImageAtFileURL:fileURL];
             }
             completionHandler:^(BOOL success, NSError* error) {
-              base::PostTask(
+              base::ThreadPool::PostTask(
                   FROM_HERE,
-                  {base::ThreadPool(), base::MayBlock(),
-                   base::TaskPriority::BEST_EFFORT,
+                  {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
                    base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
                   base::BindOnce(^{
                     base::ScopedBlockingCall scoped_blocking_call(
diff --git a/ios/chrome/browser/ui/ntp/ntp_tile_saver.mm b/ios/chrome/browser/ui/ntp/ntp_tile_saver.mm
index 932ffcf..e0a2d106 100644
--- a/ios/chrome/browser/ui/ntp/ntp_tile_saver.mm
+++ b/ios/chrome/browser/ui/ntp/ntp_tile_saver.mm
@@ -8,6 +8,7 @@
 #include "base/hash/md5.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "components/favicon/core/fallback_url_util.h"
 #include "components/ntp_tiles/ntp_tile.h"
@@ -127,9 +128,8 @@
   }
   UpdateTileList(most_visited_data);
 
-  base::PostTaskAndReply(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTaskAndReply(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&ClearOutdatedIcons, most_visited_data,
                      favicons_directory),
       base::BindOnce(
@@ -208,10 +208,9 @@
             [imageData writeToURL:fileURL atomically:YES];
           });
 
-          base::PostTask(FROM_HERE,
-                         {base::ThreadPool(), base::MayBlock(),
-                          base::TaskPriority::BEST_EFFORT},
-                         std::move(writeImage));
+          base::ThreadPool::PostTask(
+              FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+              std::move(writeImage));
         } else {
           NSDictionary* tiles = ReadSavedMostVisited();
           NTPTile* tile = [tiles objectForKey:siteNSURL];
@@ -234,10 +233,9 @@
             [[NSFileManager defaultManager] removeItemAtURL:fileURL error:nil];
           });
 
-          base::PostTask(FROM_HERE,
-                         {base::ThreadPool(), base::MayBlock(),
-                          base::TaskPriority::BEST_EFFORT},
-                         std::move(removeImage));
+          base::ThreadPool::PostTask(
+              FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+              std::move(removeImage));
         }
       };
 
diff --git a/ios/chrome/browser/ui/open_in/open_in_controller.mm b/ios/chrome/browser/ui/open_in/open_in_controller.mm
index 3f1083d9..74aed6d5 100644
--- a/ios/chrome/browser/ui/open_in/open_in_controller.mm
+++ b/ios/chrome/browser/ui/open_in/open_in_controller.mm
@@ -13,6 +13,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "components/strings/grit/components_strings.h"
 #import "ios/chrome/browser/ui/alert_coordinator/alert_coordinator.h"
@@ -234,9 +235,8 @@
         initWithTarget:self
                 action:@selector(handleTapFrom:)];
     [_tapRecognizer setDelegate:self];
-    _sequencedTaskRunner =
-        base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                         base::TaskPriority::BEST_EFFORT});
+    _sequencedTaskRunner = base::ThreadPool::CreateSequencedTaskRunner(
+        {base::MayBlock(), base::TaskPriority::BEST_EFFORT});
     _isOpenInMenuDisplayed = NO;
     _previousScrollViewOffset = 0;
   }
diff --git a/ios/chrome/browser/ui/recent_tabs/BUILD.gn b/ios/chrome/browser/ui/recent_tabs/BUILD.gn
index f8ac7df..0fb83bd9 100644
--- a/ios/chrome/browser/ui/recent_tabs/BUILD.gn
+++ b/ios/chrome/browser/ui/recent_tabs/BUILD.gn
@@ -75,6 +75,7 @@
     "//ios/chrome/browser/sessions",
     "//ios/chrome/browser/sessions:serialisation",
     "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/authentication",
     "//ios/chrome/browser/ui/authentication/cells",
     "//ios/chrome/browser/ui/commands",
diff --git a/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.h b/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.h
index 8195303..8535777 100644
--- a/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.h
+++ b/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.h
@@ -33,6 +33,9 @@
 @property(nonatomic, weak) id<RecentTabsTableViewControllerDelegate> delegate;
 // WebStateList for tabs restored by this object.
 @property(nonatomic, assign) WebStateList* webStateList;
+// Whether the updates of the RecentTabs should be ignored. Setting this to NO
+// would trigger a reload of the TableView.
+@property(nonatomic, assign) BOOL preventUpdates;
 
 // Delegate to present the tab UI.
 @property(nonatomic, weak) id<RecentTabsPresentationDelegate>
diff --git a/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.mm b/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.mm
index 19e176f..aa337d2 100644
--- a/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.mm
+++ b/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.mm
@@ -45,6 +45,7 @@
 #import "ios/chrome/browser/ui/table_view/cells/table_view_url_item.h"
 #import "ios/chrome/browser/ui/table_view/chrome_table_view_styler.h"
 #import "ios/chrome/browser/ui/table_view/table_view_favicon_data_source.h"
+#include "ios/chrome/browser/ui/ui_feature_flags.h"
 #include "ios/chrome/browser/ui/util/ui_util.h"
 #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
 #import "ios/chrome/browser/url_loading/url_loading_params.h"
@@ -109,11 +110,6 @@
                                             UIGestureRecognizerDelegate> {
   std::unique_ptr<synced_sessions::SyncedSessions> _syncedSessions;
 }
-// There is no need to update the table view when other view controllers
-// are obscuring the table view. Bookkeeping is based on |-viewWillAppear:|
-// and |-viewWillDisappear methods. Note that the |Did| methods are not reliably
-// called (e.g., edge case in multitasking).
-@property(nonatomic, assign) BOOL updatesTableView;
 // The service that manages the recently closed tabs
 @property(nonatomic, assign) sessions::TabRestoreService* tabRestoreService;
 // The sync state.
@@ -158,19 +154,26 @@
 
 - (void)viewWillAppear:(BOOL)animated {
   [super viewWillAppear:animated];
-  self.updatesTableView = YES;
-  // The table view might get stale while hidden, so we need to forcibly refresh
-  // it here.
-  [self loadModel];
-  [self.tableView reloadData];
+  if (!self.preventUpdates) {
+    // The table view might get stale while hidden, so we need to forcibly
+    // refresh it here.
+    [self loadModel];
+    [self.tableView reloadData];
+  }
+  if (!base::FeatureList::IsEnabled(kContainedBVC)) {
+    self.preventUpdates = NO;
+  }
 }
 
 - (void)viewWillDisappear:(BOOL)animated {
-  self.updatesTableView = NO;
+  if (!base::FeatureList::IsEnabled(kContainedBVC)) {
+    self.preventUpdates = YES;
+  }
   [super viewWillDisappear:animated];
 }
 
 #pragma mark - Setters & Getters
+
 // Some RecentTabs services depend on objects not present in the OffTheRecord
 // BrowserState, in order to prevent crashes set |_browserState| to
 // |browserState|->OriginalChromeBrowserState. While doing this check if
@@ -182,6 +185,18 @@
   }
 }
 
+- (void)setPreventUpdates:(BOOL)preventUpdates {
+  if (_preventUpdates == preventUpdates)
+    return;
+
+  _preventUpdates = preventUpdates;
+
+  if (preventUpdates || !base::FeatureList::IsEnabled(kContainedBVC))
+    return;
+  [self loadModel];
+  [self.tableView reloadData];
+}
+
 #pragma mark - TableViewModel
 
 - (void)loadModel {
@@ -551,7 +566,7 @@
       SessionSyncServiceFactory::GetForBrowserState(self.browserState);
   _syncedSessions.reset(new synced_sessions::SyncedSessions(syncService));
 
-  if (self.updatesTableView) {
+  if (!self.preventUpdates) {
     // Update the TableView and TableViewModel sections to match the new
     // sessionState.
     // Turn Off animations since UITableViewRowAnimationNone still animates.
@@ -575,6 +590,7 @@
   // Table updates must happen before |sessionState| gets updated, since some
   // table updates rely on knowing the previous state.
   self.sessionState = newSessionState;
+
   if (self.sessionState != SessionsSyncUserState::USER_SIGNED_OUT) {
     [self.signinPromoViewMediator signinPromoViewIsRemoved];
     self.signinPromoViewMediator.consumer = nil;
@@ -583,7 +599,7 @@
 }
 
 - (void)refreshRecentlyClosedTabs {
-  if (!self.updatesTableView)
+  if (self.preventUpdates)
     return;
 
   [self.tableView performBatchUpdates:^{
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_edit_table_view_controller.mm b/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_edit_table_view_controller.mm
index da2dcbc..198ef8a 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_edit_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_edit_table_view_controller.mm
@@ -7,7 +7,6 @@
 #include "base/format_macros.h"
 #import "base/ios/block_types.h"
 #import "base/mac/foundation_util.h"
-#include "base/mac/scoped_block.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
 #include "components/autofill/core/browser/data_model/credit_card.h"
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_profile_settings_egtest.mm b/ios/chrome/browser/ui/settings/autofill/autofill_profile_settings_egtest.mm
index 9a227b8..d0c5cd2e4 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_profile_settings_egtest.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_profile_settings_egtest.mm
@@ -114,7 +114,8 @@
       ButtonWithAccessibilityLabelId(IDS_AUTOFILL_ADDRESSES_SETTINGS_TITLE);
   [[[EarlGrey selectElementWithMatcher:addressesButton]
          usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, 200)
-      onElementWithMatcher:grey_kindOfClassName(@"UITableView")]
+      onElementWithMatcher:grey_allOf(grey_kindOfClassName(@"UITableView"),
+                                      grey_sufficientlyVisible(), nil)]
       performAction:grey_tap()];
 }
 
diff --git a/ios/chrome/browser/ui/settings/google_services/accounts_table_egtest.mm b/ios/chrome/browser/ui/settings/google_services/accounts_table_egtest.mm
index 8a150c7..6bd35e9 100644
--- a/ios/chrome/browser/ui/settings/google_services/accounts_table_egtest.mm
+++ b/ios/chrome/browser/ui/settings/google_services/accounts_table_egtest.mm
@@ -235,7 +235,7 @@
 // Tests that the user isn't signed out and the UI is correct when the
 // disconnect is cancelled in the Account Settings screen.
 - (void)testSignInDisconnectCancelled {
-// TODO(crbug.com/669613): Re-enable this test on devices.
+  // TODO(crbug.com/669613): Re-enable this test on devices.
 #if !TARGET_IPHONE_SIMULATOR
   EARL_GREY_TEST_DISABLED(@"Test disabled on device.");
 #endif
diff --git a/ios/chrome/browser/ui/settings/password/password_exporter.mm b/ios/chrome/browser/ui/settings/password/password_exporter.mm
index 7f89c98b..e06c81b 100644
--- a/ios/chrome/browser/ui/settings/password/password_exporter.mm
+++ b/ios/chrome/browser/ui/settings/password/password_exporter.mm
@@ -10,6 +10,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "components/autofill/core/common/password_form.h"
@@ -43,9 +44,8 @@
 - (void)serializePasswords:
             (std::vector<std::unique_ptr<autofill::PasswordForm>>)passwords
                    handler:(void (^)(std::string))serializedPasswordsHandler {
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_BLOCKING},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_BLOCKING},
       base::BindOnce(&password_manager::PasswordCSVWriter::SerializePasswords,
                      std::move(passwords)),
       base::BindOnce(serializedPasswordsHandler));
@@ -90,9 +90,8 @@
     }
     return WriteToURLStatus::SUCCESS;
   };
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_BLOCKING},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_BLOCKING},
       base::BindOnce(writeToFile), base::BindOnce(handler));
 }
 
@@ -326,9 +325,8 @@
 - (void)deleteTemporaryFile:(NSURL*)passwordsTempFileURL {
   NSURL* uniqueDirectoryURL =
       [passwordsTempFileURL URLByDeletingLastPathComponent];
-  base::PostTask(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(^{
         NSFileManager* fileManager = [NSFileManager defaultManager];
         base::ScopedBlockingCall scoped_blocking_call(
diff --git a/ios/chrome/browser/ui/tab_grid/tab_grid_view_controller.mm b/ios/chrome/browser/ui/tab_grid/tab_grid_view_controller.mm
index c61e419..b90b66a 100644
--- a/ios/chrome/browser/ui/tab_grid/tab_grid_view_controller.mm
+++ b/ios/chrome/browser/ui/tab_grid/tab_grid_view_controller.mm
@@ -378,6 +378,7 @@
   if (base::FeatureList::IsEnabled(kContainedBVC)) {
     [self.incognitoTabsViewController contentWillAppearAnimated:animated];
     [self.regularTabsViewController contentWillAppearAnimated:animated];
+    self.remoteTabsViewController.preventUpdates = NO;
   }
 }
 
@@ -405,6 +406,7 @@
   if (base::FeatureList::IsEnabled(kContainedBVC)) {
     [self.incognitoTabsViewController contentWillDisappear];
     [self.regularTabsViewController contentWillDisappear];
+    self.remoteTabsViewController.preventUpdates = YES;
   }
 }
 
diff --git a/ios/chrome/browser/ui/tabs/BUILD.gn b/ios/chrome/browser/ui/tabs/BUILD.gn
index 883280b..215af88b 100644
--- a/ios/chrome/browser/ui/tabs/BUILD.gn
+++ b/ios/chrome/browser/ui/tabs/BUILD.gn
@@ -60,8 +60,8 @@
     "//ios/chrome/browser/ui/util",
     "//ios/chrome/browser/web_state_list",
     "//ios/chrome/common",
-    "//ios/chrome/common:common_extension",
     "//ios/chrome/common/ui/colors",
+    "//ios/chrome/common/ui/elements",
     "//ios/chrome/common/ui/util",
     "//ios/third_party/material_components_ios",
     "//ios/web",
diff --git a/ios/chrome/browser/ui/tabs/tab_view.mm b/ios/chrome/browser/ui/tabs/tab_view.mm
index dc594e57..158e750 100644
--- a/ios/chrome/browser/ui/tabs/tab_view.mm
+++ b/ios/chrome/browser/ui/tabs/tab_view.mm
@@ -18,8 +18,8 @@
 #import "ios/chrome/browser/ui/image_util/image_util.h"
 #include "ios/chrome/browser/ui/util/rtl_geometry.h"
 #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
-#import "ios/chrome/common/highlight_button.h"
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
+#import "ios/chrome/common/ui/elements/highlight_button.h"
 #import "ios/chrome/common/ui/util/constraints_ui_util.h"
 #include "ios/chrome/grit/ios_strings.h"
 #import "ios/third_party/material_components_ios/src/components/ActivityIndicator/src/MaterialActivityIndicator.h"
diff --git a/ios/chrome/browser/ui/translate/BUILD.gn b/ios/chrome/browser/ui/translate/BUILD.gn
index 681b842..398284e 100644
--- a/ios/chrome/browser/ui/translate/BUILD.gn
+++ b/ios/chrome/browser/ui/translate/BUILD.gn
@@ -75,8 +75,8 @@
     "//ios/chrome/browser/ui/translate/resources:translate_icon",
     "//ios/chrome/browser/ui/translate/resources:translate_options",
     "//ios/chrome/browser/ui/util",
-    "//ios/chrome/common:common_extension",
-    "//ios/chrome/common/ui/colors:colors",
+    "//ios/chrome/common/ui/colors",
+    "//ios/chrome/common/ui/elements",
     "//ios/chrome/common/ui/util",
     "//ios/third_party/material_components_ios",
     "//ui/base",
diff --git a/ios/chrome/browser/ui/translate/translate_infobar_language_tab_view.mm b/ios/chrome/browser/ui/translate/translate_infobar_language_tab_view.mm
index 38ed5cc..e556e0d0 100644
--- a/ios/chrome/browser/ui/translate/translate_infobar_language_tab_view.mm
+++ b/ios/chrome/browser/ui/translate/translate_infobar_language_tab_view.mm
@@ -9,8 +9,8 @@
 #import "ios/chrome/browser/ui/translate/translate_infobar_language_tab_strip_view.h"
 #import "ios/chrome/browser/ui/translate/translate_infobar_language_tab_view_delegate.h"
 #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
-#import "ios/chrome/common/highlight_button.h"
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
+#import "ios/chrome/common/ui/elements/highlight_button.h"
 #import "ios/chrome/common/ui/util/constraints_ui_util.h"
 #import "ios/third_party/material_components_ios/src/components/ActivityIndicator/src/MaterialActivityIndicator.h"
 
diff --git a/ios/chrome/common/BUILD.gn b/ios/chrome/common/BUILD.gn
index 64d82dda..29c3a848 100644
--- a/ios/chrome/common/BUILD.gn
+++ b/ios/chrome/common/BUILD.gn
@@ -31,19 +31,6 @@
   libs = [ "QuartzCore.framework" ]
 }
 
-source_set("common_extension") {
-  sources = [
-    "highlight_button.h",
-    "highlight_button.mm",
-  ]
-
-  libs = [ "UIKit.framework" ]
-
-  public_deps = [ ":timing" ]
-
-  configs += [ "//build/config/compiler:enable_arc" ]
-}
-
 source_set("timing") {
   sources = [
     "material_timing.h",
diff --git a/ios/chrome/common/app_group/app_group_metrics.h b/ios/chrome/common/app_group/app_group_metrics.h
index 0c3f589b..4b74d35d 100644
--- a/ios/chrome/common/app_group/app_group_metrics.h
+++ b/ios/chrome/common/app_group/app_group_metrics.h
@@ -7,7 +7,6 @@
 
 #import <Foundation/Foundation.h>
 
-#include "base/mac/scoped_block.h"
 #include "ios/chrome/common/app_group/app_group_constants.h"
 
 namespace app_group {
diff --git a/ios/chrome/common/app_group/app_group_metrics_client.h b/ios/chrome/common/app_group/app_group_metrics_client.h
index 231ec09..f23926ca 100644
--- a/ios/chrome/common/app_group/app_group_metrics_client.h
+++ b/ios/chrome/common/app_group/app_group_metrics_client.h
@@ -7,7 +7,6 @@
 
 #import <Foundation/Foundation.h>
 
-#include "base/mac/scoped_block.h"
 #include "ios/chrome/common/app_group/app_group_constants.h"
 
 namespace app_group {
diff --git a/ios/chrome/common/string_util.mm b/ios/chrome/common/string_util.mm
index 56153fa..72e18f2 100644
--- a/ios/chrome/common/string_util.mm
+++ b/ios/chrome/common/string_util.mm
@@ -7,7 +7,6 @@
 #import <UIKit/UIKit.h>
 
 #include "base/logging.h"
-#include "base/mac/scoped_block.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/sys_string_conversions.h"
 
diff --git a/ios/chrome/common/ui/elements/BUILD.gn b/ios/chrome/common/ui/elements/BUILD.gn
new file mode 100644
index 0000000..ff79c82
--- /dev/null
+++ b/ios/chrome/common/ui/elements/BUILD.gn
@@ -0,0 +1,19 @@
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/buildflag_header.gni")
+import("//build/config/ios/ios_sdk.gni")
+
+source_set("elements") {
+  sources = [
+    "highlight_button.h",
+    "highlight_button.mm",
+  ]
+
+  libs = [ "UIKit.framework" ]
+
+  deps = [ "//ios/chrome/common:timing" ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
diff --git a/ios/chrome/common/highlight_button.h b/ios/chrome/common/ui/elements/highlight_button.h
similarity index 77%
rename from ios/chrome/common/highlight_button.h
rename to ios/chrome/common/ui/elements/highlight_button.h
index 44cfe89..1e1b2a0 100644
--- a/ios/chrome/common/highlight_button.h
+++ b/ios/chrome/common/ui/elements/highlight_button.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 IOS_CHROME_COMMON_HIGHLIGHT_BUTTON_H_
-#define IOS_CHROME_COMMON_HIGHLIGHT_BUTTON_H_
+#ifndef IOS_CHROME_COMMON_UI_ELEMENTS_HIGHLIGHT_BUTTON_H_
+#define IOS_CHROME_COMMON_UI_ELEMENTS_HIGHLIGHT_BUTTON_H_
 
 #import <UIKit/UIKit.h>
 
@@ -18,4 +18,4 @@
 
 @end
 
-#endif  // IOS_CHROME_COMMON_HIGHLIGHT_BUTTON_H_
+#endif  // IOS_CHROME_COMMON_UI_ELEMENTS_HIGHLIGHT_BUTTON_H_
diff --git a/ios/chrome/common/highlight_button.mm b/ios/chrome/common/ui/elements/highlight_button.mm
similarity index 94%
rename from ios/chrome/common/highlight_button.mm
rename to ios/chrome/common/ui/elements/highlight_button.mm
index a10668d..c8cbbfd0 100644
--- a/ios/chrome/common/highlight_button.mm
+++ b/ios/chrome/common/ui/elements/highlight_button.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/common/highlight_button.h"
+#import "ios/chrome/common/ui/elements/highlight_button.h"
 
 #import "ios/chrome/common/material_timing.h"
 
diff --git a/ios/chrome/content_widget_extension/BUILD.gn b/ios/chrome/content_widget_extension/BUILD.gn
index b1d4ba1a..fd4d346 100644
--- a/ios/chrome/content_widget_extension/BUILD.gn
+++ b/ios/chrome/content_widget_extension/BUILD.gn
@@ -52,10 +52,10 @@
 
   deps = [
     "//base",
-    "//ios/chrome/common:common_extension",
     "//ios/chrome/common/app_group",
     "//ios/chrome/common/app_group:command",
     "//ios/chrome/common/ntp_tile",
+    "//ios/chrome/common/ui/elements",
     "//ios/chrome/common/ui/favicon",
     "//ios/chrome/common/ui/util",
   ]
diff --git a/ios/chrome/content_widget_extension/most_visited_tile_view.h b/ios/chrome/content_widget_extension/most_visited_tile_view.h
index 90b6bbc4..85b8155 100644
--- a/ios/chrome/content_widget_extension/most_visited_tile_view.h
+++ b/ios/chrome/content_widget_extension/most_visited_tile_view.h
@@ -7,7 +7,7 @@
 
 #import <UIKit/UIKit.h>
 
-#import "ios/chrome/common/highlight_button.h"
+#import "ios/chrome/common/ui/elements/highlight_button.h"
 
 @class FaviconView;
 
diff --git a/ios/chrome/credential_provider_extension/BUILD.gn b/ios/chrome/credential_provider_extension/BUILD.gn
index 7e611ce..2376980 100644
--- a/ios/chrome/credential_provider_extension/BUILD.gn
+++ b/ios/chrome/credential_provider_extension/BUILD.gn
@@ -12,12 +12,6 @@
 import("//ios/chrome/tools/strings/generate_localizable_strings.gni")
 import("//ios/public/provider/chrome/browser/build_config.gni")
 
-declare_args() {
-  # Label of the target providing implementation for AccountVerificationProvider.
-  # Overridden when using the Google-internal repository to build Chrome on iOS.
-  ios_account_verification_provider_target = ":account_verification_provider"
-}
-
 group("resources") {
   deps = [ "//ios/chrome/credential_provider_extension/strings" ]
 }
diff --git a/ios/chrome/search_widget_extension/BUILD.gn b/ios/chrome/search_widget_extension/BUILD.gn
index 419a11d4..18da367 100644
--- a/ios/chrome/search_widget_extension/BUILD.gn
+++ b/ios/chrome/search_widget_extension/BUILD.gn
@@ -61,9 +61,9 @@
   deps = [
     "//base",
     "//components/open_from_clipboard:open_from_clipboard_impl",
-    "//ios/chrome/common:common_extension",
     "//ios/chrome/common/app_group",
     "//ios/chrome/common/app_group:command",
+    "//ios/chrome/common/ui/elements",
     "//ios/chrome/common/ui/util",
   ]
 
diff --git a/ios/chrome/search_widget_extension/copied_content_view.h b/ios/chrome/search_widget_extension/copied_content_view.h
index 82b111d8..53cb519 100644
--- a/ios/chrome/search_widget_extension/copied_content_view.h
+++ b/ios/chrome/search_widget_extension/copied_content_view.h
@@ -7,7 +7,7 @@
 
 #import <UIKit/UIKit.h>
 
-#import "ios/chrome/common/highlight_button.h"
+#import "ios/chrome/common/ui/elements/highlight_button.h"
 
 typedef NS_ENUM(NSInteger, CopiedContentType) {
   CopiedContentTypeNone,
diff --git a/ios/chrome/search_widget_extension/search_action_view.h b/ios/chrome/search_widget_extension/search_action_view.h
index 6958985..763d857 100644
--- a/ios/chrome/search_widget_extension/search_action_view.h
+++ b/ios/chrome/search_widget_extension/search_action_view.h
@@ -7,7 +7,7 @@
 
 #import <UIKit/UIKit.h>
 
-#import "ios/chrome/common/highlight_button.h"
+#import "ios/chrome/common/ui/elements/highlight_button.h"
 
 // View for an action to launch the app from the widget. Represented as a
 // circular icon and a label. When tapped it calls |actionSelector| in |target|.
diff --git a/ios/public/provider/chrome/browser/build_config.gni b/ios/public/provider/chrome/browser/build_config.gni
index 4447644..41bb857 100644
--- a/ios/public/provider/chrome/browser/build_config.gni
+++ b/ios/public/provider/chrome/browser/build_config.gni
@@ -27,12 +27,6 @@
   # Overridden when using the Google-internal repository to build Chrome on iOS.
   ios_provider_target = "//ios/chrome/browser/providers:provider_factory"
 
-  # This enables the linking of Firebase SDK to Chrome for iOS. If Firebase SDK
-  # is enabled, ios_firebase_plist_path must be defined as a non-empty string.
-  # This variable is obsolete and ignored. It will be removed once it is no
-  # longer overriden downstream.
-  ios_enable_firebase_sdk = false
-
   # This defines the build target to include a valid GoogleService-Info.plist
   # file which is copied to the application bundle. This is used by Firebase
   # SDK (which comes from the internal framework).
diff --git a/ios/public/provider/chrome/browser/distribution/app_distribution_provider.h b/ios/public/provider/chrome/browser/distribution/app_distribution_provider.h
index 394a56c..5db4c43 100644
--- a/ios/public/provider/chrome/browser/distribution/app_distribution_provider.h
+++ b/ios/public/provider/chrome/browser/distribution/app_distribution_provider.h
@@ -35,10 +35,6 @@
   // was integrated and thus should not have Firebase enabled.
   virtual void InitializeFirebase(int64_t install_date, bool is_first_run);
 
-  // Returns whether user who installed Chrome on |install_date| predates
-  // integration with Firebase for installation attribution.
-  virtual bool IsPreFirebaseLegacyUser(int64_t install_date);
-
  private:
   DISALLOW_COPY_AND_ASSIGN(AppDistributionProvider);
 };
diff --git a/ios/public/provider/chrome/browser/distribution/app_distribution_provider.mm b/ios/public/provider/chrome/browser/distribution/app_distribution_provider.mm
index a245e3c4..6a33ce3 100644
--- a/ios/public/provider/chrome/browser/distribution/app_distribution_provider.mm
+++ b/ios/public/provider/chrome/browser/distribution/app_distribution_provider.mm
@@ -24,7 +24,3 @@
 
 void AppDistributionProvider::InitializeFirebase(int64_t install_date,
                                                  bool is_first_run) {}
-
-bool AppDistributionProvider::IsPreFirebaseLegacyUser(int64_t install_date) {
-  return false;
-}
diff --git a/ios/public/provider/chrome/browser/signin/fake_chrome_identity_interaction_manager.mm b/ios/public/provider/chrome/browser/signin/fake_chrome_identity_interaction_manager.mm
index 4f2ac428..083d19d 100644
--- a/ios/public/provider/chrome/browser/signin/fake_chrome_identity_interaction_manager.mm
+++ b/ios/public/provider/chrome/browser/signin/fake_chrome_identity_interaction_manager.mm
@@ -4,7 +4,6 @@
 
 #import "ios/public/provider/chrome/browser/signin/fake_chrome_identity_interaction_manager.h"
 
-#include "base/mac/scoped_block.h"
 #import "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #import "ios/public/provider/chrome/browser/signin/chrome_identity_interaction_manager.h"
 #import "ios/public/provider/chrome/browser/signin/fake_chrome_identity_interaction_manager_constants.h"
diff --git a/ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.mm b/ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.mm
index bbf26ab4..9103f77 100644
--- a/ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.mm
+++ b/ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.mm
@@ -6,7 +6,6 @@
 
 #import <Foundation/Foundation.h>
 
-#include "base/mac/scoped_block.h"
 #include "base/strings/sys_string_conversions.h"
 #include "google_apis/gaia/gaia_auth_util.h"
 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
diff --git a/ios/web/js_messaging/crw_wk_script_message_router_unittest.mm b/ios/web/js_messaging/crw_wk_script_message_router_unittest.mm
index 138d5bb..38e46e9 100644
--- a/ios/web/js_messaging/crw_wk_script_message_router_unittest.mm
+++ b/ios/web/js_messaging/crw_wk_script_message_router_unittest.mm
@@ -4,7 +4,6 @@
 
 #import "ios/web/js_messaging/crw_wk_script_message_router.h"
 
-#include "base/mac/scoped_block.h"
 #include "base/memory/ptr_util.h"
 #import "ios/web/common/web_view_creation_util.h"
 #include "ios/web/public/test/fakes/test_browser_state.h"
diff --git a/ios/web/navigation/crw_wk_navigation_handler.mm b/ios/web/navigation/crw_wk_navigation_handler.mm
index afd4f485..a91ab9cf 100644
--- a/ios/web/navigation/crw_wk_navigation_handler.mm
+++ b/ios/web/navigation/crw_wk_navigation_handler.mm
@@ -625,6 +625,12 @@
           // Item may not exist if navigation was stopped (see
           // crbug.com/969915).
           item->SetURL(webViewURL);
+          if ([ErrorPageHelper
+                  failedNavigationURLFromErrorPageFileURL:webViewURL]
+                  .is_valid()) {
+            item->SetVirtualURL([ErrorPageHelper
+                failedNavigationURLFromErrorPageFileURL:webViewURL]);
+          }
         }
         context->SetUrl(webViewURL);
       }
@@ -701,23 +707,6 @@
                  placeholderNavigation:isPlaceholderURL];
   web::NavigationContextImpl* navigationContextPtr = navigationContext.get();
 
-  if (base::FeatureList::IsEnabled(web::features::kUseJSForErrorPage)) {
-    // |item| is nil for back/forward/reload navigations.
-    if (navigationContext->GetItem() &&
-        navigationContext->GetItem()->GetVirtualURL() ==
-            navigationContext->GetItem()->GetURL()) {
-      // Set nav item's virtual URL to failed URL if it doesn't have a specific
-      // virtualURL.
-      GURL virtualURLForError =
-          [ErrorPageHelper failedNavigationURLFromErrorPageFileURL:webViewURL];
-      // virtualURLForError will only be valid of error URL. If it is a regular
-      // URL it won't be valid, so the virtualURL won't be overridden.
-      if (virtualURLForError.is_valid()) {
-        navigationContext->GetItem()->SetVirtualURL(virtualURLForError);
-      }
-    }
-  }
-
   // GetPendingItem which may be called inside OnNavigationStarted relies on
   // association between NavigationContextImpl and WKNavigation.
   [self.navigationStates setContext:std::move(navigationContext)
@@ -1107,13 +1096,9 @@
                  originalNavigation:navigation
                             webView:webView];
     } else if (context->GetError()) {
-      GURL URLForError =
-          [ErrorPageHelper failedNavigationURLFromErrorPageFileURL:webViewURL];
-      if (URLForError.is_valid()) {
-        [self loadErrorPageForNavigationItem:item
-                           navigationContext:navigation
-                                     webView:webView];
-      }
+      [self loadErrorPageForNavigationItem:item
+                         navigationContext:navigation
+                                   webView:webView];
     }
   }
 
@@ -1833,27 +1818,28 @@
       //   2. Current nav item has a failed URL. This may happen when
       //      back/forward/refresh on a loaded page;
       //   3. Current nav item is an irrelevant page.
-      // For 1&2, load error page HTML into current page;
+      // For 1&2, load an empty string to remove existing JS code.
       // For 3, load error page file to create a new nav item.
+      // The actual error HTML will be loaded in didFinishNavigation callback.
+      WKNavigation* errorNavigation = nil;
       if (provisionalLoad &&
           ![errorPage
               isErrorPageFileURLForFailedNavigationURL:backForwardItem.URL] &&
           ![backForwardItem.URL isEqual:errorPage.failedNavigationURL]) {
-        WKNavigation* errorNavigation =
-            [webView loadFileURL:errorPage.errorPageFileURL
-                allowingReadAccessToURL:errorPage.errorPageFileURL];
-        [self.navigationStates setState:web::WKNavigationState::REQUESTED
-                          forNavigation:errorNavigation];
-        std::unique_ptr<web::NavigationContextImpl> originalContext =
-            [self.navigationStates removeNavigation:navigation];
-        [self.navigationStates setContext:std::move(originalContext)
-                            forNavigation:errorNavigation];
-
-        // Return as the context was moved.
-        return;
+        errorNavigation = [webView loadFileURL:errorPage.errorPageFileURL
+                       allowingReadAccessToURL:errorPage.errorPageFileURL];
       } else {
-        // TODO(crbug.com/991608): Inject HTML for the error page.
+        errorNavigation = [webView loadHTMLString:@""
+                                          baseURL:backForwardItem.URL];
       }
+      [self.navigationStates setState:web::WKNavigationState::REQUESTED
+                        forNavigation:errorNavigation];
+      std::unique_ptr<web::NavigationContextImpl> originalContext =
+          [self.navigationStates removeNavigation:navigation];
+      [self.navigationStates setContext:std::move(originalContext)
+                          forNavigation:errorNavigation];
+      // Return as the context was moved.
+      return;
     } else {
       GURL errorURL =
           net::GURLWithNSURL(error.userInfo[NSURLErrorFailingURLErrorKey]);
@@ -2071,6 +2057,10 @@
       error.userInfo[NSURLErrorFailingURLStringErrorKey];
   GURL failingURL(base::SysNSStringToUTF8(failingURLString));
   GURL itemURL = item->GetURL();
+  if (base::FeatureList::IsEnabled(web::features::kUseJSForErrorPage)) {
+    if (itemURL != failingURL)
+      item->SetVirtualURL(failingURL);
+  }
   int itemID = item->GetUniqueID();
   web::GetWebClient()->PrepareErrorPage(
       self.webStateImpl, failingURL, error, context->IsPost(),
diff --git a/ios/web/security/crw_cert_verification_controller.mm b/ios/web/security/crw_cert_verification_controller.mm
index 5ff2746..bc7d525 100644
--- a/ios/web/security/crw_cert_verification_controller.mm
+++ b/ios/web/security/crw_cert_verification_controller.mm
@@ -12,6 +12,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "ios/web/public/browser_state.h"
 #include "ios/web/public/security/certificate_policy_cache.h"
 #include "ios/web/public/thread/web_task_traits.h"
@@ -202,9 +203,8 @@
   DCHECK(completionHandler);
   // SecTrustEvaluate performs trust evaluation synchronously, possibly making
   // network requests. The UI thread should not be blocked by that operation.
-  base::PostTask(
-      FROM_HERE, {base::ThreadPool(), TaskShutdownBehavior::BLOCK_SHUTDOWN},
-      base::BindOnce(^{
+  base::ThreadPool::PostTask(
+      FROM_HERE, {TaskShutdownBehavior::BLOCK_SHUTDOWN}, base::BindOnce(^{
         SecTrustResultType trustResult = kSecTrustResultInvalid;
         if (SecTrustEvaluate(trust.get(), &trustResult) != errSecSuccess) {
           trustResult = kSecTrustResultInvalid;
diff --git a/ios/web/security/crw_ssl_status_updater_unittest.mm b/ios/web/security/crw_ssl_status_updater_unittest.mm
index ef244c8..49cefea 100644
--- a/ios/web/security/crw_ssl_status_updater_unittest.mm
+++ b/ios/web/security/crw_ssl_status_updater_unittest.mm
@@ -7,7 +7,6 @@
 #import <WebKit/WebKit.h>
 
 #include "base/mac/foundation_util.h"
-#include "base/mac/scoped_block.h"
 #include "base/strings/sys_string_conversions.h"
 #import "ios/web/navigation/navigation_manager_impl.h"
 #import "ios/web/navigation/wk_based_navigation_manager_impl.h"
diff --git a/ios/web/shell/shell_url_request_context_getter.mm b/ios/web/shell/shell_url_request_context_getter.mm
index 1709590..5952752 100644
--- a/ios/web/shell/shell_url_request_context_getter.mm
+++ b/ios/web/shell/shell_url_request_context_getter.mm
@@ -13,6 +13,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/path_service.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #import "ios/net/cookies/cookie_store_ios.h"
 #include "ios/web/public/browsing_data/system_cookie_store_util.h"
 #import "ios/web/public/web_client.h"
@@ -97,9 +98,8 @@
     transport_security_persister_ =
         std::make_unique<net::TransportSecurityPersister>(
             url_request_context_->transport_security_state(), base_path_,
-            base::CreateSequencedTaskRunner({base::ThreadPool(),
-                                             base::MayBlock(),
-                                             base::TaskPriority::BEST_EFFORT}));
+            base::ThreadPool::CreateSequencedTaskRunner(
+                {base::MayBlock(), base::TaskPriority::BEST_EFFORT}));
     storage_->set_http_server_properties(
         std::make_unique<net::HttpServerProperties>());
 
diff --git a/ios/web/webui/url_fetcher_block_adapter.h b/ios/web/webui/url_fetcher_block_adapter.h
index 29f2492..1441354 100644
--- a/ios/web/webui/url_fetcher_block_adapter.h
+++ b/ios/web/webui/url_fetcher_block_adapter.h
@@ -9,7 +9,6 @@
 
 #include <memory>
 
-#include "base/mac/scoped_block.h"
 #include "base/memory/scoped_refptr.h"
 #include "url/gurl.h"
 
@@ -49,8 +48,7 @@
   // The URL loader factory.
   scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
   // Callback for resource load.
-  base::mac::ScopedBlock<web::URLFetcherBlockAdapterCompletion>
-      completion_handler_;
+  __strong web::URLFetcherBlockAdapterCompletion completion_handler_;
   // URLLoader for retrieving data from net stack.
   std::unique_ptr<network::SimpleURLLoader> url_loader_;
 };
diff --git a/ios/web/webui/url_fetcher_block_adapter.mm b/ios/web/webui/url_fetcher_block_adapter.mm
index d05217e..4e53b08 100644
--- a/ios/web/webui/url_fetcher_block_adapter.mm
+++ b/ios/web/webui/url_fetcher_block_adapter.mm
@@ -21,7 +21,7 @@
     web::URLFetcherBlockAdapterCompletion completion_handler)
     : url_(url),
       url_loader_factory_(std::move(url_loader_factory)),
-      completion_handler_([completion_handler copy]) {}
+      completion_handler_(completion_handler) {}
 
 URLFetcherBlockAdapter::~URLFetcherBlockAdapter() {
 }
@@ -52,7 +52,7 @@
 
   NSData* data =
       [NSData dataWithBytes:response.c_str() length:response.length()];
-  completion_handler_.get()(data, this);
+  completion_handler_(data, this);
 }
 
 }  // namespace web
diff --git a/ios/web_view/internal/cwv_download_task.mm b/ios/web_view/internal/cwv_download_task.mm
index 9bf70c44..2093c55 100644
--- a/ios/web_view/internal/cwv_download_task.mm
+++ b/ios/web_view/internal/cwv_download_task.mm
@@ -9,6 +9,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #import "ios/web/public/download/download_task.h"
 #include "ios/web/public/download/download_task_observer.h"
 #include "ios/web_view/internal/cwv_web_view_internal.h"
@@ -101,8 +102,8 @@
 
 - (void)startDownloadToLocalFileAtPath:(NSString*)path {
   scoped_refptr<base::SequencedTaskRunner> taskRunner =
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                       base::TaskPriority::BEST_EFFORT});
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT});
   __block auto writer = std::make_unique<net::URLFetcherFileWriter>(
       taskRunner, base::FilePath(base::SysNSStringToUTF8(path)));
 
diff --git a/ios/web_view/internal/passwords/web_view_password_store_factory.mm b/ios/web_view/internal/passwords/web_view_password_store_factory.mm
index 27f50e32..5704025 100644
--- a/ios/web_view/internal/passwords/web_view_password_store_factory.mm
+++ b/ios/web_view/internal/passwords/web_view_password_store_factory.mm
@@ -12,6 +12,7 @@
 #include "base/no_destructor.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "components/keyed_service/core/service_access_type.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
@@ -91,8 +92,8 @@
   // the passwords obtained through tasks on the background runner influence
   // what the user sees.
   scoped_refptr<base::SequencedTaskRunner> db_task_runner(
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                       base::TaskPriority::USER_VISIBLE}));
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE}));
 
   scoped_refptr<password_manager::PasswordStore> store =
       new password_manager::PasswordStoreDefault(std::move(login_db));
diff --git a/ios/web_view/internal/sync/web_view_gcm_profile_service_factory.mm b/ios/web_view/internal/sync/web_view_gcm_profile_service_factory.mm
index 31616a6..6da9244 100644
--- a/ios/web_view/internal/sync/web_view_gcm_profile_service_factory.mm
+++ b/ios/web_view/internal/sync/web_view_gcm_profile_service_factory.mm
@@ -10,6 +10,7 @@
 #include "base/no_destructor.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "components/gcm_driver/gcm_client_factory.h"
 #include "components/gcm_driver/gcm_profile_service.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
@@ -93,9 +94,8 @@
   DCHECK(!context->IsOffTheRecord());
 
   scoped_refptr<base::SequencedTaskRunner> blocking_task_runner(
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::BEST_EFFORT,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}));
   WebViewBrowserState* browser_state =
       WebViewBrowserState::FromBrowserState(context);
diff --git a/ios/web_view/internal/web_view_url_request_context_getter.mm b/ios/web_view/internal/web_view_url_request_context_getter.mm
index 4a81451..c74147d 100644
--- a/ios/web_view/internal/web_view_url_request_context_getter.mm
+++ b/ios/web_view/internal/web_view_url_request_context_getter.mm
@@ -12,6 +12,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/path_service.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #import "ios/net/cookies/cookie_store_ios.h"
 #include "ios/web/public/browsing_data/system_cookie_store_util.h"
 #import "ios/web/public/web_client.h"
@@ -106,9 +107,8 @@
     transport_security_persister_ =
         std::make_unique<net::TransportSecurityPersister>(
             url_request_context_->transport_security_state(), base_path_,
-            base::CreateSequencedTaskRunner({base::ThreadPool(),
-                                             base::MayBlock(),
-                                             base::TaskPriority::BEST_EFFORT}));
+            base::ThreadPool::CreateSequencedTaskRunner(
+                {base::MayBlock(), base::TaskPriority::BEST_EFFORT}));
 
     storage_->set_http_server_properties(
         std::make_unique<net::HttpServerProperties>());
diff --git a/jingle/glue/network_service_config_test_util.cc b/jingle/glue/network_service_config_test_util.cc
index 4ba997a..c51ef7b 100644
--- a/jingle/glue/network_service_config_test_util.cc
+++ b/jingle/glue/network_service_config_test_util.cc
@@ -12,6 +12,7 @@
 #include "base/bind.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_restrictions.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
@@ -45,7 +46,7 @@
 
 NetworkServiceConfigTestUtil::NetworkServiceConfigTestUtil(
     NetworkContextGetter network_context_getter)
-    : net_runner_(base::CreateSingleThreadTaskRunner({base::ThreadPool()})),
+    : net_runner_(base::ThreadPool::CreateSingleThreadTaskRunner({})),
       mojo_runner_(base::SequencedTaskRunnerHandle::Get()),
       network_context_getter_(network_context_getter) {}
 
diff --git a/media/audio/audio_debug_file_writer.h b/media/audio/audio_debug_file_writer.h
index b128025d..c80dd939 100644
--- a/media/audio/audio_debug_file_writer.h
+++ b/media/audio/audio_debug_file_writer.h
@@ -15,6 +15,7 @@
 #include "base/sequence_checker.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "media/base/audio_parameters.h"
 #include "media/base/media_export.h"
 
@@ -63,9 +64,8 @@
 
   // The task runner to do file output operations on.
   const scoped_refptr<base::SequencedTaskRunner> file_task_runner_ =
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::BEST_EFFORT,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::BLOCK_SHUTDOWN});
 
   AudioFileWriterUniquePtr file_writer_;
diff --git a/media/audio/audio_debug_recording_session_impl.cc b/media/audio/audio_debug_recording_session_impl.cc
index 2d433cd..fd39a798 100644
--- a/media/audio/audio_debug_recording_session_impl.cc
+++ b/media/audio/audio_debug_recording_session_impl.cc
@@ -13,6 +13,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "media/audio/audio_debug_recording_manager.h"
 #include "media/audio/audio_manager.h"
@@ -58,9 +59,9 @@
     return;
   }
 
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
        base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
       base::BindOnce(
           [](const base::FilePath& file_name) {
diff --git a/media/audio/audio_thread_hang_monitor.cc b/media/audio/audio_thread_hang_monitor.cc
index b3be54fe..f07dea5 100644
--- a/media/audio/audio_thread_hang_monitor.cc
+++ b/media/audio/audio_thread_hang_monitor.cc
@@ -17,6 +17,7 @@
 #include "base/single_thread_task_runner.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/tick_clock.h"
 
@@ -47,7 +48,7 @@
     scoped_refptr<base::SingleThreadTaskRunner> audio_thread_task_runner,
     scoped_refptr<base::SequencedTaskRunner> monitor_task_runner) {
   if (!monitor_task_runner)
-    monitor_task_runner = base::CreateSequencedTaskRunner({base::ThreadPool()});
+    monitor_task_runner = base::ThreadPool::CreateSequencedTaskRunner({});
 
   auto monitor =
       Ptr(new AudioThreadHangMonitor(hang_action, hang_deadline, clock,
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index 97cfee1..324872a 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -24,6 +24,7 @@
 #include "base/single_thread_task_runner.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
@@ -236,9 +237,9 @@
   // used because virtual memory overhead is not considered blocking I/O; and
   // CONTINUE_ON_SHUTDOWN is used to allow process termination to not block on
   // completing the task.
-  base::PostTask(
+  base::ThreadPool::PostTask(
       FROM_HERE,
-      {base::ThreadPool(), base::TaskPriority::BEST_EFFORT,
+      {base::TaskPriority::BEST_EFFORT,
        base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(
           [](scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
diff --git a/media/capabilities/learning_helper.cc b/media/capabilities/learning_helper.cc
index 8cd11535..d31645f 100644
--- a/media/capabilities/learning_helper.cc
+++ b/media/capabilities/learning_helper.cc
@@ -5,6 +5,7 @@
 #include "media/capabilities/learning_helper.h"
 
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "media/learning/common/feature_library.h"
 #include "media/learning/common/learning_task.h"
 
@@ -50,9 +51,9 @@
   // it's likely that the session will live on the main thread, and handle
   // delegation of LearningTaskControllers to other threads.  However, for now,
   // do it here.
-  learning_session_ =
-      std::make_unique<LearningSessionImpl>(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::TaskPriority::BEST_EFFORT,
+  learning_session_ = std::make_unique<LearningSessionImpl>(
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}));
 
   // Register a few learning tasks.
diff --git a/media/capabilities/video_decode_stats_db_impl.cc b/media/capabilities/video_decode_stats_db_impl.cc
index 81a1b21..4c4d3b86 100644
--- a/media/capabilities/video_decode_stats_db_impl.cc
+++ b/media/capabilities/video_decode_stats_db_impl.cc
@@ -16,6 +16,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/sequence_checker.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/time/default_clock.h"
 #include "components/leveldb_proto/public/proto_database_provider.h"
 #include "media/base/media_switches.h"
@@ -73,9 +74,8 @@
 
   auto proto_db = db_provider->GetDB<DecodeStatsProto>(
       leveldb_proto::ProtoDbType::VIDEO_DECODE_STATS_DB, db_dir,
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::BEST_EFFORT,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}));
 
   return base::WrapUnique(new VideoDecodeStatsDBImpl(std::move(proto_db)));
diff --git a/media/device_monitors/device_monitor_udev.cc b/media/device_monitors/device_monitor_udev.cc
index 0c73ddf3..accfd05d 100644
--- a/media/device_monitors/device_monitor_udev.cc
+++ b/media/device_monitors/device_monitor_udev.cc
@@ -13,6 +13,7 @@
 #include "base/sequence_checker.h"
 #include "base/system/system_monitor.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "device/udev_linux/udev.h"
 #include "device/udev_linux/udev_watcher.h"
 
@@ -114,9 +115,8 @@
 }
 
 DeviceMonitorLinux::DeviceMonitorLinux()
-    : blocking_task_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::USER_VISIBLE,
+    : blocking_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
            base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN})),
       blocking_task_helper_(new BlockingTaskRunnerHelper,
                             base::OnTaskRunnerDeleter(blocking_task_runner_)) {
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
index 4d97350e..9e0ec26 100644
--- a/media/filters/ffmpeg_demuxer.cc
+++ b/media/filters/ffmpeg_demuxer.cc
@@ -21,6 +21,7 @@
 #include "base/strings/string_util.h"
 #include "base/sys_byteorder.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
@@ -921,9 +922,8 @@
       // FFmpeg has no asynchronous API, so we use base::WaitableEvents inside
       // the BlockingUrlProtocol to handle hops to the render thread for network
       // reads and seeks.
-      blocking_task_runner_(
-          base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                           base::TaskPriority::USER_BLOCKING})),
+      blocking_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_BLOCKING})),
       data_source_(data_source),
       media_log_(media_log),
       encrypted_media_init_data_cb_(encrypted_media_init_data_cb),
diff --git a/media/filters/offloading_video_decoder.cc b/media/filters/offloading_video_decoder.cc
index 1cf837d5..2758ebf 100644
--- a/media/filters/offloading_video_decoder.cc
+++ b/media/filters/offloading_video_decoder.cc
@@ -9,6 +9,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/synchronization/atomic_flag.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/base/decoder_buffer.h"
 #include "media/base/video_frame.h"
@@ -137,8 +138,8 @@
   }
 
   if (!offload_task_runner_) {
-    offload_task_runner_ = base::CreateSequencedTaskRunner(
-        {base::ThreadPool(), base::TaskPriority::USER_BLOCKING});
+    offload_task_runner_ = base::ThreadPool::CreateSequencedTaskRunner(
+        {base::TaskPriority::USER_BLOCKING});
   }
 
   offload_task_runner_->PostTask(
diff --git a/media/gpu/android/codec_allocator.cc b/media/gpu/android/codec_allocator.cc
index f6ca0eb5..ad822d7b 100644
--- a/media/gpu/android/codec_allocator.cc
+++ b/media/gpu/android/codec_allocator.cc
@@ -13,6 +13,7 @@
 #include "base/logging.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "base/time/default_tick_clock.h"
@@ -45,8 +46,8 @@
 }
 
 scoped_refptr<base::SequencedTaskRunner> CreateCodecTaskRunner() {
-  return base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::TaskPriority::USER_VISIBLE, base::MayBlock(),
+  return base::ThreadPool::CreateSequencedTaskRunner(
+      {base::TaskPriority::USER_VISIBLE, base::MayBlock(),
        base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
 }
 
diff --git a/media/gpu/chromeos/image_processor.cc b/media/gpu/chromeos/image_processor.cc
index e24ce499..1cdd12e 100644
--- a/media/gpu/chromeos/image_processor.cc
+++ b/media/gpu/chromeos/image_processor.cc
@@ -12,6 +12,7 @@
 #include "base/bind_helpers.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "media/base/video_types.h"
 #include "media/gpu/macros.h"
 
@@ -71,7 +72,7 @@
     ErrorCB error_cb,
     scoped_refptr<base::SequencedTaskRunner> client_task_runner) {
   scoped_refptr<base::SequencedTaskRunner> backend_task_runner =
-      base::CreateSequencedTaskRunner({base::ThreadPool()});
+      base::ThreadPool::CreateSequencedTaskRunner({});
   auto wrapped_error_cb = base::BindRepeating(
       base::IgnoreResult(&base::SequencedTaskRunner::PostTask),
       client_task_runner, FROM_HERE, std::move(error_cb));
diff --git a/media/gpu/chromeos/image_processor_test.cc b/media/gpu/chromeos/image_processor_test.cc
index 601b3631..b1055a21 100644
--- a/media/gpu/chromeos/image_processor_test.cc
+++ b/media/gpu/chromeos/image_processor_test.cc
@@ -82,7 +82,7 @@
           std::tuple<base::FilePath, base::FilePath>> {
  public:
   void SetUp() override {}
-  void TearDown() override {}
+  void TearDown() override { model_frames_.clear(); }
 
   std::unique_ptr<test::ImageProcessorClient> CreateImageProcessorClient(
       const test::Image& input_image,
@@ -135,12 +135,15 @@
         scoped_refptr<const VideoFrame> model_frame =
             CreateVideoFrameFromImage(*output_image);
         LOG_ASSERT(model_frame) << "Failed to create from image";
+        model_frames_ = {model_frame};
         // Scaling is not deterministic process. There are various algorithms to
         // scale images. We set a weaker tolerance value, 32, to avoid false
         // negative.
         constexpr uint32_t kImageProcessorTestTorelance = 32;
         auto vf_validator = test::VideoFrameValidator::Create(
-            {model_frame}, kImageProcessorTestTorelance);
+            base::BindRepeating(&ImageProcessorParamTest::GetModelFrame,
+                                base::Unretained(this)),
+            kImageProcessorTestTorelance);
         frame_processors.push_back(std::move(vf_validator));
       }
     }
@@ -161,6 +164,18 @@
         input_config, output_config, kNumBuffers, std::move(frame_processors));
     return ip_client;
   }
+
+ private:
+  scoped_refptr<const VideoFrame> GetModelFrame(size_t frame_index) const {
+    if (frame_index >= model_frames_.size()) {
+      LOG(ERROR) << "Failed to get model frame with index=" << frame_index;
+      ADD_FAILURE();
+      return nullptr;
+    }
+    return model_frames_[frame_index];
+  }
+
+  std::vector<scoped_refptr<const VideoFrame>> model_frames_;
 };
 
 TEST_P(ImageProcessorParamTest, ConvertOneTime_MemToMem) {
diff --git a/media/gpu/chromeos/video_decoder_pipeline.cc b/media/gpu/chromeos/video_decoder_pipeline.cc
index 1931032..9370ea46 100644
--- a/media/gpu/chromeos/video_decoder_pipeline.cc
+++ b/media/gpu/chromeos/video_decoder_pipeline.cc
@@ -12,6 +12,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "media/base/limits.h"
 #include "media/gpu/chromeos/dmabuf_video_frame_pool.h"
@@ -92,9 +93,8 @@
     gpu::GpuMemoryBufferFactory* const gpu_memory_buffer_factory,
     GetCreateVDFunctionsCB get_create_vd_functions_cb)
     : client_task_runner_(std::move(client_task_runner)),
-      decoder_task_runner_(base::CreateSingleThreadTaskRunner(
-          {base::ThreadPool(), base::WithBaseSyncPrimitives(),
-           base::TaskPriority::USER_VISIBLE},
+      decoder_task_runner_(base::ThreadPool::CreateSingleThreadTaskRunner(
+          {base::WithBaseSyncPrimitives(), base::TaskPriority::USER_VISIBLE},
           base::SingleThreadTaskRunnerThreadMode::DEDICATED)),
       main_frame_pool_(std::move(frame_pool)),
       gpu_memory_buffer_factory_(gpu_memory_buffer_factory),
diff --git a/media/gpu/test/video_frame_validator.cc b/media/gpu/test/video_frame_validator.cc
index 0466c60..0f44c78 100644
--- a/media/gpu/test/video_frame_validator.cc
+++ b/media/gpu/test/video_frame_validator.cc
@@ -57,11 +57,12 @@
 }
 
 std::unique_ptr<VideoFrameValidator> VideoFrameValidator::Create(
-    const std::vector<scoped_refptr<const VideoFrame>> model_frames,
+    GetModelFrameCB get_model_frame_cb,
     const uint8_t tolerance,
     std::unique_ptr<VideoFrameProcessor> corrupt_frame_processor) {
-  auto video_frame_validator = base::WrapUnique(new VideoFrameValidator(
-      std::move(model_frames), tolerance, std::move(corrupt_frame_processor)));
+  auto video_frame_validator = base::WrapUnique(
+      new VideoFrameValidator(std::move(get_model_frame_cb), tolerance,
+                              std::move(corrupt_frame_processor)));
   if (!video_frame_validator->Initialize()) {
     LOG(ERROR) << "Failed to initialize VideoFrameValidator.";
     return nullptr;
@@ -86,11 +87,11 @@
 }
 
 VideoFrameValidator::VideoFrameValidator(
-    const std::vector<scoped_refptr<const VideoFrame>> model_frames,
+    GetModelFrameCB get_model_frame_cb,
     const uint8_t tolerance,
     std::unique_ptr<VideoFrameProcessor> corrupt_frame_processor)
     : validate_mode_(ValidateMode::RAW),
-      model_frames_(std::move(model_frames)),
+      get_model_frame_cb_(get_model_frame_cb),
       tolerance_(tolerance),
       corrupt_frame_processor_(std::move(corrupt_frame_processor)),
       num_frames_validating_(0),
@@ -139,15 +140,21 @@
     return;
   }
 
+  scoped_refptr<const VideoFrame> model_frame;
+  if (validate_mode_ != ValidateMode::MD5) {
+    model_frame = get_model_frame_cb_.Run(frame_index);
+    ASSERT_TRUE(model_frame);
+  }
+
   base::AutoLock auto_lock(frame_validator_lock_);
   num_frames_validating_++;
 
   // Unretained is safe here, as we should not destroy the validator while there
   // are still frames being validated.
   frame_validator_thread_.task_runner()->PostTask(
-      FROM_HERE,
-      base::BindOnce(&VideoFrameValidator::ProcessVideoFrameTask,
-                     base::Unretained(this), video_frame, frame_index));
+      FROM_HERE, base::BindOnce(&VideoFrameValidator::ProcessVideoFrameTask,
+                                base::Unretained(this), video_frame,
+                                model_frame, frame_index));
 }
 
 bool VideoFrameValidator::WaitUntilDone() {
@@ -168,6 +175,7 @@
 
 void VideoFrameValidator::ProcessVideoFrameTask(
     const scoped_refptr<const VideoFrame> video_frame,
+    const scoped_refptr<const VideoFrame> model_frame,
     size_t frame_index) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(validator_thread_sequence_checker_);
 
@@ -208,7 +216,9 @@
       break;
     }
     case ValidateMode::RAW:
-      mismatched_info = ValidateRaw(*validated_frame, frame_index);
+      ASSERT_TRUE(model_frame);
+      mismatched_info =
+          ValidateRaw(*validated_frame, *model_frame, frame_index);
       break;
   }
 
@@ -254,15 +264,12 @@
 
 base::Optional<VideoFrameValidator::MismatchedFrameInfo>
 VideoFrameValidator::ValidateRaw(const VideoFrame& validated_frame,
+                                 const VideoFrame& model_frame,
                                  size_t frame_index) {
-  if (model_frames_.size() > 0) {
-    LOG_IF(FATAL, frame_index >= model_frames_.size())
-        << "Frame number is over than the number of given frames.";
-    size_t diff_cnt = CompareFramesWithErrorDiff(
-        validated_frame, *model_frames_[frame_index], tolerance_);
-    if (diff_cnt > 0)
-      return MismatchedFrameInfo{frame_index, diff_cnt};
-  }
+  size_t diff_cnt =
+      CompareFramesWithErrorDiff(validated_frame, model_frame, tolerance_);
+  if (diff_cnt > 0)
+    return MismatchedFrameInfo{frame_index, diff_cnt};
   return base::nullopt;
 }
 }  // namespace test
diff --git a/media/gpu/test/video_frame_validator.h b/media/gpu/test/video_frame_validator.h
index 1733b80..a86e4a1 100644
--- a/media/gpu/test/video_frame_validator.h
+++ b/media/gpu/test/video_frame_validator.h
@@ -10,6 +10,7 @@
 #include <utility>
 #include <vector>
 
+#include "base/callback.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/memory/scoped_refptr.h"
@@ -38,6 +39,9 @@
 // performance measurements.
 class VideoFrameValidator : public VideoFrameProcessor {
  public:
+  // Get the model frame from |frame_index|.
+  using GetModelFrameCB =
+      base::RepeatingCallback<scoped_refptr<const VideoFrame>(size_t)>;
   static constexpr uint8_t kDefaultTolerance = 4;
   // TODO(hiroh): Support a validation by PSNR and SSIM.
   enum class ValidateMode {
@@ -79,8 +83,11 @@
       const VideoPixelFormat validation_format = PIXEL_FORMAT_I420,
       std::unique_ptr<VideoFrameProcessor> corrupt_frame_processor = nullptr);
 
+  // Create an instance of the video frame validator. The VideoFrameValidator
+  // compares a given VideoFrame on ProcessVideoFrame() with the model frame got
+  // by |get_model_frame_cb|.
   static std::unique_ptr<VideoFrameValidator> Create(
-      const std::vector<scoped_refptr<const VideoFrame>> model_frames,
+      GetModelFrameCB get_model_frame_cb,
       const uint8_t tolerance = kDefaultTolerance,
       std::unique_ptr<VideoFrameProcessor> corrupt_frame_processor = nullptr);
 
@@ -110,7 +117,7 @@
       std::unique_ptr<VideoFrameProcessor> corrupt_frame_processor);
 
   VideoFrameValidator(
-      const std::vector<scoped_refptr<const VideoFrame>> model_frames,
+      GetModelFrameCB get_model_frame_cb,
       const uint8_t tolerance,
       std::unique_ptr<VideoFrameProcessor> corrupt_frame_processor);
 
@@ -121,6 +128,7 @@
 
   // Validate the |video_frame|'s content on the |frame_validator_thread_|.
   void ProcessVideoFrameTask(const scoped_refptr<const VideoFrame> video_frame,
+                             const scoped_refptr<const VideoFrame> model_frame,
                              size_t frame_index);
 
   // Returns md5 values of video frame represented by |video_frame|.
@@ -131,6 +139,7 @@
       size_t frame_index);
   base::Optional<MismatchedFrameInfo> ValidateRaw(
       const VideoFrame& validated_frame,
+      const VideoFrame& model_frame,
       size_t frame_index);
 
   const ValidateMode validate_mode_;
@@ -143,7 +152,7 @@
 
   // Values used only if |validate_mode_| is RAW.
   // The list of expected frames
-  const std::vector<scoped_refptr<const VideoFrame>> model_frames_;
+  const GetModelFrameCB get_model_frame_cb_;
   const uint8_t tolerance_ = 0;
 
   std::unique_ptr<VideoFrameMapper> video_frame_mapper_;
diff --git a/media/gpu/v4l2/v4l2_image_processor_backend.cc b/media/gpu/v4l2/v4l2_image_processor_backend.cc
index ff94f57..6c89a9c 100644
--- a/media/gpu/v4l2/v4l2_image_processor_backend.cc
+++ b/media/gpu/v4l2/v4l2_image_processor_backend.cc
@@ -22,6 +22,7 @@
 #include "base/numerics/safe_conversions.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "media/base/color_plane_layout.h"
 #include "media/base/scopedfd_helper.h"
 #include "media/gpu/chromeos/fourcc.h"
@@ -124,8 +125,8 @@
       num_buffers_(num_buffers),
       // We poll V4L2 device on this task runner, which blocks the task runner.
       // Therefore we use dedicated SingleThreadTaskRunner here.
-      poll_task_runner_(base::CreateSingleThreadTaskRunner(
-          {base::ThreadPool()},
+      poll_task_runner_(base::ThreadPool::CreateSingleThreadTaskRunner(
+          {},
           base::SingleThreadTaskRunnerThreadMode::DEDICATED)) {
   DVLOGF(2);
   DETACH_FROM_SEQUENCE(poll_sequence_checker_);
diff --git a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
index f3c12f4..44dc531f 100644
--- a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
+++ b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
@@ -26,6 +26,7 @@
 #include "base/stl_util.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "gpu/ipc/service/gpu_memory_buffer_factory.h"
@@ -167,8 +168,8 @@
       // performance is affected.
       // TODO(akahuang): Remove WithBaseSyncPrimitives() after replacing poll
       // thread by V4L2DevicePoller.
-      encoder_task_runner_(base::CreateSingleThreadTaskRunner(
-          {base::ThreadPool(), base::WithBaseSyncPrimitives()},
+      encoder_task_runner_(base::ThreadPool::CreateSingleThreadTaskRunner(
+          {base::WithBaseSyncPrimitives()},
           base::SingleThreadTaskRunnerThreadMode::DEDICATED)) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(child_sequence_checker_);
   DETACH_FROM_SEQUENCE(encoder_sequence_checker_);
diff --git a/media/gpu/vaapi/vaapi_image_decode_accelerator_worker.cc b/media/gpu/vaapi/vaapi_image_decode_accelerator_worker.cc
index 56de4e8..a03b4ff 100644
--- a/media/gpu/vaapi/vaapi_image_decode_accelerator_worker.cc
+++ b/media/gpu/vaapi/vaapi_image_decode_accelerator_worker.cc
@@ -4,6 +4,7 @@
 
 #include "media/gpu/vaapi/vaapi_image_decode_accelerator_worker.h"
 
+#include "base/task/thread_pool.h"
 #include "string.h"
 
 #include <utility>
@@ -150,7 +151,7 @@
 VaapiImageDecodeAcceleratorWorker::VaapiImageDecodeAcceleratorWorker(
     VaapiImageDecoderVector decoders) {
   DETACH_FROM_SEQUENCE(io_sequence_checker_);
-  decoder_task_runner_ = base::CreateSequencedTaskRunner({base::ThreadPool()});
+  decoder_task_runner_ = base::ThreadPool::CreateSequencedTaskRunner({});
   DCHECK(decoder_task_runner_);
 
   DCHECK(!decoders.empty());
diff --git a/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.cc b/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.cc
index ab7025d1..764032f 100644
--- a/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.cc
+++ b/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.cc
@@ -18,6 +18,7 @@
 #include "base/numerics/safe_conversions.h"
 #include "base/sequence_checker.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "gpu/ipc/common/gpu_memory_buffer_support.h"
@@ -462,9 +463,8 @@
     return PLATFORM_FAILURE;
   }
 
-  encoder_task_runner_ =
-      base::CreateSingleThreadTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                          base::TaskPriority::USER_BLOCKING});
+  encoder_task_runner_ = base::ThreadPool::CreateSingleThreadTaskRunner(
+      {base::MayBlock(), base::TaskPriority::USER_BLOCKING});
   if (!encoder_task_runner_) {
     VLOGF(1) << "Failed to create encoder task runner.";
     return THREAD_CREATION_FAILED;
diff --git a/media/gpu/vaapi/vaapi_video_encode_accelerator.cc b/media/gpu/vaapi/vaapi_video_encode_accelerator.cc
index 940a74a..959735f 100644
--- a/media/gpu/vaapi/vaapi_video_encode_accelerator.cc
+++ b/media/gpu/vaapi/vaapi_video_encode_accelerator.cc
@@ -25,6 +25,7 @@
 #include "base/stl_util.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
@@ -249,8 +250,8 @@
       child_task_runner_(base::ThreadTaskRunnerHandle::Get()),
       // TODO(akahuang): Change to use SequencedTaskRunner to see if the
       // performance is affected.
-      encoder_task_runner_(base::CreateSingleThreadTaskRunner(
-          {base::ThreadPool(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
+      encoder_task_runner_(base::ThreadPool::CreateSingleThreadTaskRunner(
+          {base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
           base::SingleThreadTaskRunnerThreadMode::DEDICATED)) {
   VLOGF(2);
   DCHECK_CALLED_ON_VALID_SEQUENCE(child_sequence_checker_);
diff --git a/media/gpu/windows/dxva_video_decode_accelerator_win.cc b/media/gpu/windows/dxva_video_decode_accelerator_win.cc
index 3a754fc..38049f7 100644
--- a/media/gpu/windows/dxva_video_decode_accelerator_win.cc
+++ b/media/gpu/windows/dxva_video_decode_accelerator_win.cc
@@ -1321,15 +1321,22 @@
 
 // static
 void DXVAVideoDecodeAccelerator::PreSandboxInitialization() {
-  for (const wchar_t* mfdll : kMediaFoundationVideoDecoderDLLs)
-    ::LoadLibrary(mfdll);
-  ::LoadLibrary(L"dxva2.dll");
+  for (const wchar_t* mfdll : kMediaFoundationVideoDecoderDLLs) {
+    if (!::LoadLibrary(mfdll))
+      PLOG(ERROR) << "DXVAVDA fatal error: could not LoadLibrary: " << mfdll;
+  }
+
+  if (!::LoadLibrary(L"dxva2.dll"))
+    PLOG(ERROR) << "DXVAVDA fatal error: could not LoadLibrary: dxva2.dll";
 
   if (base::win::GetVersion() >= base::win::Version::WIN8) {
-    LoadLibrary(L"msvproc.dll");
+    if (!LoadLibrary(L"msvproc.dll"))
+      PLOG(ERROR) << "DXVAVDA fatal error: could not LoadLibrary: msvproc.dll";
   } else {
 #if defined(ENABLE_DX11_FOR_WIN7)
-    LoadLibrary(L"mshtmlmedia.dll");
+    if (!LoadLibrary(L"mshtmlmedia.dll"))
+      PLOG(ERROR)
+          << "DXVAVDA fatal error: could not LoadLibrary: mshtmlmedia.dll";
 #endif
   }
 }
diff --git a/media/mojo/common/mojo_shared_buffer_video_frame.cc b/media/mojo/common/mojo_shared_buffer_video_frame.cc
index cf26fe8..84ebb78 100644
--- a/media/mojo/common/mojo_shared_buffer_video_frame.cc
+++ b/media/mojo/common/mojo_shared_buffer_video_frame.cc
@@ -246,9 +246,10 @@
 MojoSharedBufferVideoFrame::~MojoSharedBufferVideoFrame() {
   // Call |mojo_shared_buffer_done_cb_| to take ownership of
   // |shared_buffer_handle_|.
-  if (mojo_shared_buffer_done_cb_)
-    mojo_shared_buffer_done_cb_.Run(std::move(shared_buffer_handle_),
-                                    shared_buffer_size_);
+  if (mojo_shared_buffer_done_cb_) {
+    std::move(mojo_shared_buffer_done_cb_)
+        .Run(std::move(shared_buffer_handle_), shared_buffer_size_);
+  }
 }
 
 size_t MojoSharedBufferVideoFrame::PlaneOffset(size_t plane) const {
@@ -257,8 +258,8 @@
 }
 
 void MojoSharedBufferVideoFrame::SetMojoSharedBufferDoneCB(
-    const MojoSharedBufferDoneCB& mojo_shared_buffer_done_cb) {
-  mojo_shared_buffer_done_cb_ = mojo_shared_buffer_done_cb;
+    MojoSharedBufferDoneCB mojo_shared_buffer_done_cb) {
+  mojo_shared_buffer_done_cb_ = std::move(mojo_shared_buffer_done_cb);
 }
 
 const mojo::SharedBufferHandle& MojoSharedBufferVideoFrame::Handle() const {
diff --git a/media/mojo/common/mojo_shared_buffer_video_frame.h b/media/mojo/common/mojo_shared_buffer_video_frame.h
index 46aa3f94b..018a825 100644
--- a/media/mojo/common/mojo_shared_buffer_video_frame.h
+++ b/media/mojo/common/mojo_shared_buffer_video_frame.h
@@ -27,8 +27,8 @@
   // Callback called when this object is destructed. Ownership of the shared
   // memory is transferred to the callee.
   using MojoSharedBufferDoneCB =
-      base::Callback<void(mojo::ScopedSharedBufferHandle buffer,
-                          size_t capacity)>;
+      base::OnceCallback<void(mojo::ScopedSharedBufferHandle buffer,
+                              size_t capacity)>;
 
   // Creates a new I420 frame in shared memory with provided parameters
   // (coded_size() == natural_size() == visible_rect()), or returns nullptr.
@@ -78,7 +78,7 @@
   // Sets the callback to be called to free the shared buffer. If not null,
   // it is called on destruction, and is passed ownership of |handle|.
   void SetMojoSharedBufferDoneCB(
-      const MojoSharedBufferDoneCB& mojo_shared_buffer_done_cb);
+      MojoSharedBufferDoneCB mojo_shared_buffer_done_cb);
 
  private:
   friend class MojoDecryptorService;
diff --git a/media/mojo/common/mojo_shared_buffer_video_frame_unittest.cc b/media/mojo/common/mojo_shared_buffer_video_frame_unittest.cc
index 6459f3a..a382c94 100644
--- a/media/mojo/common/mojo_shared_buffer_video_frame_unittest.cc
+++ b/media/mojo/common/mojo_shared_buffer_video_frame_unittest.cc
@@ -165,9 +165,9 @@
 
   // Set the destruction callback.
   bool callback_called = false;
-  frame->SetMojoSharedBufferDoneCB(base::Bind(&CompareDestructionCallbackValues,
-                                              original_handle, requested_size,
-                                              &callback_called));
+  frame->SetMojoSharedBufferDoneCB(
+      base::BindOnce(&CompareDestructionCallbackValues, original_handle,
+                     requested_size, &callback_called));
   EXPECT_FALSE(callback_called);
 
   // Force destruction of |frame|.
diff --git a/media/mojo/services/mojo_cdm_allocator.cc b/media/mojo/services/mojo_cdm_allocator.cc
index 790e46f..97a4b97 100644
--- a/media/mojo/services/mojo_cdm_allocator.cc
+++ b/media/mojo/services/mojo_cdm_allocator.cc
@@ -24,10 +24,6 @@
 
 namespace {
 
-typedef base::Callback<void(mojo::ScopedSharedBufferHandle buffer,
-                            size_t capacity)>
-    MojoSharedBufferDoneCB;
-
 // cdm::Buffer implementation that provides access to mojo shared memory.
 // It owns the memory until Destroy() is called.
 class MojoCdmBuffer : public cdm::Buffer {
@@ -35,7 +31,8 @@
   static MojoCdmBuffer* Create(
       mojo::ScopedSharedBufferHandle buffer,
       size_t capacity,
-      const MojoSharedBufferDoneCB& mojo_shared_buffer_done_cb) {
+      MojoSharedBufferVideoFrame::MojoSharedBufferDoneCB
+          mojo_shared_buffer_done_cb) {
     DCHECK(buffer.is_valid());
     DCHECK(mojo_shared_buffer_done_cb);
 
@@ -43,7 +40,7 @@
     DCHECK_LE(capacity, std::numeric_limits<uint32_t>::max());
     return new MojoCdmBuffer(std::move(buffer),
                              base::checked_cast<uint32_t>(capacity),
-                             mojo_shared_buffer_done_cb);
+                             std::move(mojo_shared_buffer_done_cb));
   }
 
   // cdm::Buffer implementation.
@@ -52,8 +49,9 @@
     mapping_.reset();
 
     // If nobody has claimed the handle, then return it.
-    if (buffer_.is_valid())
-      mojo_shared_buffer_done_cb_.Run(std::move(buffer_), capacity_);
+    if (buffer_.is_valid()) {
+      std::move(mojo_shared_buffer_done_cb_).Run(std::move(buffer_), capacity_);
+    }
 
     // No need to exist anymore.
     delete this;
@@ -77,9 +75,10 @@
  private:
   MojoCdmBuffer(mojo::ScopedSharedBufferHandle buffer,
                 uint32_t capacity,
-                const MojoSharedBufferDoneCB& mojo_shared_buffer_done_cb)
+                MojoSharedBufferVideoFrame::MojoSharedBufferDoneCB
+                    mojo_shared_buffer_done_cb)
       : buffer_(std::move(buffer)),
-        mojo_shared_buffer_done_cb_(mojo_shared_buffer_done_cb),
+        mojo_shared_buffer_done_cb_(std::move(mojo_shared_buffer_done_cb)),
         capacity_(capacity),
         size_(0) {
     mapping_ = buffer_->Map(capacity_);
@@ -92,7 +91,8 @@
   }
 
   mojo::ScopedSharedBufferHandle buffer_;
-  MojoSharedBufferDoneCB mojo_shared_buffer_done_cb_;
+  MojoSharedBufferVideoFrame::MojoSharedBufferDoneCB
+      mojo_shared_buffer_done_cb_;
 
   mojo::ScopedSharedBufferMapping mapping_;
   uint32_t capacity_;
@@ -105,9 +105,9 @@
 // out of the data.
 class MojoCdmVideoFrame : public VideoFrameImpl {
  public:
-  explicit MojoCdmVideoFrame(
-      const MojoSharedBufferDoneCB& mojo_shared_buffer_done_cb)
-      : mojo_shared_buffer_done_cb_(mojo_shared_buffer_done_cb) {}
+  explicit MojoCdmVideoFrame(MojoSharedBufferVideoFrame::MojoSharedBufferDoneCB
+                                 mojo_shared_buffer_done_cb)
+      : mojo_shared_buffer_done_cb_(std::move(mojo_shared_buffer_done_cb)) {}
   ~MojoCdmVideoFrame() final = default;
 
   // VideoFrameImpl implementation.
@@ -143,13 +143,16 @@
 
     // |frame| could fail to be created if the memory can't be mapped into
     // this address space.
-    if (frame)
-      frame->SetMojoSharedBufferDoneCB(mojo_shared_buffer_done_cb_);
+    if (frame) {
+      frame->SetMojoSharedBufferDoneCB(std::move(mojo_shared_buffer_done_cb_));
+    }
+
     return frame;
   }
 
  private:
-  MojoSharedBufferDoneCB mojo_shared_buffer_done_cb_;
+  MojoSharedBufferVideoFrame::MojoSharedBufferDoneCB
+      mojo_shared_buffer_done_cb_;
 
   DISALLOW_COPY_AND_ASSIGN(MojoCdmVideoFrame);
 };
@@ -175,8 +178,9 @@
   auto found = available_buffers_.lower_bound(capacity);
   if (found == available_buffers_.end()) {
     buffer = AllocateNewBuffer(&capacity);
-    if (!buffer.is_valid())
+    if (!buffer.is_valid()) {
       return nullptr;
+    }
   } else {
     capacity = found->first;
     buffer = std::move(found->second);
@@ -196,8 +200,8 @@
 std::unique_ptr<VideoFrameImpl> MojoCdmAllocator::CreateCdmVideoFrame() {
   DCHECK(thread_checker_.CalledOnValidThread());
   return std::make_unique<MojoCdmVideoFrame>(
-      base::Bind(&MojoCdmAllocator::AddBufferToAvailableMap,
-                 weak_ptr_factory_.GetWeakPtr()));
+      base::BindOnce(&MojoCdmAllocator::AddBufferToAvailableMap,
+                     weak_ptr_factory_.GetWeakPtr()));
 }
 
 mojo::ScopedSharedBufferHandle MojoCdmAllocator::AllocateNewBuffer(
diff --git a/media/webrtc/audio_processor.cc b/media/webrtc/audio_processor.cc
index 93abb42..0e7b791 100644
--- a/media/webrtc/audio_processor.cc
+++ b/media/webrtc/audio_processor.cc
@@ -18,6 +18,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "media/base/limits.h"
 #include "media/webrtc/helpers.h"
 #include "media/webrtc/webrtc_switches.h"
@@ -145,9 +146,8 @@
   if (!audio_processing_) {
     // The destructor of File is blocking. Post it to a task runner to avoid
     // blocking the main thread.
-    base::PostTask(
-        FROM_HERE,
-        {base::ThreadPool(), base::TaskPriority::LOWEST, base::MayBlock()},
+    base::ThreadPool::PostTask(
+        FROM_HERE, {base::TaskPriority::LOWEST, base::MayBlock()},
         base::BindOnce([](base::File) {}, std::move(file)));
     return;
   }
diff --git a/mojo/public/cpp/bindings/lib/message_dumper.cc b/mojo/public/cpp/bindings/lib/message_dumper.cc
index c381102..64237293 100644
--- a/mojo/public/cpp/bindings/lib/message_dumper.cc
+++ b/mojo/public/cpp/bindings/lib/message_dumper.cc
@@ -14,6 +14,7 @@
 #include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "mojo/public/cpp/bindings/message.h"
 
 namespace {
@@ -76,9 +77,8 @@
                      message->interface_name(), message->method_name());
 
   static base::NoDestructor<scoped_refptr<base::TaskRunner>> task_runner(
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::USER_BLOCKING,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_BLOCKING,
            base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}));
 
   (*task_runner)
diff --git a/mojo/public/cpp/bindings/lib/test_random_mojo_delays.cc b/mojo/public/cpp/bindings/lib/test_random_mojo_delays.cc
index bde3b93..55afb41 100644
--- a/mojo/public/cpp/bindings/lib/test_random_mojo_delays.cc
+++ b/mojo/public/cpp/bindings/lib/test_random_mojo_delays.cc
@@ -14,6 +14,7 @@
 #include "base/synchronization/lock.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "mojo/public/cpp/bindings/lib/binding_state.h"
 #include "mojo/public/cpp/bindings/lib/test_random_mojo_delays.h"
@@ -38,8 +39,7 @@
 class RandomMojoDelays {
  public:
   RandomMojoDelays()
-      : runner_for_pauses_(
-            base::CreateSequencedTaskRunner({base::ThreadPool()})) {
+      : runner_for_pauses_(base::ThreadPool::CreateSequencedTaskRunner({})) {
     DETACH_FROM_SEQUENCE(runner_for_pauses_sequence_checker);
   }
 
diff --git a/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc b/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc
index 227bf227..23221b29 100644
--- a/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/run_loop.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/task_environment.h"
 #include "base/threading/sequenced_task_runner_handle.h"
@@ -210,7 +211,7 @@
 class TestSender {
  public:
   TestSender()
-      : task_runner_(base::CreateSequencedTaskRunner({base::ThreadPool()})),
+      : task_runner_(base::ThreadPool::CreateSequencedTaskRunner({})),
         next_sender_(nullptr),
         max_value_to_send_(-1) {}
 
@@ -257,7 +258,7 @@
 class TestReceiver {
  public:
   TestReceiver()
-      : task_runner_(base::CreateSequencedTaskRunner({base::ThreadPool()})),
+      : task_runner_(base::ThreadPool::CreateSequencedTaskRunner({})),
         expected_calls_(0) {}
 
   void SetUp(PendingAssociatedReceiver<IntegerSender> receiver0,
@@ -957,8 +958,7 @@
   // Test the thread safe pointer can be used from another thread.
   base::RunLoop run_loop;
 
-  auto sender_task_runner =
-      base::CreateSequencedTaskRunner({base::ThreadPool()});
+  auto sender_task_runner = base::ThreadPool::CreateSequencedTaskRunner({});
   auto quit_closure = run_loop.QuitClosure();
   sender_task_runner->PostTask(
       FROM_HERE, base::BindLambdaForTesting([&] {
@@ -982,7 +982,7 @@
 
 TEST_F(AssociatedInterfaceTest, SharedAssociatedRemoteWithTaskRunner) {
   const scoped_refptr<base::SequencedTaskRunner> other_thread_task_runner =
-      base::CreateSequencedTaskRunner({base::ThreadPool()});
+      base::ThreadPool::CreateSequencedTaskRunner({});
 
   ForwarderTestContext* context = new ForwarderTestContext();
   PendingAssociatedRemote<IntegerSender> pending_remote;
diff --git a/mojo/public/cpp/bindings/tests/binder_map_unittest.cc b/mojo/public/cpp/bindings/tests/binder_map_unittest.cc
index 7a9113dd..98b0b6f 100644
--- a/mojo/public/cpp/bindings/tests/binder_map_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/binder_map_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/run_loop.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/task_environment.h"
 #include "base/threading/sequenced_task_runner_handle.h"
@@ -117,7 +118,7 @@
   GenericPendingReceiver receiver2(remote2.BindNewPipeAndPassReceiver());
 
   auto task_runner1 = base::SequencedTaskRunnerHandle::Get();
-  auto task_runner2 = base::CreateSequencedTaskRunner({base::ThreadPool()});
+  auto task_runner2 = base::ThreadPool::CreateSequencedTaskRunner({});
 
   TestInterface1Impl impl1;
   std::unique_ptr<TestInterface2Impl> impl2;
diff --git a/mojo/public/cpp/bindings/tests/flush_async_unittest.cc b/mojo/public/cpp/bindings/tests/flush_async_unittest.cc
index 9dcbe7d..d4ce86a 100644
--- a/mojo/public/cpp/bindings/tests/flush_async_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/flush_async_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/optional.h"
 #include "base/synchronization/lock.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/bind_test_util.h"
 #include "mojo/public/cpp/bindings/async_flusher.h"
 #include "mojo/public/cpp/bindings/pending_flush.h"
@@ -40,7 +41,7 @@
                           public mojom::KeyValueStore {
  public:
   KeyValueStoreImpl()
-      : task_runner_(base::CreateSequencedTaskRunner({base::ThreadPool()})) {}
+      : task_runner_(base::ThreadPool::CreateSequencedTaskRunner({})) {}
 
   void Bind(PendingReceiver<mojom::KeyValueStore> receiver) {
     task_runner_->PostTask(
@@ -65,7 +66,7 @@
   class WriterImpl : public mojom::Writer {
    public:
     WriterImpl(KeyValueStoreImpl* key_value_store)
-        : task_runner_(base::CreateSequencedTaskRunner({base::ThreadPool()})),
+        : task_runner_(base::ThreadPool::CreateSequencedTaskRunner({})),
           key_value_store_(key_value_store) {}
     ~WriterImpl() override = default;
 
diff --git a/mojo/public/cpp/bindings/tests/remote_unittest.cc b/mojo/public/cpp/bindings/tests/remote_unittest.cc
index 3f2f0c2..12744135 100644
--- a/mojo/public/cpp/bindings/tests/remote_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/remote_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/run_loop.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/task_environment.h"
 #include "base/threading/sequenced_task_runner_handle.h"
@@ -261,7 +262,7 @@
 }
 
 TEST_P(EndToEndRemoteTest, EndToEndOnSequence) {
-  RunTest(base::CreateSequencedTaskRunner({base::ThreadPool()}));
+  RunTest(base::ThreadPool::CreateSequencedTaskRunner({}));
 }
 
 TEST_P(RemoteTest, Movable) {
@@ -880,8 +881,7 @@
 
   // Send a message on |thread_safe_remote| from a different sequence.
   auto main_task_runner = base::SequencedTaskRunnerHandle::Get();
-  auto sender_task_runner =
-      base::CreateSequencedTaskRunner({base::ThreadPool()});
+  auto sender_task_runner = base::ThreadPool::CreateSequencedTaskRunner({});
   sender_task_runner->PostTask(
       FROM_HERE, base::BindLambdaForTesting([&] {
         shared_remote->Add(
@@ -898,7 +898,7 @@
 
 TEST_P(RemoteTest, SharedRemoteWithTaskRunner) {
   const scoped_refptr<base::SequencedTaskRunner> other_thread_task_runner =
-      base::CreateSequencedTaskRunner({base::ThreadPool()});
+      base::ThreadPool::CreateSequencedTaskRunner({});
 
   PendingRemote<math::Calculator> remote;
   auto receiver = remote.InitWithNewPipeAndPassReceiver();
@@ -942,7 +942,7 @@
   MathCalculatorImpl calc_impl(remote.InitWithNewPipeAndPassReceiver());
 
   const scoped_refptr<base::SequencedTaskRunner> main_task_runner =
-      base::CreateSequencedTaskRunner({base::ThreadPool()});
+      base::ThreadPool::CreateSequencedTaskRunner({});
   SharedRemote<math::Calculator> shared_remote(std::move(remote),
                                                main_task_runner);
 
@@ -994,8 +994,8 @@
   // See https://crbug.com/1016022.
 
   const scoped_refptr<base::SequencedTaskRunner> bound_task_runner =
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::WithBaseSyncPrimitives()});
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::WithBaseSyncPrimitives()});
 
   PendingRemote<mojom::SharedRemoteSyncTest> pending_remote;
   auto receiver = pending_remote.InitWithNewPipeAndPassReceiver();
diff --git a/mojo/public/cpp/bindings/tests/sync_method_unittest.cc b/mojo/public/cpp/bindings/tests/sync_method_unittest.cc
index 2f383c4..a750afe 100644
--- a/mojo/public/cpp/bindings/tests/sync_method_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/sync_method_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/run_loop.h"
 #include "base/sequence_token.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread.h"
@@ -252,7 +253,7 @@
 class TestSyncServiceSequence {
  public:
   TestSyncServiceSequence()
-      : task_runner_(base::CreateSequencedTaskRunner({base::ThreadPool()})),
+      : task_runner_(base::ThreadPool::CreateSequencedTaskRunner({})),
         ping_called_(false) {}
 
   void SetUp(InterfaceRequest<Interface> request) {
@@ -432,8 +433,7 @@
     std::unique_ptr<SequencedTaskRunnerTestBase> test) {
   base::RunLoop run_loop;
   test->Init(run_loop.QuitClosure());
-  base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::WithBaseSyncPrimitives()})
+  base::ThreadPool::CreateSequencedTaskRunner({base::WithBaseSyncPrimitives()})
       ->PostTask(FROM_HERE,
                  base::BindOnce(&SequencedTaskRunnerTestBase::RunTest,
                                 base::Unretained(test.release())));
diff --git a/mojo/public/cpp/system/data_pipe_producer.cc b/mojo/public/cpp/system/data_pipe_producer.cc
index 4ca31f0..056620a7 100644
--- a/mojo/public/cpp/system/data_pipe_producer.cc
+++ b/mojo/public/cpp/system/data_pipe_producer.cc
@@ -17,6 +17,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/synchronization/lock.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/thread_annotations.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "mojo/public/cpp/system/simple_watcher.h"
@@ -184,8 +185,8 @@
   // TODO(crbug.com/924416): Re-evaluate how TaskPriority is set here and in
   // other file URL-loading-related code. Some callers require USER_VISIBLE
   // (i.e., BEST_EFFORT is not enough).
-  auto file_task_runner = base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE});
+  auto file_task_runner = base::ThreadPool::CreateSequencedTaskRunner(
+      {base::MayBlock(), base::TaskPriority::USER_VISIBLE});
   sequence_state_ = new SequenceState(
       std::move(producer_), file_task_runner,
       base::BindOnce(&DataPipeProducer::OnWriteComplete,
diff --git a/net/android/network_change_notifier_android.cc b/net/android/network_change_notifier_android.cc
index 50c271e..9cf47f0 100644
--- a/net/android/network_change_notifier_android.cc
+++ b/net/android/network_change_notifier_android.cc
@@ -69,6 +69,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread.h"
 #include "net/base/address_tracker_linux.h"
 
@@ -212,7 +213,7 @@
       base::android::SDK_VERSION_P) {
     // |blocking_thread_objects_| will live on this runner.
     scoped_refptr<base::SequencedTaskRunner> blocking_thread_runner =
-        base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock()});
+        base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()});
     blocking_thread_objects_ =
         std::unique_ptr<BlockingThreadObjects, base::OnTaskRunnerDeleter>(
             new BlockingThreadObjects(),
diff --git a/net/base/directory_lister.cc b/net/base/directory_lister.cc
index 6b60a48d..046a1b3 100644
--- a/net/base/directory_lister.cc
+++ b/net/base/directory_lister.cc
@@ -14,6 +14,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_restrictions.h"
@@ -80,10 +81,10 @@
 }
 
 void DirectoryLister::Start() {
-  base::PostTask(FROM_HERE,
-                 {base::ThreadPool(), base::MayBlock(),
-                  base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-                 base::BindOnce(&Core::Start, core_));
+  base::ThreadPool::PostTask(
+      FROM_HERE,
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      base::BindOnce(&Core::Start, core_));
 }
 
 void DirectoryLister::Cancel() {
diff --git a/net/base/network_change_notifier_linux.cc b/net/base/network_change_notifier_linux.cc
index abc2742..ad8b5625 100644
--- a/net/base/network_change_notifier_linux.cc
+++ b/net/base/network_change_notifier_linux.cc
@@ -11,6 +11,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread.h"
 #include "net/base/address_tracker_linux.h"
 #include "net/dns/dns_config_service_posix.h"
@@ -86,8 +87,8 @@
 NetworkChangeNotifierLinux::NetworkChangeNotifierLinux(
     const std::unordered_set<std::string>& ignored_interfaces)
     : NetworkChangeNotifier(NetworkChangeCalculatorParamsLinux()),
-      blocking_thread_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock()})),
+      blocking_thread_runner_(
+          base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()})),
       blocking_thread_objects_(
           new BlockingThreadObjects(ignored_interfaces),
           // Ensure |blocking_thread_objects_| lives on
diff --git a/net/base/network_change_notifier_win.cc b/net/base/network_change_notifier_win.cc
index 38d729fb..c453bda 100644
--- a/net/base/network_change_notifier_win.cc
+++ b/net/base/network_change_notifier_win.cc
@@ -18,6 +18,7 @@
 #include "base/single_thread_task_runner.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_task_runner_handle.h"
@@ -38,8 +39,8 @@
     : NetworkChangeNotifier(NetworkChangeCalculatorParamsWin()),
       is_watching_(false),
       sequential_failures_(0),
-      blocking_task_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock()})),
+      blocking_task_runner_(
+          base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()})),
       last_computed_connection_type_(RecomputeCurrentConnectionType()),
       last_announced_offline_(last_computed_connection_type_ ==
                               CONNECTION_NONE) {
diff --git a/net/cert/cert_verify_proc_builtin_unittest.cc b/net/cert/cert_verify_proc_builtin_unittest.cc
index 9b3bc3c..847f21f 100644
--- a/net/cert/cert_verify_proc_builtin_unittest.cc
+++ b/net/cert/cert_verify_proc_builtin_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/run_loop.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "net/base/test_completion_callback.h"
 #include "net/cert/cert_verify_proc.h"
@@ -102,10 +103,9 @@
               CertVerifyResult* verify_result,
               CompletionOnceCallback callback) {
     verify_result->DetachFromSequence();
-    base::PostTaskAndReplyWithResult(
+    base::ThreadPool::PostTaskAndReplyWithResult(
         FROM_HERE,
-        {base::ThreadPool(), base::MayBlock(),
-         base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+        {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
         base::BindOnce(&VerifyOnWorkerThread, verify_proc_, std::move(cert),
                        hostname, flags, additional_trust_anchors,
                        verify_result),
diff --git a/net/cert/multi_threaded_cert_verifier.cc b/net/cert/multi_threaded_cert_verifier.cc
index 7c76599..cbea226 100644
--- a/net/cert/multi_threaded_cert_verifier.cc
+++ b/net/cert/multi_threaded_cert_verifier.cc
@@ -8,6 +8,7 @@
 #include "base/bind_helpers.h"
 #include "base/memory/weak_ptr.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/trace_event/trace_event.h"
 #include "net/base/net_errors.h"
@@ -114,10 +115,9 @@
     flags &= ~CertVerifyProc::VERIFY_REV_CHECKING_REQUIRED_LOCAL_ANCHORS;
   }
   DCHECK(config.crl_set);
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(),
-       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&DoVerifyOnWorkerThread, verify_proc, params.certificate(),
                      params.hostname(), params.ocsp_response(),
                      params.sct_list(), flags, config.crl_set,
diff --git a/net/cert/nss_cert_database.cc b/net/cert/nss_cert_database.cc
index ce5ecc1..4dac8b5 100644
--- a/net/cert/nss_cert_database.cc
+++ b/net/cert/nss_cert_database.cc
@@ -20,6 +20,7 @@
 #include "base/macros.h"
 #include "base/observer_list_threadsafe.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "crypto/nss_util_internal.h"
 #include "crypto/scoped_nss_types.h"
@@ -96,10 +97,9 @@
 NSSCertDatabase::~NSSCertDatabase() = default;
 
 void NSSCertDatabase::ListCerts(ListCertsCallback callback) {
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(),
-       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&NSSCertDatabase::ListCertsImpl, crypto::ScopedPK11Slot()),
       std::move(callback));
 }
@@ -107,20 +107,18 @@
 void NSSCertDatabase::ListCertsInSlot(ListCertsCallback callback,
                                       PK11SlotInfo* slot) {
   DCHECK(slot);
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(),
-       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&NSSCertDatabase::ListCertsImpl,
                      crypto::ScopedPK11Slot(PK11_ReferenceSlot(slot))),
       std::move(callback));
 }
 
 void NSSCertDatabase::ListCertsInfo(ListCertsInfoCallback callback) {
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(),
-       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&NSSCertDatabase::ListCertsInfoImpl,
                      /*slot=*/nullptr,
                      /*add_certs_info=*/true),
@@ -342,10 +340,9 @@
 
 void NSSCertDatabase::DeleteCertAndKeyAsync(ScopedCERTCertificate cert,
                                             DeleteCertCallback callback) {
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(),
-       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&NSSCertDatabase::DeleteCertAndKeyImplScoped,
                      std::move(cert)),
       base::BindOnce(&NSSCertDatabase::NotifyCertRemovalAndCallBack,
diff --git a/net/cert/nss_cert_database_chromeos.cc b/net/cert/nss_cert_database_chromeos.cc
index d87f25ce..af6f0952 100644
--- a/net/cert/nss_cert_database_chromeos.cc
+++ b/net/cert/nss_cert_database_chromeos.cc
@@ -16,6 +16,7 @@
 #include "base/location.h"
 #include "base/stl_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 
 namespace net {
@@ -41,19 +42,17 @@
 
 void NSSCertDatabaseChromeOS::ListCerts(
     NSSCertDatabase::ListCertsCallback callback) {
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(),
-       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&NSSCertDatabaseChromeOS::ListCertsImpl, profile_filter_),
       std::move(callback));
 }
 
 void NSSCertDatabaseChromeOS::ListCertsInfo(ListCertsInfoCallback callback) {
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(),
-       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&NSSCertDatabaseChromeOS::ListCertsInfoImpl,
                      profile_filter_, /*slot=*/GetSystemSlot(),
                      /*add_certs_info=*/true),
diff --git a/net/disk_cache/backend_unittest.cc b/net/disk_cache/backend_unittest.cc
index e6ef68a1..8f88d07 100644
--- a/net/disk_cache/backend_unittest.cc
+++ b/net/disk_cache/backend_unittest.cc
@@ -18,6 +18,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/third_party/dynamic_annotations/dynamic_annotations.h"
@@ -4330,8 +4331,8 @@
   // priority order.
   disk_cache::SimpleBackendImpl* simple_cache =
       static_cast<disk_cache::SimpleBackendImpl*>(cache_.get());
-  auto task_runner = base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::TaskPriority::USER_VISIBLE, base::MayBlock()});
+  auto task_runner = base::ThreadPool::CreateSequencedTaskRunner(
+      {base::TaskPriority::USER_VISIBLE, base::MayBlock()});
   simple_cache->SetTaskRunnerForTesting(task_runner);
 
   // Create three entries. Priority order is 3, 1, 2 because 3 has the highest
@@ -4422,8 +4423,8 @@
   // priority order.
   disk_cache::SimpleBackendImpl* simple_cache =
       static_cast<disk_cache::SimpleBackendImpl*>(cache_.get());
-  auto task_runner = base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::TaskPriority::USER_VISIBLE, base::MayBlock()});
+  auto task_runner = base::ThreadPool::CreateSequencedTaskRunner(
+      {base::TaskPriority::USER_VISIBLE, base::MayBlock()});
   simple_cache->SetTaskRunnerForTesting(task_runner);
 
   // Create three entries. If their priority was honored, they'd run in order
diff --git a/net/disk_cache/blockfile/file_ios.cc b/net/disk_cache/blockfile/file_ios.cc
index 3576a84..984a34b1 100644
--- a/net/disk_cache/blockfile/file_ios.cc
+++ b/net/disk_cache/blockfile/file_ios.cc
@@ -15,6 +15,7 @@
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "net/base/net_errors.h"
 #include "net/disk_cache/blockfile/in_flight_io.h"
 #include "net/disk_cache/disk_cache.h"
@@ -121,10 +122,10 @@
       new FileBackgroundIO(file, buf, buf_len, offset, callback, this));
   file->AddRef();  // Balanced on OnOperationComplete()
 
-  base::PostTask(FROM_HERE,
-                 {base::ThreadPool(), base::MayBlock(),
-                  base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-                 base::BindOnce(&FileBackgroundIO::Read, operation.get()));
+  base::ThreadPool::PostTask(
+      FROM_HERE,
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      base::BindOnce(&FileBackgroundIO::Read, operation.get()));
   OnOperationPosted(operation.get());
 }
 
@@ -135,10 +136,10 @@
       new FileBackgroundIO(file, buf, buf_len, offset, callback, this));
   file->AddRef();  // Balanced on OnOperationComplete()
 
-  base::PostTask(FROM_HERE,
-                 {base::ThreadPool(), base::MayBlock(),
-                  base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-                 base::BindOnce(&FileBackgroundIO::Write, operation.get()));
+  base::ThreadPool::PostTask(
+      FROM_HERE,
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      base::BindOnce(&FileBackgroundIO::Write, operation.get()));
   OnOperationPosted(operation.get());
 }
 
diff --git a/net/disk_cache/blockfile/file_posix.cc b/net/disk_cache/blockfile/file_posix.cc
index 56e9f84..b592110 100644
--- a/net/disk_cache/blockfile/file_posix.cc
+++ b/net/disk_cache/blockfile/file_posix.cc
@@ -13,6 +13,7 @@
 #include "base/logging.h"
 #include "base/run_loop.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "net/base/net_errors.h"
 #include "net/disk_cache/disk_cache.h"
@@ -73,9 +74,8 @@
     return false;
   }
 
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::TaskPriority::USER_BLOCKING, base::MayBlock()},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::TaskPriority::USER_BLOCKING, base::MayBlock()},
       base::BindOnce(&File::DoRead, base::Unretained(this), buffer, buffer_len,
                      offset),
       base::BindOnce(&File::OnOperationComplete, this, callback));
@@ -102,9 +102,8 @@
   // finish before it reads from the network again.
   // TODO(fdoray): Consider removing this from the critical path of network
   // requests and changing the priority to BACKGROUND.
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::TaskPriority::USER_BLOCKING, base::MayBlock()},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::TaskPriority::USER_BLOCKING, base::MayBlock()},
       base::BindOnce(&File::DoWrite, base::Unretained(this), buffer, buffer_len,
                      offset),
       base::BindOnce(&File::OnOperationComplete, this, callback));
diff --git a/net/disk_cache/cache_util.cc b/net/disk_cache/cache_util.cc
index 3224f73..6cfa2f40 100644
--- a/net/disk_cache/cache_util.cc
+++ b/net/disk_cache/cache_util.cc
@@ -13,6 +13,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
 #include "build/build_config.h"
 
@@ -140,11 +141,10 @@
     return false;
   }
 
-  base::PostTask(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT,
-       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-      base::BindOnce(&CleanupCallback, path, name_str));
+  base::ThreadPool::PostTask(FROM_HERE,
+                             {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+                              base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+                             base::BindOnce(&CleanupCallback, path, name_str));
   return true;
 }
 
diff --git a/net/disk_cache/simple/simple_backend_impl.cc b/net/disk_cache/simple/simple_backend_impl.cc
index 6ab5f58..ecdd336 100644
--- a/net/disk_cache/simple/simple_backend_impl.cc
+++ b/net/disk_cache/simple/simple_backend_impl.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "net/disk_cache/simple/simple_backend_impl.h"
+#include "base/task/thread_pool.h"
 
 #include <algorithm>
 #include <cstdlib>
@@ -226,9 +227,8 @@
       file_tracker_(file_tracker ? file_tracker
                                  : g_simple_file_tracker.Pointer()),
       path_(path),
-      cache_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::USER_BLOCKING,
+      cache_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_BLOCKING,
            base::TaskShutdownBehavior::BLOCK_SHUTDOWN})),
       orig_max_size_(max_bytes),
       entry_operations_mode_((cache_type == net::DISK_CACHE ||
@@ -259,8 +259,8 @@
 }
 
 net::Error SimpleBackendImpl::Init(CompletionOnceCallback completion_callback) {
-  auto worker_pool = base::CreateTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::WithBaseSyncPrimitives(),
+  auto worker_pool = base::ThreadPool::CreateTaskRunner(
+      {base::MayBlock(), base::WithBaseSyncPrimitives(),
        base::TaskPriority::USER_BLOCKING,
        base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN});
 
diff --git a/net/dns/address_sorter_win.cc b/net/dns/address_sorter_win.cc
index 3bbf6aa..df64706b 100644
--- a/net/dns/address_sorter_win.cc
+++ b/net/dns/address_sorter_win.cc
@@ -14,6 +14,7 @@
 #include "base/macros.h"
 #include "base/memory/free_deleter.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "net/base/address_list.h"
 #include "net/base/ip_address.h"
 #include "net/base/ip_endpoint.h"
@@ -44,11 +45,11 @@
    public:
     static void Start(const AddressList& list, CallbackType callback) {
       auto job = base::WrapRefCounted(new Job(list, std::move(callback)));
-      base::PostTaskAndReply(FROM_HERE,
-                             {base::ThreadPool(), base::MayBlock(),
-                              base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-                             base::BindOnce(&Job::Run, job),
-                             base::BindOnce(&Job::OnComplete, job));
+      base::ThreadPool::PostTaskAndReply(
+          FROM_HERE,
+          {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+          base::BindOnce(&Job::Run, job),
+          base::BindOnce(&Job::OnComplete, job));
     }
 
    private:
diff --git a/net/dns/dns_config_service_posix_unittest.cc b/net/dns/dns_config_service_posix_unittest.cc
index 42feb67..b4cc7c8 100644
--- a/net/dns/dns_config_service_posix_unittest.cc
+++ b/net/dns/dns_config_service_posix_unittest.cc
@@ -23,6 +23,7 @@
 #include "net/dns/public/dns_protocol.h"
 
 #include "base/bind.h"
+#include "base/task/thread_pool.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 #if defined(OS_ANDROID)
@@ -206,7 +207,7 @@
   base::test::TaskEnvironment task_environment;
 
   scoped_refptr<base::SequencedTaskRunner> runner =
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock()});
+      base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()});
   std::unique_ptr<internal::DnsConfigServicePosix, base::OnTaskRunnerDeleter>
       service(new internal::DnsConfigServicePosix(),
               base::OnTaskRunnerDeleter(runner));
diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
index a0ae3a5..8a8fd414 100644
--- a/net/dns/host_resolver_manager.cc
+++ b/net/dns/host_resolver_manager.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "net/dns/host_resolver_manager.h"
+#include "base/task/thread_pool.h"
 
 #if defined(OS_WIN)
 #include <Winsock2.h>
@@ -2705,8 +2706,8 @@
 
   DCHECK_GE(dispatcher_->num_priorities(), static_cast<size_t>(NUM_PRIORITIES));
 
-  proc_task_runner_ = base::CreateTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), priority_mode.Get(),
+  proc_task_runner_ = base::ThreadPool::CreateTaskRunner(
+      {base::MayBlock(), priority_mode.Get(),
        base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN});
 
 #if defined(OS_WIN)
@@ -3594,10 +3595,9 @@
 void HostResolverManager::RunLoopbackProbeJob() {
   // Run this asynchronously as it can take 40-100ms and should not block
   // initialization.
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(),
-       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&HaveOnlyLoopbackAddresses),
       base::BindOnce(&HostResolverManager::SetHaveOnlyLoopbackAddresses,
                      weak_ptr_factory_.GetWeakPtr()));
diff --git a/net/dns/serial_worker.cc b/net/dns/serial_worker.cc
index 08fd6897..39d6a755 100644
--- a/net/dns/serial_worker.cc
+++ b/net/dns/serial_worker.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_task_runner_handle.h"
 
@@ -27,12 +28,12 @@
       // PostTaskAndReply fails to post task back to the original
       // task runner. In this case the callback is not destroyed, and the
       // weak reference allows SerialWorker instance to be deleted.
-      base::PostTaskAndReply(FROM_HERE,
-                             {base::ThreadPool(), base::MayBlock(),
-                              base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-                             base::BindOnce(&SerialWorker::DoWork, this),
-                             base::BindOnce(&SerialWorker::OnWorkJobFinished,
-                                            weak_factory_.GetWeakPtr()));
+      base::ThreadPool::PostTaskAndReply(
+          FROM_HERE,
+          {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+          base::BindOnce(&SerialWorker::DoWork, this),
+          base::BindOnce(&SerialWorker::OnWorkJobFinished,
+                         weak_factory_.GetWeakPtr()));
       state_ = WORKING;
       return;
     case WORKING:
diff --git a/net/dns/system_dns_config_change_notifier.cc b/net/dns/system_dns_config_change_notifier.cc
index f523954..4575c9b 100644
--- a/net/dns/system_dns_config_change_notifier.cc
+++ b/net/dns/system_dns_config_change_notifier.cc
@@ -16,6 +16,7 @@
 #include "base/synchronization/lock.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "net/dns/dns_config_service.h"
 
@@ -185,9 +186,9 @@
 };
 
 SystemDnsConfigChangeNotifier::SystemDnsConfigChangeNotifier()
-    : SystemDnsConfigChangeNotifier(base::CreateSequencedTaskRunner(
-                                        {base::ThreadPool(), base::MayBlock()}),
-                                    DnsConfigService::CreateSystemService()) {}
+    : SystemDnsConfigChangeNotifier(
+          base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()}),
+          DnsConfigService::CreateSystemService()) {}
 
 SystemDnsConfigChangeNotifier::SystemDnsConfigChangeNotifier(
     scoped_refptr<base::SequencedTaskRunner> task_runner,
diff --git a/net/dns/system_dns_config_change_notifier_unittest.cc b/net/dns/system_dns_config_change_notifier_unittest.cc
index 7c3922b..dbca90dd 100644
--- a/net/dns/system_dns_config_change_notifier_unittest.cc
+++ b/net/dns/system_dns_config_change_notifier_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/run_loop.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "net/base/ip_address.h"
 #include "net/base/ip_endpoint.h"
 #include "net/dns/dns_hosts.h"
@@ -35,8 +36,8 @@
   // Set up a change notifier, owned on a dedicated blockable task runner, with
   // a faked underlying DnsConfigService.
   SystemDnsConfigChangeNotifierTest()
-      : notifier_task_runner_(base::CreateSequencedTaskRunner(
-            {base::ThreadPool(), base::MayBlock()})) {
+      : notifier_task_runner_(
+            base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()})) {
     auto test_service = std::make_unique<TestDnsConfigService>();
     notifier_task_runner_->PostTask(
         FROM_HERE,
diff --git a/net/extras/sqlite/sqlite_persistent_cookie_store_perftest.cc b/net/extras/sqlite/sqlite_persistent_cookie_store_perftest.cc
index 2181dd8..443a801 100644
--- a/net/extras/sqlite/sqlite_persistent_cookie_store_perftest.cc
+++ b/net/extras/sqlite/sqlite_persistent_cookie_store_perftest.cc
@@ -14,6 +14,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/timer/elapsed_timer.h"
 #include "net/base/test_completion_callback.h"
@@ -149,9 +150,9 @@
   base::Time test_start_;
   base::test::TaskEnvironment task_environment_;
   const scoped_refptr<base::SequencedTaskRunner> background_task_runner_ =
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock()});
+      base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()});
   const scoped_refptr<base::SequencedTaskRunner> client_task_runner_ =
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock()});
+      base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()});
   base::WaitableEvent loaded_event_;
   base::WaitableEvent key_loaded_event_;
   std::vector<std::unique_ptr<CanonicalCookie>> cookies_;
diff --git a/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc b/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc
index 51c933b..9b432a7 100644
--- a/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc
+++ b/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc
@@ -21,6 +21,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/bind_test_util.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/threading/thread_task_runner_handle.h"
@@ -208,9 +209,9 @@
 
  protected:
   const scoped_refptr<base::SequencedTaskRunner> background_task_runner_ =
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock()});
+      base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()});
   const scoped_refptr<base::SequencedTaskRunner> client_task_runner_ =
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock()});
+      base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()});
   base::WaitableEvent loaded_event_;
   base::WaitableEvent db_thread_event_;
   CanonicalCookieVector cookies_;
diff --git a/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store_unittest.cc b/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store_unittest.cc
index aa55d43..f3d811b0 100644
--- a/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store_unittest.cc
+++ b/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/simple_test_clock.h"
 #include "base/threading/thread_restrictions.h"
@@ -217,7 +218,7 @@
   const scoped_refptr<base::SequencedTaskRunner> client_task_runner_ =
       base::ThreadTaskRunnerHandle::Get();
   const scoped_refptr<base::SequencedTaskRunner> background_task_runner_ =
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock()});
+      base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()});
 };
 
 TEST_F(SQLitePersistentReportingAndNelStoreTest, CreateDBAndTables) {
diff --git a/net/log/file_net_log_observer.cc b/net/log/file_net_log_observer.cc
index 5c68f11c..714e0eb 100644
--- a/net/log/file_net_log_observer.cc
+++ b/net/log/file_net_log_observer.cc
@@ -20,6 +20,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/synchronization/lock.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/values.h"
 #include "net/log/net_log_capture_mode.h"
 #include "net/log/net_log_entry.h"
@@ -41,8 +42,8 @@
   //
   // These intentionally block shutdown to ensure the log file has finished
   // being written.
-  return base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE,
+  return base::ThreadPool::CreateSequencedTaskRunner(
+      {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
        base::TaskShutdownBehavior::BLOCK_SHUTDOWN});
 }
 
diff --git a/net/proxy_resolution/dhcp_pac_file_adapter_fetcher_win_unittest.cc b/net/proxy_resolution/dhcp_pac_file_adapter_fetcher_win_unittest.cc
index 87aaa9a0..5d7f98f 100644
--- a/net/proxy_resolution/dhcp_pac_file_adapter_fetcher_win_unittest.cc
+++ b/net/proxy_resolution/dhcp_pac_file_adapter_fetcher_win_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/run_loop.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_timeouts.h"
 #include "base/threading/thread_restrictions.h"
@@ -149,8 +150,8 @@
       : url_request_context_(new TestURLRequestContext()),
         fetcher_(new MockDhcpPacFileAdapterFetcher(
             url_request_context_.get(),
-            base::CreateSequencedTaskRunner(
-                {base::ThreadPool(), base::MayBlock(),
+            base::ThreadPool::CreateSequencedTaskRunner(
+                {base::MayBlock(),
                  base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}))) {}
 
   void WaitForResult(int expected_error) {
@@ -312,8 +313,8 @@
   TestURLRequestContext url_request_context;
   client.fetcher_.reset(new MockDhcpRealFetchPacFileAdapterFetcher(
       &url_request_context,
-      base::CreateTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
+      base::ThreadPool::CreateTaskRunner(
+          {base::MayBlock(),
            base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN})));
   client.fetcher_->configured_url_ = configured_url.spec();
   client.RunTest();
diff --git a/net/proxy_resolution/dhcp_pac_file_fetcher_win.cc b/net/proxy_resolution/dhcp_pac_file_fetcher_win.cc
index 6ebac4f..8b75311 100644
--- a/net/proxy_resolution/dhcp_pac_file_fetcher_win.cc
+++ b/net/proxy_resolution/dhcp_pac_file_fetcher_win.cc
@@ -13,6 +13,7 @@
 #include "base/memory/free_deleter.h"
 #include "base/synchronization/lock.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "base/values.h"
@@ -182,9 +183,9 @@
   }
 
   const scoped_refptr<base::TaskRunner> task_runner_ =
-      base::CreateTaskRunner({base::ThreadPool(), base::MayBlock(),
-                              base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN,
-                              base::TaskPriority::USER_VISIBLE});
+      base::ThreadPool::CreateTaskRunner(
+          {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN,
+           base::TaskPriority::USER_VISIBLE});
 
   // Synchronizes access to members below.
   base::Lock lock_;
diff --git a/net/proxy_resolution/polling_proxy_config_service.cc b/net/proxy_resolution/polling_proxy_config_service.cc
index 3b1a3a2..258bfa4 100644
--- a/net/proxy_resolution/polling_proxy_config_service.cc
+++ b/net/proxy_resolution/polling_proxy_config_service.cc
@@ -12,6 +12,7 @@
 #include "base/single_thread_task_runner.h"
 #include "base/synchronization/lock.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "net/proxy_resolution/proxy_config_with_annotation.h"
 
@@ -93,10 +94,10 @@
     last_poll_time_ = base::TimeTicks::Now();
     poll_task_outstanding_ = true;
     poll_task_queued_ = false;
-    base::PostTask(FROM_HERE,
-                   {base::ThreadPool(), base::MayBlock(),
-                    base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-                   base::BindOnce(&Core::PollAsync, this, get_config_func_));
+    base::ThreadPool::PostTask(
+        FROM_HERE,
+        {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+        base::BindOnce(&Core::PollAsync, this, get_config_func_));
   }
 
  private:
diff --git a/net/socket/udp_socket_win.cc b/net/socket/udp_socket_win.cc
index d79302c..0d08043 100644
--- a/net/socket/udp_socket_win.cc
+++ b/net/socket/udp_socket_win.cc
@@ -15,6 +15,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/rand_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "net/base/io_buffer.h"
 #include "net/base/ip_address.h"
 #include "net/base/ip_endpoint.h"
@@ -1333,8 +1334,8 @@
   }
 
   handle_is_initializing_ = true;
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE, {base::ThreadPool(), base::MayBlock()},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock()},
       base::BindOnce(&DscpManager::DoCreateHandle, api_),
       base::BindOnce(&DscpManager::OnHandleCreated, api_,
                      weak_ptr_factory_.GetWeakPtr()));
diff --git a/net/ssl/client_cert_store_nss.cc b/net/ssl/client_cert_store_nss.cc
index f4d3e893..0e5d02c6 100644
--- a/net/ssl/client_cert_store_nss.cc
+++ b/net/ssl/client_cert_store_nss.cc
@@ -18,6 +18,7 @@
 #include "base/logging.h"
 #include "base/strings/string_piece.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "crypto/nss_crypto_module_delegate.h"
 #include "crypto/nss_util.h"
@@ -49,10 +50,9 @@
                              private_key_callback) override {
     // Caller is responsible for keeping the ClientCertIdentity alive until
     // the |private_key_callback| is run, so it's safe to use Unretained here.
-    base::PostTaskAndReplyWithResult(
+    base::ThreadPool::PostTaskAndReplyWithResult(
         FROM_HERE,
-        {base::ThreadPool(), base::MayBlock(),
-         base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+        {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
         base::BindOnce(&FetchClientCertPrivateKey,
                        base::Unretained(certificate()), cert_certificate_.get(),
                        password_delegate_),
@@ -78,10 +78,9 @@
   scoped_refptr<crypto::CryptoModuleBlockingPasswordDelegate> password_delegate;
   if (!password_delegate_factory_.is_null())
     password_delegate = password_delegate_factory_.Run(request.host_and_port);
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(),
-       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&ClientCertStoreNSS::GetAndFilterCertsOnWorkerThread,
                      // Caller is responsible for keeping the ClientCertStore
                      // alive until the callback is run.
diff --git a/net/ssl/ssl_key_logger_impl.cc b/net/ssl/ssl_key_logger_impl.cc
index 8cc565be..117acf4 100644
--- a/net/ssl/ssl_key_logger_impl.cc
+++ b/net/ssl/ssl_key_logger_impl.cc
@@ -21,6 +21,7 @@
 #include "base/synchronization/lock.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/thread_annotations.h"
 
 namespace net {
@@ -43,9 +44,8 @@
     // waiting to flush these to disk, but some buggy antiviruses point this at
     // a pipe and hang, so we avoid blocking shutdown. If writing to a real
     // file, writes should complete quickly enough that this does not matter.
-    task_runner_ = base::CreateSequencedTaskRunner(
-        {base::ThreadPool(), base::MayBlock(),
-         base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN});
+    task_runner_ = base::ThreadPool::CreateSequencedTaskRunner(
+        {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN});
   }
 
   void SetFile(base::File file) {
diff --git a/net/test/url_request/url_request_mock_http_job.cc b/net/test/url_request/url_request_mock_http_job.cc
index 52a8581..1f96c0b 100644
--- a/net/test/url_request/url_request_mock_http_job.cc
+++ b/net/test/url_request/url_request_mock_http_job.cc
@@ -11,6 +11,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
 #include "net/base/filename_util.h"
 #include "net/base/net_errors.h"
@@ -131,7 +132,7 @@
           request,
           network_delegate,
           file_path,
-          base::CreateTaskRunner({base::ThreadPool(), base::MayBlock()})) {}
+          base::ThreadPool::CreateTaskRunner({base::MayBlock()})) {}
 
 URLRequestMockHTTPJob::~URLRequestMockHTTPJob() = default;
 
@@ -158,9 +159,8 @@
 
 // Public virtual version.
 void URLRequestMockHTTPJob::Start() {
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE, {base::ThreadPool(), base::MayBlock()},
-      base::BindOnce(&DoFileIO, file_path_),
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock()}, base::BindOnce(&DoFileIO, file_path_),
       base::BindOnce(&URLRequestMockHTTPJob::SetHeadersAndStart,
                      weak_ptr_factory_.GetWeakPtr()));
 }
diff --git a/net/url_request/url_fetcher_impl_unittest.cc b/net/url_request/url_fetcher_impl_unittest.cc
index 9169706..8808e567 100644
--- a/net/url_request/url_fetcher_impl_unittest.cc
+++ b/net/url_request/url_fetcher_impl_unittest.cc
@@ -26,6 +26,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/test_timeouts.h"
 #include "base/threading/platform_thread.h"
 #include "base/threading/sequenced_task_runner_handle.h"
@@ -570,8 +571,7 @@
 
 // Verifies that a URLFetcher works correctly on a ThreadPool Sequence.
 TEST_F(URLFetcherTest, SequencedTaskTest) {
-  auto sequenced_task_runner =
-      base::CreateSequencedTaskRunner({base::ThreadPool()});
+  auto sequenced_task_runner = base::ThreadPool::CreateSequencedTaskRunner({});
 
   // Since we cannot use StartFetchAndWait(), which runs a nested RunLoop owned
   // by the Delegate, in the ThreadPool, this test is split into two Callbacks,
diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc
index a8e0de2..7c969521 100644
--- a/net/url_request/url_request_context_builder.cc
+++ b/net/url_request/url_request_context_builder.cc
@@ -14,6 +14,7 @@
 #include "base/single_thread_task_runner.h"
 #include "base/strings/string_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "net/base/cache_type.h"
 #include "net/base/net_errors.h"
@@ -433,9 +434,8 @@
     // user-visible. Block shutdown to ensure it does get persisted to disk,
     // since it contains security-relevant information.
     scoped_refptr<base::SequencedTaskRunner> task_runner(
-        base::CreateSequencedTaskRunner(
-            {base::ThreadPool(), base::MayBlock(),
-             base::TaskPriority::BEST_EFFORT,
+        base::ThreadPool::CreateSequencedTaskRunner(
+            {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
              base::TaskShutdownBehavior::BLOCK_SHUTDOWN}));
 
     context->set_transport_security_persister(
diff --git a/net/url_request/url_request_context_builder_unittest.cc b/net/url_request/url_request_context_builder_unittest.cc
index 923f46ce..93e72315 100644
--- a/net/url_request/url_request_context_builder_unittest.cc
+++ b/net/url_request/url_request_context_builder_unittest.cc
@@ -5,6 +5,7 @@
 #include "net/url_request/url_request_context_builder.h"
 
 #include "base/run_loop.h"
+#include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "net/base/network_isolation_key.h"
 #include "net/base/request_priority.h"
@@ -183,8 +184,8 @@
           scoped_temp_dir.GetPath().Append(
               FILE_PATH_LITERAL("ReportingAndNelStore")),
           base::ThreadTaskRunnerHandle::Get(),
-          base::CreateSequencedTaskRunner(
-              {base::ThreadPool(), base::MayBlock(),
+          base::ThreadPool::CreateSequencedTaskRunner(
+              {base::MayBlock(),
                net::GetReportingAndNelStoreBackgroundSequencePriority(),
                base::TaskShutdownBehavior::BLOCK_SHUTDOWN})));
 
diff --git a/printing/printed_document.cc b/printing/printed_document.cc
index 182ce5d..af32ba52 100644
--- a/printing/printed_document.cc
+++ b/printing/printed_document.cc
@@ -23,6 +23,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "printing/metafile.h"
@@ -98,9 +99,8 @@
       job_settings, base::JSONWriter::OPTIONS_PRETTY_PRINT, &settings_str);
   scoped_refptr<base::RefCountedMemory> data =
       base::RefCountedString::TakeString(&settings_str);
-  base::PostTask(
-      FROM_HERE,
-      {base::ThreadPool(), base::TaskPriority::BEST_EFFORT, base::MayBlock()},
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::TaskPriority::BEST_EFFORT, base::MayBlock()},
       base::BindOnce(&DebugDumpDataTask, doc_name, FILE_PATH_LITERAL(".json"),
                      base::RetainedRef(data)));
 }
@@ -143,9 +143,8 @@
   }
 
   if (HasDebugDumpPath()) {
-    base::PostTask(
-        FROM_HERE,
-        {base::ThreadPool(), base::TaskPriority::BEST_EFFORT, base::MayBlock()},
+    base::ThreadPool::PostTask(
+        FROM_HERE, {base::TaskPriority::BEST_EFFORT, base::MayBlock()},
         base::BindOnce(&DebugDumpPageTask, name(), base::RetainedRef(page)));
   }
 }
@@ -183,9 +182,8 @@
   }
 
   if (HasDebugDumpPath()) {
-    base::PostTask(
-        FROM_HERE,
-        {base::ThreadPool(), base::TaskPriority::BEST_EFFORT, base::MayBlock()},
+    base::ThreadPool::PostTask(
+        FROM_HERE, {base::TaskPriority::BEST_EFFORT, base::MayBlock()},
         base::BindOnce(&DebugDumpTask, name(), mutable_.metafile_.get()));
   }
 }
@@ -281,9 +279,8 @@
     const base::RefCountedMemory* data,
     const base::FilePath::StringType& extension) {
   DCHECK(HasDebugDumpPath());
-  base::PostTask(
-      FROM_HERE,
-      {base::ThreadPool(), base::TaskPriority::BEST_EFFORT, base::MayBlock()},
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::TaskPriority::BEST_EFFORT, base::MayBlock()},
       base::BindOnce(&DebugDumpDataTask, name(), extension,
                      base::RetainedRef(data)));
 }
diff --git a/remoting/host/file_transfer/local_file_operations.cc b/remoting/host/file_transfer/local_file_operations.cc
index 408b828..4fe813dbe 100644
--- a/remoting/host/file_transfer/local_file_operations.cc
+++ b/remoting/host/file_transfer/local_file_operations.cc
@@ -17,6 +17,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "build/build_config.h"
@@ -50,12 +51,12 @@
   // logged-in user, while the process as a whole runs as SYSTEM. Since user
   // impersonation is per-thread on Windows, we need a dedicated thread to
   // ensure that no other code is accidentally run with the wrong privileges.
-  return base::CreateSingleThreadTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  return base::ThreadPool::CreateSingleThreadTaskRunner(
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::SingleThreadTaskRunnerThreadMode::DEDICATED);
 #else
-  return base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT});
+  return base::ThreadPool::CreateSequencedTaskRunner(
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT});
 #endif
 }
 
diff --git a/remoting/host/it2me/it2me_native_messaging_host_chromeos.cc b/remoting/host/it2me/it2me_native_messaging_host_chromeos.cc
index be1b304d..6f261b0 100644
--- a/remoting/host/it2me/it2me_native_messaging_host_chromeos.cc
+++ b/remoting/host/it2me/it2me_native_messaging_host_chromeos.cc
@@ -9,6 +9,7 @@
 #include "base/lazy_instance.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "remoting/base/auto_thread_task_runner.h"
 #include "remoting/host/chromoting_host_context.h"
 #include "remoting/host/it2me/it2me_native_messaging_host.h"
@@ -25,9 +26,8 @@
   std::unique_ptr<ChromotingHostContext> context =
       ChromotingHostContext::CreateForChromeOS(
           io_runnner, ui_runnner,
-          base::CreateSingleThreadTaskRunner(
-              {base::ThreadPool(), base::MayBlock(),
-               base::TaskPriority::BEST_EFFORT}));
+          base::ThreadPool::CreateSingleThreadTaskRunner(
+              {base::MayBlock(), base::TaskPriority::BEST_EFFORT}));
   std::unique_ptr<PolicyWatcher> policy_watcher =
       PolicyWatcher::CreateWithPolicyService(policy_service);
   std::unique_ptr<extensions::NativeMessageHost> host(
diff --git a/remoting/protocol/webrtc_video_renderer_adapter.cc b/remoting/protocol/webrtc_video_renderer_adapter.cc
index 514e89e..d9c24f9 100644
--- a/remoting/protocol/webrtc_video_renderer_adapter.cc
+++ b/remoting/protocol/webrtc_video_renderer_adapter.cc
@@ -14,6 +14,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/single_thread_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "remoting/protocol/client_video_stats_dispatcher.h"
 #include "remoting/protocol/frame_consumer.h"
@@ -175,9 +176,8 @@
       video_renderer_->GetFrameConsumer()->AllocateFrame(
           webrtc::DesktopSize(frame->width(), frame->height()));
 
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&ConvertYuvToRgb, base::Passed(&frame),
                      base::Passed(&rgb_frame),
                      video_renderer_->GetFrameConsumer()->GetPixelFormat()),
diff --git a/remoting/signaling/ftl_messaging_client_unittest.cc b/remoting/signaling/ftl_messaging_client_unittest.cc
index 181607c..a983cee 100644
--- a/remoting/signaling/ftl_messaging_client_unittest.cc
+++ b/remoting/signaling/ftl_messaging_client_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/logging.h"
 #include "base/run_loop.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/mock_callback.h"
 #include "base/test/task_environment.h"
@@ -171,7 +172,7 @@
 
 void FtlMessagingClientTest::SetUp() {
   server_task_runner_ =
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock()});
+      base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()});
   server_ = std::make_unique<test::GrpcAsyncTestServer>(
       std::make_unique<Messaging::AsyncService>());
   FtlGrpcContext::SetChannelForTesting(server_->CreateInProcessChannel());
diff --git a/remoting/test/cli_util.cc b/remoting/test/cli_util.cc
index c65440a3..e37fe0e 100644
--- a/remoting/test/cli_util.cc
+++ b/remoting/test/cli_util.cc
@@ -10,6 +10,7 @@
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 
 namespace {
 
@@ -92,9 +93,9 @@
 }
 
 void WaitForEnterKey(base::OnceClosure on_done) {
-  base::PostTaskAndReply(FROM_HERE, {base::ThreadPool(), base::MayBlock()},
-                         base::BindOnce([]() { getchar(); }),
-                         std::move(on_done));
+  base::ThreadPool::PostTaskAndReply(FROM_HERE, {base::MayBlock()},
+                                     base::BindOnce([]() { getchar(); }),
+                                     std::move(on_done));
 }
 
 }  // namespace test
diff --git a/rlz/lib/financial_ping.cc b/rlz/lib/financial_ping.cc
index 1c75ac3..2efeead 100644
--- a/rlz/lib/financial_ping.cc
+++ b/rlz/lib/financial_ping.cc
@@ -20,6 +20,7 @@
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
@@ -261,9 +262,9 @@
   // How frequently the financial ping thread should check
   // the shutdown condition?
   const base::TimeDelta kInterval = base::TimeDelta::FromMilliseconds(500);
-  base::PostDelayedTask(FROM_HERE,
-                        {base::ThreadPool(), base::TaskPriority::BEST_EFFORT},
-                        base::BindOnce(&ShutdownCheck, event), kInterval);
+  base::ThreadPool::PostDelayedTask(
+      FROM_HERE, {base::TaskPriority::BEST_EFFORT},
+      base::BindOnce(&ShutdownCheck, event), kInterval);
 }
 #endif
 
@@ -391,16 +392,15 @@
 
   base::subtle::Release_Store(&g_cancelShutdownCheck, 0);
 
-  base::PostTask(FROM_HERE,
-                 {base::ThreadPool(), base::TaskPriority::BEST_EFFORT},
-                 base::BindOnce(&ShutdownCheck, event));
+  base::ThreadPool::PostTask(FROM_HERE, {base::TaskPriority::BEST_EFFORT},
+                             base::BindOnce(&ShutdownCheck, event));
 
   // PingRlzServer must be run in a separate sequence so that the TimedWait()
   // call below does not block the URL fetch response from being handled by
   // the URL delegate.
   scoped_refptr<base::SequencedTaskRunner> background_runner(
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
            base::TaskPriority::BEST_EFFORT}));
   background_runner->PostTask(FROM_HERE,
                               base::BindOnce(&PingRlzServer, url, event));
diff --git a/services/audio/public/cpp/debug_recording_session.cc b/services/audio/public/cpp/debug_recording_session.cc
index 40d3890..af0ef89 100644
--- a/services/audio/public/cpp/debug_recording_session.cc
+++ b/services/audio/public/cpp/debug_recording_session.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/files/file_path.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "media/audio/audio_debug_recording_manager.h"
 
@@ -48,9 +49,9 @@
     media::AudioDebugRecordingStreamType stream_type,
     uint32_t id,
     CreateWavFileCallback reply_callback) {
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
        base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
       base::BindOnce(
           [](const base::FilePath& file_name) {
diff --git a/services/data_decoder/public/cpp/data_decoder.cc b/services/data_decoder/public/cpp/data_decoder.cc
index 9ba33ff..29ad02fe 100644
--- a/services/data_decoder/public/cpp/data_decoder.cc
+++ b/services/data_decoder/public/cpp/data_decoder.cc
@@ -6,6 +6,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/no_destructor.h"
+#include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "services/data_decoder/public/mojom/json_parser.mojom.h"
@@ -105,7 +106,7 @@
 void BindInProcessService(
     mojo::PendingReceiver<mojom::DataDecoderService> receiver) {
   static base::NoDestructor<scoped_refptr<base::SequencedTaskRunner>>
-      task_runner{base::CreateSequencedTaskRunner({base::ThreadPool()})};
+      task_runner{base::ThreadPool::CreateSequencedTaskRunner({})};
   if (!(*task_runner)->RunsTasksInCurrentSequence()) {
     (*task_runner)
         ->PostTask(FROM_HERE,
diff --git a/services/device/device_service.cc b/services/device/device_service.cc
index 50864e2..01ab74d 100644
--- a/services/device/device_service.cc
+++ b/services/device/device_service.cc
@@ -10,6 +10,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/single_thread_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
@@ -134,8 +135,9 @@
   serial_port_manager_task_runner_ = base::ThreadTaskRunnerHandle::Get();
 #else
   // On other platforms it must be allowed to do blocking IO.
-  serial_port_manager_task_runner_ = base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT});
+  serial_port_manager_task_runner_ =
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT});
 #endif
 #endif
   // Ensure that the battery backend is initialized now; otherwise it may end up
diff --git a/services/device/device_service_test_base.cc b/services/device/device_service_test_base.cc
index c78ec784..0e30eb95 100644
--- a/services/device/device_service_test_base.cc
+++ b/services/device/device_service_test_base.cc
@@ -11,6 +11,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/single_thread_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "services/device/device_service.h"
 #include "services/device/public/cpp/geolocation/location_provider.h"
 #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
@@ -50,11 +51,10 @@
 }  // namespace
 
 DeviceServiceTestBase::DeviceServiceTestBase()
-    : file_task_runner_(base::CreateSingleThreadTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::BEST_EFFORT})),
-      io_task_runner_(base::CreateSingleThreadTaskRunner(
-          {base::ThreadPool(), base::TaskPriority::USER_VISIBLE})),
+    : file_task_runner_(base::ThreadPool::CreateSingleThreadTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT})),
+      io_task_runner_(base::ThreadPool::CreateSingleThreadTaskRunner(
+          {base::TaskPriority::USER_VISIBLE})),
       network_connection_tracker_(
           network::TestNetworkConnectionTracker::CreateInstance()) {}
 
diff --git a/services/device/generic_sensor/platform_sensor_provider_win.cc b/services/device/generic_sensor/platform_sensor_provider_win.cc
index 88678f6..5f87c7f 100644
--- a/services/device/generic_sensor/platform_sensor_provider_win.cc
+++ b/services/device/generic_sensor/platform_sensor_provider_win.cc
@@ -12,6 +12,7 @@
 #include "base/bind.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "base/threading/thread.h"
 #include "services/device/generic_sensor/linear_acceleration_fusion_algorithm_using_accelerometer.h"
@@ -22,8 +23,8 @@
 namespace device {
 
 PlatformSensorProviderWin::PlatformSensorProviderWin()
-    : com_sta_task_runner_(base::CreateCOMSTATaskRunner(
-          {base::ThreadPool(), base::TaskPriority::USER_VISIBLE})) {}
+    : com_sta_task_runner_(base::ThreadPool::CreateCOMSTATaskRunner(
+          {base::TaskPriority::USER_VISIBLE})) {}
 
 PlatformSensorProviderWin::~PlatformSensorProviderWin() = default;
 
diff --git a/services/device/generic_sensor/platform_sensor_provider_winrt.cc b/services/device/generic_sensor/platform_sensor_provider_winrt.cc
index 9ffbc1f..85eb1fbac 100644
--- a/services/device/generic_sensor/platform_sensor_provider_winrt.cc
+++ b/services/device/generic_sensor/platform_sensor_provider_winrt.cc
@@ -7,6 +7,7 @@
 #include <comdef.h>
 
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "services/device/generic_sensor/linear_acceleration_fusion_algorithm_using_accelerometer.h"
 #include "services/device/generic_sensor/orientation_euler_angles_fusion_algorithm_using_quaternion.h"
@@ -22,8 +23,8 @@
 }
 
 PlatformSensorProviderWinrt::PlatformSensorProviderWinrt()
-    : com_sta_task_runner_(base::CreateCOMSTATaskRunner(
-          {base::ThreadPool(), base::TaskPriority::USER_VISIBLE})),
+    : com_sta_task_runner_(base::ThreadPool::CreateCOMSTATaskRunner(
+          {base::TaskPriority::USER_VISIBLE})),
       sensor_reader_factory_(std::make_unique<SensorReaderFactory>()) {}
 
 PlatformSensorProviderWinrt::~PlatformSensorProviderWinrt() = default;
diff --git a/services/device/generic_sensor/platform_sensor_reader_linux.cc b/services/device/generic_sensor/platform_sensor_reader_linux.cc
index 8fd9eaab1..d718da1 100644
--- a/services/device/generic_sensor/platform_sensor_reader_linux.cc
+++ b/services/device/generic_sensor/platform_sensor_reader_linux.cc
@@ -15,6 +15,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/timer/timer.h"
 #include "services/device/generic_sensor/linux/sensor_data_linux.h"
 #include "services/device/generic_sensor/platform_sensor_linux.h"
@@ -91,9 +92,8 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_ =
-      base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::USER_VISIBLE,
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
            base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN});
 
   std::unique_ptr<BlockingTaskRunnerHelper, base::OnTaskRunnerDeleter>
diff --git a/services/device/serial/serial_io_handler.cc b/services/device/serial/serial_io_handler.cc
index d127ffc..23346a7 100644
--- a/services/device/serial/serial_io_handler.cc
+++ b/services/device/serial/serial_io_handler.cc
@@ -14,6 +14,7 @@
 #include "base/strings/string_util.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "build/build_config.h"
 
 #if defined(OS_CHROMEOS)
@@ -65,11 +66,11 @@
                      base::BindRepeating(&SerialIoHandler::OnPathOpenError,
                                          this, task_runner)));
 #else
-  base::PostTask(FROM_HERE,
-                 {base::ThreadPool(), base::MayBlock(),
-                  base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-                 base::BindOnce(&SerialIoHandler::StartOpen, this,
-                                base::ThreadTaskRunnerHandle::Get()));
+  base::ThreadPool::PostTask(
+      FROM_HERE,
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      base::BindOnce(&SerialIoHandler::StartOpen, this,
+                     base::ThreadTaskRunnerHandle::Get()));
 #endif  // defined(OS_CHROMEOS)
 }
 
@@ -165,10 +166,9 @@
   if (file_.IsValid()) {
     CancelRead(mojom::SerialReceiveError::DISCONNECTED);
     CancelWrite(mojom::SerialSendError::DISCONNECTED);
-    base::PostTaskAndReply(
+    base::ThreadPool::PostTaskAndReply(
         FROM_HERE,
-        {base::ThreadPool(), base::MayBlock(),
-         base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+        {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
         base::BindOnce(&SerialIoHandler::DoClose, std::move(file_)),
         std::move(callback));
   }
diff --git a/services/image_annotation/public/cpp/image_processor.cc b/services/image_annotation/public/cpp/image_processor.cc
index 5705381c..562d73e 100644
--- a/services/image_annotation/public/cpp/image_processor.cc
+++ b/services/image_annotation/public/cpp/image_processor.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "services/image_annotation/image_annotation_metrics.h"
@@ -79,9 +80,8 @@
 
 ImageProcessor::ImageProcessor(base::RepeatingCallback<SkBitmap()> get_pixels)
     : get_pixels_(std::move(get_pixels)),
-      background_task_runner_(
-          base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                           base::TaskPriority::BEST_EFFORT})) {}
+      background_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT})) {}
 
 ImageProcessor::~ImageProcessor() = default;
 
diff --git a/services/network/cookie_manager_unittest.cc b/services/network/cookie_manager_unittest.cc
index b35a4bb..43fc6fe 100644
--- a/services/network/cookie_manager_unittest.cc
+++ b/services/network/cookie_manager_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/stl_util.h"
 #include "base/strings/strcat.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/task_environment.h"
@@ -2248,7 +2249,7 @@
 
  private:
   const scoped_refptr<base::SequencedTaskRunner> background_task_runner_ =
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock()});
+      base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()});
 };
 
 TEST_F(SessionCleanupCookieManagerTest, PersistSessionCookies) {
diff --git a/services/network/crl_set_distributor.cc b/services/network/crl_set_distributor.cc
index b750cd6..82753f97 100644
--- a/services/network/crl_set_distributor.cc
+++ b/services/network/crl_set_distributor.cc
@@ -11,6 +11,7 @@
 #include "base/location.h"
 #include "base/strings/string_piece.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 
 namespace network {
 
@@ -57,8 +58,8 @@
   std::string crl_set_string(reinterpret_cast<const char*>(crl_set.data()),
                              crl_set.size());
 
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE, {base::ThreadPool(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&ParseCRLSet, std::move(crl_set_string)),
       base::BindOnce(&ProcessParsedCRLSet,
                      base::BindOnce(&CRLSetDistributor::OnCRLSetParsed,
diff --git a/services/network/legacy_tls_config_distributor.cc b/services/network/legacy_tls_config_distributor.cc
index d2a89f79..54c3b2da 100644
--- a/services/network/legacy_tls_config_distributor.cc
+++ b/services/network/legacy_tls_config_distributor.cc
@@ -15,6 +15,7 @@
 #include "base/strings/string_util.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "crypto/sha2.h"
 
 namespace network {
@@ -82,8 +83,8 @@
   std::string config_string(reinterpret_cast<const char*>(config.data()),
                             config.size());
 
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE, {base::ThreadPool(), base::TaskPriority::USER_VISIBLE},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::TaskPriority::USER_VISIBLE},
       base::BindOnce(&LegacyTLSExperimentConfig::Parse,
                      std::move(config_string)),
       base::BindOnce(
@@ -105,4 +106,4 @@
   }
 }
 
-}  // namespace network
\ No newline at end of file
+}  // namespace network
diff --git a/services/network/net_log_exporter.cc b/services/network/net_log_exporter.cc
index bcac474..e09b9c6ce 100644
--- a/services/network/net_log_exporter.cc
+++ b/services/network/net_log_exporter.cc
@@ -12,6 +12,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/values.h"
 #include "net/log/file_net_log_observer.h"
 #include "net/log/net_log_util.h"
@@ -60,10 +61,9 @@
   static_assert(kUnlimitedFileSize == net::FileNetLogObserver::kNoLimit,
                 "Inconsistent unbounded size constants");
   if (max_file_size != kUnlimitedFileSize) {
-    base::PostTaskAndReplyWithResult(
+    base::ThreadPool::PostTaskAndReplyWithResult(
         FROM_HERE,
-        {base::ThreadPool(), base::MayBlock(),
-         base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
+        {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
         base::BindOnce(&NetLogExporter::CreateScratchDir,
                        scratch_dir_create_handler_for_tests_),
 
@@ -112,10 +112,9 @@
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   if (file.IsValid()) {
-    base::PostTask(
+    base::ThreadPool::PostTask(
         FROM_HERE,
-        {base::ThreadPool(), base::MayBlock(),
-         base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
+        {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
         base::BindOnce([](base::File f) { f.Close(); }, std::move(file)));
   }
 }
@@ -148,17 +147,17 @@
   } else if (!scratch_dir_path.empty()) {
     // An NetLogExporter got destroyed while it was trying to create a scratch
     // dir.
-    base::PostTask(FROM_HERE,
-                   {base::ThreadPool(), base::MayBlock(),
-                    base::TaskShutdownBehavior::BLOCK_SHUTDOWN},
-                   base::BindOnce(
-                       [](const base::FilePath& dir) {
-                         // The delete is non-recursive (2nd argument
-                         // false) since the only time this is invoked
-                         // the directory is expected to be empty.
-                         base::DeleteFile(dir, false);
-                       },
-                       scratch_dir_path));
+    base::ThreadPool::PostTask(
+        FROM_HERE,
+        {base::MayBlock(), base::TaskShutdownBehavior::BLOCK_SHUTDOWN},
+        base::BindOnce(
+            [](const base::FilePath& dir) {
+              // The delete is non-recursive (2nd argument
+              // false) since the only time this is invoked
+              // the directory is expected to be empty.
+              base::DeleteFile(dir, false);
+            },
+            scratch_dir_path));
   }
 }
 
diff --git a/services/network/network_context.cc b/services/network/network_context.cc
index 8532e1a..2ae48524 100644
--- a/services/network/network_context.cc
+++ b/services/network/network_context.cc
@@ -25,6 +25,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromecast_buildflags.h"
@@ -1778,9 +1779,8 @@
     scoped_refptr<base::SequencedTaskRunner> client_task_runner =
         base::ThreadTaskRunnerHandle::Get();
     scoped_refptr<base::SequencedTaskRunner> background_task_runner =
-        base::CreateSequencedTaskRunner(
-            {base::ThreadPool(), base::MayBlock(),
-             net::GetCookieStoreBackgroundSequencePriority(),
+        base::ThreadPool::CreateSequencedTaskRunner(
+            {base::MayBlock(), net::GetCookieStoreBackgroundSequencePriority(),
              base::TaskShutdownBehavior::BLOCK_SHUTDOWN});
 
     net::CookieCryptoDelegate* crypto_delegate = nullptr;
@@ -1817,9 +1817,8 @@
   if (base::FeatureList::IsEnabled(features::kTrustTokens)) {
     if (params_->trust_token_path) {
       SQLiteTrustTokenPersister::CreateForFilePath(
-          base::CreateSequencedTaskRunner(
-              {base::ThreadPool(), base::MayBlock(),
-               kTrustTokenDatabaseTaskPriority,
+          base::ThreadPool::CreateSequencedTaskRunner(
+              {base::MayBlock(), kTrustTokenDatabaseTaskPriority,
                base::TaskShutdownBehavior::BLOCK_SHUTDOWN}),
           *params_->trust_token_path, kTrustTokenWriteBufferingWindow,
           base::BindOnce(&NetworkContext::FinishConstructingTrustTokenStore,
@@ -1894,12 +1893,11 @@
 
   std::unique_ptr<PrefService> pref_service;
   if (params_->http_server_properties_path) {
-    scoped_refptr<JsonPrefStore> json_pref_store(
-        new JsonPrefStore(*params_->http_server_properties_path, nullptr,
-                          base::CreateSequencedTaskRunner(
-                              {base::ThreadPool(), base::MayBlock(),
-                               base::TaskShutdownBehavior::BLOCK_SHUTDOWN,
-                               base::TaskPriority::BEST_EFFORT})));
+    scoped_refptr<JsonPrefStore> json_pref_store(new JsonPrefStore(
+        *params_->http_server_properties_path, nullptr,
+        base::ThreadPool::CreateSequencedTaskRunner(
+            {base::MayBlock(), base::TaskShutdownBehavior::BLOCK_SHUTDOWN,
+             base::TaskPriority::BEST_EFFORT})));
     PrefServiceFactory pref_service_factory;
     pref_service_factory.set_user_prefs(json_pref_store);
     pref_service_factory.set_async(true);
@@ -1951,8 +1949,8 @@
     scoped_refptr<base::SequencedTaskRunner> client_task_runner =
         base::ThreadTaskRunnerHandle::Get();
     scoped_refptr<base::SequencedTaskRunner> background_task_runner =
-        base::CreateSequencedTaskRunner(
-            {base::ThreadPool(), base::MayBlock(),
+        base::ThreadPool::CreateSequencedTaskRunner(
+            {base::MayBlock(),
              net::GetReportingAndNelStoreBackgroundSequencePriority(),
              base::TaskShutdownBehavior::BLOCK_SHUTDOWN});
     std::unique_ptr<net::SQLitePersistentReportingAndNelStore> sqlite_store(
diff --git a/services/network/network_service.cc b/services/network/network_service.cc
index 7014475..f98b9334 100644
--- a/services/network/network_service.cc
+++ b/services/network/network_service.cc
@@ -20,6 +20,7 @@
 #include "base/numerics/ranges.h"
 #include "base/stl_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/timer/timer.h"
 #include "base/values.h"
 #include "build/chromecast_buildflags.h"
@@ -604,8 +605,8 @@
   auto networks = std::make_unique<net::NetworkInterfaceList>();
   auto* raw_networks = networks.get();
   // net::GetNetworkList may block depending on platform.
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE, {base::ThreadPool(), base::MayBlock()},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock()},
       base::BindOnce(&net::GetNetworkList, raw_networks, policy),
       base::BindOnce(&OnGetNetworkList, std::move(networks),
                      std::move(callback)));
diff --git a/services/network/p2p/socket_manager.cc b/services/network/p2p/socket_manager.cc
index 78c3a2b8..56dc77e 100644
--- a/services/network/p2p/socket_manager.cc
+++ b/services/network/p2p/socket_manager.cc
@@ -10,6 +10,7 @@
 
 #include "base/bind.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "net/base/address_list.h"
 #include "net/base/net_errors.h"
@@ -152,9 +153,8 @@
     net::URLRequestContext* url_request_context)
     : delete_callback_(std::move(delete_callback)),
       url_request_context_(url_request_context),
-      network_list_task_runner_(
-          base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                           base::TaskPriority::USER_VISIBLE})),
+      network_list_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE})),
       trusted_socket_manager_client_(std::move(trusted_socket_manager_client)),
       trusted_socket_manager_receiver_(
           this,
diff --git a/services/network/proxy_resolver_factory_mojo.cc b/services/network/proxy_resolver_factory_mojo.cc
index 325772ae..87eb5487 100644
--- a/services/network/proxy_resolver_factory_mojo.cc
+++ b/services/network/proxy_resolver_factory_mojo.cc
@@ -17,6 +17,7 @@
 #include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner.h"
 #include "base/values.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
@@ -155,9 +156,8 @@
     //
     // However the better place to focus on is de-duplication and caching on the
     // proxy service side (which currently caches but doesn't de-duplicate).
-    return base::CreateSequencedTaskRunner(
-        {base::ThreadPool(), base::MayBlock(),
-         base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN,
+    return base::ThreadPool::CreateSequencedTaskRunner(
+        {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN,
          base::TaskPriority::USER_VISIBLE});
   }
 
diff --git a/services/network/public/cpp/cert_verifier/nss_ocsp_session_url_loader_unittest.cc b/services/network/public/cpp/cert_verifier/nss_ocsp_session_url_loader_unittest.cc
index cc1a624..34b4fe0 100644
--- a/services/network/public/cpp/cert_verifier/nss_ocsp_session_url_loader_unittest.cc
+++ b/services/network/public/cpp/cert_verifier/nss_ocsp_session_url_loader_unittest.cc
@@ -23,6 +23,7 @@
 #include "base/synchronization/lock.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/task_environment.h"
 #include "base/threading/scoped_blocking_call.h"
@@ -149,8 +150,8 @@
   // returns the nth one.
   scoped_refptr<base::SequencedTaskRunner> worker_thread(size_t n) {
     while (worker_threads_.size() <= n) {
-      worker_threads_.push_back(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock()}));
+      worker_threads_.push_back(
+          base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()}));
     }
     return worker_threads_[n];
   }
diff --git a/services/network/public/cpp/cross_thread_pending_shared_url_loader_factory_unittest.cc b/services/network/public/cpp/cross_thread_pending_shared_url_loader_factory_unittest.cc
index fc527a319..5b853b2 100644
--- a/services/network/public/cpp/cross_thread_pending_shared_url_loader_factory_unittest.cc
+++ b/services/network/public/cpp/cross_thread_pending_shared_url_loader_factory_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/run_loop.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/task_environment.h"
 #include "base/threading/sequenced_task_runner_handle.h"
@@ -54,8 +55,8 @@
  protected:
   void SetUp() override {
     main_thread_ = base::SequencedTaskRunnerHandle::Get();
-    loader_thread_ = base::CreateSequencedTaskRunner(
-        {base::ThreadPool(), base::MayBlock(), base::WithBaseSyncPrimitives()});
+    loader_thread_ = base::ThreadPool::CreateSequencedTaskRunner(
+        {base::MayBlock(), base::WithBaseSyncPrimitives()});
 
     test_url_loader_factory_ =
         std::make_unique<CloneCheckingURLLoaderFactory>(loader_thread_);
@@ -182,8 +183,8 @@
 TEST_F(CrossThreadPendingSharedURLLoaderFactoryTest, CloneThirdThread) {
   // Clone to a third thread.
   scoped_refptr<base::SequencedTaskRunner> third_thread =
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                       base::WithBaseSyncPrimitives()});
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::WithBaseSyncPrimitives()});
 
   scoped_refptr<SharedURLLoaderFactory> main_thread_factory =
       SharedURLLoaderFactory::Create(std::move(pending_factory_));
diff --git a/services/network/public/cpp/simple_url_loader.cc b/services/network/public/cpp/simple_url_loader.cc
index 7ae870fe..5581ed90 100644
--- a/services/network/public/cpp/simple_url_loader.cc
+++ b/services/network/public/cpp/simple_url_loader.cc
@@ -23,6 +23,7 @@
 #include "base/strings/string_piece.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
@@ -853,8 +854,8 @@
                base::TaskPriority priority,
                base::RepeatingCallback<void(int64_t)> progress_callback)
         : body_handler_task_runner_(base::SequencedTaskRunnerHandle::Get()),
-          file_writer_task_runner_(base::CreateSequencedTaskRunner(
-              {base::ThreadPool(), base::MayBlock(), priority,
+          file_writer_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+              {base::MayBlock(), priority,
                base::TaskShutdownBehavior::BLOCK_SHUTDOWN})),
           path_(path),
           create_temp_file_(create_temp_file),
diff --git a/services/network/session_cleanup_cookie_store_unittest.cc b/services/network/session_cleanup_cookie_store_unittest.cc
index 1cd44449..2b0a907 100644
--- a/services/network/session_cleanup_cookie_store_unittest.cc
+++ b/services/network/session_cleanup_cookie_store_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/run_loop.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
@@ -55,7 +56,7 @@
   CanonicalCookieVector CreateAndLoad() {
     auto sqlite_store = base::MakeRefCounted<net::SQLitePersistentCookieStore>(
         temp_dir_.GetPath().Append(kTestCookiesFilename),
-        base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock()}),
+        base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()}),
         background_task_runner_, true, nullptr);
     store_ =
         base::MakeRefCounted<SessionCleanupCookieStore>(sqlite_store.get());
@@ -86,7 +87,7 @@
 
   base::test::TaskEnvironment task_environment_;
   const scoped_refptr<base::SequencedTaskRunner> background_task_runner_ =
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock()});
+      base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()});
   base::ScopedTempDir temp_dir_;
   scoped_refptr<SessionCleanupCookieStore> store_;
   net::RecordingBoundTestNetLog net_log_;
diff --git a/services/network/url_loader.cc b/services/network/url_loader.cc
index 629861c..3f1e599 100644
--- a/services/network/url_loader.cc
+++ b/services/network/url_loader.cc
@@ -20,6 +20,7 @@
 #include "base/optional.h"
 #include "base/strings/strcat.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "mojo/public/cpp/system/simple_watcher.h"
@@ -692,10 +693,8 @@
   // |opened_files| vector onto a sequence that can block so it gets destroyed
   // there.
   static void PostCloseFiles(std::vector<base::File> opened_files) {
-    base::PostTask(
-        FROM_HERE,
-        {base::ThreadPool(), base::MayBlock(),
-         base::TaskPriority::USER_BLOCKING},
+    base::ThreadPool::PostTask(
+        FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_BLOCKING},
         base::BindOnce(base::DoNothing::Once<std::vector<base::File>>(),
                        std::move(opened_files)));
   }
@@ -777,8 +776,8 @@
     return;
   }
   scoped_refptr<base::SequencedTaskRunner> task_runner =
-      base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                       base::TaskPriority::USER_VISIBLE});
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE});
   url_request_->set_upload(CreateUploadDataStream(
       request.request_body.get(), opened_files, task_runner.get()));
 
diff --git a/services/service_manager/service_process_launcher.cc b/services/service_manager/service_process_launcher.cc
index 1e27bde..a87a5339 100644
--- a/services/service_manager/service_process_launcher.cc
+++ b/services/service_manager/service_process_launcher.cc
@@ -23,6 +23,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/synchronization/lock.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "base/threading/thread.h"
 #include "build/build_config.h"
@@ -81,9 +82,9 @@
       service_path_(service_path.empty()
                         ? base::CommandLine::ForCurrentProcess()->GetProgram()
                         : service_path),
-      background_task_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::TaskPriority::USER_VISIBLE,
-           base::WithBaseSyncPrimitives(), base::MayBlock()})) {}
+      background_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::TaskPriority::USER_VISIBLE, base::WithBaseSyncPrimitives(),
+           base::MayBlock()})) {}
 
 ServiceProcessLauncher::~ServiceProcessLauncher() {
   // We don't really need to wait for the process to be joined, as long as it
diff --git a/services/tracing/perfetto/consumer_host.cc b/services/tracing/perfetto/consumer_host.cc
index 3f1dd3b0a..4d7317f 100644
--- a/services/tracing/perfetto/consumer_host.cc
+++ b/services/tracing/perfetto/consumer_host.cc
@@ -18,6 +18,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/trace_event/trace_log.h"
 #include "base/values.h"
 #include "build/build_config.h"
@@ -87,9 +88,8 @@
   using Slice = std::string;
 
   static scoped_refptr<base::SequencedTaskRunner> CreateTaskRunner() {
-    return base::CreateSequencedTaskRunner({base::ThreadPool(),
-                                            base::WithBaseSyncPrimitives(),
-                                            base::TaskPriority::BEST_EFFORT});
+    return base::ThreadPool::CreateSequencedTaskRunner(
+        {base::WithBaseSyncPrimitives(), base::TaskPriority::BEST_EFFORT});
   }
 
   StreamWriter(mojo::ScopedDataPipeProducerHandle stream,
diff --git a/services/tracing/perfetto/consumer_host_unittest.cc b/services/tracing/perfetto/consumer_host_unittest.cc
index 775e7ca4..a026b35c 100644
--- a/services/tracing/perfetto/consumer_host_unittest.cc
+++ b/services/tracing/perfetto/consumer_host_unittest.cc
@@ -16,6 +16,7 @@
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/task_environment.h"
 #include "mojo/public/cpp/bindings/receiver.h"
@@ -41,9 +42,8 @@
 class ThreadedPerfettoService : public mojom::TracingSessionClient {
  public:
   ThreadedPerfettoService()
-      : task_runner_(base::CreateSequencedTaskRunner(
-            {base::ThreadPool(), base::MayBlock(),
-             base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN,
+      : task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+            {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN,
              base::WithBaseSyncPrimitives(),
              base::TaskPriority::BEST_EFFORT})) {
     perfetto_service_ = std::make_unique<PerfettoService>(task_runner_);
diff --git a/services/tracing/public/cpp/perfetto/task_runner.cc b/services/tracing/public/cpp/perfetto/task_runner.cc
index 7b7927c..8a26f67 100644
--- a/services/tracing/public/cpp/perfetto/task_runner.cc
+++ b/services/tracing/public/cpp/perfetto/task_runner.cc
@@ -13,6 +13,7 @@
 #include "base/task/common/checked_lock_impl.h"
 #include "base/task/common/scoped_defer_task_posting.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_local.h"
@@ -139,9 +140,8 @@
 PerfettoTaskRunner::GetOrCreateTaskRunner() {
   if (!task_runner_) {
     DCHECK(base::ThreadPoolInstance::Get());
-    task_runner_ =
-        base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                         base::TaskPriority::USER_BLOCKING});
+    task_runner_ = base::ThreadPool::CreateSequencedTaskRunner(
+        {base::MayBlock(), base::TaskPriority::USER_BLOCKING});
   }
 
   return task_runner_;
diff --git a/services/tracing/public/cpp/perfetto/task_runner_unittest.cc b/services/tracing/public/cpp/perfetto/task_runner_unittest.cc
index 7250731..11fb9ac0 100644
--- a/services/tracing/public/cpp/perfetto/task_runner_unittest.cc
+++ b/services/tracing/public/cpp/perfetto/task_runner_unittest.cc
@@ -10,6 +10,7 @@
 
 #include "base/memory/weak_ptr.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/threading/simple_thread.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -95,9 +96,8 @@
   }
 
   scoped_refptr<base::SequencedTaskRunner> CreateNewTaskrunner() {
-    return base::CreateSingleThreadTaskRunner(
-        {base::ThreadPool(), base::MayBlock()},
-        base::SingleThreadTaskRunnerThreadMode::DEDICATED);
+    return base::ThreadPool::CreateSingleThreadTaskRunner(
+        {base::MayBlock()}, base::SingleThreadTaskRunnerThreadMode::DEDICATED);
   }
   void SetTaskExpectations(base::OnceClosure on_complete,
                            size_t expected_tasks,
diff --git a/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc b/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
index b314ad5..73342e63 100644
--- a/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
+++ b/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
@@ -20,6 +20,7 @@
 #include "base/run_loop.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_id_name_manager.h"
@@ -1491,8 +1492,8 @@
   // deleting startup registry and setting the producer.
   auto wait_for_start_tracing = std::make_unique<base::WaitableEvent>();
   base::WaitableEvent* wait_ptr = wait_for_start_tracing.get();
-  base::PostTask(
-      FROM_HERE, {base::ThreadPool(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::TaskPriority::BEST_EFFORT},
       base::BindOnce(
           [](std::unique_ptr<base::WaitableEvent> wait_for_start_tracing) {
             // This event can be hit anytime before startup registry is
diff --git a/services/tracing/public/cpp/stack_sampling/stack_unwinder_android_unittest.cc b/services/tracing/public/cpp/stack_sampling/stack_unwinder_android_unittest.cc
index a03ee669d..cd323de 100644
--- a/services/tracing/public/cpp/stack_sampling/stack_unwinder_android_unittest.cc
+++ b/services/tracing/public/cpp/stack_sampling/stack_unwinder_android_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/profiler/stack_buffer.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/trace_event/cfi_backtrace_android.h"
 #include "services/tracing/jni_headers/UnwindTestHelper_jni.h"
@@ -61,8 +62,8 @@
 
 TEST_F(StackUnwinderTest, UnwindOtherThread) {
   base::WaitableEvent unwind_finished_event;
-  auto task_runner = base::CreateSingleThreadTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT});
+  auto task_runner = base::ThreadPool::CreateSingleThreadTaskRunner(
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT});
 
   auto callback = [](StackUnwinderAndroid* unwinder, base::PlatformThreadId tid,
                      base::WaitableEvent* unwind_finished_event,
@@ -106,8 +107,8 @@
 }
 
 TEST_F(StackUnwinderTest, UnwindOtherThreadOnJNICall) {
-  auto task_runner = base::CreateSingleThreadTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT});
+  auto task_runner = base::ThreadPool::CreateSingleThreadTaskRunner(
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT});
 
   auto callback = [](StackUnwinderAndroid* unwinder, base::PlatformThreadId tid,
                      uintptr_t test_pc) {
diff --git a/services/video_capture/video_capture_service_impl.cc b/services/video_capture/video_capture_service_impl.cc
index d24de69..8436a59 100644
--- a/services/video_capture/video_capture_service_impl.cc
+++ b/services/video_capture/video_capture_service_impl.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h"
 #include "media/capture/video/create_video_capture_device_factory.h"
@@ -39,9 +40,8 @@
 class VideoCaptureServiceImpl::GpuDependenciesContext {
  public:
   GpuDependenciesContext() {
-    gpu_io_task_runner_ = base::CreateSequencedTaskRunner(
-        {base::ThreadPool(), base::TaskPriority::BEST_EFFORT,
-         base::MayBlock()});
+    gpu_io_task_runner_ = base::ThreadPool::CreateSequencedTaskRunner(
+        {base::TaskPriority::BEST_EFFORT, base::MayBlock()});
   }
 
   ~GpuDependenciesContext() {
diff --git a/storage/browser/blob/blob_builder_from_stream.cc b/storage/browser/blob/blob_builder_from_stream.cc
index 6a6758a..0a05b4e 100644
--- a/storage/browser/blob/blob_builder_from_stream.cc
+++ b/storage/browser/blob/blob_builder_from_stream.cc
@@ -9,6 +9,7 @@
 #include "base/guid.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "storage/browser/blob/blob_data_item.h"
 #include "storage/browser/blob/blob_storage_context.h"
@@ -160,7 +161,7 @@
       base::FilePath file_path,
       uint64_t max_file_size,
       DoneCallback callback) {
-    base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock()})
+    base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()})
         ->PostTask(
             FROM_HERE,
             base::BindOnce(
@@ -177,7 +178,7 @@
       base::File file,
       uint64_t max_file_size,
       DoneCallback callback) {
-    base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock()})
+    base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()})
         ->PostTask(
             FROM_HERE,
             base::BindOnce(&WritePipeToFileHelper::CreateAndStartOnFileSequence,
diff --git a/storage/browser/blob/blob_builder_from_stream_unittest.cc b/storage/browser/blob/blob_builder_from_stream_unittest.cc
index 41ec973..184f335 100644
--- a/storage/browser/blob/blob_builder_from_stream_unittest.cc
+++ b/storage/browser/blob/blob_builder_from_stream_unittest.cc
@@ -13,6 +13,7 @@
 #include "base/rand_util.h"
 #include "base/run_loop.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/task_environment.h"
@@ -53,7 +54,7 @@
     ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
     context_ = std::make_unique<BlobStorageContext>(
         data_dir_.GetPath(), data_dir_.GetPath(),
-        base::CreateTaskRunner({base::ThreadPool(), base::MayBlock()}));
+        base::ThreadPool::CreateTaskRunner({base::MayBlock()}));
 
     limits_.max_ipc_memory_size = kTestBlobStorageMaxBytesDataItemSize;
     limits_.max_shared_memory_size = kTestBlobStorageMaxBytesDataItemSize;
diff --git a/storage/browser/blob/blob_impl.cc b/storage/browser/blob/blob_impl.cc
index dd1136d..b40882d 100644
--- a/storage/browser/blob/blob_impl.cc
+++ b/storage/browser/blob/blob_impl.cc
@@ -13,6 +13,7 @@
 #include "base/containers/span.h"
 #include "base/files/file_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "net/base/io_buffer.h"
 #include "storage/browser/blob/blob_data_handle.h"
@@ -212,10 +213,8 @@
           uint64_t size;
           base::Optional<base::Time> time;
         };
-        base::PostTaskAndReplyWithResult(
-            FROM_HERE,
-            {base::ThreadPool(), base::MayBlock(),
-             base::TaskPriority::USER_VISIBLE},
+        base::ThreadPool::PostTaskAndReplyWithResult(
+            FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE},
             base::BindOnce(
                 [](const base::FilePath& path) {
                   base::File::Info info;
diff --git a/storage/browser/blob/blob_reader.cc b/storage/browser/blob/blob_reader.cc
index ba1ec8f..51538da 100644
--- a/storage/browser/blob/blob_reader.cc
+++ b/storage/browser/blob/blob_reader.cc
@@ -16,6 +16,7 @@
 #include "base/callback_helpers.h"
 #include "base/memory/ptr_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "net/base/io_buffer.h"
@@ -72,9 +73,8 @@
 BlobReader::FileStreamReaderProvider::~FileStreamReaderProvider() = default;
 
 BlobReader::BlobReader(const BlobDataHandle* blob_handle)
-    : file_task_runner_(
-          base::CreateTaskRunner({base::ThreadPool(), base::MayBlock(),
-                                  base::TaskPriority::USER_VISIBLE})),
+    : file_task_runner_(base::ThreadPool::CreateTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE})),
       net_error_(net::OK) {
   if (blob_handle) {
     if (blob_handle->IsBroken()) {
diff --git a/storage/browser/blob/blob_registry_impl_unittest.cc b/storage/browser/blob/blob_registry_impl_unittest.cc
index 50895705..3e5523f1 100644
--- a/storage/browser/blob/blob_registry_impl_unittest.cc
+++ b/storage/browser/blob/blob_registry_impl_unittest.cc
@@ -17,6 +17,7 @@
 #include "base/run_loop.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread_restrictions.h"
@@ -66,7 +67,7 @@
     ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
     context_ = std::make_unique<BlobStorageContext>(
         data_dir_.GetPath(), data_dir_.GetPath(),
-        base::CreateTaskRunner({base::ThreadPool(), base::MayBlock()}));
+        base::ThreadPool::CreateTaskRunner({base::MayBlock()}));
     auto storage_policy = base::MakeRefCounted<MockSpecialStoragePolicy>();
     file_system_context_ = base::MakeRefCounted<FileSystemContext>(
         base::ThreadTaskRunnerHandle::Get().get(),
@@ -149,8 +150,8 @@
   mojo::PendingRemote<blink::mojom::BytesProvider> CreateBytesProvider(
       const std::string& bytes) {
     if (!bytes_provider_runner_) {
-      bytes_provider_runner_ = base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock()});
+      bytes_provider_runner_ =
+          base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()});
     }
     mojo::PendingRemote<blink::mojom::BytesProvider> result;
     auto provider = std::make_unique<MockBytesProvider>(
@@ -166,8 +167,8 @@
       const std::string& bytes,
       mojo::PendingReceiver<blink::mojom::BytesProvider> receiver) {
     if (!bytes_provider_runner_) {
-      bytes_provider_runner_ = base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock()});
+      bytes_provider_runner_ =
+          base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()});
     }
     auto provider = std::make_unique<MockBytesProvider>(
         std::vector<uint8_t>(bytes.begin(), bytes.end()), &reply_request_count_,
diff --git a/storage/browser/blob/blob_storage_context.cc b/storage/browser/blob/blob_storage_context.cc
index c19c249cd..64249573 100644
--- a/storage/browser/blob/blob_storage_context.cc
+++ b/storage/browser/blob/blob_storage_context.cc
@@ -22,6 +22,7 @@
 #include "base/numerics/safe_math.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/memory_dump_manager.h"
@@ -260,8 +261,8 @@
     // blob will be fully functional whether or not timestamps are set. When
     // the timestamp isn't set the blob just won't be able to detect the file
     // on disk changing after the blob is created.
-    base::PostTaskAndReplyWithResult(
-        FROM_HERE, {base::ThreadPool(), base::MayBlock()},
+    base::ThreadPool::PostTaskAndReplyWithResult(
+        FROM_HERE, {base::MayBlock()},
         base::BindOnce(
             [](std::vector<base::FilePath> paths) {
               std::vector<base::Time> result;
diff --git a/storage/browser/blob/blob_storage_context_mojo_unittest.cc b/storage/browser/blob/blob_storage_context_mojo_unittest.cc
index 3554c6b3..72047c0 100644
--- a/storage/browser/blob/blob_storage_context_mojo_unittest.cc
+++ b/storage/browser/blob/blob_storage_context_mojo_unittest.cc
@@ -13,6 +13,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
@@ -76,8 +77,8 @@
 
   void SetUpOnDiskContext() {
     if (!file_runner_) {
-      file_runner_ = base::CreateSequencedTaskRunner(
-          {base::MayBlock(), base::ThreadPool()});
+      file_runner_ =
+          base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()});
     }
     context_ = std::make_unique<BlobStorageContext>(
         temp_dir_.GetPath(), temp_dir_.GetPath(), file_runner_);
diff --git a/storage/browser/blob/blob_transport_strategy_unittest.cc b/storage/browser/blob/blob_transport_strategy_unittest.cc
index f50bc90..adabe1f 100644
--- a/storage/browser/blob/blob_transport_strategy_unittest.cc
+++ b/storage/browser/blob/blob_transport_strategy_unittest.cc
@@ -17,6 +17,7 @@
 #include "base/run_loop.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread_restrictions.h"
 #include "mojo/core/embedder/embedder.h"
@@ -56,7 +57,7 @@
     ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
 
     bytes_provider_runner_ =
-        base::CreateSequencedTaskRunner({base::ThreadPool(), base::MayBlock()});
+        base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()});
     mock_time_ = base::Time::Now();
 
     limits_.max_ipc_memory_size = kTestBlobStorageIPCThresholdBytes;
diff --git a/storage/browser/blob/write_blob_to_file.cc b/storage/browser/blob/write_blob_to_file.cc
index 620e140..4f270b0 100644
--- a/storage/browser/blob/write_blob_to_file.cc
+++ b/storage/browser/blob/write_blob_to_file.cc
@@ -18,6 +18,7 @@
 #include "base/numerics/safe_conversions.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "storage/browser/blob/blob_data_handle.h"
 #include "storage/browser/blob/blob_data_item.h"
 #include "storage/browser/blob/blob_data_snapshot.h"
@@ -237,10 +238,8 @@
     // Special Case 1: Success but no bytes were written, so just create
     // an empty file (LocalFileStreamWriter only creates a file
     // if data is actually written).
-    base::PostTaskAndReplyWithResult(
-        FROM_HERE,
-        {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
-         base::ThreadPool()},
+    base::ThreadPool::PostTaskAndReplyWithResult(
+        FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE},
         base::BindOnce(CreateEmptyFileAndMaybeSetModifiedTime,
                        std::move(file_path), last_modified, flush_on_write),
         std::move(callback));
@@ -248,10 +247,8 @@
   } else if (success && last_modified) {
     // Special Case 2: Success and |last_modified| needs to be set. Set
     // that before reporting write completion.
-    base::PostTaskAndReplyWithResult(
-        FROM_HERE,
-        {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
-         base::ThreadPool()},
+    base::ThreadPool::PostTaskAndReplyWithResult(
+        FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE},
         base::BindOnce(
             [](int64_t bytes_written, base::FilePath file_path,
                base::Optional<base::Time> last_modified) {
@@ -307,10 +304,8 @@
         return;
       }
 
-      base::PostTaskAndReplyWithResult(
-          FROM_HERE,
-          {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
-           base::ThreadPool()},
+      base::ThreadPool::PostTaskAndReplyWithResult(
+          FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE},
           base::BindOnce(CopyFileAndMaybeWriteTimeModified, item.path(),
                          item.expected_modification_time(), file_path,
                          item.offset(), optional_size, last_modified,
@@ -323,8 +318,8 @@
   // If not, copy the BlobReader and FileStreamWriter.
   std::unique_ptr<FileStreamWriter> writer =
       FileStreamWriter::CreateForLocalFile(
-          base::CreateTaskRunner({base::MayBlock(), base::ThreadPool(),
-                                  base::TaskPriority::USER_VISIBLE})
+          base::ThreadPool::CreateTaskRunner(
+              {base::MayBlock(), base::TaskPriority::USER_VISIBLE})
               .get(),
           file_path, /*initial_offset=*/0,
           FileStreamWriter::CREATE_NEW_FILE_ALWAYS);
diff --git a/storage/browser/database/database_tracker.cc b/storage/browser/database/database_tracker.cc
index 27f507e..41dc6c9 100644
--- a/storage/browser/database/database_tracker.cc
+++ b/storage/browser/database/database_tracker.cc
@@ -14,6 +14,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "net/base/net_errors.h"
 #include "sql/database.h"
 #include "sql/meta_table.h"
@@ -95,9 +96,8 @@
       db_(new sql::Database()),
       special_storage_policy_(special_storage_policy),
       quota_manager_proxy_(quota_manager_proxy),
-      task_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::USER_VISIBLE,
+      task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
            base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})) {
   if (quota_manager_proxy) {
     quota_manager_proxy->RegisterClient(
diff --git a/storage/browser/quota/quota_manager.cc b/storage/browser/quota/quota_manager.cc
index efa6d99..4b396d89 100644
--- a/storage/browser/quota/quota_manager.cc
+++ b/storage/browser/quota/quota_manager.cc
@@ -28,6 +28,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/system/sys_info.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/threading/thread_task_runner_handle.h"
@@ -890,9 +891,8 @@
       db_disabled_(false),
       eviction_disabled_(false),
       io_thread_(io_thread),
-      db_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
-           base::TaskPriority::USER_VISIBLE,
+      db_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
            base::TaskShutdownBehavior::BLOCK_SHUTDOWN})),
       get_settings_function_(get_settings_function),
       is_getting_eviction_origin_(false),
diff --git a/storage/browser/quota/quota_settings.cc b/storage/browser/quota/quota_settings.cc
index 316b2d7..d5f6709 100644
--- a/storage/browser/quota/quota_settings.cc
+++ b/storage/browser/quota/quota_settings.cc
@@ -13,6 +13,7 @@
 #include "base/rand_util.h"
 #include "base/system/sys_info.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "build/build_config.h"
 #include "storage/browser/quota/quota_device_info_helper.h"
@@ -152,9 +153,9 @@
                                bool is_incognito,
                                QuotaDeviceInfoHelper* device_info_helper,
                                OptionalQuotaSettingsCallback callback) {
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE,
+      {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
        base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&CalculateNominalDynamicSettings, partition_path,
                      is_incognito, base::Unretained(device_info_helper)),
diff --git a/testing/scripts/run_rendering_benchmark_with_gated_performance.py b/testing/scripts/run_rendering_benchmark_with_gated_performance.py
index 32ec32b..36a3263 100755
--- a/testing/scripts/run_rendering_benchmark_with_gated_performance.py
+++ b/testing/scripts/run_rendering_benchmark_with_gated_performance.py
@@ -276,8 +276,10 @@
       # positive.
       print('============ Re_run the failed tests ============')
       all_failed_stories = '('+'|'.join(result_recorder.failed_stories)+')'
-      re_run_args.extend(
-        ['--story-filter', all_failed_stories, '--pageset-repeat=3'])
+      # TODO(behdadb): Remove the extra chrome categories after investigation
+      # of flakes in representative perf tests (crbug.com/1055893).
+      re_run_args.extend(['--story-filter', all_failed_stories,
+        '--pageset-repeat=3', '--extra-chrome-categories=blink,gpu,v8,viz'])
 
       re_run_isolated_script_test_dir = os.path.join(out_dir_path,
         're_run_failures')
diff --git a/third_party/android_deps/OWNERS b/third_party/android_deps/OWNERS
index e5ebc6c..ad0973f 100644
--- a/third_party/android_deps/OWNERS
+++ b/third_party/android_deps/OWNERS
@@ -1,5 +1,6 @@
 agrieve@chromium.org
 jbudorick@chromium.org
+mheikal@chromium.org
 smaier@chromium.org
 wnwen@chromium.org
 
diff --git a/third_party/android_deps/fetch_all.py b/third_party/android_deps/fetch_all.py
index 24e008cf..abce136 100755
--- a/third_party/android_deps/fetch_all.py
+++ b/third_party/android_deps/fetch_all.py
@@ -352,11 +352,17 @@
       '--debug', action='store_true', help='Enable debug logging')
   args = parser.parse_args()
 
-  print("""WARNING: Temporary manual edits have been made to
-        //third_party/android_deps/BUILD.gn to support the androidx migration.
-        This script will overwrite them, so you will need to revert them
-        afterwards.
-        E.g. by running: git checkout HEAD -p https://crbug.com/896775""")
+  msg = """
+WARNING: Temporary manual edits have been made to
+         //third_party/android_deps/BUILD.gn to support the androidx migration.
+         This script will overwrite them, so you will need to revert them
+         afterwards. To do so you can run 'git checkout HEAD -p
+         third_party/android_deps/BUILD.gn' to interactively choose to revert
+         parts of the file that are not related to the specific package you are
+         adding or updating. See crrev.com/c/1830506 for the cl with the manual
+         changes for reference.
+"""
+  print(msg)
 
   # Determine Chromium source tree.
   chromium_src = args.chromium_dir
diff --git a/third_party/blink/public/common/sandbox_support/sandbox_support_mac.h b/third_party/blink/public/common/sandbox_support/sandbox_support_mac.h
index 536e8da3..faf2b452 100644
--- a/third_party/blink/public/common/sandbox_support/sandbox_support_mac.h
+++ b/third_party/blink/public/common/sandbox_support/sandbox_support_mac.h
@@ -40,6 +40,8 @@
 constexpr size_t kMacSystemColorIDCount =
     static_cast<size_t>(MacSystemColorID::kCount);
 
+constexpr size_t kMacSystemColorSchemeCount = 2;
+
 }  // namespace blink
 
 #endif  // THIRD_PARTY_BLINK_PUBLIC_COMMON_SANDBOX_SUPPORT_SANDBOX_SUPPORT_MAC_H_
diff --git a/third_party/blink/public/platform/mac/web_sandbox_support.h b/third_party/blink/public/platform/mac/web_sandbox_support.h
index 3b08340..ffa3ec83 100644
--- a/third_party/blink/public/platform/mac/web_sandbox_support.h
+++ b/third_party/blink/public/platform/mac/web_sandbox_support.h
@@ -33,6 +33,7 @@
 
 #include "base/mac/scoped_cftyperef.h"
 #include "third_party/blink/public/common/sandbox_support/sandbox_support_mac.h"
+#include "third_party/blink/public/platform/web_color_scheme.h"
 #include "third_party/skia/include/core/SkColor.h"
 
 typedef struct CGFont* CGFontRef;
@@ -56,7 +57,7 @@
       uint32_t* font_id) = 0;
 
   // Returns the system's preferred value for a named color.
-  virtual SkColor GetSystemColor(MacSystemColorID) = 0;
+  virtual SkColor GetSystemColor(MacSystemColorID, WebColorScheme) = 0;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/DEPS b/third_party/blink/renderer/DEPS
index 8c1209e05..8314de7 100644
--- a/third_party/blink/renderer/DEPS
+++ b/third_party/blink/renderer/DEPS
@@ -38,6 +38,7 @@
     "+base/sys_byteorder.h",
     "+base/system/sys_info.h",
     "+base/task/post_task.h",
+    "+base/task/thread_pool.h",
     "+base/template_util.h",
     "+base/test/metrics/histogram_tester.h",
     "+base/test/mock_callback.h",
diff --git a/third_party/blink/renderer/bindings/idl_in_modules.gni b/third_party/blink/renderer/bindings/idl_in_modules.gni
index 7e79b3b..bfffdab2 100644
--- a/third_party/blink/renderer/bindings/idl_in_modules.gni
+++ b/third_party/blink/renderer/bindings/idl_in_modules.gni
@@ -444,6 +444,8 @@
           "//third_party/blink/renderer/modules/peerconnection/rtc_dtmf_sender.idl",
           "//third_party/blink/renderer/modules/peerconnection/rtc_dtmf_tone_change_event.idl",
           "//third_party/blink/renderer/modules/peerconnection/rtc_dtmf_tone_change_event_init.idl",
+          "//third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.idl",
+          "//third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.idl",
           "//third_party/blink/renderer/modules/peerconnection/rtc_error.idl",
           "//third_party/blink/renderer/modules/peerconnection/rtc_error_event.idl",
           "//third_party/blink/renderer/modules/peerconnection/rtc_error_event_init.idl",
@@ -455,6 +457,7 @@
           "//third_party/blink/renderer/modules/peerconnection/rtc_ice_parameters.idl",
           "//third_party/blink/renderer/modules/peerconnection/rtc_ice_server.idl",
           "//third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.idl",
+          "//third_party/blink/renderer/modules/peerconnection/rtc_insertable_streams.idl",
           "//third_party/blink/renderer/modules/peerconnection/rtc_legacy_stats_report.idl",
           "//third_party/blink/renderer/modules/peerconnection/rtc_offer_answer_options.idl",
           "//third_party/blink/renderer/modules/peerconnection/rtc_offer_options.idl",
diff --git a/third_party/blink/renderer/build/scripts/.style.yapf b/third_party/blink/renderer/build/scripts/.style.yapf
new file mode 100644
index 0000000..557fa7b
--- /dev/null
+++ b/third_party/blink/renderer/build/scripts/.style.yapf
@@ -0,0 +1,2 @@
+[style]
+based_on_style = pep8
diff --git a/third_party/blink/renderer/build/scripts/PRESUBMIT.py b/third_party/blink/renderer/build/scripts/PRESUBMIT.py
index cb91afe..8c5b3eb3 100644
--- a/third_party/blink/renderer/build/scripts/PRESUBMIT.py
+++ b/third_party/blink/renderer/build/scripts/PRESUBMIT.py
@@ -2,8 +2,11 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+
 def _GenerateTestCommand(input_api, output_api, file_name, affected_list):
-    if not input_api.AffectedFiles(file_filter=lambda x: input_api.FilterSourceFile(x, white_list=affected_list)):
+    if not input_api.AffectedFiles(
+            file_filter=
+            lambda x: input_api.FilterSourceFile(x, white_list=affected_list)):
         return None
 
     if input_api.is_committing:
@@ -11,8 +14,8 @@
     else:
         message_type = output_api.PresubmitPromptWarning
 
-    test_path = input_api.os_path.join(
-        input_api.PresubmitLocalPath(), file_name)
+    test_path = input_api.os_path.join(input_api.PresubmitLocalPath(),
+                                       file_name)
     if input_api.is_windows:
         cmd = [input_api.python_executable, test_path]
     else:
@@ -22,17 +25,15 @@
     # during import.
     env = input_api.environ.copy()
     import_path = [
-      input_api.os_path.join(input_api.change.RepositoryRoot(), 'third_party')
+        input_api.os_path.join(input_api.change.RepositoryRoot(),
+                               'third_party')
     ]
     if env.get('PYTHONPATH'):
         import_path.append(env.get('PYTHONPATH'))
     env['PYTHONPATH'] = input_api.os_path.pathsep.join(import_path)
 
     test_cmd = input_api.Command(
-        name=file_name,
-        cmd=cmd,
-        kwargs={'env': env},
-        message=message_type)
+        name=file_name, cmd=cmd, kwargs={'env': env}, message=message_type)
     return test_cmd
 
 
@@ -40,17 +41,22 @@
     tests = [{
         'file_name': 'json5_generator_unittest.py',
         'affected_list': [r'.*json5_generator.*', r'.*\btests[\\\/].*']
-    }, {
-        'file_name': 'make_runtime_features_utilities_unittest.py',
-        'affected_list': [r'.*make_runtime_features_utilities.*']
-    }, {
-        'file_name': 'make_document_policy_features_unittest.py',
-        'affected_list': [r'.*make_document_policy_features.*']
-    }]
+    },
+             {
+                 'file_name': 'make_runtime_features_utilities_unittest.py',
+                 'affected_list': [r'.*make_runtime_features_utilities.*']
+             },
+             {
+                 'file_name': 'make_document_policy_features_unittest.py',
+                 'affected_list': [r'.*make_document_policy_features.*']
+             }]
     test_commands = []
     for test in tests:
-        test_commands.append(_GenerateTestCommand(input_api, output_api, test['file_name'], test['affected_list']))
-    return input_api.RunTests([command for command in test_commands if command])
+        test_commands.append(
+            _GenerateTestCommand(input_api, output_api, test['file_name'],
+                                 test['affected_list']))
+    return input_api.RunTests(
+        [command for command in test_commands if command])
 
 
 def CheckChangeOnUpload(input_api, output_api):
diff --git a/third_party/blink/renderer/build/scripts/aria_properties.py b/third_party/blink/renderer/build/scripts/aria_properties.py
index bca8049..742e7c2 100644
--- a/third_party/blink/renderer/build/scripts/aria_properties.py
+++ b/third_party/blink/renderer/build/scripts/aria_properties.py
@@ -6,8 +6,8 @@
 import os.path
 import sys
 
-PYJSON5_DIR = os.path.join(os.path.dirname(__file__),
-                           '..', '..', '..', '..', 'pyjson5', 'src')
+PYJSON5_DIR = os.path.join(
+    os.path.dirname(__file__), '..', '..', '..', '..', 'pyjson5', 'src')
 sys.path.insert(0, PYJSON5_DIR)
 
 import json5  # pylint: disable=import-error
diff --git a/third_party/blink/renderer/build/scripts/cluster.py b/third_party/blink/renderer/build/scripts/cluster.py
index 7799f3d7..20f06646 100644
--- a/third_party/blink/renderer/build/scripts/cluster.py
+++ b/third_party/blink/renderer/build/scripts/cluster.py
@@ -17,7 +17,7 @@
     dist_mat = [[0 for _ in range(ncol)] for _ in range(nrow)]
     for i in range(nrow):
         for j in range(ncol):
-            dist_mat[i][j] = math.sqrt((v1[i] - v2[j]) ** 2)
+            dist_mat[i][j] = math.sqrt((v1[i] - v2[j])**2)
     return dist_mat
 
 
@@ -66,7 +66,8 @@
 
             for j in range(n_cluster):
                 if count[j] == 0:
-                    centers = sorted([rand.uniform(0.0, 100.0) for i in range(n_cluster)])
+                    centers = sorted(
+                        [rand.uniform(0.0, 100.0) for i in range(n_cluster)])
                     failed = True
                     break
 
diff --git a/third_party/blink/renderer/build/scripts/gperf.py b/third_party/blink/renderer/build/scripts/gperf.py
index ad15e688..4890b2d 100644
--- a/third_party/blink/renderer/build/scripts/gperf.py
+++ b/third_party/blink/renderer/build/scripts/gperf.py
@@ -38,7 +38,8 @@
         # -Wimplicit-fallthrough needs an explicit fallthrough statement,
         # so replace gperf's /*FALLTHROUGH*/ comment with the statement.
         # https://savannah.gnu.org/bugs/index.php?53029
-        gperf_output = gperf_output.replace('/*FALLTHROUGH*/', '  FALLTHROUGH;')
+        gperf_output = gperf_output.replace('/*FALLTHROUGH*/',
+                                            '  FALLTHROUGH;')
         script = 'third_party/blink/renderer/build/scripts/gperf.py'
         return '// Generated by %s\n' % script + gperf_output
     except OSError:
@@ -53,16 +54,19 @@
             assert 'gperf_path' in parameters, 'Must specify gperf_path in ' \
                 'template map returned from decorated function'
             gperf_path = parameters['gperf_path']
-            gperf_input = template_expander.apply_template(template_path,
-                                                           parameters)
+            gperf_input = template_expander.apply_template(
+                template_path, parameters)
             gperf_args = ['--key-positions=*', '-P', '-n']
             gperf_args.extend(['-m', '50'])  # Pick best of 50 attempts.
-            gperf_args.append('-D')  # Allow duplicate hashes -> More compact code.
+            # Allow duplicate hashes -> More compact code.
+            gperf_args.append('-D')
             if gperf_extra_args:
                 gperf_args.extend(gperf_extra_args)
             return generate_gperf(gperf_path, gperf_input, gperf_args)
+
         generator_internal.func_name = generator.func_name
         return generator_internal
+
     return wrapper
 
 
@@ -83,7 +87,9 @@
     gperf_args.remove(infile)
 
     open(args.output_file, 'wb').write(
-        generate_gperf(gperf_path, open(infile).read(), gperf_args))
+        generate_gperf(gperf_path,
+                       open(infile).read(), gperf_args))
+
 
 if __name__ == '__main__':
     main()
diff --git a/third_party/blink/renderer/build/scripts/hasher.py b/third_party/blink/renderer/build/scripts/hasher.py
index a608fb7..c05da592 100644
--- a/third_party/blink/renderer/build/scripts/hasher.py
+++ b/third_party/blink/renderer/build/scripts/hasher.py
@@ -20,6 +20,7 @@
 # We've modified Victor's version to output hash values that match WTFString,
 # which involves using a specific seed and some different constants.
 
+
 class uint32_t(long):
     def __rshift__(self, other):
         return uint32_t(long.__rshift__(self, other) & ((1L << 32) - 1))
diff --git a/third_party/blink/renderer/build/scripts/in_file.py b/third_party/blink/renderer/build/scripts/in_file.py
index bcdf793e..9d1f7c3 100644
--- a/third_party/blink/renderer/build/scripts/in_file.py
+++ b/third_party/blink/renderer/build/scripts/in_file.py
@@ -45,30 +45,40 @@
 # Parsing produces an array of dictionaries:
 # [ { 'name' : 'name1', 'arg' :' value', arg2=['value2', 'value3'] }
 
+
 def _is_comment(line):
     return line.startswith("//") or line.startswith("#")
 
+
 class InFile(object):
-    def __init__(self, file_paths, lines, defaults, valid_values=None, default_parameters=None):
+    def __init__(self,
+                 file_paths,
+                 lines,
+                 defaults,
+                 valid_values=None,
+                 default_parameters=None):
         self.file_paths = file_paths
         self.name_dictionaries = []
-        self.parameters = copy.deepcopy(default_parameters if default_parameters else {})
+        self.parameters = copy.deepcopy(
+            default_parameters if default_parameters else {})
         self._defaults = defaults
-        self._valid_values = copy.deepcopy(valid_values if valid_values else {})
+        self._valid_values = copy.deepcopy(
+            valid_values if valid_values else {})
         self._parse(map(str.strip, lines))
 
     @classmethod
-    def load_from_files(self, file_paths, defaults, valid_values, default_parameters):
+    def load_from_files(self, file_paths, defaults, valid_values,
+                        default_parameters):
         lines = []
         for path in file_paths:
             assert path.endswith(".in")
             with open(os.path.abspath(path)) as in_file:
                 lines += in_file.readlines()
-        return InFile(file_paths, lines, defaults, valid_values, default_parameters)
+        return InFile(file_paths, lines, defaults, valid_values,
+                      default_parameters)
 
     def _is_sequence(self, arg):
-        return (not hasattr(arg, "strip")
-                and hasattr(arg, "__getitem__")
+        return (not hasattr(arg, "strip") and hasattr(arg, "__getitem__")
                 or hasattr(arg, "__iter__"))
 
     def _parse(self, lines):
@@ -86,19 +96,20 @@
                 entry = self._parse_line(line)
                 name = entry['name']
                 if name in indices:
-                    entry = self._merge_entries(entry, self.name_dictionaries[indices[name]])
+                    entry = self._merge_entries(
+                        entry, self.name_dictionaries[indices[name]])
                     entry['name'] = name
                     self.name_dictionaries[indices[name]] = entry
                 else:
                     indices[name] = len(self.name_dictionaries)
                     self.name_dictionaries.append(entry)
 
-
     def _merge_entries(self, one, two):
         merged = {}
         for key in one:
             if key not in two:
-                self._fatal("Expected key '%s' not found in entry: %s" % (key, two))
+                self._fatal(
+                    "Expected key '%s' not found in entry: %s" % (key, two))
             if one[key] and two[key]:
                 val_one = one[key]
                 val_two = two[key]
@@ -128,7 +139,9 @@
         else:
             name, value = line, True
         if not name in self.parameters:
-            self._fatal("Unknown parameter: '%s' in line:\n%s\nKnown parameters: %s" % (name, line, self.parameters.keys()))
+            self._fatal(
+                "Unknown parameter: '%s' in line:\n%s\nKnown parameters: %s" %
+                (name, line, self.parameters.keys()))
         self.parameters[name] = value
 
     def _parse_line(self, line):
@@ -139,17 +152,21 @@
         args_list = ' '.join(parts[1:]).strip().split(',')
         for arg_string in args_list:
             arg_string = arg_string.strip()
-            if not arg_string: # Ignore empty args
+            if not arg_string:  # Ignore empty args
                 continue
             if '=' in arg_string:
                 arg_name, arg_value = arg_string.split('=')
             else:
                 arg_name, arg_value = arg_string, True
             if arg_name not in self._defaults:
-                self._fatal("Unknown argument: '%s' in line:\n%s\nKnown arguments: %s" % (arg_name, line, self._defaults.keys()))
+                self._fatal(
+                    "Unknown argument: '%s' in line:\n%s\nKnown arguments: %s"
+                    % (arg_name, line, self._defaults.keys()))
             valid_values = self._valid_values.get(arg_name)
             if valid_values and arg_value not in valid_values:
-                self._fatal("Unknown value: '%s' in line:\n%s\nKnown values: %s" % (arg_value, line, valid_values))
+                self._fatal(
+                    "Unknown value: '%s' in line:\n%s\nKnown values: %s" %
+                    (arg_value, line, valid_values))
             if self._is_sequence(args[arg_name]):
                 args[arg_name].extend(self._parse_value_sequence(arg_value))
             else:
diff --git a/third_party/blink/renderer/build/scripts/in_file_unittest.py b/third_party/blink/renderer/build/scripts/in_file_unittest.py
index 4522903..eb93ee5 100755
--- a/third_party/blink/renderer/build/scripts/in_file_unittest.py
+++ b/third_party/blink/renderer/build/scripts/in_file_unittest.py
@@ -31,6 +31,7 @@
 
 from in_file import InFile
 
+
 class InFileTest(unittest.TestCase):
     def test_basic_parse(self):
         contents = """
@@ -44,8 +45,16 @@
         }
         in_file = InFile(['test_basic_parse.in'], lines, defaults, None)
         expected_values = [
-            {'name': 'name1', 'arg': 'value', 'arg2': ['value2', 'value3']},
-            {'name': 'name2', 'arg': None, 'arg2': []},
+            {
+                'name': 'name1',
+                'arg': 'value',
+                'arg2': ['value2', 'value3']
+            },
+            {
+                'name': 'name2',
+                'arg': None,
+                'arg2': []
+            },
         ]
         self.assertEquals(in_file.name_dictionaries, expected_values)
 
@@ -65,7 +74,9 @@
             'namespace': '',
             'fruit': False,
         }
-        in_file = InFile(['test_with_parameters.in'], lines, defaults,
+        in_file = InFile(['test_with_parameters.in'],
+                         lines,
+                         defaults,
                          default_parameters=default_parameters)
         expected_parameters = {
             'namespace': 'TestNamespace',
diff --git a/third_party/blink/renderer/build/scripts/in_generator.py b/third_party/blink/renderer/build/scripts/in_generator.py
index 34e0c97..f66347b2 100644
--- a/third_party/blink/renderer/build/scripts/in_generator.py
+++ b/third_party/blink/renderer/build/scripts/in_generator.py
@@ -79,7 +79,9 @@
         if isinstance(in_files, basestring):
             in_files = [in_files]
         if in_files:
-            self.in_file = InFile.load_from_files(in_files, self.defaults, self.valid_values, self.default_parameters)
+            self.in_file = InFile.load_from_files(in_files, self.defaults,
+                                                  self.valid_values,
+                                                  self.default_parameters)
         else:
             self.in_file = None
 
diff --git a/third_party/blink/renderer/build/scripts/json5_generator.py b/third_party/blink/renderer/build/scripts/json5_generator.py
index 0626ae9..293cdc4 100644
--- a/third_party/blink/renderer/build/scripts/json5_generator.py
+++ b/third_party/blink/renderer/build/scripts/json5_generator.py
@@ -1,7 +1,6 @@
 # Copyright (c) 2017 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
-
 """Generic generator for configuration files in JSON5 format.
 
 The configuration file is expected to contain either a data array or a data map,
@@ -97,7 +96,8 @@
 
 def _is_valid(valid_values, value, valid_keys=None):
     if type(value) == str and all([type(i) == str for i in valid_values]):
-        return any([(value == valid) or (re.match("^" + valid + "$", value) is not None)
+        return any([(value == valid)
+                    or (re.match("^" + valid + "$", value) is not None)
                     for valid in valid_values])
     elif isinstance(value, dict):
         assert valid_keys, "'valid_keys' must be declared when using a dict value"
@@ -109,16 +109,25 @@
 
 
 class Json5File(object):
-    def __init__(self, file_paths, doc, default_metadata=None, default_parameters=None):
+    def __init__(self,
+                 file_paths,
+                 doc,
+                 default_metadata=None,
+                 default_parameters=None):
         self.file_paths = file_paths
         self.name_dictionaries = []
-        self.metadata = copy.deepcopy(default_metadata if default_metadata else {})
-        self.parameters = copy.deepcopy(default_parameters if default_parameters else {})
+        self.metadata = copy.deepcopy(
+            default_metadata if default_metadata else {})
+        self.parameters = copy.deepcopy(
+            default_parameters if default_parameters else {})
         self._defaults = {}
         self._process(doc)
 
     @classmethod
-    def load_from_files(cls, file_paths, default_metadata=None, default_parameters=None):
+    def load_from_files(cls,
+                        file_paths,
+                        default_metadata=None,
+                        default_parameters=None):
         merged_doc = dict()
         for path in file_paths:
             assert path.endswith(".json5")
@@ -128,7 +137,8 @@
                     merged_doc = doc
                 else:
                     _merge_doc(merged_doc, doc)
-        return Json5File(file_paths, merged_doc, default_metadata, default_parameters)
+        return Json5File(file_paths, merged_doc, default_metadata,
+                         default_parameters)
 
     def _process(self, doc):
         # Process optional metadata map entries.
@@ -174,14 +184,14 @@
         if not self.parameters:
             entry.update(item)
             return entry
-        assert "name" not in self.parameters, "The parameter 'name' is reserved, use a different name."
+        assert "name" not in self.parameters, \
+            "The parameter 'name' is reserved, use a different name."
         entry["name"] = NameStyleConverter(item.pop("name"))
         # Validate parameters if it's specified.
         for key, value in item.items():
             if key not in self.parameters:
-                raise Exception(
-                    "Unknown parameter: '%s'\nKnown params: %s" %
-                    (key, self.parameters.keys()))
+                raise Exception("Unknown parameter: '%s'\nKnown params: %s" %
+                                (key, self.parameters.keys()))
             assert self.parameters[key] is not None, \
                 "Specification for parameter 'key' cannot be None. Use {} instead."
             self._validate_parameter(self.parameters[key], value)
@@ -203,13 +213,17 @@
             for item in value:
                 if not _is_valid(valid_values, item):
                     raise Exception("Unknown value: '%s'\nValid values: %s, \
-                        Please change your value to a valid value" % (item, valid_values))
+                        Please change your value to a valid value" %
+                                    (item, valid_values))
         elif not _is_valid(valid_values, value, valid_keys):
             message = "Unknown value: '%s'\nValid values: %s, \
-                Please change your value to a valid value" % (value, valid_values)
+                Please change your value to a valid value" % (value,
+                                                              valid_values)
             if isinstance(value, dict):
-                message = "Unknown key or value in: %s\nPlease choose your keys and values from the list below:\n \
-                Valid keys: %s\nValid values: %s" % (value, valid_keys, valid_values)
+                message = ("Unknown key or value in: %s\n" \
+                           "Please choose your keys and values from the list below:\n" \
+                           "Valid keys: %s\nValid values: %s" %
+                           (value, valid_keys, valid_values))
             raise Exception(message)
 
     def merge_from(self, doc):
@@ -222,7 +236,8 @@
     for entry in entries:
         name = entry['name'].original
         if name in name_dict:
-            raise Exception('The data contains multiple entries for "%s".' % name)
+            raise Exception(
+                'The data contains multiple entries for "%s".' % name)
         name_dict[name] = entry
 
 
@@ -234,7 +249,8 @@
         name = entry['name'].original
         if name in name_dict:
             if entry != name_dict[name]:
-                raise Exception('Duplicated entries for "%s" must be identical.' % name)
+                raise Exception(
+                    'Duplicated entries for "%s" must be identical.' % name)
         else:
             name_dict[name] = entry
             filtered_list.append(entry)
@@ -257,12 +273,12 @@
         self._cleanup = set()
         self.gperf_path = None
         if json5_files:
-            self.json5_file = Json5File.load_from_files(json5_files,
-                                                        self.default_metadata,
-                                                        self.default_parameters)
+            self.json5_file = Json5File.load_from_files(
+                json5_files, self.default_metadata, self.default_parameters)
         match = re.search(r'\bgen[\\/]', output_dir)
         if match:
-            self._relative_output_dir = output_dir[match.end():].replace(os.path.sep, '/') + '/'
+            self._relative_output_dir = output_dir[match.end():].replace(
+                os.path.sep, '/') + '/'
         else:
             self._relative_output_dir = ''
 
diff --git a/third_party/blink/renderer/build/scripts/json5_generator_unittest.py b/third_party/blink/renderer/build/scripts/json5_generator_unittest.py
index 04f01b9..7ae4c83 100644
--- a/third_party/blink/renderer/build/scripts/json5_generator_unittest.py
+++ b/third_party/blink/renderer/build/scripts/json5_generator_unittest.py
@@ -25,33 +25,49 @@
         super(CleanupWriter, self).__init__([], output_dir)
         self._cleanup = cleanup
 
+
 class Json5FileTest(unittest.TestCase):
     def path_of_test_file(self, file_name):
         return os.path.join(
             os.path.dirname(os.path.realpath(__file__)), 'tests', file_name)
 
     def test_valid_dict_value_parse(self):
-        actual = Json5File.load_from_files([self.path_of_test_file(
-            'json5_generator_valid_dict_value.json5')]).name_dictionaries
-        expected = [
-            {'name': 'item1', 'param1': {'keys': 'valid', 'random': 'values'}},
-            {'name': 'item2', 'param1': {'random': 'values', 'default': 'valid'}}
-        ]
+        actual = Json5File.load_from_files([
+            self.path_of_test_file('json5_generator_valid_dict_value.json5')
+        ]).name_dictionaries
+        expected = [{
+            'name': 'item1',
+            'param1': {
+                'keys': 'valid',
+                'random': 'values'
+            }
+        }, {
+            'name': 'item2',
+            'param1': {
+                'random': 'values',
+                'default': 'valid'
+            }
+        }]
         self.assertEqual(len(actual), len(expected))
         for exp, act in zip(expected, actual):
             self.assertDictEqual(exp['param1'], act['param1'])
 
     def test_no_valid_keys(self):
         with self.assertRaises(AssertionError):
-            Json5File.load_from_files([self.path_of_test_file('json5_generator_no_valid_keys.json5')])
+            Json5File.load_from_files([
+                self.path_of_test_file('json5_generator_no_valid_keys.json5')
+            ])
 
     def test_value_not_in_valid_values(self):
         with self.assertRaises(Exception):
-            Json5File.load_from_files([self.path_of_test_file('json5_generator_invalid_value.json5')])
+            Json5File.load_from_files([
+                self.path_of_test_file('json5_generator_invalid_value.json5')
+            ])
 
     def test_key_not_in_valid_keys(self):
         with self.assertRaises(Exception):
-            Json5File.load_from_files([self.path_of_test_file('json5_generator_invalid_key.json5')])
+            Json5File.load_from_files(
+                [self.path_of_test_file('json5_generator_invalid_key.json5')])
 
     def test_cleanup_multiple_files(self):
         with tmp_dir() as tmp:
@@ -95,5 +111,6 @@
             CleanupWriter(tmp, set(['file1.h', 'file2.h'])).cleanup_files(tmp)
             self.assertFalse(os.path.exists(path1))
 
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/third_party/blink/renderer/build/scripts/keyword_utils.py b/third_party/blink/renderer/build/scripts/keyword_utils.py
index 6212887b..8a424d0 100644
--- a/third_party/blink/renderer/build/scripts/keyword_utils.py
+++ b/third_party/blink/renderer/build/scripts/keyword_utils.py
@@ -5,8 +5,10 @@
 import json5_generator
 
 
-def sort_keyword_properties_by_canonical_order(css_properties, css_value_keywords_file, json5_file_parameters):
-    """Sort all keyword CSS properties by the order of the keyword in css_value_keywords.json5
+def sort_keyword_properties_by_canonical_order(
+        css_properties, css_value_keywords_file, json5_file_parameters):
+    """Sort all keyword CSS properties by the order of the keyword in
+       css_value_keywords.json5
 
     Args:
         css_properties: css_properties excluding extra fields.
@@ -18,12 +20,15 @@
     """
     css_values_dictionary = json5_generator.Json5File.load_from_files(
         [css_value_keywords_file],
-        default_parameters=json5_file_parameters
-    ).name_dictionaries
+        default_parameters=json5_file_parameters).name_dictionaries
     css_values_dictionary = [x['name'].original for x in css_values_dictionary]
-    name_to_position_dictionary = dict(zip(css_values_dictionary, range(len(css_values_dictionary))))
+    name_to_position_dictionary = dict(
+        zip(css_values_dictionary, range(len(css_values_dictionary))))
     for css_property in css_properties:
-        if css_property['field_template'] == 'keyword' and len(css_property['include_paths']) == 0:
-            css_property['keywords'] = sorted(css_property['keywords'], key=lambda x: name_to_position_dictionary[x])
+        if css_property['field_template'] == 'keyword' and len(
+                css_property['include_paths']) == 0:
+            css_property['keywords'] = sorted(
+                css_property['keywords'],
+                key=lambda x: name_to_position_dictionary[x])
 
     return css_properties
diff --git a/third_party/blink/renderer/build/scripts/license.py b/third_party/blink/renderer/build/scripts/license.py
index 692e6dd..23f5ba7 100644
--- a/third_party/blink/renderer/build/scripts/license.py
+++ b/third_party/blink/renderer/build/scripts/license.py
@@ -29,6 +29,7 @@
 # FIXME: We should either not use license blocks in generated files
 # or we should read this from some central license file.
 
+
 def license_for_generated_cpp():
     return """// Copyright (c) 2014 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
diff --git a/third_party/blink/renderer/build/scripts/make_document_policy_features.py b/third_party/blink/renderer/build/scripts/make_document_policy_features.py
index 1a78bb5..0d67abdad4 100644
--- a/third_party/blink/renderer/build/scripts/make_document_policy_features.py
+++ b/third_party/blink/renderer/build/scripts/make_document_policy_features.py
@@ -11,15 +11,22 @@
     file_basename = 'document_policy_features'
 
     def __init__(self, json5_file_path, output_dir):
-        super(DocumentPolicyFeatureWriter, self).__init__(json5_file_path, output_dir)
+        super(DocumentPolicyFeatureWriter, self).__init__(
+            json5_file_path, output_dir)
 
-        @template_expander.use_jinja('templates/' + self.file_basename + '.cc.tmpl')
+        @template_expander.use_jinja(
+            'templates/' + self.file_basename + '.cc.tmpl')
         def generate_implementation():
             return {
-                'header_guard': self.make_header_guard(self._relative_output_dir + self.file_basename + '.h'),
-                'input_files': self._input_files,
-                'features': self.json5_file.name_dictionaries,
-                'parse_default_value': parse_default_value
+                'header_guard':
+                self.make_header_guard(self._relative_output_dir +
+                                       self.file_basename + '.h'),
+                'input_files':
+                self._input_files,
+                'features':
+                self.json5_file.name_dictionaries,
+                'parse_default_value':
+                parse_default_value
             }
 
         self._outputs = {
diff --git a/third_party/blink/renderer/build/scripts/make_document_policy_features_unittest.py b/third_party/blink/renderer/build/scripts/make_document_policy_features_unittest.py
index 884d262..4c361580 100644
--- a/third_party/blink/renderer/build/scripts/make_document_policy_features_unittest.py
+++ b/third_party/blink/renderer/build/scripts/make_document_policy_features_unittest.py
@@ -11,11 +11,14 @@
     def test_parse_default_value(self):
         self.assertEqual(
             parse_default_value("max", "DecDouble"),
-            "PolicyValue::CreateMaxPolicyValue(mojom::PolicyValueType::kDecDouble)")
+            "PolicyValue::CreateMaxPolicyValue(mojom::PolicyValueType::kDecDouble)"
+        )
         self.assertEqual(
             parse_default_value("min", "DecDouble"),
-            "PolicyValue::CreateMinPolicyValue(mojom::PolicyValueType::kDecDouble)")
-        self.assertEqual(parse_default_value("false", "Bool"), "PolicyValue(false)")
+            "PolicyValue::CreateMinPolicyValue(mojom::PolicyValueType::kDecDouble)"
+        )
+        self.assertEqual(
+            parse_default_value("false", "Bool"), "PolicyValue(false)")
         self.assertEqual(
             parse_default_value("0.5", "DecDouble"),
             "PolicyValue(0.5, mojom::PolicyValueType::kDecDouble)")
diff --git a/third_party/blink/renderer/build/scripts/make_document_policy_features_util.py b/third_party/blink/renderer/build/scripts/make_document_policy_features_util.py
index ed352caf..9a626465 100644
--- a/third_party/blink/renderer/build/scripts/make_document_policy_features_util.py
+++ b/third_party/blink/renderer/build/scripts/make_document_policy_features_util.py
@@ -3,7 +3,9 @@
 # found in the LICENSE file.
 
 
-def parse_default_value(default_value, value_type, recognized_types=('Bool', 'DecDouble'),
+def parse_default_value(default_value,
+                        value_type,
+                        recognized_types=('Bool', 'DecDouble'),
                         single_ctor_param_types=('Bool')):
     """ Parses default_value string to actual usable C++ expression.
     @param default_value_str: default_value field specified in document_policy_features.json5
@@ -22,9 +24,11 @@
     policy_value_type = "mojom::PolicyValueType::k{}".format(value_type)
 
     if default_value == 'max':
-        return "PolicyValue::CreateMaxPolicyValue({})".format(policy_value_type)
+        return "PolicyValue::CreateMaxPolicyValue({})".format(
+            policy_value_type)
     if default_value == 'min':
-        return "PolicyValue::CreateMinPolicyValue({})".format(policy_value_type)
+        return "PolicyValue::CreateMinPolicyValue({})".format(
+            policy_value_type)
 
     # types that have only one corresponding PolicyValueType
     if value_type in single_ctor_param_types:
diff --git a/third_party/blink/renderer/build/scripts/make_element_factory.py b/third_party/blink/renderer/build/scripts/make_element_factory.py
index 6158af3..bb3e5f4 100755
--- a/third_party/blink/renderer/build/scripts/make_element_factory.py
+++ b/third_party/blink/renderer/build/scripts/make_element_factory.py
@@ -48,23 +48,29 @@
         'noTypeHelpers': {},
         'runtimeEnabled': {},
     }
-    default_metadata = dict(MakeQualifiedNamesWriter.default_metadata, **{
-        'fallbackInterfaceName': '',
-        'fallbackJSInterfaceName': '',
-    })
+    default_metadata = dict(
+        MakeQualifiedNamesWriter.default_metadata, **{
+            'fallbackInterfaceName': '',
+            'fallbackJSInterfaceName': '',
+        })
     filters = MakeQualifiedNamesWriter.filters
 
     def __init__(self, json5_file_paths, output_dir):
-        super(MakeElementFactoryWriter, self).__init__(json5_file_paths, output_dir)
+        super(MakeElementFactoryWriter, self).__init__(json5_file_paths,
+                                                       output_dir)
 
         basename = self.namespace.lower() + '_element_factory'
         self._outputs.update({
-            (basename + '.h'): self.generate_factory_header,
-            (basename + '.cc'): self.generate_factory_implementation,
+            (basename + '.h'):
+            self.generate_factory_header,
+            (basename + '.cc'):
+            self.generate_factory_implementation,
         })
 
-        fallback_interface = self.tags_json5_file.metadata['fallbackInterfaceName'].strip('"')
-        fallback_js_interface = self.tags_json5_file.metadata['fallbackJSInterfaceName'].strip('"') or fallback_interface
+        fallback_interface = self.tags_json5_file.metadata[
+            'fallbackInterfaceName'].strip('"')
+        fallback_js_interface = self.tags_json5_file.metadata[
+            'fallbackJSInterfaceName'].strip('"') or fallback_interface
 
         interface_counts = defaultdict(int)
         tags = self._template_context['tags']
@@ -72,27 +78,33 @@
             tag['has_js_interface'] = self._has_js_interface(tag)
             tag['js_interface'] = self._js_interface(tag)
             tag['interface'] = self._interface(tag)
-            tag['interface_header'] = '%s/%s.h' % (
-                self._interface_header_dir(tag),
-                self.get_file_basename(tag['interface']))
+            tag['interface_header'] = '%s/%s.h' % (self._interface_header_dir(
+                tag), self.get_file_basename(tag['interface']))
             interface_counts[tag['interface']] += 1
 
         for tag in tags:
-            tag['multipleTagNames'] = (interface_counts[tag['interface']] > 1 or tag['interface'] == fallback_interface)
+            tag['multipleTagNames'] = (interface_counts[tag['interface']] > 1
+                                       or
+                                       tag['interface'] == fallback_interface)
 
         self._template_context.update({
-            'fallback_interface': fallback_interface,
-            'fallback_interface_header': self.get_file_basename(
-                fallback_interface) + '.h',
-            'fallback_js_interface': fallback_js_interface,
-            'input_files': self._input_files,
+            'fallback_interface':
+            fallback_interface,
+            'fallback_interface_header':
+            self.get_file_basename(fallback_interface) + '.h',
+            'fallback_js_interface':
+            fallback_js_interface,
+            'input_files':
+            self._input_files,
         })
 
-    @template_expander.use_jinja('templates/element_factory.h.tmpl', filters=filters)
+    @template_expander.use_jinja(
+        'templates/element_factory.h.tmpl', filters=filters)
     def generate_factory_header(self):
         return self._template_context
 
-    @template_expander.use_jinja('templates/element_factory.cc.tmpl', filters=filters)
+    @template_expander.use_jinja(
+        'templates/element_factory.cc.tmpl', filters=filters)
     def generate_factory_implementation(self):
         return self._template_context
 
@@ -111,7 +123,8 @@
         return self._interface(tag)
 
     def _has_js_interface(self, tag):
-        return not tag['noConstructor'] and self._js_interface(tag) != ('%sElement' % self.namespace)
+        return not tag['noConstructor'] and self._js_interface(tag) != (
+            '%sElement' % self.namespace)
 
     def _interface_header_dir(self, tag):
         if tag['interfaceHeaderDir']:
diff --git a/third_party/blink/renderer/build/scripts/make_element_lookup_trie.py b/third_party/blink/renderer/build/scripts/make_element_lookup_trie.py
index 7596ef9..8ae7e676e 100755
--- a/third_party/blink/renderer/build/scripts/make_element_lookup_trie.py
+++ b/third_party/blink/renderer/build/scripts/make_element_lookup_trie.py
@@ -56,11 +56,13 @@
         'namespaceURI': '',
     }
     filters = {
-        'symbol': lambda symbol: 'k' + NameStyleConverter(symbol).to_upper_camel_case()
+        'symbol':
+        lambda symbol: 'k' + NameStyleConverter(symbol).to_upper_camel_case()
     }
 
     def __init__(self, json5_file_paths, output_dir):
-        super(ElementLookupTrieWriter, self).__init__(json5_file_paths, output_dir)
+        super(ElementLookupTrieWriter, self).__init__(json5_file_paths,
+                                                      output_dir)
         self._tags = {}
         for entry in self.json5_file.name_dictionaries:
             self._tags[entry['name'].original] = entry['name'].original
@@ -78,7 +80,8 @@
             'namespace': self._namespace,
         }
 
-    @template_expander.use_jinja('templates/element_lookup_trie.cc.tmpl', filters=filters)
+    @template_expander.use_jinja(
+        'templates/element_lookup_trie.cc.tmpl', filters=filters)
     def generate_implementation(self):
         return {
             'input_files': self._input_files,
diff --git a/third_party/blink/renderer/build/scripts/make_element_type_helpers.py b/third_party/blink/renderer/build/scripts/make_element_type_helpers.py
index 057a1be1..29a43f31 100755
--- a/third_party/blink/renderer/build/scripts/make_element_type_helpers.py
+++ b/third_party/blink/renderer/build/scripts/make_element_type_helpers.py
@@ -12,6 +12,7 @@
 
 from blinkbuild.name_style_converter import NameStyleConverter
 
+
 def _symbol(tag):
     return 'k' + tag['name'].to_upper_camel_case()
 
@@ -43,10 +44,12 @@
     }
 
     def __init__(self, json5_file_path, output_dir):
-        super(MakeElementTypeHelpersWriter, self).__init__(json5_file_path, output_dir)
+        super(MakeElementTypeHelpersWriter, self).__init__(
+            json5_file_path, output_dir)
 
         self.namespace = self.json5_file.metadata['namespace'].strip('"')
-        self.fallback_interface = self.json5_file.metadata['fallbackInterfaceName'].strip('"')
+        self.fallback_interface = self.json5_file.metadata[
+            'fallbackInterfaceName'].strip('"')
 
         assert self.namespace, 'A namespace is required.'
 
@@ -57,7 +60,8 @@
         }
 
         base_element_header = 'third_party/blink/renderer/core/{}/{}_element.h'.format(
-            self.namespace.lower(), NameStyleConverter(self.namespace).to_snake_case())
+            self.namespace.lower(),
+            NameStyleConverter(self.namespace).to_snake_case())
         self._template_context = {
             'base_element_header': base_element_header,
             'cpp_namespace': self.namespace.lower() + '_names',
@@ -79,13 +83,17 @@
             elements.add(tag['js_interface'])
 
         for tag in tags:
-            tag['multipleTagNames'] = (interface_counts[tag['interface']] > 1 or tag['interface'] == self.fallback_interface)
+            tag['multipleTagNames'] = (
+                interface_counts[tag['interface']] > 1
+                or tag['interface'] == self.fallback_interface)
 
-    @template_expander.use_jinja("templates/element_type_helpers.h.tmpl", filters=filters)
+    @template_expander.use_jinja(
+        "templates/element_type_helpers.h.tmpl", filters=filters)
     def generate_helper_header(self):
         return self._template_context
 
-    @template_expander.use_jinja("templates/element_type_helpers.cc.tmpl", filters=filters)
+    @template_expander.use_jinja(
+        "templates/element_type_helpers.cc.tmpl", filters=filters)
     def generate_helper_implementation(self):
         return self._template_context
 
@@ -98,5 +106,6 @@
             name = 'Html'
         return '%s%sElement' % (self.namespace, name)
 
+
 if __name__ == "__main__":
     json5_generator.Maker(MakeElementTypeHelpersWriter).main()
diff --git a/third_party/blink/renderer/build/scripts/make_event_factory.py b/third_party/blink/renderer/build/scripts/make_event_factory.py
index b102fb44..375a3b5 100755
--- a/third_party/blink/renderer/build/scripts/make_event_factory.py
+++ b/third_party/blink/renderer/build/scripts/make_event_factory.py
@@ -41,15 +41,10 @@
 #
 # https://dom.spec.whatwg.org/#dom-document-createevent
 def create_event_ignore_case_list(name):
-    return (name == 'HTMLEvents'
-            or name == 'Event'
-            or name == 'Events'
-            or name.startswith('UIEvent')
-            or name.startswith('CustomEvent')
-            or name == 'KeyboardEvent'
-            or name == 'MessageEvent'
-            or name.startswith('MouseEvent')
-            or name == 'TouchEvent')
+    return (name == 'HTMLEvents' or name == 'Event' or name == 'Events'
+            or name.startswith('UIEvent') or name.startswith('CustomEvent')
+            or name == 'KeyboardEvent' or name == 'MessageEvent'
+            or name.startswith('MouseEvent') or name == 'TouchEvent')
 
 
 # All events on the following list are matched case-insensitively in createEvent
@@ -59,28 +54,17 @@
 # to the spec and moved to the above list (causing them to be matched
 # case-insensitively) or be deprecated/removed.
 def create_event_ignore_case_and_measure_list(name):
-    return (name == 'AnimationEvent'
-            or name == 'BeforeUnloadEvent'
-            or name == 'CloseEvent'
-            or name == 'CompositionEvent'
-            or name == 'DeviceMotionEvent'
-            or name == 'DeviceOrientationEvent'
-            or name == 'DragEvent'
-            or name == 'ErrorEvent'
-            or name == 'FocusEvent'
-            or name == 'HashChangeEvent'
-            or name == 'IDBVersionChangeEvent'
-            or name == 'KeyboardEvents'
-            or name == 'MutationEvent'
-            or name == 'MutationEvents'
-            or name == 'PageTransitionEvent'
-            or name == 'PopStateEvent'
-            or name == 'StorageEvent'
-            or name == 'SVGEvents'
-            or name == 'TextEvent'
-            or name == 'TrackEvent'
-            or name == 'TransitionEvent'
-            or name == 'WebGLContextEvent'
+    return (name == 'AnimationEvent' or name == 'BeforeUnloadEvent'
+            or name == 'CloseEvent' or name == 'CompositionEvent'
+            or name == 'DeviceMotionEvent' or name == 'DeviceOrientationEvent'
+            or name == 'DragEvent' or name == 'ErrorEvent'
+            or name == 'FocusEvent' or name == 'HashChangeEvent'
+            or name == 'IDBVersionChangeEvent' or name == 'KeyboardEvents'
+            or name == 'MutationEvent' or name == 'MutationEvents'
+            or name == 'PageTransitionEvent' or name == 'PopStateEvent'
+            or name == 'StorageEvent' or name == 'SVGEvents'
+            or name == 'TextEvent' or name == 'TrackEvent'
+            or name == 'TransitionEvent' or name == 'WebGLContextEvent'
             or name == 'WheelEvent')
 
 
@@ -100,21 +84,28 @@
         'suffix': '',
     }
     filters = {
-        'cpp_name': name_utilities.cpp_name,
-        'name': lambda entry: entry['name'].original,
-        'create_event_ignore_case_list': create_event_ignore_case_list,
-        'create_event_ignore_case_and_measure_list': create_event_ignore_case_and_measure_list,
-        'measure_name': measure_name,
+        'cpp_name':
+        name_utilities.cpp_name,
+        'name':
+        lambda entry: entry['name'].original,
+        'create_event_ignore_case_list':
+        create_event_ignore_case_list,
+        'create_event_ignore_case_and_measure_list':
+        create_event_ignore_case_and_measure_list,
+        'measure_name':
+        measure_name,
     }
 
     def __init__(self, json5_file_path, output_dir):
         super(EventFactoryWriter, self).__init__(json5_file_path, output_dir)
         self.namespace = self.json5_file.metadata['namespace'].strip('"')
-        assert self.namespace == 'event_interface_names', 'namespace field should be "event_interface_names".'
+        assert self.namespace == 'event_interface_names', \
+            'namespace field should be "event_interface_names".'
         self.suffix = self.json5_file.metadata['suffix'].strip('"')
         snake_suffix = (self.suffix.lower() + '_') if self.suffix else ''
         self._outputs = {
-            ('event_%sfactory.cc' % snake_suffix): self.generate_implementation,
+            ('event_%sfactory.cc' % snake_suffix):
+            self.generate_implementation,
         }
 
     def _fatal(self, message):
@@ -125,7 +116,8 @@
         path = entry['interfaceHeaderDir']
         if len(path):
             path += '/'
-        return path + self.get_file_basename(name_utilities.cpp_name(entry)) + '.h'
+        return path + self.get_file_basename(
+            name_utilities.cpp_name(entry)) + '.h'
 
     def _headers_header_includes(self, entries):
         includes = dict()
@@ -137,14 +129,18 @@
             includes[cpp_name] = self._headers_header_include_path(entry)
         return sorted(includes.values())
 
-    @template_expander.use_jinja('templates/event_factory.cc.tmpl', filters=filters)
+    @template_expander.use_jinja(
+        'templates/event_factory.cc.tmpl', filters=filters)
     def generate_implementation(self):
         return {
-            'include_header_paths': self._headers_header_includes(
-                self.json5_file.name_dictionaries),
-            'input_files': self._input_files,
-            'suffix': self.suffix,
-            'events': self.json5_file.name_dictionaries,
+            'include_header_paths':
+            self._headers_header_includes(self.json5_file.name_dictionaries),
+            'input_files':
+            self._input_files,
+            'suffix':
+            self.suffix,
+            'events':
+            self.json5_file.name_dictionaries,
         }
 
 
diff --git a/third_party/blink/renderer/build/scripts/make_feature_policy_helper.py b/third_party/blink/renderer/build/scripts/make_feature_policy_helper.py
index 16e5783..caa85e5 100644
--- a/third_party/blink/renderer/build/scripts/make_feature_policy_helper.py
+++ b/third_party/blink/renderer/build/scripts/make_feature_policy_helper.py
@@ -12,12 +12,15 @@
     file_basename = 'feature_policy_helper'
 
     def __init__(self, json5_file_path, output_dir):
-        super(FeaturePolicyFeatureWriter, self).__init__(json5_file_path, output_dir)
+        super(FeaturePolicyFeatureWriter, self).__init__(
+            json5_file_path, output_dir)
         runtime_features = []
         feature_policy_features = []
-        # Note: there can be feature with same 'name' attribute in document_policy_features
-        # and in feature_policy_features. They are supposed to have the same 'depends_on' attribute.
-        # However, their feature_policy_name and document_policy_name might be different.
+        # Note: there can be feature with same 'name' attribute in
+        # document_policy_features and in feature_policy_features.
+        # They are supposed to have the same 'depends_on' attribute.
+        # However, their feature_policy_name and document_policy_name
+        # might be different.
         document_policy_features = []
 
         for feature in self.json5_file.name_dictionaries:
@@ -37,26 +40,38 @@
             for dependency in feature['depends_on']:
                 if str(dependency) in origin_trials_set:
                     if feature['feature_policy_name']:
-                        fp_origin_trial_dependency_map[feature['name']].append(dependency)
+                        fp_origin_trial_dependency_map[feature['name']].append(
+                            dependency)
                     else:
-                        dp_origin_trial_dependency_map[feature['name']].append(dependency)
+                        dp_origin_trial_dependency_map[feature['name']].append(
+                            dependency)
                 else:
                     if feature['feature_policy_name']:
-                        runtime_to_feature_policy_map[dependency].append(feature['name'])
+                        runtime_to_feature_policy_map[dependency].append(
+                            feature['name'])
                     else:
-                        runtime_to_document_policy_map[dependency].append(feature['name'])
+                        runtime_to_document_policy_map[dependency].append(
+                            feature['name'])
 
         self._outputs = {
-            self.file_basename + '.cc': template_expander.use_jinja('templates/' + self.file_basename + '.cc.tmpl')(lambda: {
-                'header_guard': self.make_header_guard(self._relative_output_dir + self.file_basename + '.h'),
-                'input_files': self._input_files,
-                'feature_policy_features': feature_policy_features,
-                'document_policy_features': document_policy_features,
-                'fp_origin_trial_dependency_map': fp_origin_trial_dependency_map,
-                'dp_origin_trial_dependency_map': dp_origin_trial_dependency_map,
-                'runtime_to_feature_policy_map': runtime_to_feature_policy_map,
-                'runtime_to_document_policy_map': runtime_to_document_policy_map
-            }),
+            self.file_basename + '.cc':
+                template_expander.use_jinja('templates/' +
+                    self.file_basename + '.cc.tmpl')(lambda: {
+                        'header_guard': self.make_header_guard(
+                            self._relative_output_dir +
+                            self.file_basename + '.h'),
+                        'input_files': self._input_files,
+                        'feature_policy_features': feature_policy_features,
+                        'document_policy_features': document_policy_features,
+                        'fp_origin_trial_dependency_map':
+                        fp_origin_trial_dependency_map,
+                        'dp_origin_trial_dependency_map':
+                        dp_origin_trial_dependency_map,
+                        'runtime_to_feature_policy_map':
+                        runtime_to_feature_policy_map,
+                        'runtime_to_document_policy_map':
+                        runtime_to_document_policy_map
+                    }),
         }
 
 
diff --git a/third_party/blink/renderer/build/scripts/make_html_entity_table.py b/third_party/blink/renderer/build/scripts/make_html_entity_table.py
index 6d52be70..f02bb2a 100755
--- a/third_party/blink/renderer/build/scripts/make_html_entity_table.py
+++ b/third_party/blink/renderer/build/scripts/make_html_entity_table.py
@@ -26,7 +26,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """This python script creates the raw data that is our entity
 database. The representation is one string database containing all
 strings we could need, and then a mapping from offset+length -> entity
@@ -55,16 +54,20 @@
 def check_ascii(entity_string):
     for ch in entity_string:
         code = ord(ch)
-        assert 0 <= code <= 127, (ch + " is not ASCII. Need to change type " +
-                                  "of storage from LChar to UChar to support " +
-                                  "this entity.")
+        assert 0 <= code <= 127, (
+            ch + " is not ASCII. Need to change type " +
+            "of storage from LChar to UChar to support " + "this entity.")
 
 
 def main():
     program_name = os.path.basename(__file__)
     if len(sys.argv) < 4 or sys.argv[1] != "-o":
-        # Python 3, change to: print("Usage: %s -o OUTPUT_FILE INPUT_FILE" % program_name, file=sys.stderr)
-        sys.stderr.write("Usage: %s -o OUTPUT_FILE INPUT_FILE\n" % program_name)
+        # Python 3, change to:
+        # print(
+        #     "Usage: %s -o OUTPUT_FILE INPUT_FILE" % program_name,
+        #     file=sys.stderr)
+        sys.stderr.write(
+            "Usage: %s -o OUTPUT_FILE INPUT_FILE\n" % program_name)
         exit(1)
 
     output_path = sys.argv[2]
@@ -153,7 +156,8 @@
             all_data += data_to_add
             output_file.write("'")
             entity_offset += len(data_to_add)
-        assert len(entry) == 2, "We will use slot [2] in the list for the offset."
+        assert len(
+            entry) == 2, "We will use slot [2] in the list for the offset."
         assert this_offset < 32768  # Stored in a 16 bit short.
         entry.append(this_offset)
 
@@ -166,7 +170,8 @@
             index[starting_letter] = offset
 
     output_file.write("""
-static const HTMLEntityTableEntry staticEntityTable[%s] = {\n""" % entity_count)
+static const HTMLEntityTableEntry staticEntityTable[%s] = {\n""" %
+                      entity_count)
 
     for entry in entries:
         values = entry[VALUE].split(' ')
@@ -233,5 +238,6 @@
 }
 """ % entity_count)
 
+
 if __name__ == "__main__":
     main()
diff --git a/third_party/blink/renderer/build/scripts/make_instrumenting_probes.py b/third_party/blink/renderer/build/scripts/make_instrumenting_probes.py
index 44431a1..1b43f57 100644
--- a/third_party/blink/renderer/build/scripts/make_instrumenting_probes.py
+++ b/third_party/blink/renderer/build/scripts/make_instrumenting_probes.py
@@ -18,7 +18,8 @@
 # is regenerated, which causes a race condition and breaks concurrent build,
 # since some compile processes will try to read the partially written cache.
 _MODULE_PATH, _ = os.path.split(os.path.realpath(__file__))
-_THIRD_PARTY_DIR = os.path.normpath(os.path.join(_MODULE_PATH, os.pardir, os.pardir, os.pardir, os.pardir))
+_THIRD_PARTY_DIR = os.path.normpath(
+    os.path.join(_MODULE_PATH, os.pardir, os.pardir, os.pardir, os.pardir))
 # jinja2 is in chromium's third_party directory.
 # Insert at 1 so at front to override system libraries, and
 # after path[0] == invoking script dir
@@ -57,16 +58,22 @@
 def agent_name_to_class(config, agent_name):
     return agent_config(config, agent_name, "class") or agent_name
 
+
 def agent_name_to_include(config, agent_name):
-    include_path = agent_config(config, agent_name, "include_path") or config["settings"]["include_path"]
+    include_path = agent_config(
+        config, agent_name,
+        "include_path") or config["settings"]["include_path"]
     agent_class = agent_name_to_class(config, agent_name)
-    include_file = os.path.join(include_path, NameStyleConverter(agent_class).to_snake_case() + ".h")
+    include_file = os.path.join(
+        include_path,
+        NameStyleConverter(agent_class).to_snake_case() + ".h")
     return include_file.replace("dev_tools", "devtools")
 
 
 def initialize_jinja_env(config, cache_dir):
     jinja_env = jinja2.Environment(
-        loader=jinja2.FileSystemLoader(os.path.join(_MODULE_PATH, "templates")),
+        loader=jinja2.FileSystemLoader(
+            os.path.join(_MODULE_PATH, "templates")),
         # Bytecode cache is not concurrency-safe unless pre-cached:
         # if pre-cached this is read-only, but writing creates a race condition.
         bytecode_cache=jinja2.FileSystemBytecodeCache(cache_dir),
@@ -74,10 +81,15 @@
         lstrip_blocks=True,  # so can indent control flow tags
         trim_blocks=True)
     jinja_env.filters.update({
-        "to_snake_case": to_snake_case,
-        "to_singular": to_singular,
-        "agent_name_to_class": partial(agent_name_to_class, config),
-        "agent_name_to_include": partial(agent_name_to_include, config)})
+        "to_snake_case":
+        to_snake_case,
+        "to_singular":
+        to_singular,
+        "agent_name_to_class":
+        partial(agent_name_to_class, config),
+        "agent_name_to_include":
+        partial(agent_name_to_include, config)
+    })
     jinja_env.add_extension('jinja2.ext.loopcontrols')
     return jinja_env
 
@@ -91,12 +103,15 @@
 
 def load_model_from_idl(source):
     source = re.sub(r"//.*", "", source)  # Remove line comments
-    source = re.sub(r"/\*(.|\n)*?\*/", "", source, re.MULTILINE)  # Remove block comments
-    source = re.sub(r"\]\s*?\n\s*", "] ", source)  # Merge the method annotation with the next line
+    # Remove block comments
+    source = re.sub(r"/\*(.|\n)*?\*/", "", source, re.MULTILINE)
+    # Merge the method annotation with the next line
+    source = re.sub(r"\]\s*?\n\s*", "] ", source)
     source = source.strip()
     model = []
     while len(source):
-        match, source = match_and_consume(r"interface\s(\w*)\s?\{([^\{]*)\}", source)
+        match, source = match_and_consume(r"interface\s(\w*)\s?\{([^\{]*)\}",
+                                          source)
         if not match:
             sys.stderr.write("Cannot parse %s\n" % source[:100])
             sys.exit(1)
@@ -133,8 +148,11 @@
         if not self.is_scoped and match.group(1) != "void":
             raise Exception("Instant probe must return void: %s" % self.name)
 
-        # Splitting parameters by a comma, assuming that attribute lists contain no more than one attribute.
-        self.params = list(map(Parameter, map(str.strip, match.group(3).split(","))))
+        # Splitting parameters by a comma, assuming that attribute
+        # lists contain no more than one attribute.
+        self.params = list(
+            map(Parameter, map(str.strip,
+                               match.group(3).split(","))))
 
 
 class Parameter(object):
@@ -148,7 +166,8 @@
         self.default_value = parts[1] if len(parts) != 1 else None
 
         param_decl = parts[0]
-        min_type_tokens = 2 if re.match("(const|unsigned long) ", param_decl) else 1
+        min_type_tokens = 2 if re.match("(const|unsigned long) ",
+                                        param_decl) else 1
 
         if len(param_decl.split(" ")) > min_type_tokens:
             parts = param_decl.split(" ")
@@ -165,14 +184,13 @@
 
 
 def build_param_name(param_type):
-    return "param_" + NameStyleConverter(re.match(r"(const |scoped_refptr<)?(\w*)", param_type).group(2)).to_snake_case()
+    return "param_" + NameStyleConverter(
+        re.match(r"(const |scoped_refptr<)?(\w*)",
+                 param_type).group(2)).to_snake_case()
 
 
 def load_config(file_name):
-    default_config = {
-        "settings": {},
-        "observers": {}
-    }
+    default_config = {"settings": {}, "observers": {}}
     if not file_name:
         return default_config
     with open(file_name) as config_file:
@@ -184,7 +202,8 @@
     for f in files:
         probes = set([probe.name for probe in f.declarations])
         if all_pidl_probes & probes:
-            raise Exception("Multiple probe declarations: %s" % all_pidl_probes & probes)
+            raise Exception(
+                "Multiple probe declarations: %s" % all_pidl_probes & probes)
         all_pidl_probes |= probes
 
     all_observers = set()
@@ -196,7 +215,8 @@
         for probe in observer["probes"]:
             unused_probes.discard(probe)
             if probe not in all_pidl_probes:
-                raise Exception('Probe %s is not declared in PIDL file' % probe)
+                raise Exception(
+                    'Probe %s is not declared in PIDL file' % probe)
             observers_by_probe.setdefault(probe, set()).add(observer_name)
     if unused_probes:
         raise Exception("Unused probes: %s" % unused_probes)
@@ -215,7 +235,8 @@
     try:
         arg_options, arg_values = cmdline_parser.parse_args()
         if len(arg_values) != 1:
-            raise ValueError("Exactly one plain argument expected (found %s)" % len(arg_values))
+            raise ValueError("Exactly one plain argument expected (found %s)" %
+                             len(arg_values))
         input_path = arg_values[0]
         output_dirpath = arg_options.output_dir
         if not output_dirpath:
@@ -224,7 +245,8 @@
     except ValueError:
         # Work with python 2 and 3 http://docs.python.org/py3k/howto/pyporting.html
         exc = sys.exc_info()[1]
-        sys.stderr.write("Failed to parse command-line arguments: %s\n\n" % exc)
+        sys.stderr.write(
+            "Failed to parse command-line arguments: %s\n\n" % exc)
         sys.stderr.write("Usage: <script> [options] <probes.pidl>\n")
         sys.stderr.write("Options:\n")
         sys.stderr.write("\t--config <config_file.json5>\n")
@@ -233,7 +255,8 @@
 
     match = re.search(r"\bgen[\\/]", output_dirpath)
     if match:
-        output_path_in_gen_dir = output_dirpath[match.end():].replace(os.path.sep, '/') + '/'
+        output_path_in_gen_dir = output_dirpath[match.end():].replace(
+            os.path.sep, '/') + '/'
     else:
         output_path_in_gen_dir = ''
 
@@ -249,7 +272,8 @@
         "files": files,
         "agents": build_observers(config, files),
         "config": config,
-        "method_name": lambda name: NameStyleConverter(name).to_function_name(),
+        "method_name":
+        lambda name: NameStyleConverter(name).to_function_name(),
         "name": NameStyleConverter(base_name).to_upper_camel_case(),
         "header": base_name,
         "input_files": [os.path.basename(input_path)],
@@ -266,18 +290,21 @@
     sink_h_template = jinja_env.get_template(template_context["template_file"])
     sink_h_file_name = to_singular(base_name) + "_sink.h"
     sink_h_file = open(output_dirpath + "/" + sink_h_file_name, "w")
-    template_context["header_guard"] = NameStyleConverter(output_path_in_gen_dir + "/" + sink_h_file_name).to_header_guard()
+    template_context["header_guard"] = NameStyleConverter(
+        output_path_in_gen_dir + "/" + sink_h_file_name).to_header_guard()
     sink_h_file.write(sink_h_template.render(template_context))
     sink_h_file.close()
 
     for f in files:
         template_context["file"] = f
         template_context["template_file"] = "/instrumenting_probes_inl.h.tmpl"
-        template_context["header_guard"] = NameStyleConverter(output_path_in_gen_dir + "/" + f.header_name).to_header_guard()
+        template_context["header_guard"] = NameStyleConverter(
+            output_path_in_gen_dir + "/" + f.header_name).to_header_guard()
         h_template = jinja_env.get_template(template_context["template_file"])
         h_file = open(output_dirpath + "/" + f.header_name, "w")
         h_file.write(h_template.render(template_context))
         h_file.close()
 
+
 if __name__ == "__main__":
     main()
diff --git a/third_party/blink/renderer/build/scripts/make_internal_runtime_flags.py b/third_party/blink/renderer/build/scripts/make_internal_runtime_flags.py
index 8b7413f..70516c6e 100755
--- a/third_party/blink/renderer/build/scripts/make_internal_runtime_flags.py
+++ b/third_party/blink/renderer/build/scripts/make_internal_runtime_flags.py
@@ -38,12 +38,14 @@
 
 # We want exactly the same parsing as RuntimeFeatureWriter
 # but generate different files.
-class InternalRuntimeFlagsWriter(make_runtime_features.BaseRuntimeFeatureWriter):
+class InternalRuntimeFlagsWriter(
+        make_runtime_features.BaseRuntimeFeatureWriter):
     class_name = 'InternalRuntimeFlags'
     file_basename = 'internal_runtime_flags'
 
     def __init__(self, json5_file_path, output_dir):
-        super(InternalRuntimeFlagsWriter, self).__init__(json5_file_path, output_dir)
+        super(InternalRuntimeFlagsWriter, self).__init__(
+            json5_file_path, output_dir)
         self._outputs = {
             'internal_runtime_flags.idl': self.generate_idl,
             'internal_runtime_flags.h': self.generate_header,
diff --git a/third_party/blink/renderer/build/scripts/make_internal_settings.py b/third_party/blink/renderer/build/scripts/make_internal_settings.py
index 8d12f653..148fe6d 100755
--- a/third_party/blink/renderer/build/scripts/make_internal_settings.py
+++ b/third_party/blink/renderer/build/scripts/make_internal_settings.py
@@ -43,9 +43,11 @@
     _FILE_BASENAME = 'internal_settings_generated'
 
     def __init__(self, json5_file_path, output_dir):
-        super(MakeInternalSettingsWriter, self).__init__(json5_file_path, output_dir)
+        super(MakeInternalSettingsWriter, self).__init__(
+            json5_file_path, output_dir)
 
-        self.json5_file.name_dictionaries.sort(key=lambda entry: entry['name'].original)
+        self.json5_file.name_dictionaries.sort(
+            key=lambda entry: entry['name'].original)
 
         self._outputs = {
             (self._FILE_BASENAME + '.h'): self.generate_header,
@@ -53,21 +55,29 @@
             (self._FILE_BASENAME + '.idl'): self.generate_idl,
         }
         self._template_context = {
-            'input_files': self._input_files,
-            'primary_header_name': 'internal_settings_generated.h',
-            'settings': self.json5_file.name_dictionaries,
-            'header_guard': self.make_header_guard(self._relative_output_dir + self._FILE_BASENAME + '.h')
+            'input_files':
+            self._input_files,
+            'primary_header_name':
+            'internal_settings_generated.h',
+            'settings':
+            self.json5_file.name_dictionaries,
+            'header_guard':
+            self.make_header_guard(self._relative_output_dir +
+                                   self._FILE_BASENAME + '.h')
         }
 
-    @template_expander.use_jinja('templates/internal_settings_generated.h.tmpl', filters=filters)
+    @template_expander.use_jinja(
+        'templates/internal_settings_generated.h.tmpl', filters=filters)
     def generate_header(self):
         return self._template_context
 
-    @template_expander.use_jinja('templates/internal_settings_generated.cc.tmpl', filters=filters)
+    @template_expander.use_jinja(
+        'templates/internal_settings_generated.cc.tmpl', filters=filters)
     def generate_implementation(self):
         return self._template_context
 
-    @template_expander.use_jinja('templates/internal_settings_generated.idl.tmpl', filters=filters)
+    @template_expander.use_jinja(
+        'templates/internal_settings_generated.idl.tmpl', filters=filters)
     def generate_idl(self):
         return self._template_context
 
diff --git a/third_party/blink/renderer/build/scripts/make_names.py b/third_party/blink/renderer/build/scripts/make_names.py
index 7f0c730..39c5db7 100755
--- a/third_party/blink/renderer/build/scripts/make_names.py
+++ b/third_party/blink/renderer/build/scripts/make_names.py
@@ -48,7 +48,8 @@
         'ImplementedAs': {},
         # This is not used in make_names,py, but used in make_event_factory.py.
         'interfaceHeaderDir': {},
-        'RuntimeEnabled': {},  # What should we do for runtime-enabled features?
+        # What should we do for runtime-enabled features?
+        'RuntimeEnabled': {},
         'Symbol': {},
     }
     default_metadata = {
@@ -100,11 +101,13 @@
             'this_include_path': qualified_header,
         }
 
-    @template_expander.use_jinja("templates/make_names.h.tmpl", filters=filters)
+    @template_expander.use_jinja(
+        "templates/make_names.h.tmpl", filters=filters)
     def generate_header(self):
         return self._template_context
 
-    @template_expander.use_jinja("templates/make_names.cc.tmpl", filters=filters)
+    @template_expander.use_jinja(
+        "templates/make_names.cc.tmpl", filters=filters)
     def generate_implementation(self):
         return self._template_context
 
diff --git a/third_party/blink/renderer/build/scripts/make_origin_trials.py b/third_party/blink/renderer/build/scripts/make_origin_trials.py
index e474bb7..4c00e4d8 100755
--- a/third_party/blink/renderer/build/scripts/make_origin_trials.py
+++ b/third_party/blink/renderer/build/scripts/make_origin_trials.py
@@ -56,15 +56,16 @@
     def _make_implied_mappings(self):
         # Set up the implied_by relationships between trials.
         implied_mappings = dict()
-        for implied_feature in (
-                feature for feature in self._origin_trial_features
-                if feature['origin_trial_feature_name'] and feature['implied_by']):
+        for implied_feature in (feature
+                                for feature in self._origin_trial_features
+                                if feature['origin_trial_feature_name']
+                                and feature['implied_by']):
             # An origin trial can only be implied by other features that also
             # have a trial defined.
             implied_by_trials = []
             for implied_by_name in implied_feature['implied_by']:
-                if any(implied_by_name == feature['name'].original and
-                       feature['origin_trial_feature_name']
+                if any(implied_by_name == feature['name'].original
+                       and feature['origin_trial_feature_name']
                        for feature in self._origin_trial_features):
 
                     implied_by_trials.append(implied_by_name)
@@ -84,8 +85,10 @@
 
     def _make_trial_to_features_map(self):
         trial_feature_mappings = {}
-        for feature in [feature for feature in self._origin_trial_features
-                        if feature['origin_trial_feature_name']]:
+        for feature in [
+                feature for feature in self._origin_trial_features
+                if feature['origin_trial_feature_name']
+        ]:
             trial_name = feature['origin_trial_feature_name']
             if trial_name in trial_feature_mappings:
                 trial_feature_mappings[trial_name].append(feature)
@@ -96,11 +99,15 @@
     def _set_trial_types(self):
         for feature in self._origin_trial_features:
             trial_type = feature['origin_trial_type']
-            if feature['origin_trial_allows_insecure'] and trial_type != 'deprecation':
+            if feature[
+                    'origin_trial_allows_insecure'] and trial_type != 'deprecation':
                 raise Exception('Origin trial must have type deprecation to '
-                                'specify origin_trial_allows_insecure: %s' % feature['name'])
+                                'specify origin_trial_allows_insecure: %s' %
+                                feature['name'])
             if trial_type:
-                feature['origin_trial_type'] = name_utilities._upper_camel_case(trial_type)
+                feature[
+                    'origin_trial_type'] = name_utilities._upper_camel_case(
+                        trial_type)
 
     @template_expander.use_jinja('templates/' + file_basename + '.cc.tmpl')
     def generate_implementation(self):
diff --git a/third_party/blink/renderer/build/scripts/make_qualified_names.py b/third_party/blink/renderer/build/scripts/make_qualified_names.py
index 1b3bdaa..f8ad7caf 100755
--- a/third_party/blink/renderer/build/scripts/make_qualified_names.py
+++ b/third_party/blink/renderer/build/scripts/make_qualified_names.py
@@ -60,7 +60,9 @@
     def __init__(self, json5_file_paths, output_dir):
         super(MakeQualifiedNamesWriter, self).__init__(None, output_dir)
         self._input_files = copy.copy(json5_file_paths)
-        assert len(json5_file_paths) <= 3, 'MakeQualifiedNamesWriter requires at most 3 in files, got %d.' % len(json5_file_paths)
+        assert (len(json5_file_paths) <= 3, \
+            'MakeQualifiedNamesWriter requires at most 3 in files, got %d.' %
+            len(json5_file_paths))
 
         # Input files are in a strict order with more optional files *first*:
         # 1) ARIA properties
@@ -75,52 +77,75 @@
 
         if len(json5_file_paths) >= 2:
             tags_json5_filename = json5_file_paths.pop(0)
-            self.tags_json5_file = Json5File.load_from_files([tags_json5_filename], self.default_metadata, self.default_parameters)
+            self.tags_json5_file = Json5File.load_from_files(
+                [tags_json5_filename], self.default_metadata,
+                self.default_parameters)
         else:
             self.tags_json5_file = None
 
-        self.attrs_json5_file = Json5File.load_from_files([json5_file_paths.pop()], self.default_metadata, self.default_parameters)
+        self.attrs_json5_file = Json5File.load_from_files(
+            [json5_file_paths.pop()], self.default_metadata,
+            self.default_parameters)
 
         if self.aria_reader is not None:
-            self.attrs_json5_file.merge_from(self.aria_reader.attributes_list())
+            self.attrs_json5_file.merge_from(
+                self.aria_reader.attributes_list())
 
         self.namespace = self._metadata('namespace')
         cpp_namespace = self.namespace.lower() + '_names'
         namespace_prefix = self._metadata('namespacePrefix') or 'k'
 
         namespace_uri = self._metadata('namespaceURI')
-        use_namespace_for_attrs = self.attrs_json5_file.metadata['attrsNullNamespace'] is None
+        use_namespace_for_attrs = self.attrs_json5_file.metadata[
+            'attrsNullNamespace'] is None
 
         self._outputs = {
             (self.namespace.lower() + "_names.h"): self.generate_header,
-            (self.namespace.lower() + "_names.cc"): self.generate_implementation,
+            (self.namespace.lower() + "_names.cc"):
+            self.generate_implementation,
         }
-        qualified_header = self._relative_output_dir + self.namespace.lower() + '_names.h'
+        qualified_header = self._relative_output_dir + self.namespace.lower(
+        ) + '_names.h'
         self._template_context = {
-            'attrs': self.attrs_json5_file.name_dictionaries,
-            'cpp_namespace': cpp_namespace,
-            'export': self._metadata('export'),
-            'header_guard': self.make_header_guard(qualified_header),
-            'input_files': self._input_files,
-            'namespace': self.namespace,
-            'namespace_prefix': namespace_prefix,
-            'namespace_uri': namespace_uri,
-            'tags': self.tags_json5_file.name_dictionaries if self.tags_json5_file else [],
-            'this_include_path': qualified_header,
-            'use_namespace_for_attrs': use_namespace_for_attrs,
+            'attrs':
+            self.attrs_json5_file.name_dictionaries,
+            'cpp_namespace':
+            cpp_namespace,
+            'export':
+            self._metadata('export'),
+            'header_guard':
+            self.make_header_guard(qualified_header),
+            'input_files':
+            self._input_files,
+            'namespace':
+            self.namespace,
+            'namespace_prefix':
+            namespace_prefix,
+            'namespace_uri':
+            namespace_uri,
+            'tags':
+            self.tags_json5_file.name_dictionaries
+            if self.tags_json5_file else [],
+            'this_include_path':
+            qualified_header,
+            'use_namespace_for_attrs':
+            use_namespace_for_attrs,
         }
 
     def _metadata(self, name):
         metadata = self.attrs_json5_file.metadata[name].strip('"')
         if self.tags_json5_file:
-            assert metadata == self.tags_json5_file.metadata[name].strip('"'), 'Both files must have the same %s.' % name
+            assert metadata == self.tags_json5_file.metadata[name].strip(
+                '"'), 'Both files must have the same %s.' % name
         return metadata
 
-    @template_expander.use_jinja('templates/make_qualified_names.h.tmpl', filters=filters)
+    @template_expander.use_jinja(
+        'templates/make_qualified_names.h.tmpl', filters=filters)
     def generate_header(self):
         return self._template_context
 
-    @template_expander.use_jinja('templates/make_qualified_names.cc.tmpl', filters=filters)
+    @template_expander.use_jinja(
+        'templates/make_qualified_names.cc.tmpl', filters=filters)
     def generate_implementation(self):
         return self._template_context
 
diff --git a/third_party/blink/renderer/build/scripts/make_runtime_features.py b/third_party/blink/renderer/build/scripts/make_runtime_features.py
index d2027e9..1f0e9896 100755
--- a/third_party/blink/renderer/build/scripts/make_runtime_features.py
+++ b/third_party/blink/renderer/build/scripts/make_runtime_features.py
@@ -47,7 +47,8 @@
     file_basename = None
 
     def __init__(self, json5_file_path, output_dir):
-        super(BaseRuntimeFeatureWriter, self).__init__(json5_file_path, output_dir)
+        super(BaseRuntimeFeatureWriter, self).__init__(json5_file_path,
+                                                       output_dir)
         # Subclasses should add generated output files and their contents to this dict.
         self._outputs = {}
         assert self.file_basename
@@ -57,30 +58,43 @@
 
         # Make sure the resulting dictionaries have all the keys we expect.
         for feature in self._features:
-            feature['in_origin_trial'] = str(feature['name']) in origin_trial_set
-            feature['data_member_name'] = self._data_member_name(feature['name'])
+            feature['in_origin_trial'] = str(
+                feature['name']) in origin_trial_set
+            feature['data_member_name'] = self._data_member_name(
+                feature['name'])
             # Most features just check their is_foo_enabled_ bool
             # but some depend on or are implied by other bools.
             enabled_condition = feature['data_member_name']
-            assert not feature['implied_by'] or not feature['depends_on'], 'Only one of implied_by and depends_on is allowed'
+            assert not feature['implied_by'] or not feature[
+                'depends_on'], 'Only one of implied_by and depends_on is allowed'
             for implied_by_name in feature['implied_by']:
-                enabled_condition += ' || ' + self._data_member_name(implied_by_name)
+                enabled_condition += ' || ' + self._data_member_name(
+                    implied_by_name)
             for dependant_name in feature['depends_on']:
-                enabled_condition += ' && ' + self._data_member_name(dependant_name)
+                enabled_condition += ' && ' + self._data_member_name(
+                    dependant_name)
             feature['enabled_condition'] = enabled_condition
             # If 'status' is a dict, add the values for all the not-mentioned platforms too.
             if isinstance(feature['status'], dict):
-                feature['status'] = self._status_with_all_platforms(feature['status'])
+                feature['status'] = self._status_with_all_platforms(
+                    feature['status'])
             # Specify the type of status
-            feature['status_type'] = "dict" if isinstance(feature['status'], dict) else "str"
+            feature['status_type'] = "dict" if isinstance(
+                feature['status'], dict) else "str"
 
-        self._standard_features = [feature for feature in self._features if not feature['custom']]
-        self._origin_trial_features = [feature for feature in self._features if feature['in_origin_trial']]
-        self._header_guard = self.make_header_guard(self._relative_output_dir + self.file_basename + '.h')
+        self._standard_features = [
+            feature for feature in self._features if not feature['custom']
+        ]
+        self._origin_trial_features = [
+            feature for feature in self._features if feature['in_origin_trial']
+        ]
+        self._header_guard = self.make_header_guard(self._relative_output_dir +
+                                                    self.file_basename + '.h')
 
     @staticmethod
     def _data_member_name(str_or_converter):
-        converter = NameStyleConverter(str_or_converter) if type(str_or_converter) is str else str_or_converter
+        converter = NameStyleConverter(str_or_converter) if type(
+            str_or_converter) is str else str_or_converter
         return converter.to_class_data_member(prefix='is', suffix='enabled')
 
     def _feature_sets(self):
@@ -119,7 +133,8 @@
 
     def _write_features_to_pickle_file(self, platform_output_dir):
         # TODO(yashard): Get the file path from args instead of hardcoding it.
-        file_name = os.path.join(platform_output_dir, '..', 'build', 'scripts', 'runtime_enabled_features.pickle')
+        file_name = os.path.join(platform_output_dir, '..', 'build', 'scripts',
+                                 'runtime_enabled_features.pickle')
         features_map = {}
         for feature in self._features:
             features_map[str(feature['name'])] = {
@@ -162,8 +177,11 @@
     file_basename = 'runtime_enabled_features_test_helpers'
 
     def __init__(self, json5_file_path, output_dir):
-        super(RuntimeFeatureTestHelpersWriter, self).__init__(json5_file_path, output_dir)
-        self._outputs = {('testing/' + self.file_basename + '.h'): self.generate_header}
+        super(RuntimeFeatureTestHelpersWriter, self).__init__(
+            json5_file_path, output_dir)
+        self._outputs = {
+            ('testing/' + self.file_basename + '.h'): self.generate_header
+        }
 
     def _template_inputs(self):
         return {
diff --git a/third_party/blink/renderer/build/scripts/make_runtime_features_utilities.py b/third_party/blink/renderer/build/scripts/make_runtime_features_utilities.py
index d6695502..5e736e2 100644
--- a/third_party/blink/renderer/build/scripts/make_runtime_features_utilities.py
+++ b/third_party/blink/renderer/build/scripts/make_runtime_features_utilities.py
@@ -2,7 +2,6 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-
 from collections import defaultdict
 
 
@@ -15,14 +14,18 @@
     feature_pool = {str(f['name']) for f in features}
     for f in features:
         for d in f['depends_on']:
-            assert d in feature_pool, "{} not found in runtime_enabled_features.json5".format(d)
+            assert d in feature_pool, "{} not found in runtime_enabled_features.json5".format(
+                d)
 
     def cyclic(features):
         """
         Returns True if the runtime features graph contains a cycle
         @returns bool
         """
-        graph = {str(feature['name']): feature['depends_on'] for feature in features}
+        graph = {
+            str(feature['name']): feature['depends_on']
+            for feature in features
+        }
         path = set()
 
         def visit(vertex):
diff --git a/third_party/blink/renderer/build/scripts/make_runtime_features_utilities_unittest.py b/third_party/blink/renderer/build/scripts/make_runtime_features_utilities_unittest.py
index 37571f4..2fec0bd 100644
--- a/third_party/blink/renderer/build/scripts/make_runtime_features_utilities_unittest.py
+++ b/third_party/blink/renderer/build/scripts/make_runtime_features_utilities_unittest.py
@@ -11,15 +11,12 @@
 class MakeRuntimeFeaturesUtilitiesTest(unittest.TestCase):
     def test_cycle_in_dependency(self):
         # Cycle: 'c' => 'd' => 'e' => 'c'
-        graph = {
-            'a': ['b'],
-            'b': [],
-            'c': ['a', 'd'],
-            'd': ['e'],
-            'e': ['c']
-        }
+        graph = {'a': ['b'], 'b': [], 'c': ['a', 'd'], 'd': ['e'], 'e': ['c']}
         with self.assertRaises(AssertionError):
-            util.origin_trials([{'name': name, 'depends_on': deps} for name, deps in graph.items()])
+            util.origin_trials([{
+                'name': name,
+                'depends_on': deps
+            } for name, deps in graph.items()])
 
     def test_bad_dependency(self):
         with self.assertRaises(AssertionError):
@@ -27,11 +24,31 @@
 
     def test_in_origin_trials_flag(self):
         features = [
-            {'name': NameStyleConverter('a'), 'depends_on': [], 'origin_trial_feature_name': None},
-            {'name': NameStyleConverter('b'), 'depends_on': ['a'], 'origin_trial_feature_name': 'OriginTrials'},
-            {'name': NameStyleConverter('c'), 'depends_on': ['b'], 'origin_trial_feature_name': None},
-            {'name': NameStyleConverter('d'), 'depends_on': ['b'], 'origin_trial_feature_name': None},
-            {'name': NameStyleConverter('e'), 'depends_on': ['d'], 'origin_trial_feature_name': None},
+            {
+                'name': NameStyleConverter('a'),
+                'depends_on': [],
+                'origin_trial_feature_name': None
+            },
+            {
+                'name': NameStyleConverter('b'),
+                'depends_on': ['a'],
+                'origin_trial_feature_name': 'OriginTrials'
+            },
+            {
+                'name': NameStyleConverter('c'),
+                'depends_on': ['b'],
+                'origin_trial_feature_name': None
+            },
+            {
+                'name': NameStyleConverter('d'),
+                'depends_on': ['b'],
+                'origin_trial_feature_name': None
+            },
+            {
+                'name': NameStyleConverter('e'),
+                'depends_on': ['d'],
+                'origin_trial_feature_name': None
+            },
         ]
         self.assertSetEqual(util.origin_trials(features), {'b', 'c', 'd', 'e'})
 
@@ -39,27 +56,32 @@
             'name': 'a',
             'depends_on': ['x'],
             'origin_trial_feature_name': None
-        }, {
-            'name': 'b',
-            'depends_on': ['x', 'y'],
-            'origin_trial_feature_name': None
-        }, {
-            'name': 'c',
-            'depends_on': ['y', 'z'],
-            'origin_trial_feature_name': None
-        }, {
-            'name': 'x',
-            'depends_on': [],
-            'origin_trial_feature_name': None
-        }, {
-            'name': 'y',
-            'depends_on': ['x'],
-            'origin_trial_feature_name': 'y'
-        }, {
-            'name': 'z',
-            'depends_on': ['y'],
-            'origin_trial_feature_name': None
-        }]
+        },
+                    {
+                        'name': 'b',
+                        'depends_on': ['x', 'y'],
+                        'origin_trial_feature_name': None
+                    },
+                    {
+                        'name': 'c',
+                        'depends_on': ['y', 'z'],
+                        'origin_trial_feature_name': None
+                    },
+                    {
+                        'name': 'x',
+                        'depends_on': [],
+                        'origin_trial_feature_name': None
+                    },
+                    {
+                        'name': 'y',
+                        'depends_on': ['x'],
+                        'origin_trial_feature_name': 'y'
+                    },
+                    {
+                        'name': 'z',
+                        'depends_on': ['y'],
+                        'origin_trial_feature_name': None
+                    }]
 
         self.assertSetEqual(util.origin_trials(features), {'b', 'c', 'y', 'z'})
 
diff --git a/third_party/blink/renderer/build/scripts/make_settings.py b/third_party/blink/renderer/build/scripts/make_settings.py
index b463bee6..59e0a2b 100755
--- a/third_party/blink/renderer/build/scripts/make_settings.py
+++ b/third_party/blink/renderer/build/scripts/make_settings.py
@@ -65,18 +65,24 @@
     def __init__(self, json5_file_path, output_dir):
         super(MakeSettingsWriter, self).__init__(json5_file_path, output_dir)
 
-        self.json5_file.name_dictionaries.sort(key=lambda entry: entry['name'].original)
+        self.json5_file.name_dictionaries.sort(
+            key=lambda entry: entry['name'].original)
 
         self._outputs = {
             ('settings_macros.h'): self.generate_macros,
         }
         self._template_context = {
-            'input_files': self._input_files,
-            'settings': self.json5_file.name_dictionaries,
-            'header_guard': self.make_header_guard(self._relative_output_dir + 'settings_macros.h')
+            'input_files':
+            self._input_files,
+            'settings':
+            self.json5_file.name_dictionaries,
+            'header_guard':
+            self.make_header_guard(self._relative_output_dir +
+                                   'settings_macros.h')
         }
 
-    @template_expander.use_jinja('templates/settings_macros.h.tmpl', filters=filters)
+    @template_expander.use_jinja(
+        'templates/settings_macros.h.tmpl', filters=filters)
     def generate_macros(self):
         return self._template_context
 
diff --git a/third_party/blink/renderer/build/scripts/make_style_builder.py b/third_party/blink/renderer/build/scripts/make_style_builder.py
index fe09745..bf88ea5 100755
--- a/third_party/blink/renderer/build/scripts/make_style_builder.py
+++ b/third_party/blink/renderer/build/scripts/make_style_builder.py
@@ -33,6 +33,7 @@
 from core.css import css_properties
 import json5_generator
 
+
 def calculate_apply_functions_to_declare(property_):
     property_['should_declare_functions'] = \
         not property_['longhands'] \
@@ -40,8 +41,8 @@
     property_['use_property_class_in_stylebuilder'] = \
         property_['should_declare_functions']
 
-class StyleBuilderWriter(json5_generator.Writer):
 
+class StyleBuilderWriter(json5_generator.Writer):
     def __init__(self, json5_file_paths, output_dir):
         super(StyleBuilderWriter, self).__init__([], output_dir)
 
@@ -56,5 +57,6 @@
     def css_properties(self):
         return self._json5_properties
 
+
 if __name__ == '__main__':
     json5_generator.Maker(StyleBuilderWriter).main()
diff --git a/third_party/blink/renderer/build/scripts/media_feature_symbol.py b/third_party/blink/renderer/build/scripts/media_feature_symbol.py
index 10d8a10f..423c96b 100644
--- a/third_party/blink/renderer/build/scripts/media_feature_symbol.py
+++ b/third_party/blink/renderer/build/scripts/media_feature_symbol.py
@@ -2,7 +2,6 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-
 from blinkbuild.name_style_converter import NameStyleConverter
 
 
@@ -16,4 +15,5 @@
 def getMediaFeatureSymbolWithSuffix(suffix):
     def returnedFunction(entry):
         return mediaFeatureSymbol(entry, suffix)
+
     return returnedFunction
diff --git a/third_party/blink/renderer/build/scripts/name_utilities.py b/third_party/blink/renderer/build/scripts/name_utilities.py
index abbc49b..b476f32 100644
--- a/third_party/blink/renderer/build/scripts/name_utilities.py
+++ b/third_party/blink/renderer/build/scripts/name_utilities.py
@@ -66,5 +66,6 @@
 
 
 def _upper_camel_case(property_name):
-    converter = NameStyleConverter(property_name) if isinstance(property_name, str) else property_name
+    converter = NameStyleConverter(property_name) if isinstance(
+        property_name, str) else property_name
     return converter.to_upper_camel_case()
diff --git a/third_party/blink/renderer/build/scripts/rule_bison.py b/third_party/blink/renderer/build/scripts/rule_bison.py
index 1974cb4..26a7bb30 100755
--- a/third_party/blink/renderer/build/scripts/rule_bison.py
+++ b/third_party/blink/renderer/build/scripts/rule_bison.py
@@ -82,8 +82,8 @@
     original_output_h = os.path.join(output_dir,
                                      output_basename + BISON_HEADER_EXT)
 
-    return_code = subprocess.call([bison_exe, '-d', input_file,
-                                   '-o', output_cc])
+    return_code = subprocess.call(
+        [bison_exe, '-d', input_file, '-o', output_cc])
     assert return_code == 0
     # If the file doesn't exist, this raise an OSError.
     os.stat(original_output_h)
@@ -97,16 +97,18 @@
     CLANG_FORMAT_DISABLE_LINE = "// clang-format off"
     output_h = os.path.join(output_dir, output_basename + '.h')
     header_guard = NameStyleConverter(output_h).to_header_guard()
-    modify_file(original_output_h,
-                [CLANG_FORMAT_DISABLE_LINE,
-                 '#ifndef %s' % header_guard,
-                 '#define %s' % header_guard],
-                ['#endif  // %s' % header_guard],
-                replace_list=common_replace_list)
+    modify_file(
+        original_output_h, [
+            CLANG_FORMAT_DISABLE_LINE,
+            '#ifndef %s' % header_guard,
+            '#define %s' % header_guard
+        ], ['#endif  // %s' % header_guard],
+        replace_list=common_replace_list)
     os.rename(original_output_h, output_h)
 
-    modify_file(output_cc, [CLANG_FORMAT_DISABLE_LINE], [],
-                replace_list=common_replace_list)
+    modify_file(
+        output_cc, [CLANG_FORMAT_DISABLE_LINE], [],
+        replace_list=common_replace_list)
 
 
 if __name__ == '__main__':
diff --git a/third_party/blink/renderer/build/scripts/run_with_pythonpath.py b/third_party/blink/renderer/build/scripts/run_with_pythonpath.py
index 9da708d0..c6ea8aa7 100755
--- a/third_party/blink/renderer/build/scripts/run_with_pythonpath.py
+++ b/third_party/blink/renderer/build/scripts/run_with_pythonpath.py
@@ -19,9 +19,11 @@
 
     env = os.environ.copy()
     if len(python_paths) > 0:
-        existing_pp = (os.pathsep + env['PYTHONPATH']) if 'PYTHONPATH' in env else ''
+        existing_pp = (
+            os.pathsep + env['PYTHONPATH']) if 'PYTHONPATH' in env else ''
         env['PYTHONPATH'] = os.pathsep.join(python_paths) + existing_pp
     sys.exit(subprocess.call([sys.executable] + args, env=env))
 
+
 if __name__ == '__main__':
     main()
diff --git a/third_party/blink/renderer/build/scripts/template_expander.py b/third_party/blink/renderer/build/scripts/template_expander.py
index 2cf3ad6a..ccc43a4 100644
--- a/third_party/blink/renderer/build/scripts/template_expander.py
+++ b/third_party/blink/renderer/build/scripts/template_expander.py
@@ -32,7 +32,11 @@
 import jinja2
 
 
-def apply_template(template_path, params, filters=None, tests=None, template_cache=None):
+def apply_template(template_path,
+                   params,
+                   filters=None,
+                   tests=None,
+                   template_cache=None):
     template = None
 
     if filters is None and tests is None and template_cache is not None:
@@ -62,8 +66,14 @@
     def real_decorator(generator):
         def generator_internal(*args, **kwargs):
             parameters = generator(*args, **kwargs)
-            return apply_template(template_path, parameters, filters=filters,
-                                  tests=tests, template_cache=template_cache)
+            return apply_template(
+                template_path,
+                parameters,
+                filters=filters,
+                tests=tests,
+                template_cache=template_cache)
+
         generator_internal.func_name = generator.func_name
         return generator_internal
+
     return real_decorator
diff --git a/third_party/blink/renderer/build/scripts/update_css_ranking.py b/third_party/blink/renderer/build/scripts/update_css_ranking.py
index 262fc159..22d5f72e 100644
--- a/third_party/blink/renderer/build/scripts/update_css_ranking.py
+++ b/third_party/blink/renderer/build/scripts/update_css_ranking.py
@@ -14,7 +14,6 @@
 import json5_generator
 import math
 
-
 CSS_RANKING_API = "http://www.chromestatus.com/data/csspopularity"
 CSS_RANKING_FILE = "../../core/css/css_properties_ranking.json5"
 CSS_PROPERTIES = "../../core/css/css_properties.json5"
@@ -39,18 +38,27 @@
     """
     css_ranking = json.loads(urllib2.urlopen(css_ranking_api).read())
     css_ranking_content = {"properties": {}, "data": []}
-    css_ranking_content["data"] = [property_["property_name"] for property_ in
-                                   sorted(css_ranking, key=lambda x: -float(x["day_percentage"]))]
+    css_ranking_content["data"] = [
+        property_["property_name"] for property_ in sorted(
+            css_ranking, key=lambda x: -float(x["day_percentage"]))
+    ]
 
     reformat_properties_name(css_ranking_content["data"])
 
     with open(css_ranking_file, "w") as fw:
-        fw.write("// The popularity ranking of all css properties the first properties is the most\n")
-        fw.write("// used property according to: https://www.chromestatus.com/metrics/css/popularity\n")
+        fw.write(
+            "// The popularity ranking of all css properties the first properties is the most\n"
+        )
+        fw.write(
+            "// used property according to: https://www.chromestatus.com/metrics/css/popularity\n"
+        )
         json.dump(css_ranking_content, fw, indent=4, sort_keys=False)
 
 
-def find_partition_rule(css_property_set, all_properties, n_cluster, transform=lambda x: x):
+def find_partition_rule(css_property_set,
+                        all_properties,
+                        n_cluster,
+                        transform=lambda x: x):
     """Find partition rule for a set of CSS property based on its popularity
 
     Args:
@@ -64,9 +72,13 @@
     Returns:
         partition rule for css_property_set
     """
-    _, cluster_alloc, _ = cluster.k_means([transform(p[1]) for p in css_property_set], n_cluster=n_cluster)
-    return [all_properties[css_property_set[i][0]] for i in range(len(cluster_alloc) - 1)
-            if cluster_alloc[i] != cluster_alloc[i + 1]] + [1.0]
+    _, cluster_alloc, _ = cluster.k_means(
+        [transform(p[1]) for p in css_property_set], n_cluster=n_cluster)
+    return [
+        all_properties[css_property_set[i][0]]
+        for i in range(len(cluster_alloc) - 1)
+        if cluster_alloc[i] != cluster_alloc[i + 1]
+    ] + [1.0]
 
 
 def produce_partition_rule(config_file, css_ranking_api):
@@ -77,42 +89,61 @@
         css_ranking_api: url to CSS ranking api
 
     """
-    css_ranking = sorted(json.loads(urllib2.urlopen(css_ranking_api).read()),
-                         key=lambda x: -x["day_percentage"])
+    css_ranking = sorted(
+        json.loads(urllib2.urlopen(css_ranking_api).read()),
+        key=lambda x: -x["day_percentage"])
     total_css_properties = len(css_ranking)
-    css_ranking_dictionary = dict([(x["property_name"], x["day_percentage"] * 100) for x in css_ranking])
-    css_ranking_cdf = dict(zip([x["property_name"] for x in css_ranking],
-                               [float(i) / total_css_properties for i in range(total_css_properties)]))
-    css_properties = json5_generator.Json5File.load_from_files([CSS_PROPERTIES]).name_dictionaries
+    css_ranking_dictionary = dict(
+        [(x["property_name"], x["day_percentage"] * 100) for x in css_ranking])
+    css_ranking_cdf = dict(
+        zip([x["property_name"] for x in css_ranking], [
+            float(i) / total_css_properties
+            for i in range(total_css_properties)
+        ]))
+    css_properties = json5_generator.Json5File.load_from_files(
+        [CSS_PROPERTIES]).name_dictionaries
 
-    rare_non_inherited_properties = sorted([(x["name"].original, css_ranking_dictionary[x["name"].original])
-                                            for x in css_properties if not x["inherited"]
-                                            and x["field_group"] is not None
-                                            and "*" in x["field_group"]
-                                            and x["name"].original in css_ranking_dictionary],
-                                           key=lambda x: -x[1])
-    rare_inherited_properties = sorted([(x["name"].original, css_ranking_dictionary[x["name"].original])
-                                        for x in css_properties if x["inherited"]
-                                        and x["field_group"] is not None
-                                        and "*" in x["field_group"]
-                                        and x["name"].original in css_ranking_dictionary],
-                                       key=lambda x: -x[1])
+    rare_non_inherited_properties = sorted(
+        [(x["name"].original, css_ranking_dictionary[x["name"].original])
+         for x in css_properties
+         if not x["inherited"] and x["field_group"] is not None and "*" in
+         x["field_group"] and x["name"].original in css_ranking_dictionary],
+        key=lambda x: -x[1])
+    rare_inherited_properties = sorted(
+        [(x["name"].original, css_ranking_dictionary[x["name"].original])
+         for x in css_properties
+         if x["inherited"] and x["field_group"] is not None and "*" in
+         x["field_group"] and x["name"].original in css_ranking_dictionary],
+        key=lambda x: -x[1])
 
-    rni_properties_rule = find_partition_rule(rare_non_inherited_properties,
-                                              css_ranking_cdf, n_cluster=3)
+    rni_properties_rule = find_partition_rule(
+        rare_non_inherited_properties, css_ranking_cdf, n_cluster=3)
 
-    ri_properties_rule = find_partition_rule(rare_inherited_properties,
-                                             css_ranking_cdf,
-                                             n_cluster=2, transform=lambda x: math.log(x + 10e-6))
+    ri_properties_rule = find_partition_rule(
+        rare_inherited_properties,
+        css_ranking_cdf,
+        n_cluster=2,
+        transform=lambda x: math.log(x + 10e-6))
 
     with open(config_file, 'w') as fw:
-        fw.write("// The grouping parameter is a cumulative distribution over the whole set of ranked\n")
+        fw.write(
+            "// The grouping parameter is a cumulative distribution " \
+            "over the whole set of ranked\n"
+        )
         fw.write("// CSS properties.\n")
         json.dump({
             "parameters": {},
-            "data": [{"name": "rare_non_inherited_properties_rule", "cumulative_distribution": rni_properties_rule},
-                     {"name": "rare_inherited_properties_rule", "cumulative_distribution": ri_properties_rule}]
-        }, fw, indent=4)
+            "data": [{
+                "name": "rare_non_inherited_properties_rule",
+                "cumulative_distribution": rni_properties_rule
+            },
+                     {
+                         "name": "rare_inherited_properties_rule",
+                         "cumulative_distribution": ri_properties_rule
+                     }]
+        },
+                  fw,
+                  indent=4)
 
 
 if __name__ == '__main__':
diff --git a/third_party/blink/renderer/core/animation/animation.cc b/third_party/blink/renderer/core/animation/animation.cc
index 44af68e..0821853 100644
--- a/third_party/blink/renderer/core/animation/animation.cc
+++ b/third_party/blink/renderer/core/animation/animation.cc
@@ -1332,6 +1332,9 @@
       }
       ApplyPendingPlaybackRate();
       UpdateFinishedState(UpdateType::kContinuous, NotificationType::kAsync);
+      SetCompositorPending(false);
+      SetOutdated();
+      NotifyProbe();
       break;
     }
 
@@ -1451,6 +1454,8 @@
   }
 
   SetCompositorPending(false);
+  SetOutdated();
+  NotifyProbe();
 }
 
 void Animation::ClearOutdated() {
@@ -2124,7 +2129,7 @@
   // 2. If, after applying any pending style changes, target is not being
   //    rendered, throw an "InvalidStateError" DOMException and abort these
   //    steps.
-  target->GetDocument().UpdateStyleAndLayoutTreeForNode(target);
+  target->GetDocument().UpdateStyleAndLayout(DocumentUpdateReason::kJavaScript);
   if (!target->GetLayoutObject()) {
     exception_state.ThrowDOMException(DOMExceptionCode::kInvalidStateError,
                                       "Target element is not rendered.");
@@ -2168,7 +2173,7 @@
 
     CSSPropertyRef ref(property.GetCSSPropertyName(), target->GetDocument());
     const CSSValue* value = ref.GetProperty().CSSValueFromComputedStyle(
-       *style, nullptr, false);
+        *style, target->GetLayoutObject(), false);
     inline_style->setProperty(target->GetDocument().ToExecutionContext(),
                               property.GetCSSPropertyName().ToAtomicString(),
                               value->CssText(), "", ASSERT_NO_EXCEPTION);
diff --git a/third_party/blink/renderer/core/animation/animation_test.cc b/third_party/blink/renderer/core/animation/animation_test.cc
index 2a61807..f0845bb 100644
--- a/third_party/blink/renderer/core/animation/animation_test.cc
+++ b/third_party/blink/renderer/core/animation/animation_test.cc
@@ -46,6 +46,7 @@
 #include "third_party/blink/renderer/core/animation/keyframe_effect_model.h"
 #include "third_party/blink/renderer/core/animation/pending_animations.h"
 #include "third_party/blink/renderer/core/animation/scroll_timeline.h"
+#include "third_party/blink/renderer/core/animation/timing.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/dom_node_ids.h"
 #include "third_party/blink/renderer/core/dom/events/event.h"
@@ -173,9 +174,12 @@
         StringKeyframeVector());
   }
 
-  KeyframeEffect* MakeAnimation(double duration = 30) {
+  KeyframeEffect* MakeAnimation(
+      double duration = 30,
+      Timing::FillMode fill_mode = Timing::FillMode::AUTO) {
     Timing timing;
     timing.iteration_duration = AnimationTimeDelta::FromSecondsD(duration);
+    timing.fill_mode = fill_mode;
     return MakeGarbageCollected<KeyframeEffect>(nullptr, MakeEmptyEffectModel(),
                                                 timing);
   }
@@ -1137,6 +1141,45 @@
   EXPECT_FALSE(animation->startTime());
 }
 
+// crbug.com/1052217
+TEST_F(AnimationAnimationTestNoCompositing, SetPlaybackRateAfterFinish) {
+  animation->setEffect(MakeAnimation(30, Timing::FillMode::FORWARDS));
+  animation->finish();
+  animation->Update(kTimingUpdateOnDemand);
+  EXPECT_EQ("finished", animation->playState());
+  EXPECT_EQ(base::nullopt, animation->TimeToEffectChange());
+
+  // Reversing a finished animation marks the animation as outdated. Required
+  // to recompute the time to next interval.
+  animation->setPlaybackRate(-1);
+  EXPECT_EQ("running", animation->playState());
+  EXPECT_EQ(animation->playbackRate(), -1);
+  EXPECT_TRUE(animation->Outdated());
+  animation->Update(kTimingUpdateOnDemand);
+  EXPECT_EQ(0, animation->TimeToEffectChange()->InSecondsF());
+  EXPECT_FALSE(animation->Outdated());
+}
+
+TEST_F(AnimationAnimationTestNoCompositing, UpdatePlaybackRateAfterFinish) {
+  animation->setEffect(MakeAnimation(30, Timing::FillMode::FORWARDS));
+  animation->finish();
+  animation->Update(kTimingUpdateOnDemand);
+  EXPECT_EQ("finished", animation->playState());
+  EXPECT_EQ(base::nullopt, animation->TimeToEffectChange());
+
+  // Reversing a finished animation marks the animation as outdated. Required
+  // to recompute the time to next interval. The pending playback rate is
+  // immediately applied when updatePlaybackRate is called on a non-running
+  // animation.
+  animation->updatePlaybackRate(-1);
+  EXPECT_EQ("running", animation->playState());
+  EXPECT_EQ(animation->playbackRate(), -1);
+  EXPECT_TRUE(animation->Outdated());
+  animation->Update(kTimingUpdateOnDemand);
+  EXPECT_EQ(0, animation->TimeToEffectChange()->InSecondsF());
+  EXPECT_FALSE(animation->Outdated());
+}
+
 TEST_F(AnimationAnimationTestCompositeAfterPaint,
        NoCompositeWithoutCompositedElementId) {
   SetBodyInnerHTML(
diff --git a/third_party/blink/renderer/core/css/css_properties.json5 b/third_party/blink/renderer/core/css/css_properties.json5
index 67c7a534..3ea8f112 100644
--- a/third_party/blink/renderer/core/css/css_properties.json5
+++ b/third_party/blink/renderer/core/css/css_properties.json5
@@ -651,8 +651,8 @@
       inherited: true,
       field_group: "inherited",
       field_template: "external",
-      include_paths: ["third_party/blink/renderer/platform/graphics/color.h"],
-      default_value: "Color::kBlack",
+      include_paths: ["third_party/blink/renderer/core/layout/layout_theme.h"],
+      default_value: "LayoutTheme::GetTheme().SystemColor(CSSValueID::kCanvastext, WebColorScheme::kLight)",
       type_name: "Color",
       computed_style_custom_functions: ["getter", "setter"],
       style_builder_custom_functions: ["initial", "inherit", "value"],
@@ -5462,8 +5462,8 @@
       inherited: true,
       field_group: "inherited",
       field_template: "external",
-      include_paths: ["third_party/blink/renderer/platform/graphics/color.h"],
-      default_value: "Color::kBlack",
+      include_paths: ["third_party/blink/renderer/core/layout/layout_theme.h"],
+      default_value: "LayoutTheme::GetTheme().SystemColor(CSSValueID::kCanvastext, WebColorScheme::kLight)",
       type_name: "Color",
       computed_style_custom_functions: ["getter", "setter"],
       style_builder_custom_functions: ["initial", "inherit", "value"],
diff --git a/third_party/blink/renderer/core/css/element_rule_collector.cc b/third_party/blink/renderer/core/css/element_rule_collector.cc
index e76a9e6..3afc42f 100644
--- a/third_party/blink/renderer/core/css/element_rule_collector.cc
+++ b/third_party/blink/renderer/core/css/element_rule_collector.cc
@@ -48,9 +48,21 @@
 
 namespace blink {
 
+namespace {
+
+unsigned AdjustLinkMatchType(EInsideLink inside_link,
+                             unsigned link_match_type) {
+  if (inside_link == EInsideLink::kNotInsideLink)
+    return CSSSelector::kMatchLink;
+  return link_match_type;
+}
+
+}  // namespace
+
 ElementRuleCollector::ElementRuleCollector(const ElementResolveContext& context,
                                            const SelectorFilter& filter,
-                                           ComputedStyle* style)
+                                           ComputedStyle* style,
+                                           EInsideLink inside_link)
     : context_(context),
       selector_filter_(filter),
       style_(style),
@@ -60,7 +72,8 @@
           selector_filter_.ParentStackIsConsistent(context.ParentNode())),
       same_origin_only_(false),
       matching_ua_rules_(false),
-      include_empty_rules_(false) {}
+      include_empty_rules_(false),
+      inside_link_(inside_link) {}
 
 ElementRuleCollector::~ElementRuleCollector() = default;
 
@@ -99,7 +112,9 @@
     bool is_cacheable) {
   if (!property_set)
     return;
-  result_.AddMatchedProperties(property_set);
+  auto link_match_type = static_cast<unsigned>(CSSSelector::kMatchAll);
+  result_.AddMatchedProperties(
+      property_set, AdjustLinkMatchType(inside_link_, link_match_type));
   if (!is_cacheable)
     result_.SetIsCacheable(false);
 }
@@ -326,7 +341,8 @@
   for (unsigned i = 0; i < matched_rules_.size(); i++) {
     const RuleData* rule_data = matched_rules_[i].GetRuleData();
     result_.AddMatchedProperties(
-        &rule_data->Rule()->Properties(), rule_data->LinkMatchType(),
+        &rule_data->Rule()->Properties(),
+        AdjustLinkMatchType(inside_link_, rule_data->LinkMatchType()),
         rule_data->GetValidPropertyFilter(matching_ua_rules_));
   }
 }
diff --git a/third_party/blink/renderer/core/css/element_rule_collector.h b/third_party/blink/renderer/core/css/element_rule_collector.h
index 2d1e0322..d3cd3e7 100644
--- a/third_party/blink/renderer/core/css/element_rule_collector.h
+++ b/third_party/blink/renderer/core/css/element_rule_collector.h
@@ -31,6 +31,7 @@
 #include "third_party/blink/renderer/core/css/resolver/match_request.h"
 #include "third_party/blink/renderer/core/css/resolver/match_result.h"
 #include "third_party/blink/renderer/core/css/selector_checker.h"
+#include "third_party/blink/renderer/core/style/computed_style_base_constants.h"
 #include "third_party/blink/renderer/platform/wtf/ref_counted.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
 
@@ -109,7 +110,8 @@
  public:
   ElementRuleCollector(const ElementResolveContext&,
                        const SelectorFilter&,
-                       ComputedStyle* = nullptr);
+                       ComputedStyle*,
+                       EInsideLink);
   ~ElementRuleCollector();
 
   void SetMode(SelectorChecker::Mode mode) { mode_ = mode; }
@@ -188,6 +190,7 @@
   bool same_origin_only_;
   bool matching_ua_rules_;
   bool include_empty_rules_;
+  EInsideLink inside_link_;
 
   HeapVector<MatchedRule, 32> matched_rules_;
 
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade.cc b/third_party/blink/renderer/core/css/resolver/style_cascade.cc
index 668bdf1..1a0ac3c 100644
--- a/third_party/blink/renderer/core/css/resolver/style_cascade.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_cascade.cc
@@ -464,6 +464,8 @@
   DCHECK_NE(property.PropertyID(), CSSPropertyID::kVariable);
   DCHECK_NE(priority.GetOrigin(), CascadeOrigin::kNone);
 
+  MarkHasVariableReference(property);
+
   // If the previous call to ResolvePendingSubstitution parsed 'value', then
   // we don't need to do it again.
   bool is_cached = resolver.shorthand_cache_.value == &value;
@@ -501,8 +503,6 @@
   const CSSProperty* unvisited_property =
       property.IsVisited() ? property.GetUnvisitedProperty() : &property;
 
-  MarkHasVariableReference(*unvisited_property);
-
   unsigned parsed_properties_count = parsed_properties.size();
   for (unsigned i = 0; i < parsed_properties_count; ++i) {
     const CSSProperty& longhand = CSSProperty::Get(parsed_properties[i].Id());
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc b/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc
index ab5618e..91f1193d 100644
--- a/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc
@@ -600,30 +600,6 @@
   EXPECT_EQ("4px", cascade.ComputedValue("margin-left"));
 }
 
-// TODO(andruud): This is not useful anymore.
-// TEST_F(StyleCascadeTest, ApplyingPendingSubstitutionModifiesCascade) {
-//  TestCascade cascade(GetDocument());
-//  cascade.Add("margin", "1px var(--x) 3px 4px");
-//  cascade.Add("--x", "2px");
-//  cascade.Add("margin-right", "5px");
-//
-//  // We expect the pending substitution value for all the shorthands,
-//  // except margin-right.
-//  EXPECT_EQ("1px var(--x) 3px 4px", cascade.GetValue("margin-top"));
-//  EXPECT_EQ("5px", cascade.GetValue("margin-right"));
-//  EXPECT_EQ("1px var(--x) 3px 4px", cascade.GetValue("margin-bottom"));
-//  EXPECT_EQ("1px var(--x) 3px 4px", cascade.GetValue("margin-left"));
-//
-//  // Apply a pending substitution value should modify the cascade for other
-//  // longhands with the same pending substitution value.
-//  cascade.Apply("margin-left");
-//
-//  EXPECT_EQ("1px", cascade.GetValue("margin-top"));
-//  EXPECT_EQ("5px", cascade.GetValue("margin-right"));
-//  EXPECT_EQ("3px", cascade.GetValue("margin-bottom"));
-//  EXPECT_FALSE(cascade.GetValue("margin-left"));
-//}
-
 TEST_F(StyleCascadeTest, ResolverDetectCycle) {
   TestCascade cascade(GetDocument());
   TestCascadeResolver resolver(GetDocument());
@@ -1999,6 +1975,56 @@
   EXPECT_FALSE(registry->WasReferenced("--y"));
 }
 
+TEST_F(StyleCascadeTest, MarkHasVariableReferenceLonghand) {
+  TestCascade cascade(GetDocument());
+  cascade.Add("--x", "1px");
+  cascade.Add("width", "var(--x)");
+  cascade.Apply();
+  auto style = cascade.TakeStyle();
+  EXPECT_TRUE(style->HasVariableReferenceFromNonInheritedProperty());
+}
+
+TEST_F(StyleCascadeTest, MarkHasVariableReferenceShorthand) {
+  TestCascade cascade(GetDocument());
+  cascade.Add("--x", "1px");
+  cascade.Add("margin", "var(--x)");
+  cascade.Apply();
+  auto style = cascade.TakeStyle();
+  EXPECT_TRUE(style->HasVariableReferenceFromNonInheritedProperty());
+}
+
+TEST_F(StyleCascadeTest, MarkHasVariableReferenceLonghandMissingVar) {
+  TestCascade cascade(GetDocument());
+  cascade.Add("width", "var(--x)");
+  cascade.Apply();
+  auto style = cascade.TakeStyle();
+  EXPECT_TRUE(style->HasVariableReferenceFromNonInheritedProperty());
+}
+
+TEST_F(StyleCascadeTest, MarkHasVariableReferenceShorthandMissingVar) {
+  TestCascade cascade(GetDocument());
+  cascade.Add("margin", "var(--x)");
+  cascade.Apply();
+  auto style = cascade.TakeStyle();
+  EXPECT_TRUE(style->HasVariableReferenceFromNonInheritedProperty());
+}
+
+TEST_F(StyleCascadeTest, NoMarkHasVariableReferenceInherited) {
+  TestCascade cascade(GetDocument());
+  cascade.Add("color", "var(--x)");
+  cascade.Apply();
+  auto style = cascade.TakeStyle();
+  EXPECT_FALSE(style->HasVariableReferenceFromNonInheritedProperty());
+}
+
+TEST_F(StyleCascadeTest, NoMarkHasVariableReferenceWithoutVar) {
+  TestCascade cascade(GetDocument());
+  cascade.Add("width", "1px");
+  cascade.Apply();
+  auto style = cascade.TakeStyle();
+  EXPECT_FALSE(style->HasVariableReferenceFromNonInheritedProperty());
+}
+
 TEST_F(StyleCascadeTest, InternalVisitedColorLonghand) {
   MatchResult result;
   result.FinishAddingUARules();
@@ -2566,7 +2592,4 @@
                    .HasVariableReferenceFromNonInheritedProperty());
 }
 
-// TODO: Check that tests don't crash when passing wrong match_result/
-// interpolations to Apply.
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.cc b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
index c79d05c..e028ced2 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -864,7 +864,7 @@
     GetDocument().GetStyleEngine().EnsureUAStyleForElement(*element);
 
     ElementRuleCollector collector(state.ElementContext(), selector_filter_,
-                                   state.Style());
+                                   state.Style(), state.Style()->InsideLink());
 
     MatchAllRules(state, collector,
                   matching_behavior != kMatchAllRulesExcludingSMIL);
@@ -989,7 +989,7 @@
   if (!animation_base_computed_style) {
     // Check UA, user and author rules.
     ElementRuleCollector collector(state.ElementContext(), selector_filter_,
-                                   state.Style());
+                                   state.Style(), state.Style()->InsideLink());
     collector.SetPseudoElementStyleRequest(pseudo_style_request);
 
     // The UA sheet is supposed to set some styles to ::marker pseudo-elements,
@@ -1150,6 +1150,10 @@
                                                        : 1);
   initial_style->SetEffectiveZoom(initial_style->Zoom());
 
+  initial_style->SetInternalVisitedColor(
+      initial_style->InitialColorForColorScheme());
+  initial_style->SetColor(initial_style->InitialColorForColorScheme());
+
   FontDescription document_font_description =
       initial_style->GetFontDescription();
   document_font_description.SetLocale(
@@ -1198,7 +1202,7 @@
   DCHECK(element);
   StyleResolverState state(GetDocument(), *element);
   ElementRuleCollector collector(state.ElementContext(), selector_filter_,
-                                 state.Style());
+                                 nullptr, EInsideLink::kNotInsideLink);
   collector.SetMode(SelectorChecker::kCollectingStyleRules);
   CollectPseudoRulesForElement(*element, collector, kPseudoIdNone,
                                rules_to_include);
@@ -1212,7 +1216,7 @@
   DCHECK(element);
   StyleResolverState state(GetDocument(), *element);
   ElementRuleCollector collector(state.ElementContext(), selector_filter_,
-                                 state.Style());
+                                 nullptr, EInsideLink::kNotInsideLink);
   collector.SetMode(SelectorChecker::kCollectingCSSRules);
   CollectPseudoRulesForElement(*element, collector, pseudo_id,
                                rules_to_include);
@@ -1543,20 +1547,6 @@
   }
 }
 
-static inline unsigned ComputeApplyMask(
-    StyleResolverState& state,
-    const MatchedProperties& matched_properties) {
-  if (state.Style()->InsideLink() == EInsideLink::kNotInsideLink)
-    return kApplyMaskRegular;
-  static_assert(static_cast<int>(kApplyMaskRegular) ==
-                    static_cast<int>(CSSSelector::kMatchLink),
-                "kApplyMaskRegular and kMatchLink must match");
-  static_assert(static_cast<int>(kApplyMaskVisited) ==
-                    static_cast<int>(CSSSelector::kMatchVisited),
-                "kApplyMaskVisited and kMatchVisited must match");
-  return matched_properties.types_.link_match_type;
-}
-
 template <CSSPropertyPriority priority,
           StyleResolver::ShouldUpdateNeedsApplyPass shouldUpdateNeedsApplyPass>
 void StyleResolver::ApplyMatchedProperties(StyleResolverState& state,
@@ -1575,7 +1565,13 @@
     return;
 
   for (const auto& matched_properties : range) {
-    const unsigned apply_mask = ComputeApplyMask(state, matched_properties);
+    static_assert(static_cast<int>(kApplyMaskRegular) ==
+                      static_cast<int>(CSSSelector::kMatchLink),
+                  "kApplyMaskRegular and kMatchLink must match");
+    static_assert(static_cast<int>(kApplyMaskVisited) ==
+                      static_cast<int>(CSSSelector::kMatchVisited),
+                  "kApplyMaskVisited and kMatchVisited must match");
+    const unsigned apply_mask = matched_properties.types_.link_match_type;
     ApplyProperties<priority, shouldUpdateNeedsApplyPass>(
         state, matched_properties.properties.Get(), is_important,
         inherited_only, needs_apply_pass,
@@ -2046,9 +2042,6 @@
     return;
   }
 
-  if (state.Style()->InsideLink() == EInsideLink::kNotInsideLink)
-    filter = filter.Add(CSSProperty::kVisited, true);
-
   cascade.Analyze(result, filter);
 
   if (cache_success.ShouldApplyInheritedOnly()) {
@@ -2193,7 +2186,7 @@
     return;
 
   ElementRuleCollector collector(state.ElementContext(), selector_filter_,
-                                 state.Style());
+                                 state.Style(), state.Style()->InsideLink());
   collector.SetMode(SelectorChecker::kCollectingStyleRules);
   collector.SetIncludeEmptyRules(true);
 
@@ -2291,8 +2284,6 @@
       state.Style()->SetColor(
           StyleBuilderConverter::ConvertColor(state, *color_value));
     }
-  } else if (state.GetElement() == GetDocument().documentElement()) {
-    state.Style()->SetColor(state.Style()->InitialColorForColorScheme());
   }
 
   if (const CSSValue* visited_color_value =
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
index 569f8365..1e85dcf 100644
--- a/third_party/blink/renderer/core/dom/document.cc
+++ b/third_party/blink/renderer/core/dom/document.cc
@@ -2419,25 +2419,43 @@
 #undef PROPAGATE_FROM
 
 #if DCHECK_IS_ON()
+static void AssertNodeClean(const Node& node) {
+  DCHECK(!node.NeedsStyleRecalc());
+  DCHECK(!node.ChildNeedsStyleRecalc());
+  DCHECK(!node.NeedsReattachLayoutTree());
+  DCHECK(!node.ChildNeedsReattachLayoutTree());
+  DCHECK(!node.ChildNeedsDistributionRecalc());
+  DCHECK(!node.NeedsStyleInvalidation());
+  DCHECK(!node.ChildNeedsStyleInvalidation());
+  DCHECK(!node.GetForceReattachLayoutTree());
+}
+
+static void AssertLayoutTreeUpdatedForPseudoElements(const Element& element) {
+  WTF::Vector<PseudoId> pseudo_ids = {kPseudoIdFirstLetter, kPseudoIdBefore,
+                                      kPseudoIdAfter, kPseudoIdMarker,
+                                      kPseudoIdBackdrop};
+  for (auto pseudo_id : pseudo_ids) {
+    if (auto* pseudo_element = element.GetPseudoElement(pseudo_id))
+      AssertNodeClean(*pseudo_element);
+  }
+}
+
 static void AssertLayoutTreeUpdated(Node& root) {
   Node* node = &root;
   while (node) {
-    auto* element = DynamicTo<Element>(node);
-    if (element && RuntimeEnabledFeatures::CSSRenderSubtreeEnabled() &&
-        element->StyleRecalcBlockedByDisplayLock(
-            DisplayLockLifecycleTarget::kChildren)) {
-      node = FlatTreeTraversal::NextSkippingChildren(*node);
-      continue;
+    if (auto* element = DynamicTo<Element>(node)) {
+      if (RuntimeEnabledFeatures::CSSRenderSubtreeEnabled() &&
+          element->StyleRecalcBlockedByDisplayLock(
+              DisplayLockLifecycleTarget::kChildren)) {
+        node = FlatTreeTraversal::NextSkippingChildren(*node);
+        continue;
+      }
+      // Check pseudo elements.
+      AssertLayoutTreeUpdatedForPseudoElements(*element);
     }
 
-    DCHECK(!node->NeedsStyleRecalc());
-    DCHECK(!node->ChildNeedsStyleRecalc());
-    DCHECK(!node->NeedsReattachLayoutTree());
-    DCHECK(!node->ChildNeedsReattachLayoutTree());
-    DCHECK(!node->ChildNeedsDistributionRecalc());
-    DCHECK(!node->NeedsStyleInvalidation());
-    DCHECK(!node->ChildNeedsStyleInvalidation());
-    DCHECK(!node->GetForceReattachLayoutTree());
+    AssertNodeClean(*node);
+
     // Make sure there is no node which has a LayoutObject, but doesn't have a
     // parent in a flat tree. If there is such a node, we forgot to detach the
     // node. DocumentNode is only an exception.
diff --git a/third_party/blink/renderer/core/events/message_event.cc b/third_party/blink/renderer/core/events/message_event.cc
index 005ab15..21afd9c 100644
--- a/third_party/blink/renderer/core/events/message_event.cc
+++ b/third_party/blink/renderer/core/events/message_event.cc
@@ -85,6 +85,7 @@
   if (amount_of_external_memory_ > 0) {
     v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(
         -static_cast<int64_t>(amount_of_external_memory_));
+    amount_of_external_memory_ = 0;
   }
 }
 
@@ -316,6 +317,10 @@
 
     case MessageEvent::kDataTypeSerializedScriptValue:
       if (data_as_serialized_script_value_) {
+        // The data is put on the V8 GC heap here, and therefore the V8 GC does
+        // the accounting from here on. We unregister the registered memory to
+        // avoid double accounting.
+        UnregisterAmountOfExternallyAllocatedMemory();
         MessagePortArray message_ports = ports();
         SerializedScriptValue::DeserializeOptions options;
         options.message_ports = &message_ports;
diff --git a/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.cc b/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.cc
index 4af307f..68112cb 100644
--- a/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.cc
+++ b/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.cc
@@ -249,7 +249,7 @@
   session->Append(performance_agent);
 
   session->Append(MakeGarbageCollected<InspectorDOMSnapshotAgent>(
-      inspected_frames, dom_debugger_agent, performance_agent));
+      inspected_frames, dom_debugger_agent));
 
   session->Append(MakeGarbageCollected<InspectorAnimationAgent>(
       inspected_frames, css_agent, session->V8Session()));
@@ -410,9 +410,13 @@
   }
 }
 
-void WebDevToolsAgentImpl::DebuggerTaskStarted() {}
+void WebDevToolsAgentImpl::DebuggerTaskStarted() {
+  probe::WillStartDebuggerTask(probe_sink_);
+}
 
-void WebDevToolsAgentImpl::DebuggerTaskFinished() {}
+void WebDevToolsAgentImpl::DebuggerTaskFinished() {
+  probe::DidFinishDebuggerTask(probe_sink_);
+}
 
 void WebDevToolsAgentImpl::DidCommitLoadForLocalFrame(LocalFrame* frame) {
   resource_container_->DidCommitLoadForLocalFrame(frame);
diff --git a/third_party/blink/renderer/core/fileapi/blob.idl b/third_party/blink/renderer/core/fileapi/blob.idl
index 5247341a..404de75 100644
--- a/third_party/blink/renderer/core/fileapi/blob.idl
+++ b/third_party/blink/renderer/core/fileapi/blob.idl
@@ -41,7 +41,7 @@
 
     // TODO(jsbell): start and end arguments should be [Clamp]
     [RaisesException] Blob slice(optional long long start, optional long long end, optional DOMString contentType);
-    [CallWith=ScriptState, RuntimeEnabled=BlobReadMethods] ReadableStream stream();
-    [CallWith=ScriptState, RuntimeEnabled=BlobReadMethods] Promise<USVString> text();
-    [CallWith=ScriptState, RuntimeEnabled=BlobReadMethods] Promise<ArrayBuffer> arrayBuffer();
+    [CallWith=ScriptState] ReadableStream stream();
+    [CallWith=ScriptState] Promise<USVString> text();
+    [CallWith=ScriptState] Promise<ArrayBuffer> arrayBuffer();
 };
diff --git a/third_party/blink/renderer/core/fileapi/file_test.cc b/third_party/blink/renderer/core/fileapi/file_test.cc
index 7ab9d122..53daeaf7 100644
--- a/third_party/blink/renderer/core/fileapi/file_test.cc
+++ b/third_party/blink/renderer/core/fileapi/file_test.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/core/fileapi/file.h"
 
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -26,7 +27,7 @@
   static void Create(File* file, base::Time modified_time) {
     mojo::PendingRemote<mojom::blink::Blob> remote;
     PostCrossThreadTask(
-        *base::CreateSingleThreadTaskRunner({base::ThreadPool()}), FROM_HERE,
+        *base::ThreadPool::CreateSingleThreadTaskRunner({}), FROM_HERE,
         CrossThreadBindOnce(
             [](const String& uuid,
                mojo::PendingReceiver<mojom::blink::Blob> receiver,
diff --git a/third_party/blink/renderer/core/frame/ad_tracker.cc b/third_party/blink/renderer/core/frame/ad_tracker.cc
index de1d139..f5fa20f 100644
--- a/third_party/blink/renderer/core/frame/ad_tracker.cc
+++ b/third_party/blink/renderer/core/frame/ad_tracker.cc
@@ -37,7 +37,7 @@
 // Controls whether the AdTracker will look across async stacks to determine if
 // the currently running stack is ad related.
 const base::Feature kAsyncStackAdTagging{"AsyncStackAdTagging",
-                                         base::FEATURE_ENABLED_BY_DEFAULT};
+                                         base::FEATURE_DISABLED_BY_DEFAULT};
 
 // Controls whether the AdTracker analyzes the whole pseudo-stack or just the
 // top of the stack when detecting ads.
diff --git a/third_party/blink/renderer/core/html/forms/base_button_input_type.cc b/third_party/blink/renderer/core/html/forms/base_button_input_type.cc
index c452555..6fc142b 100644
--- a/third_party/blink/renderer/core/html/forms/base_button_input_type.cc
+++ b/third_party/blink/renderer/core/html/forms/base_button_input_type.cc
@@ -74,6 +74,10 @@
 
 void BaseButtonInputType::AppendToFormData(FormData&) const {}
 
+bool BaseButtonInputType::TypeShouldForceLegacyLayout() const {
+  return true;
+}
+
 LayoutObject* BaseButtonInputType::CreateLayoutObject(const ComputedStyle&,
                                                       LegacyLayout) const {
   return new LayoutButton(&GetElement());
diff --git a/third_party/blink/renderer/core/html/forms/base_button_input_type.h b/third_party/blink/renderer/core/html/forms/base_button_input_type.h
index e0310279..b048c471 100644
--- a/third_party/blink/renderer/core/html/forms/base_button_input_type.h
+++ b/third_party/blink/renderer/core/html/forms/base_button_input_type.h
@@ -54,6 +54,7 @@
   InputTypeView* CreateView() override;
   bool ShouldSaveAndRestoreFormControlState() const override;
   void AppendToFormData(FormData&) const override;
+  bool TypeShouldForceLegacyLayout() const override;
   LayoutObject* CreateLayoutObject(const ComputedStyle&,
                                    LegacyLayout) const override;
   ValueMode GetValueMode() const override;
diff --git a/third_party/blink/renderer/core/html/forms/base_checkable_input_type.cc b/third_party/blink/renderer/core/html/forms/base_checkable_input_type.cc
index 21b72a2..93da5c3 100644
--- a/third_party/blink/renderer/core/html/forms/base_checkable_input_type.cc
+++ b/third_party/blink/renderer/core/html/forms/base_checkable_input_type.cc
@@ -121,8 +121,4 @@
   return true;
 }
 
-bool BaseCheckableInputType::TypeShouldForceLegacyLayout() const {
-  return false;
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/forms/base_checkable_input_type.h b/third_party/blink/renderer/core/html/forms/base_checkable_input_type.h
index d72a5de..d9696d3 100644
--- a/third_party/blink/renderer/core/html/forms/base_checkable_input_type.h
+++ b/third_party/blink/renderer/core/html/forms/base_checkable_input_type.h
@@ -70,7 +70,6 @@
                 TextControlSetValueSelection) final;
   void ReadingChecked() const final;
   bool IsCheckable() final;
-  bool TypeShouldForceLegacyLayout() const final;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/forms/chooser_only_temporal_input_type_view.cc b/third_party/blink/renderer/core/html/forms/chooser_only_temporal_input_type_view.cc
index 4243792..d7eab0b 100644
--- a/third_party/blink/renderer/core/html/forms/chooser_only_temporal_input_type_view.cc
+++ b/third_party/blink/renderer/core/html/forms/chooser_only_temporal_input_type_view.cc
@@ -155,8 +155,4 @@
   ClosePopupView();
 }
 
-bool ChooserOnlyTemporalInputTypeView::TypeShouldForceLegacyLayout() const {
-  return false;
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/forms/chooser_only_temporal_input_type_view.h b/third_party/blink/renderer/core/html/forms/chooser_only_temporal_input_type_view.h
index 6012b8b..5e6f0b6 100644
--- a/third_party/blink/renderer/core/html/forms/chooser_only_temporal_input_type_view.h
+++ b/third_party/blink/renderer/core/html/forms/chooser_only_temporal_input_type_view.h
@@ -57,7 +57,6 @@
   void DidSetValue(const String&, bool value_changed) override;
   void HandleDOMActivateEvent(Event&) override;
   void UpdateView() override;
-  bool TypeShouldForceLegacyLayout() const final;
 
   // DateTimeChooserClient functions:
   Element& OwnerElement() const override;
diff --git a/third_party/blink/renderer/core/html/forms/color_input_type.cc b/third_party/blink/renderer/core/html/forms/color_input_type.cc
index 537415f5..d5c13085 100644
--- a/third_party/blink/renderer/core/html/forms/color_input_type.cc
+++ b/third_party/blink/renderer/core/html/forms/color_input_type.cc
@@ -287,8 +287,5 @@
   return this;
 }
 
-bool ColorInputType::TypeShouldForceLegacyLayout() const {
-  return false;
-}
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/forms/color_input_type.h b/third_party/blink/renderer/core/html/forms/color_input_type.h
index 88468cc..2e75cb0 100644
--- a/third_party/blink/renderer/core/html/forms/color_input_type.h
+++ b/third_party/blink/renderer/core/html/forms/color_input_type.h
@@ -78,7 +78,6 @@
   void WarnIfValueIsInvalid(const String&) const override;
   void UpdateView() override;
   AXObject* PopupRootAXObject() override;
-  bool TypeShouldForceLegacyLayout() const override;
 
   Color ValueAsColor() const;
   HTMLElement* ShadowColorSwatch() const;
diff --git a/third_party/blink/renderer/core/html/forms/file_input_type.cc b/third_party/blink/renderer/core/html/forms/file_input_type.cc
index ee7f438..a2787262 100644
--- a/third_party/blink/renderer/core/html/forms/file_input_type.cc
+++ b/third_party/blink/renderer/core/html/forms/file_input_type.cc
@@ -202,6 +202,10 @@
   event.SetDefaultHandled();
 }
 
+bool FileInputType::TypeShouldForceLegacyLayout() const {
+  return true;
+}
+
 LayoutObject* FileInputType::CreateLayoutObject(const ComputedStyle&,
                                                 LegacyLayout) const {
   return new LayoutFileUploadControl(&GetElement());
diff --git a/third_party/blink/renderer/core/html/forms/file_input_type.h b/third_party/blink/renderer/core/html/forms/file_input_type.h
index 6919868..67a1a27 100644
--- a/third_party/blink/renderer/core/html/forms/file_input_type.h
+++ b/third_party/blink/renderer/core/html/forms/file_input_type.h
@@ -72,6 +72,7 @@
   bool ValueMissing(const String&) const override;
   String ValueMissingText() const override;
   void HandleDOMActivateEvent(Event&) override;
+  bool TypeShouldForceLegacyLayout() const override;
   LayoutObject* CreateLayoutObject(const ComputedStyle&,
                                    LegacyLayout) const override;
   bool CanSetStringValue() const override;
diff --git a/third_party/blink/renderer/core/html/forms/html_form_control_element_with_state.h b/third_party/blink/renderer/core/html/forms/html_form_control_element_with_state.h
index e3e9799..88b71ecc 100644
--- a/third_party/blink/renderer/core/html/forms/html_form_control_element_with_state.h
+++ b/third_party/blink/renderer/core/html/forms/html_form_control_element_with_state.h
@@ -62,7 +62,6 @@
   bool IsFormControlElementWithState() const final;
 
  private:
-  bool TypeShouldForceLegacyLayout() const override { return true; }
   int DefaultTabIndex() const override;
 
   // https://html.spec.whatwg.org/C/#autofill-anchor-mantle
diff --git a/third_party/blink/renderer/core/html/forms/html_select_element.cc b/third_party/blink/renderer/core/html/forms/html_select_element.cc
index 920f5b1..e38c97e2 100644
--- a/third_party/blink/renderer/core/html/forms/html_select_element.cc
+++ b/third_party/blink/renderer/core/html/forms/html_select_element.cc
@@ -356,6 +356,10 @@
   return !UsesMenuList();
 }
 
+bool HTMLSelectElement::TypeShouldForceLegacyLayout() const {
+  return true;
+}
+
 LayoutObject* HTMLSelectElement::CreateLayoutObject(
     const ComputedStyle& style,
     LegacyLayout legacy_layout) {
diff --git a/third_party/blink/renderer/core/html/forms/html_select_element.h b/third_party/blink/renderer/core/html/forms/html_select_element.h
index 48a14a3..7fefca9 100644
--- a/third_party/blink/renderer/core/html/forms/html_select_element.h
+++ b/third_party/blink/renderer/core/html/forms/html_select_element.h
@@ -215,6 +215,7 @@
   void ParseAttribute(const AttributeModificationParams&) override;
   bool IsPresentationAttribute(const QualifiedName&) const override;
 
+  bool TypeShouldForceLegacyLayout() const override;
   LayoutObject* CreateLayoutObject(const ComputedStyle&, LegacyLayout) override;
   void DidRecalcStyle(const StyleRecalcChange) override;
   void AttachLayoutTree(AttachContext&) override;
diff --git a/third_party/blink/renderer/core/html/forms/html_text_area_element.h b/third_party/blink/renderer/core/html/forms/html_text_area_element.h
index 4980524..8700e49 100644
--- a/third_party/blink/renderer/core/html/forms/html_text_area_element.h
+++ b/third_party/blink/renderer/core/html/forms/html_text_area_element.h
@@ -117,6 +117,7 @@
       const QualifiedName&,
       const AtomicString&,
       MutableCSSPropertyValueSet*) override;
+  bool TypeShouldForceLegacyLayout() const override { return true; }
   LayoutObject* CreateLayoutObject(const ComputedStyle&, LegacyLayout) override;
   void AppendToFormData(FormData&) override;
   void ResetImpl() override;
diff --git a/third_party/blink/renderer/core/html/forms/image_input_type.cc b/third_party/blink/renderer/core/html/forms/image_input_type.cc
index ca9f276e..53abd4c 100644
--- a/third_party/blink/renderer/core/html/forms/image_input_type.cc
+++ b/third_party/blink/renderer/core/html/forms/image_input_type.cc
@@ -104,6 +104,10 @@
   event.SetDefaultHandled();
 }
 
+bool ImageInputType::TypeShouldForceLegacyLayout() const {
+  return true;
+}
+
 LayoutObject* ImageInputType::CreateLayoutObject(const ComputedStyle& style,
                                                  LegacyLayout legacy) const {
   if (use_fallback_content_)
diff --git a/third_party/blink/renderer/core/html/forms/image_input_type.h b/third_party/blink/renderer/core/html/forms/image_input_type.h
index 112ea7a9..647923dc7 100644
--- a/third_party/blink/renderer/core/html/forms/image_input_type.h
+++ b/third_party/blink/renderer/core/html/forms/image_input_type.h
@@ -50,6 +50,7 @@
   void AppendToFormData(FormData&) const override;
   String ResultForDialogSubmit() const override;
   bool SupportsValidation() const override;
+  bool TypeShouldForceLegacyLayout() const override;
   LayoutObject* CreateLayoutObject(const ComputedStyle&,
                                    LegacyLayout) const override;
   void HandleDOMActivateEvent(Event&) override;
diff --git a/third_party/blink/renderer/core/html/forms/input_type_view.cc b/third_party/blink/renderer/core/html/forms/input_type_view.cc
index abbcaa3..b0bf4be 100644
--- a/third_party/blink/renderer/core/html/forms/input_type_view.cc
+++ b/third_party/blink/renderer/core/html/forms/input_type_view.cc
@@ -88,7 +88,7 @@
 }
 
 bool InputTypeView::TypeShouldForceLegacyLayout() const {
-  return true;
+  return false;
 }
 
 LayoutObject* InputTypeView::CreateLayoutObject(const ComputedStyle& style,
diff --git a/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.cc b/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.cc
index 827c987..0222c20 100644
--- a/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.cc
+++ b/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.cc
@@ -698,10 +698,6 @@
   return nullptr;
 }
 
-bool MultipleFieldsTemporalInputTypeView::TypeShouldForceLegacyLayout() const {
-  return false;
-}
-
 String MultipleFieldsTemporalInputTypeView::RawValue() const {
   return GetDateTimeEditElement()->innerText();
 }
diff --git a/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.h b/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.h
index def644d..84697e8 100644
--- a/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.h
+++ b/third_party/blink/renderer/core/html/forms/multiple_fields_temporal_input_type_view.h
@@ -122,7 +122,6 @@
   void UpdateClearButtonVisibility() final;
   base::i18n::TextDirection ComputedTextDirection() final;
   AXObject* PopupRootAXObject() final;
-  bool TypeShouldForceLegacyLayout() const final;
 
   DateTimeEditElement* GetDateTimeEditElement() const;
   SpinButtonElement* GetSpinButtonElement() const;
diff --git a/third_party/blink/renderer/core/html/forms/range_input_type.cc b/third_party/blink/renderer/core/html/forms/range_input_type.cc
index 73f4f3f..970db4ac2 100644
--- a/third_party/blink/renderer/core/html/forms/range_input_type.cc
+++ b/third_party/blink/renderer/core/html/forms/range_input_type.cc
@@ -255,6 +255,10 @@
   GetElement().UserAgentShadowRoot()->AppendChild(container);
 }
 
+bool RangeInputType::TypeShouldForceLegacyLayout() const {
+  return true;
+}
+
 LayoutObject* RangeInputType::CreateLayoutObject(const ComputedStyle&,
                                                  LegacyLayout) const {
   return new LayoutSlider(&GetElement());
diff --git a/third_party/blink/renderer/core/html/forms/range_input_type.h b/third_party/blink/renderer/core/html/forms/range_input_type.h
index ed85f0e..0133798 100644
--- a/third_party/blink/renderer/core/html/forms/range_input_type.h
+++ b/third_party/blink/renderer/core/html/forms/range_input_type.h
@@ -63,6 +63,7 @@
   bool IsSteppable() const override;
   void HandleMouseDownEvent(MouseEvent&) override;
   void HandleKeydownEvent(KeyboardEvent&) override;
+  bool TypeShouldForceLegacyLayout() const override;
   LayoutObject* CreateLayoutObject(const ComputedStyle&,
                                    LegacyLayout) const override;
   void CreateShadowSubtree() override;
diff --git a/third_party/blink/renderer/core/html/forms/text_field_input_type.cc b/third_party/blink/renderer/core/html/forms/text_field_input_type.cc
index c73ceef..61daeb5 100644
--- a/third_party/blink/renderer/core/html/forms/text_field_input_type.cc
+++ b/third_party/blink/renderer/core/html/forms/text_field_input_type.cc
@@ -282,6 +282,10 @@
   style.SetShouldIgnoreOverflowPropertyForInlineBlockBaseline();
 }
 
+bool TextFieldInputType::TypeShouldForceLegacyLayout() const {
+  return true;
+}
+
 LayoutObject* TextFieldInputType::CreateLayoutObject(const ComputedStyle&,
                                                      LegacyLayout) const {
   return new LayoutTextControlSingleLine(&GetElement());
diff --git a/third_party/blink/renderer/core/html/forms/text_field_input_type.h b/third_party/blink/renderer/core/html/forms/text_field_input_type.h
index 38191ace..0e7994c 100644
--- a/third_party/blink/renderer/core/html/forms/text_field_input_type.h
+++ b/third_party/blink/renderer/core/html/forms/text_field_input_type.h
@@ -71,6 +71,7 @@
                 TextControlSetValueSelection) override;
   void UpdateView() override;
   void CustomStyleForLayoutObject(ComputedStyle& style) override;
+  bool TypeShouldForceLegacyLayout() const override;
   LayoutObject* CreateLayoutObject(const ComputedStyle&,
                                    LegacyLayout) const override;
 
diff --git a/third_party/blink/renderer/core/inspector/inspector_dom_snapshot_agent.cc b/third_party/blink/renderer/core/inspector/inspector_dom_snapshot_agent.cc
index 2b178209..f8b396c 100644
--- a/third_party/blink/renderer/core/inspector/inspector_dom_snapshot_agent.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_dom_snapshot_agent.cc
@@ -125,11 +125,9 @@
 
 InspectorDOMSnapshotAgent::InspectorDOMSnapshotAgent(
     InspectedFrames* inspected_frames,
-    InspectorDOMDebuggerAgent* dom_debugger_agent,
-    InspectorPerformanceAgent* performance_agent)
+    InspectorDOMDebuggerAgent* dom_debugger_agent)
     : inspected_frames_(inspected_frames),
       dom_debugger_agent_(dom_debugger_agent),
-      performance_agent_(performance_agent),
       enabled_(&agent_state_, /*default_value=*/false) {}
 
 InspectorDOMSnapshotAgent::~InspectorDOMSnapshotAgent() = default;
@@ -228,17 +226,6 @@
     std::unique_ptr<protocol::Array<protocol::DOMSnapshot::DocumentSnapshot>>*
         documents,
     std::unique_ptr<protocol::Array<String>>* strings) {
-  struct ScopedPerformanceReporter {
-    explicit ScopedPerformanceReporter(
-        InspectorPerformanceAgent* performance_agent)
-        : performance_agent(performance_agent) {
-      performance_agent->WillCaptureSnapshot();
-    }
-    ~ScopedPerformanceReporter() { performance_agent->DidCaptureSnapshot(); }
-    InspectorPerformanceAgent* performance_agent;
-    STACK_ALLOCATED();
-  } scoped_performance_reporter(performance_agent_);
-
   // This function may kick the layout, but external clients may call this
   // function outside of the layout phase.
   FontCachePurgePreventer fontCachePurgePreventer;
@@ -734,7 +721,6 @@
 void InspectorDOMSnapshotAgent::Trace(Visitor* visitor) {
   visitor->Trace(inspected_frames_);
   visitor->Trace(dom_debugger_agent_);
-  visitor->Trace(performance_agent_);
   visitor->Trace(document_order_map_);
   InspectorBaseAgent::Trace(visitor);
 }
diff --git a/third_party/blink/renderer/core/inspector/inspector_dom_snapshot_agent.h b/third_party/blink/renderer/core/inspector/inspector_dom_snapshot_agent.h
index 5353cff..14b7be0 100644
--- a/third_party/blink/renderer/core/inspector/inspector_dom_snapshot_agent.h
+++ b/third_party/blink/renderer/core/inspector/inspector_dom_snapshot_agent.h
@@ -9,7 +9,6 @@
 #include "third_party/blink/renderer/core/css/css_property_names.h"
 #include "third_party/blink/renderer/core/dom/dom_node_ids.h"
 #include "third_party/blink/renderer/core/inspector/inspector_base_agent.h"
-#include "third_party/blink/renderer/core/inspector/inspector_performance_agent.h"
 #include "third_party/blink/renderer/core/inspector/protocol/DOMSnapshot.h"
 #include "third_party/blink/renderer/core/layout/layout_text.h"
 #include "third_party/blink/renderer/platform/wtf/hash_map.h"
@@ -27,9 +26,7 @@
 class CORE_EXPORT InspectorDOMSnapshotAgent final
     : public InspectorBaseAgent<protocol::DOMSnapshot::Metainfo> {
  public:
-  InspectorDOMSnapshotAgent(InspectedFrames*,
-                            InspectorDOMDebuggerAgent*,
-                            InspectorPerformanceAgent*);
+  InspectorDOMSnapshotAgent(InspectedFrames*, InspectorDOMDebuggerAgent*);
   ~InspectorDOMSnapshotAgent() override;
   void Trace(Visitor*) override;
 
@@ -131,7 +128,6 @@
   DocumentOrderMap document_order_map_;
   Member<InspectedFrames> inspected_frames_;
   Member<InspectorDOMDebuggerAgent> dom_debugger_agent_;
-  Member<InspectorPerformanceAgent> performance_agent_;
   InspectorAgentState::Boolean enabled_;
   DISALLOW_COPY_AND_ASSIGN(InspectorDOMSnapshotAgent);
 };
diff --git a/third_party/blink/renderer/core/inspector/inspector_performance_agent.cc b/third_party/blink/renderer/core/inspector/inspector_performance_agent.cc
index ac19e43..0d846b1 100644
--- a/third_party/blink/renderer/core/inspector/inspector_performance_agent.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_performance_agent.cc
@@ -57,7 +57,7 @@
   task_start_ticks_ = base::TimeTicks();
   script_start_ticks_ = base::TimeTicks();
   v8compile_start_ticks_ = base::TimeTicks();
-  capture_snapshot_start_ticks_ = base::TimeTicks();
+  devtools_command_start_ticks_ = base::TimeTicks();
   thread_time_origin_ = GetThreadTimeNow();
 }
 
@@ -110,6 +110,10 @@
     return Response::Error("Invalid time domain specification.");
   }
 
+  // Prevent this devtools command duration from being collected to avoid
+  // using start and end time from different time domains.
+  devtools_command_start_ticks_ = base::TimeTicks();
+
   return Response::OK();
 }
 
@@ -154,8 +158,12 @@
   AppendMetric(result.get(), "LayoutDuration", layout_duration_.InSecondsF());
   AppendMetric(result.get(), "RecalcStyleDuration",
                recalc_style_duration_.InSecondsF());
-  AppendMetric(result.get(), "CaptureSnapshotDuration",
-               capture_snapshot_duration_.InSecondsF());
+
+  base::TimeDelta devtools_command_duration = devtools_command_duration_;
+  if (!devtools_command_start_ticks_.is_null())
+    devtools_command_duration += now - devtools_command_start_ticks_;
+  AppendMetric(result.get(), "DevToolsCommandDuration",
+               devtools_command_duration.InSecondsF());
 
   base::TimeDelta script_duration = script_duration_;
   if (!script_start_ticks_.is_null())
@@ -174,10 +182,10 @@
   AppendMetric(result.get(), "TaskDuration", task_duration.InSecondsF());
 
   // Compute task time not accounted for by other metrics.
-  base::TimeDelta other_tasks_duration =
-      task_duration -
-      (script_duration + v8compile_duration + recalc_style_duration_ +
-       layout_duration_ + capture_snapshot_duration_);
+  base::TimeDelta known_tasks_duration =
+      script_duration + v8compile_duration + recalc_style_duration_ +
+      layout_duration_ + devtools_command_duration;
+  base::TimeDelta other_tasks_duration = task_duration - known_tasks_duration;
   AppendMetric(result.get(), "TaskOtherDuration",
                other_tasks_duration.InSecondsF());
 
@@ -232,8 +240,13 @@
 void InspectorPerformanceAgent::ScriptEnds() {
   if (--script_call_depth_)
     return;
-  script_duration_ += GetTimeTicksNow() - script_start_ticks_;
+  base::TimeDelta delta = GetTimeTicksNow() - script_start_ticks_;
+  script_duration_ += delta;
   script_start_ticks_ = base::TimeTicks();
+
+  // Exclude nested script execution from devtools command duration.
+  if (!devtools_command_start_ticks_.is_null())
+    devtools_command_start_ticks_ += delta;
 }
 
 void InspectorPerformanceAgent::Will(const probe::CallFunction& probe) {
@@ -262,11 +275,14 @@
   recalc_style_count_++;
   recalc_style_start_ticks_ = base::TimeTicks();
 
-  // Exclude nested style re-calculations from script and layout duration.
+  // Exclude nested style re-calculations from script, layout and devtools
+  // command durations.
   if (!script_start_ticks_.is_null())
     script_start_ticks_ += delta;
   if (!layout_start_ticks_.is_null())
     layout_start_ticks_ += delta;
+  if (!devtools_command_start_ticks_.is_null())
+    devtools_command_start_ticks_ += delta;
 }
 
 void InspectorPerformanceAgent::Will(const probe::UpdateLayout& probe) {
@@ -282,12 +298,14 @@
   layout_count_++;
   layout_start_ticks_ = base::TimeTicks();
 
-  // Exclude nested layout update from script and style re-calculations
-  // duration.
+  // Exclude nested layout update from script, style re-calculations and
+  // devtools command durations.
   if (!script_start_ticks_.is_null())
     script_start_ticks_ += delta;
   if (!recalc_style_start_ticks_.is_null())
     recalc_style_start_ticks_ += delta;
+  if (!devtools_command_start_ticks_.is_null())
+    devtools_command_start_ticks_ += delta;
 }
 
 void InspectorPerformanceAgent::Will(const probe::V8Compile& probe) {
@@ -296,8 +314,25 @@
 }
 
 void InspectorPerformanceAgent::Did(const probe::V8Compile& probe) {
-  v8compile_duration_ += GetTimeTicksNow() - v8compile_start_ticks_;
+  base::TimeDelta delta = GetTimeTicksNow() - v8compile_start_ticks_;
+  v8compile_duration_ += delta;
   v8compile_start_ticks_ = base::TimeTicks();
+
+  // Exclude nested script compilation from devtools command duration.
+  if (!devtools_command_start_ticks_.is_null())
+    devtools_command_start_ticks_ += delta;
+}
+
+void InspectorPerformanceAgent::WillStartDebuggerTask() {
+  devtools_command_start_ticks_ = GetTimeTicksNow();
+}
+
+void InspectorPerformanceAgent::DidFinishDebuggerTask() {
+  if (!devtools_command_start_ticks_.is_null()) {
+    devtools_command_duration_ +=
+        GetTimeTicksNow() - devtools_command_start_ticks_;
+    devtools_command_start_ticks_ = base::TimeTicks();
+  }
 }
 
 // Will/DidProcessTask() ignore caller provided times to ensure time domain
@@ -308,21 +343,10 @@
 
 void InspectorPerformanceAgent::DidProcessTask(base::TimeTicks start_time,
                                                base::TimeTicks end_time) {
-  if (!task_start_ticks_.is_null())
+  if (!task_start_ticks_.is_null()) {
     task_duration_ += GetTimeTicksNow() - task_start_ticks_;
-  task_start_ticks_ = base::TimeTicks();
-}
-
-void InspectorPerformanceAgent::WillCaptureSnapshot() {
-  capture_snapshot_start_ticks_ = GetTimeTicksNow();
-}
-
-void InspectorPerformanceAgent::DidCaptureSnapshot() {
-  if (!capture_snapshot_start_ticks_.is_null()) {
-    capture_snapshot_duration_ +=
-        GetTimeTicksNow() - capture_snapshot_start_ticks_;
+    task_start_ticks_ = base::TimeTicks();
   }
-  capture_snapshot_start_ticks_ = base::TimeTicks();
 }
 
 void InspectorPerformanceAgent::Trace(Visitor* visitor) {
diff --git a/third_party/blink/renderer/core/inspector/inspector_performance_agent.h b/third_party/blink/renderer/core/inspector/inspector_performance_agent.h
index a28a02f..3163782 100644
--- a/third_party/blink/renderer/core/inspector/inspector_performance_agent.h
+++ b/third_party/blink/renderer/core/inspector/inspector_performance_agent.h
@@ -56,16 +56,14 @@
   void Did(const probe::UpdateLayout&);
   void Will(const probe::V8Compile&);
   void Did(const probe::V8Compile&);
+  void WillStartDebuggerTask();
+  void DidFinishDebuggerTask();
 
   // TaskTimeObserver implementation.
   void WillProcessTask(base::TimeTicks start_time) override;
   void DidProcessTask(base::TimeTicks start_time,
                       base::TimeTicks end_time) override;
 
-  // Called from DOMSnapshotAgent
-  void WillCaptureSnapshot();
-  void DidCaptureSnapshot();
-
  private:
   void ScriptStarts();
   void ScriptEnds();
@@ -84,8 +82,8 @@
   base::TimeTicks task_start_ticks_;
   base::TimeDelta v8compile_duration_;
   base::TimeTicks v8compile_start_ticks_;
-  base::TimeDelta capture_snapshot_duration_;
-  base::TimeTicks capture_snapshot_start_ticks_;
+  base::TimeDelta devtools_command_duration_;
+  base::TimeTicks devtools_command_start_ticks_;
   base::TimeTicks thread_time_origin_;
   uint64_t layout_count_ = 0;
   uint64_t recalc_style_count_ = 0;
diff --git a/third_party/blink/renderer/core/layout/layout_theme_mac.mm b/third_party/blink/renderer/core/layout/layout_theme_mac.mm
index aeb573c..c56027d5 100644
--- a/third_party/blink/renderer/core/layout/layout_theme_mac.mm
+++ b/third_party/blink/renderer/core/layout/layout_theme_mac.mm
@@ -180,13 +180,13 @@
   return false;
 }
 
-Color GetSystemColor(MacSystemColorID color_id) {
+Color GetSystemColor(MacSystemColorID color_id, WebColorScheme color_scheme) {
   // In tests, a WebSandboxSupport may not be set up. Just return a dummy
   // color, in this case, black.
   auto* sandbox_support = Platform::Current()->GetSandboxSupport();
   if (!sandbox_support)
     return Color();
-  return sandbox_support->GetSystemColor(color_id);
+  return sandbox_support->GetSystemColor(color_id, color_scheme);
 }
 
 // Helper functions used by a bunch of different control parts.
@@ -243,12 +243,14 @@
 
 Color LayoutThemeMac::PlatformActiveSelectionBackgroundColor(
     WebColorScheme color_scheme) const {
-  return GetSystemColor(MacSystemColorID::kSelectedTextBackground);
+  return GetSystemColor(MacSystemColorID::kSelectedTextBackground,
+                        color_scheme);
 }
 
 Color LayoutThemeMac::PlatformInactiveSelectionBackgroundColor(
     WebColorScheme color_scheme) const {
-  return GetSystemColor(MacSystemColorID::kSecondarySelectedControl);
+  return GetSystemColor(MacSystemColorID::kSecondarySelectedControl,
+                        color_scheme);
 }
 
 Color LayoutThemeMac::PlatformActiveSelectionForegroundColor(
@@ -258,7 +260,8 @@
 
 Color LayoutThemeMac::PlatformActiveListBoxSelectionBackgroundColor(
     WebColorScheme color_scheme) const {
-  return GetSystemColor(MacSystemColorID::kAlternateSelectedControl);
+  return GetSystemColor(MacSystemColorID::kAlternateSelectedControl,
+                        color_scheme);
 }
 
 Color LayoutThemeMac::PlatformActiveListBoxSelectionForegroundColor(
@@ -296,12 +299,14 @@
 
 Color LayoutThemeMacRefresh::PlatformActiveSelectionBackgroundColor(
     WebColorScheme color_scheme) const {
-  return GetSystemColor(MacSystemColorID::kSelectedTextBackground);
+  return GetSystemColor(MacSystemColorID::kSelectedTextBackground,
+                        color_scheme);
 }
 
 Color LayoutThemeMacRefresh::PlatformInactiveSelectionBackgroundColor(
     WebColorScheme color_scheme) const {
-  return GetSystemColor(MacSystemColorID::kSecondarySelectedControl);
+  return GetSystemColor(MacSystemColorID::kSecondarySelectedControl,
+                        color_scheme);
 }
 
 Color LayoutThemeMacRefresh::PlatformActiveSelectionForegroundColor(
@@ -324,8 +329,11 @@
                                      : kDefaultFocusRingColor;
   }
 
+  // TODO(crbug.com/929098) Need to pass an appropriate color scheme here.
+  WebColorScheme color_scheme = ComputedStyle::InitialStyle().UsedColorScheme();
+
   Color keyboard_focus_indicator =
-      GetSystemColor(MacSystemColorID::kKeyboardFocusIndicator);
+      GetSystemColor(MacSystemColorID::kKeyboardFocusIndicator, color_scheme);
   // Take the RGB values from the keyboard_focus_indicator color, but use a
   // different alpha value to avoid having a color too light.
   Color focus_ring =
@@ -338,9 +346,9 @@
   // changed.
   if (@available(macOS 10.14, *)) {
     static const Color kControlBlueAccentColor =
-        GetSystemColor(MacSystemColorID::kControlAccentBlueColor);
+        GetSystemColor(MacSystemColorID::kControlAccentBlueColor, color_scheme);
     if (kControlBlueAccentColor ==
-        GetSystemColor(MacSystemColorID::kControlAccentColor)) {
+        GetSystemColor(MacSystemColorID::kControlAccentColor, color_scheme)) {
       return GetCustomFocusRingColor();
     }
   } else {
@@ -417,80 +425,89 @@
 
 Color LayoutThemeMac::SystemColor(CSSValueID css_value_id,
                                   WebColorScheme color_scheme) const {
+  if (!Platform::Current()->GetSandboxSupport())
+    return LayoutTheme::SystemColor(css_value_id, color_scheme);
+
   switch (css_value_id) {
     case CSSValueID::kActiveborder:
-      return GetSystemColor(MacSystemColorID::kKeyboardFocusIndicator);
+      return GetSystemColor(MacSystemColorID::kKeyboardFocusIndicator,
+                            color_scheme);
     case CSSValueID::kActivecaption:
-      return GetSystemColor(MacSystemColorID::kWindowFrameText);
+      return GetSystemColor(MacSystemColorID::kWindowFrameText, color_scheme);
     case CSSValueID::kAppworkspace:
-      return GetSystemColor(MacSystemColorID::kHeader);
+      return GetSystemColor(MacSystemColorID::kHeader, color_scheme);
     case CSSValueID::kBackground:
       // Use theme independent default.
       break;
     case CSSValueID::kButtonface:
-      return GetSystemColor(MacSystemColorID::kControlBackground);
+      return GetSystemColor(MacSystemColorID::kControlBackground, color_scheme);
     case CSSValueID::kButtonhighlight:
-      return GetSystemColor(MacSystemColorID::kControlHighlight);
+      return GetSystemColor(MacSystemColorID::kControlHighlight, color_scheme);
     case CSSValueID::kButtonshadow:
-      return GetSystemColor(MacSystemColorID::kControlShadow);
+      return GetSystemColor(MacSystemColorID::kControlShadow, color_scheme);
     case CSSValueID::kButtontext:
-      return GetSystemColor(MacSystemColorID::kControlText);
+      return GetSystemColor(MacSystemColorID::kControlText, color_scheme);
     case CSSValueID::kCaptiontext:
-      return GetSystemColor(MacSystemColorID::kText);
+      return GetSystemColor(MacSystemColorID::kText, color_scheme);
     case CSSValueID::kField:
-      return GetSystemColor(MacSystemColorID::kControlBackground);
+      return GetSystemColor(MacSystemColorID::kControlBackground, color_scheme);
     case CSSValueID::kFieldtext:
-      return GetSystemColor(MacSystemColorID::kText);
+      return GetSystemColor(MacSystemColorID::kText, color_scheme);
     case CSSValueID::kGraytext:
-      return GetSystemColor(MacSystemColorID::kDisabledControlText);
+      return GetSystemColor(MacSystemColorID::kDisabledControlText,
+                            color_scheme);
     case CSSValueID::kHighlight:
-      return GetSystemColor(MacSystemColorID::kSelectedTextBackground);
+      return GetSystemColor(MacSystemColorID::kSelectedTextBackground,
+                            color_scheme);
     case CSSValueID::kHighlighttext:
-      return GetSystemColor(MacSystemColorID::kSelectedText);
+      return GetSystemColor(MacSystemColorID::kSelectedText, color_scheme);
     case CSSValueID::kInactiveborder:
-      return GetSystemColor(MacSystemColorID::kControlBackground);
+      return GetSystemColor(MacSystemColorID::kControlBackground, color_scheme);
     case CSSValueID::kInactivecaption:
-      return GetSystemColor(MacSystemColorID::kControlBackground);
+      return GetSystemColor(MacSystemColorID::kControlBackground, color_scheme);
     case CSSValueID::kInactivecaptiontext:
-      return GetSystemColor(MacSystemColorID::kText);
+      return GetSystemColor(MacSystemColorID::kText, color_scheme);
     case CSSValueID::kInfobackground:
       // There is no corresponding NSColor for this so we use a hard coded
       // value.
       return 0xFFFBFCC5;
     case CSSValueID::kInfotext:
-      return GetSystemColor(MacSystemColorID::kText);
+      return GetSystemColor(MacSystemColorID::kText, color_scheme);
     case CSSValueID::kMenu:
-      return GetSystemColor(MacSystemColorID::kMenuBackground);
+      return GetSystemColor(MacSystemColorID::kMenuBackground, color_scheme);
     case CSSValueID::kMenutext:
-      return GetSystemColor(MacSystemColorID::kSelectedMenuItemText);
+      return GetSystemColor(MacSystemColorID::kSelectedMenuItemText,
+                            color_scheme);
     case CSSValueID::kScrollbar:
-      return GetSystemColor(MacSystemColorID::kScrollBar);
+      return GetSystemColor(MacSystemColorID::kScrollBar, color_scheme);
     case CSSValueID::kText:
-      return GetSystemColor(MacSystemColorID::kText);
+      return GetSystemColor(MacSystemColorID::kText, color_scheme);
     case CSSValueID::kThreeddarkshadow:
-      return GetSystemColor(MacSystemColorID::kControlDarkShadow);
+      return GetSystemColor(MacSystemColorID::kControlDarkShadow, color_scheme);
     case CSSValueID::kThreedshadow:
-      return GetSystemColor(MacSystemColorID::kShadow);
+      return GetSystemColor(MacSystemColorID::kShadow, color_scheme);
     case CSSValueID::kThreedface:
       // We use this value instead of NSColor's controlColor to avoid website
       // incompatibilities. We may want to change this to use the NSColor in
       // future.
       return 0xFFC0C0C0;
     case CSSValueID::kThreedhighlight:
-      return GetSystemColor(MacSystemColorID::kHighlight);
+      return GetSystemColor(MacSystemColorID::kHighlight, color_scheme);
     case CSSValueID::kThreedlightshadow:
-      return GetSystemColor(MacSystemColorID::kControlLightHighlight);
+      return GetSystemColor(MacSystemColorID::kControlLightHighlight,
+                            color_scheme);
     case CSSValueID::kWebkitFocusRingColor:
-      return GetSystemColor(MacSystemColorID::kKeyboardFocusIndicator);
+      return GetSystemColor(MacSystemColorID::kKeyboardFocusIndicator,
+                            color_scheme);
     case CSSValueID::kWindow:
     case CSSValueID::kCanvas:
-      return GetSystemColor(MacSystemColorID::kWindowBackground);
+      return GetSystemColor(MacSystemColorID::kWindowBackground, color_scheme);
     case CSSValueID::kWindowframe:
-      return GetSystemColor(MacSystemColorID::kWindowFrame);
+      return GetSystemColor(MacSystemColorID::kWindowFrame, color_scheme);
     case CSSValueID::kWindowtext:
-      return GetSystemColor(MacSystemColorID::kWindowFrameText);
+      return GetSystemColor(MacSystemColorID::kWindowFrameText, color_scheme);
     case CSSValueID::kCanvastext:
-      return GetSystemColor(MacSystemColorID::kText);
+      return GetSystemColor(MacSystemColorID::kText, color_scheme);
     default:
       break;
   }
@@ -1060,7 +1077,8 @@
 }
 
 bool LayoutThemeMac::UsesTestModeFocusRingColor() const {
-  return WebTestSupport::IsRunningWebTest();
+  return WebTestSupport::IsRunningWebTest() ||
+         !Platform::Current()->GetSandboxSupport();
 }
 
 NSView* LayoutThemeMac::DocumentView() const {
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_printer.cc b/third_party/blink/renderer/core/paint/paint_property_tree_printer.cc
index 057f90e..59a6b43f 100644
--- a/third_party/blink/renderer/core/paint/paint_property_tree_printer.cc
+++ b/third_party/blink/renderer/core/paint/paint_property_tree_printer.cc
@@ -54,7 +54,7 @@
     for (const auto* fragment = &object.FirstFragment(); fragment;
          fragment = fragment->NextFragment()) {
       if (const auto* properties = fragment->PaintProperties())
-        Traits::AddObjectPaintProperties(object, *properties, *this);
+        Traits::AddObjectPaintProperties(*properties, *this);
     }
     for (const auto* child = object.SlowFirstChild(); child;
          child = child->NextSibling()) {
@@ -75,7 +75,6 @@
     printer.AddNode(visual_viewport.GetScrollTranslationNode());
   }
   static void AddObjectPaintProperties(
-      const LayoutObject& object,
       const ObjectPaintProperties& properties,
       PropertyTreePrinter<TransformPaintPropertyNode>& printer) {
     printer.AddNode(properties.PaintOffsetTranslation());
@@ -95,7 +94,6 @@
       const VisualViewport& visual_viewport,
       PropertyTreePrinter<ClipPaintPropertyNode>& printer) {}
   static void AddObjectPaintProperties(
-      const LayoutObject& object,
       const ObjectPaintProperties& properties,
       PropertyTreePrinter<ClipPaintPropertyNode>& printer) {
     printer.AddNode(properties.FragmentClip());
@@ -118,7 +116,6 @@
       PropertyTreePrinter<EffectPaintPropertyNode>& printer) {}
 
   static void AddObjectPaintProperties(
-      const LayoutObject& object,
       const ObjectPaintProperties& properties,
       PropertyTreePrinter<EffectPaintPropertyNode>& printer) {
     printer.AddNode(properties.Effect());
@@ -141,7 +138,6 @@
   }
 
   static void AddObjectPaintProperties(
-      const LayoutObject& object,
       const ObjectPaintProperties& properties,
       PropertyTreePrinter<ScrollPaintPropertyNode>& printer) {
     printer.AddNode(properties.Scroll());
diff --git a/third_party/blink/renderer/core/probe/core_probes.json5 b/third_party/blink/renderer/core/probe/core_probes.json5
index 6be4d7f0..f75394c 100644
--- a/third_party/blink/renderer/core/probe/core_probes.json5
+++ b/third_party/blink/renderer/core/probe/core_probes.json5
@@ -213,6 +213,8 @@
         "RecalculateStyle",
         "UpdateLayout",
         "V8Compile",
+        "WillStartDebuggerTask",
+        "DidFinishDebuggerTask",
       ]
     },
     InspectorTraceEvents: {
diff --git a/third_party/blink/renderer/core/probe/core_probes.pidl b/third_party/blink/renderer/core/probe/core_probes.pidl
index 0fb5ded..c4d4e21 100644
--- a/third_party/blink/renderer/core/probe/core_probes.pidl
+++ b/third_party/blink/renderer/core/probe/core_probes.pidl
@@ -161,6 +161,8 @@
   void ShouldBlockRequest(CoreProbeSink*, const KURL&, bool* result);
   void ShouldBypassServiceWorker(ExecutionContext* context, bool* result);
   void ConsoleTimeStamp(ExecutionContext*, const String& title);
+  void WillStartDebuggerTask(CoreProbeSink*);
+  void DidFinishDebuggerTask(CoreProbeSink*);
   void LifecycleEvent([Keep] LocalFrame*, DocumentLoader*, const char* name, double timestamp);
   void PaintTiming([Keep] Document*, const char* name, double timestamp);
   void DidCreateAudioContext(Document*);
diff --git a/third_party/blink/renderer/core/style/computed_style.h b/third_party/blink/renderer/core/style/computed_style.h
index 7b85c7e1..5fcd7fb5 100644
--- a/third_party/blink/renderer/core/style/computed_style.h
+++ b/third_party/blink/renderer/core/style/computed_style.h
@@ -2587,7 +2587,8 @@
     // property should be canvastext, but since we do not yet ship color-scheme
     // aware system colors, we use this method instead. This should be replaced
     // by default_value:"canvastext" in css_properties.json5.
-    return DarkColorScheme() ? Color::kWhite : Color::kBlack;
+    return LayoutTheme::GetTheme().SystemColor(
+        CSSValueID::kCanvastext, UsedColorSchemeForInitialColors());
   }
 
   Color ForcedBackplateColor() const {
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard.idl b/third_party/blink/renderer/modules/clipboard/clipboard.idl
index ceefcbf8..0f90bb0 100644
--- a/third_party/blink/renderer/modules/clipboard/clipboard.idl
+++ b/third_party/blink/renderer/modules/clipboard/clipboard.idl
@@ -9,8 +9,7 @@
     Exposed=Window
 ] interface Clipboard : EventTarget {
     [MeasureAs=AsyncClipboardAPIRead,
-     CallWith=ScriptState,
-     RuntimeEnabled=AsyncClipboard
+     CallWith=ScriptState
     ] Promise<sequence<ClipboardItem>> read();
 
     [MeasureAs=AsyncClipboardAPIReadText,
@@ -19,8 +18,7 @@
 
 
     [MeasureAs=AsyncClipboardAPIWrite,
-     CallWith=ScriptState,
-     RuntimeEnabled=AsyncClipboard
+     CallWith=ScriptState
     ] Promise<void> write(sequence<ClipboardItem> data);
 
     [MeasureAs=AsyncClipboardAPIWriteText,
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_item.idl b/third_party/blink/renderer/modules/clipboard/clipboard_item.idl
index d9ddf4f1..1024f68 100644
--- a/third_party/blink/renderer/modules/clipboard/clipboard_item.idl
+++ b/third_party/blink/renderer/modules/clipboard/clipboard_item.idl
@@ -5,8 +5,7 @@
 // https://w3c.github.io/clipboard-apis/#clipboard-interface
 
 [
-  Exposed=Window,
-  RuntimeEnabled=AsyncClipboard
+  Exposed=Window
 ] interface ClipboardItem {
   [RaisesException] constructor(record<DOMString, Blob> items,
               optional ClipboardItemOptions options = {});
diff --git a/third_party/blink/renderer/modules/peerconnection/BUILD.gn b/third_party/blink/renderer/modules/peerconnection/BUILD.gn
index 467410d..78de4b53 100644
--- a/third_party/blink/renderer/modules/peerconnection/BUILD.gn
+++ b/third_party/blink/renderer/modules/peerconnection/BUILD.gn
@@ -76,6 +76,10 @@
     "rtc_dtmf_sender.h",
     "rtc_dtmf_tone_change_event.cc",
     "rtc_dtmf_tone_change_event.h",
+    "rtc_encoded_audio_frame.cc",
+    "rtc_encoded_audio_frame.h",
+    "rtc_encoded_video_frame.cc",
+    "rtc_encoded_video_frame.h",
     "rtc_error.cc",
     "rtc_error.h",
     "rtc_error_event.cc",
diff --git a/third_party/blink/renderer/modules/peerconnection/idls.gni b/third_party/blink/renderer/modules/peerconnection/idls.gni
index 3e7db00..006aca8 100644
--- a/third_party/blink/renderer/modules/peerconnection/idls.gni
+++ b/third_party/blink/renderer/modules/peerconnection/idls.gni
@@ -9,6 +9,8 @@
   "rtc_dtls_transport.idl",
   "rtc_dtmf_sender.idl",
   "rtc_dtmf_tone_change_event.idl",
+  "rtc_encoded_video_frame.idl",
+  "rtc_encoded_audio_frame.idl",
   "rtc_error.idl",
   "rtc_error_event.idl",
   "rtc_ice_candidate.idl",
@@ -44,6 +46,7 @@
   "rtc_ice_gather_options.idl",
   "rtc_ice_parameters.idl",
   "rtc_ice_server.idl",
+  "rtc_insertable_streams.idl",
   "rtc_offer_answer_options.idl",
   "rtc_offer_options.idl",
   "rtc_peer_connection_ice_error_event_init.idl",
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
index 4d46233..15929f4 100644
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
@@ -139,13 +139,17 @@
 std::unique_ptr<RTCPeerConnectionHandlerPlatform>
 PeerConnectionDependencyFactory::CreateRTCPeerConnectionHandler(
     RTCPeerConnectionHandlerClient* client,
-    scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
+    scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+    bool force_encoded_audio_insertable_streams,
+    bool force_encoded_video_insertable_streams) {
   // Save histogram data so we can see how much PeerConnection is used.
   // The histogram counts the number of calls to the JS API
   // RTCPeerConnection.
   UpdateWebRTCMethodCount(RTCAPIName::kRTCPeerConnection);
 
-  return std::make_unique<RTCPeerConnectionHandler>(client, this, task_runner);
+  return std::make_unique<RTCPeerConnectionHandler>(
+      client, this, task_runner, force_encoded_audio_insertable_streams,
+      force_encoded_video_insertable_streams);
 }
 
 const scoped_refptr<webrtc::PeerConnectionFactoryInterface>&
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h
index 83f3eb9..ff1fde1 100644
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h
@@ -56,7 +56,9 @@
   std::unique_ptr<RTCPeerConnectionHandlerPlatform>
   CreateRTCPeerConnectionHandler(
       RTCPeerConnectionHandlerClient* client,
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner);
+      scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+      bool force_encoded_audio_insertable_streams,
+      bool force_encoded_video_insertable_streams);
 
   // Create a proxy object for a VideoTrackSource that makes sure it's called on
   // the correct threads.
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory_test.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory_test.cc
index 6226f87..f2a47f4 100644
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory_test.cc
@@ -25,8 +25,9 @@
   MockRTCPeerConnectionHandlerClient client_jsep;
   std::unique_ptr<RTCPeerConnectionHandlerPlatform> pc_handler(
       dependency_factory_->CreateRTCPeerConnectionHandler(
-          &client_jsep,
-          blink::scheduler::GetSingleThreadTaskRunnerForTesting()));
+          &client_jsep, blink::scheduler::GetSingleThreadTaskRunnerForTesting(),
+          /*force_encoded_audio_insertable_streams=*/false,
+          /*force_encoded_video_insertable_streams=*/false));
   EXPECT_TRUE(pc_handler);
 }
 
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc
index 45aedb5..af78a08 100644
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc
@@ -123,7 +123,9 @@
       : RTCPeerConnectionHandler(
             &client_,
             &dependency_factory_,
-            blink::scheduler::GetSingleThreadTaskRunnerForTesting()) {}
+            blink::scheduler::GetSingleThreadTaskRunnerForTesting(),
+            /*force_encoded_audio_insertable_streams=*/false,
+            /*force_encoded_video_insertable_streams=*/false) {}
   MOCK_METHOD0(CloseClientPeerConnection, void());
 
  private:
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_configuration.idl b/third_party/blink/renderer/modules/peerconnection/rtc_configuration.idl
index 662fb9a..16352f50 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_configuration.idl
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_configuration.idl
@@ -54,5 +54,6 @@
     [RuntimeEnabled=RtcAudioJitterBufferMaxPackets] long rtcAudioJitterBufferMaxPackets;
     [RuntimeEnabled=RtcAudioJitterBufferMaxPackets] boolean rtcAudioJitterBufferFastAccelerate;
     [RuntimeEnabled=RtcAudioJitterBufferMaxPackets] long rtcAudioJitterBufferMinDelayMs;
+    [RuntimeEnabled=RTCInsertableStreams] boolean forceEncodedAudioInsertableStreams = false;
+    [RuntimeEnabled=RTCInsertableStreams] boolean forceEncodedVideoInsertableStreams = false;
 };
-
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.cc
new file mode 100644
index 0000000..36f9388
--- /dev/null
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.cc
@@ -0,0 +1,43 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.h"
+
+#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h"
+#include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
+
+namespace blink {
+
+uint64_t RTCEncodedAudioFrame::timestamp() const {
+  return 0;
+}
+
+DOMArrayBuffer* RTCEncodedAudioFrame::data() const {
+  return frame_data_;
+}
+
+DOMArrayBuffer* RTCEncodedAudioFrame::additionalData() const {
+  return nullptr;
+}
+
+void RTCEncodedAudioFrame::setData(DOMArrayBuffer* data) {
+  frame_data_ = data;
+}
+
+String RTCEncodedAudioFrame::toString() const {
+  StringBuilder sb;
+  sb.Append("RTCEncodedAudioFrame{timestamp: ");
+  sb.AppendNumber(timestamp());
+  sb.Append("us, size: ");
+  sb.AppendNumber(data() ? data()->ByteLengthAsSizeT() : 0);
+  sb.Append("}");
+  return sb.ToString();
+}
+
+void RTCEncodedAudioFrame::Trace(Visitor* visitor) {
+  ScriptWrappable::Trace(visitor);
+  visitor->Trace(frame_data_);
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.h b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.h
new file mode 100644
index 0000000..a8ff051
--- /dev/null
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.h
@@ -0,0 +1,38 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_AUDIO_FRAME_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_AUDIO_FRAME_H_
+
+#include <stdint.h>
+
+#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
+#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
+
+namespace blink {
+
+class DOMArrayBuffer;
+
+class RTCEncodedAudioFrame final : public ScriptWrappable {
+  DEFINE_WRAPPERTYPEINFO();
+
+ public:
+  RTCEncodedAudioFrame() = default;
+
+  // rtc_encoded_audio_frame.idl implementation.
+  uint64_t timestamp() const;
+  DOMArrayBuffer* data() const;
+  DOMArrayBuffer* additionalData() const;
+  void setData(DOMArrayBuffer*);
+  String toString() const;
+
+  void Trace(Visitor*) override;
+
+ private:
+  mutable Member<DOMArrayBuffer> frame_data_;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_AUDIO_FRAME_H_
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.idl b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.idl
new file mode 100644
index 0000000..197a0eba
--- /dev/null
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.idl
@@ -0,0 +1,17 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://github.com/alvestrand/webrtc-media-streams/blob/master/explainer.md#api
+// TODO(crbug.com/1052765): Add link to standard when available.
+
+// TODO(crbug.com/1052765): Align with WebCodecs definition once it is stable.
+[RuntimeEnabled=RTCInsertableStreams]
+interface RTCEncodedAudioFrame {
+    readonly attribute unsigned long long timestamp;  // microseconds
+    attribute ArrayBuffer data;
+    // TODO(crbug.com/1052765): Replace this ArrayBuffer with structured data
+    // once we have decided what will be exposed.
+    readonly attribute ArrayBuffer additionalData;
+    stringifier;
+};
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.cc
new file mode 100644
index 0000000..d68b572
--- /dev/null
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.cc
@@ -0,0 +1,86 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.h"
+
+#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h"
+#include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
+#include "third_party/webrtc/api/video/encoded_frame.h"
+#include "third_party/webrtc/api/video/encoded_image.h"
+
+namespace blink {
+
+RTCEncodedVideoFrame::RTCEncodedVideoFrame(
+    std::unique_ptr<webrtc::video_coding::EncodedFrame> delegate,
+    std::vector<uint8_t> additional_data)
+    : delegate_(std::move(delegate)),
+      additional_data_vector_(std::move(additional_data)) {}
+
+String RTCEncodedVideoFrame::type() const {
+  if (!delegate_)
+    return "empty";
+
+  return delegate_->is_keyframe() ? "key" : "delta";
+}
+
+uint64_t RTCEncodedVideoFrame::timestamp() const {
+  return delegate_->ReceivedTime();
+}
+
+DOMArrayBuffer* RTCEncodedVideoFrame::data() const {
+  if (delegate_ && !frame_data_) {
+    frame_data_ = DOMArrayBuffer::Create(delegate_->EncodedImage().data(),
+                                         delegate_->EncodedImage().size());
+  }
+  return frame_data_;
+}
+
+DOMArrayBuffer* RTCEncodedVideoFrame::additionalData() const {
+  if (!additional_data_) {
+    additional_data_ = DOMArrayBuffer::Create(additional_data_vector_.data(),
+                                              additional_data_vector_.size());
+  }
+  return additional_data_;
+}
+
+void RTCEncodedVideoFrame::setData(DOMArrayBuffer* data) {
+  frame_data_ = data;
+  replaced_frame_data_ = true;
+}
+
+String RTCEncodedVideoFrame::toString() const {
+  if (!delegate_)
+    return "empty";
+
+  StringBuilder sb;
+  sb.Append("RTCEncodedVideoFrame{timestamp: ");
+  sb.AppendNumber(timestamp());
+  sb.Append("us, size: ");
+  sb.AppendNumber(data()->ByteLengthAsSizeT());
+  sb.Append(" bytes, type: ");
+  sb.Append(type());
+  sb.Append("}");
+  return sb.ToString();
+}
+
+std::unique_ptr<webrtc::video_coding::EncodedFrame>
+RTCEncodedVideoFrame::PassDelegate() {
+  // Sync the delegate data with |frame_data_| if necessary.
+  if (replaced_frame_data_) {
+    rtc::scoped_refptr<webrtc::EncodedImageBuffer> webrtc_image =
+        webrtc::EncodedImageBuffer::Create(
+            static_cast<const uint8_t*>(frame_data_->Data()),
+            frame_data_->ByteLengthAsSizeT());
+    delegate_->SetEncodedData(std::move(webrtc_image));
+  }
+  return std::move(delegate_);
+}
+
+void RTCEncodedVideoFrame::Trace(Visitor* visitor) {
+  ScriptWrappable::Trace(visitor);
+  visitor->Trace(frame_data_);
+  visitor->Trace(additional_data_);
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.h b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.h
new file mode 100644
index 0000000..e0b3b18
--- /dev/null
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.h
@@ -0,0 +1,63 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_VIDEO_FRAME_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_VIDEO_FRAME_H_
+
+#include <stdint.h>
+
+#include <memory>
+#include <vector>
+
+#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
+#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
+
+namespace webrtc {
+namespace video_coding {
+class EncodedFrame;
+}  // namespace video_coding
+}  // namespace webrtc
+
+namespace blink {
+
+class DOMArrayBuffer;
+
+class RTCEncodedVideoFrame final : public ScriptWrappable {
+  DEFINE_WRAPPERTYPEINFO();
+
+ public:
+  explicit RTCEncodedVideoFrame(
+      std::unique_ptr<webrtc::video_coding::EncodedFrame> delegate,
+      std::vector<uint8_t> generic_descriptor);
+
+  // rtc_encoded_video_frame.idl implementation.
+  String type() const;
+  uint64_t timestamp() const;
+  DOMArrayBuffer* data() const;
+  DOMArrayBuffer* additionalData() const;
+  void setData(DOMArrayBuffer*);
+  String toString() const;
+
+  // Internal API
+  bool HasDelegate() { return !!delegate_; }
+  // Returns and transfers ownership of the internal WebRTC frame
+  // backing this RTCEncodedVideoFrame, leaving the RTCEncodedVideoFrame
+  // without a delegate WebRTC frame.
+  std::unique_ptr<webrtc::video_coding::EncodedFrame> PassDelegate();
+
+  void Trace(Visitor*) override;
+
+ private:
+  std::unique_ptr<webrtc::video_coding::EncodedFrame> delegate_;
+  std::vector<uint8_t> additional_data_vector_;
+  bool replaced_frame_data_ = false;
+  // Exposes encoded frame data from |delegate_|.
+  mutable Member<DOMArrayBuffer> frame_data_;
+  // Exposes data from |additional_data_vector_|.
+  mutable Member<DOMArrayBuffer> additional_data_;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_VIDEO_FRAME_H_
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.idl b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.idl
new file mode 100644
index 0000000..97eed3a2
--- /dev/null
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.idl
@@ -0,0 +1,24 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://github.com/alvestrand/webrtc-media-streams/blob/master/explainer.md#api
+// TODO(crbug.com/1052765): Add link to standard when available.
+
+enum RTCCodedVideoFrameType {
+    "empty",
+    "key",
+    "delta",
+};
+
+// TODO(crbug.com/1052765): Align with WebCodecs definition once it is stable.
+[RuntimeEnabled=RTCInsertableStreams]
+interface RTCEncodedVideoFrame {
+    readonly attribute RTCCodedVideoFrameType type;
+    readonly attribute unsigned long long timestamp;  // microseconds
+    attribute ArrayBuffer data;
+    // TODO(crbug.com/1052765): Replace this ArrayBuffer with structured data
+    // once we have decided what will be exposed.
+    readonly attribute ArrayBuffer additionalData;
+    stringifier;
+};
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_insertable_streams.idl b/third_party/blink/renderer/modules/peerconnection/rtc_insertable_streams.idl
new file mode 100644
index 0000000..5c5a979
--- /dev/null
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_insertable_streams.idl
@@ -0,0 +1,12 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://github.com/alvestrand/webrtc-media-streams/blob/master/explainer.md#api
+// TODO(guidou): Add standards link when available.
+
+[Serializable]
+dictionary RTCInsertableStreams {
+    ReadableStream readableStream;
+    WritableStream writableStream;
+};
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
index 21a71f7..13bfc27 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
@@ -689,7 +689,9 @@
 
   RTCPeerConnection* peer_connection = MakeGarbageCollected<RTCPeerConnection>(
       context, std::move(configuration), rtc_configuration->hasSdpSemantics(),
-      constraints, exception_state);
+      rtc_configuration->forceEncodedAudioInsertableStreams(),
+      rtc_configuration->forceEncodedVideoInsertableStreams(), constraints,
+      exception_state);
   if (exception_state.HadException())
     return nullptr;
 
@@ -728,6 +730,8 @@
     ExecutionContext* context,
     webrtc::PeerConnectionInterface::RTCConfiguration configuration,
     bool sdp_semantics_specified,
+    bool force_encoded_audio_insertable_streams,
+    bool force_encoded_video_insertable_streams,
     MediaConstraints constraints,
     ExceptionState& exception_state)
     : ExecutionContextLifecycleObserver(context),
@@ -745,7 +749,11 @@
       sdp_semantics_specified_(sdp_semantics_specified),
       blink_webrtc_time_diff_(
           base::TimeTicks::Now() - base::TimeTicks() -
-          base::TimeDelta::FromMicroseconds(rtc::TimeMicros())) {
+          base::TimeDelta::FromMicroseconds(rtc::TimeMicros())),
+      force_encoded_audio_insertable_streams_(
+          force_encoded_audio_insertable_streams),
+      force_encoded_video_insertable_streams_(
+          force_encoded_video_insertable_streams) {
   Document* document = Document::From(GetExecutionContext());
 
   InstanceCounters::IncrementCounter(
@@ -777,7 +785,9 @@
     peer_handler_ =
         PeerConnectionDependencyFactory::GetInstance()
             ->CreateRTCPeerConnectionHandler(
-                this, document->GetTaskRunner(TaskType::kInternalMedia));
+                this, document->GetTaskRunner(TaskType::kInternalMedia),
+                force_encoded_audio_insertable_streams_,
+                force_encoded_video_insertable_streams_);
   }
 
   if (!peer_handler_) {
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.h b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.h
index 5586d3c..5759cfe 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.h
@@ -134,6 +134,8 @@
   RTCPeerConnection(ExecutionContext*,
                     webrtc::PeerConnectionInterface::RTCConfiguration,
                     bool sdp_semantics_specified,
+                    bool force_encoded_audio_insertable_streams,
+                    bool force_encoded_video_insertable_streams,
                     MediaConstraints,
                     ExceptionState&);
   ~RTCPeerConnection() override;
@@ -399,6 +401,14 @@
 
   webrtc::SdpSemantics sdp_semantics() { return sdp_semantics_; }
 
+  bool force_encoded_audio_insertable_streams() {
+    return force_encoded_audio_insertable_streams_;
+  }
+
+  bool force_encoded_video_insertable_streams() {
+    return force_encoded_video_insertable_streams_;
+  }
+
   void Trace(Visitor*) override;
 
   base::TimeTicks WebRtcTimestampToBlinkTimestamp(
@@ -623,6 +633,10 @@
 
   // Blink and WebRTC timestamp diff.
   const base::TimeDelta blink_webrtc_time_diff_;
+
+  // Insertable streams.
+  bool force_encoded_audio_insertable_streams_;
+  bool force_encoded_video_insertable_streams_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
index 00f212b..574c99f1 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
@@ -1057,7 +1057,9 @@
 RTCPeerConnectionHandler::RTCPeerConnectionHandler(
     RTCPeerConnectionHandlerClient* client,
     blink::PeerConnectionDependencyFactory* dependency_factory,
-    scoped_refptr<base::SingleThreadTaskRunner> task_runner)
+    scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+    bool force_encoded_audio_insertable_streams,
+    bool force_encoded_video_insertable_streams)
     : initialize_called_(false),
       client_(client),
       is_closed_(false),
@@ -1066,6 +1068,10 @@
           base::MakeRefCounted<blink::WebRtcMediaStreamTrackAdapterMap>(
               dependency_factory_,
               task_runner)),
+      force_encoded_audio_insertable_streams_(
+          force_encoded_audio_insertable_streams),
+      force_encoded_video_insertable_streams_(
+          force_encoded_video_insertable_streams),
       task_runner_(std::move(task_runner)) {
   CHECK(client_);
 
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h
index cd9c6a7..2e0781d 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h
@@ -90,7 +90,9 @@
   RTCPeerConnectionHandler(
       RTCPeerConnectionHandlerClient* client,
       blink::PeerConnectionDependencyFactory* dependency_factory,
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner);
+      scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+      bool force_encoded_audio_insertable_streams,
+      bool force_encoded_video_insertable_streams);
   ~RTCPeerConnectionHandler() override;
 
   // Initialize method only used for unit test.
@@ -197,6 +199,14 @@
   // WebRTC event log fragments sent back from PeerConnection land here.
   void OnWebRtcEventLogWrite(const WTF::Vector<uint8_t>& output);
 
+  bool force_encoded_audio_insertable_streams() {
+    return force_encoded_audio_insertable_streams_;
+  }
+
+  bool force_encoded_video_insertable_streams() {
+    return force_encoded_video_insertable_streams_;
+  }
+
  protected:
   webrtc::PeerConnectionInterface* native_peer_connection() {
     return native_peer_connection_.get();
@@ -403,6 +413,8 @@
   // used when constructing the PeerConnection carry over when
   // SetConfiguration is called.
   webrtc::PeerConnectionInterface::RTCConfiguration configuration_;
+  bool force_encoded_audio_insertable_streams_;
+  bool force_encoded_video_insertable_streams_;
 
   // Record info about the first SessionDescription from the local and
   // remote side to record UMA stats once both are set.  We only check
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
index 4ba74e9..6a6a09d 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
@@ -254,11 +254,15 @@
  public:
   RTCPeerConnectionHandlerUnderTest(
       RTCPeerConnectionHandlerClient* client,
-      blink::PeerConnectionDependencyFactory* dependency_factory)
+      blink::PeerConnectionDependencyFactory* dependency_factory,
+      bool force_encoded_audio_insertable_streams = false,
+      bool force_encoded_video_insertable_streams = false)
       : RTCPeerConnectionHandler(
             client,
             dependency_factory,
-            blink::scheduler::GetSingleThreadTaskRunnerForTesting()) {}
+            blink::scheduler::GetSingleThreadTaskRunnerForTesting(),
+            force_encoded_audio_insertable_streams,
+            force_encoded_video_insertable_streams) {}
 
   blink::MockPeerConnectionImpl* native_peer_connection() {
     return static_cast<blink::MockPeerConnectionImpl*>(
@@ -1273,4 +1277,19 @@
   EXPECT_EQ(label.Utf8(), channel->label());
 }
 
+TEST_F(RTCPeerConnectionHandlerTest, CheckInsertableStreamsConfig) {
+  for (bool force_encoded_audio_insertable_streams : {true, false}) {
+    for (bool force_encoded_video_insertable_streams : {true, false}) {
+      auto handler = std::make_unique<RTCPeerConnectionHandlerUnderTest>(
+          mock_client_.get(), mock_dependency_factory_.get(),
+          force_encoded_audio_insertable_streams,
+          force_encoded_video_insertable_streams);
+      EXPECT_EQ(handler->force_encoded_audio_insertable_streams(),
+                force_encoded_audio_insertable_streams);
+      EXPECT_EQ(handler->force_encoded_video_insertable_streams(),
+                force_encoded_video_insertable_streams);
+    }
+  }
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_test.cc
index ca603a4c..be5675b8 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_test.cc
@@ -379,10 +379,17 @@
 
 class RTCPeerConnectionTest : public testing::Test {
  public:
-  RTCPeerConnection* CreatePC(V8TestingScope& scope,
-                              const String& sdpSemantics = String()) {
+  RTCPeerConnection* CreatePC(
+      V8TestingScope& scope,
+      const String& sdpSemantics = String(),
+      bool force_encoded_audio_insertable_streams = false,
+      bool force_encoded_video_insertable_streams = false) {
     RTCConfiguration* config = RTCConfiguration::Create();
     config->setSdpSemantics(sdpSemantics);
+    config->setForceEncodedAudioInsertableStreams(
+        force_encoded_audio_insertable_streams);
+    config->setForceEncodedVideoInsertableStreams(
+        force_encoded_video_insertable_streams);
     RTCIceServer* ice_server = RTCIceServer::Create();
     ice_server->setUrl("stun:fake.stun.url");
     HeapVector<Member<RTCIceServer>> ice_servers;
@@ -643,6 +650,21 @@
   ASSERT_FALSE(pc->CheckForComplexSdp(sdp).has_value());
 }
 
+TEST_F(RTCPeerConnectionTest, CheckInsertableStreamsConfig) {
+  for (bool force_encoded_audio_insertable_streams : {true, false}) {
+    for (bool force_encoded_video_insertable_streams : {true, false}) {
+      V8TestingScope scope;
+      Persistent<RTCPeerConnection> pc =
+          CreatePC(scope, String(), force_encoded_audio_insertable_streams,
+                   force_encoded_video_insertable_streams);
+      EXPECT_EQ(pc->force_encoded_audio_insertable_streams(),
+                force_encoded_audio_insertable_streams);
+      EXPECT_EQ(pc->force_encoded_video_insertable_streams(),
+                force_encoded_video_insertable_streams);
+    }
+  }
+}
+
 enum class AsyncOperationAction {
   kLeavePending,
   kResolve,
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
index f2b269ef..3447f49 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
@@ -134,6 +134,22 @@
   return promise;
 }
 
+RTCInsertableStreams* RTCRtpReceiver::createEncodedAudioStreams(
+    ScriptState* script_state,
+    ExceptionState& exception_state) {
+  exception_state.ThrowDOMException(DOMExceptionCode::kNotSupportedError,
+                                    "Not supported");
+  return nullptr;
+}
+
+RTCInsertableStreams* RTCRtpReceiver::createEncodedVideoStreams(
+    ScriptState* script_state,
+    ExceptionState& exception_state) {
+  exception_state.ThrowDOMException(DOMExceptionCode::kNotSupportedError,
+                                    "Not supported");
+  return nullptr;
+}
+
 RTCRtpReceiverPlatform* RTCRtpReceiver::platform_receiver() {
   return receiver_.get();
 }
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.h b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.h
index 375f77d..8380bc9 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.h
@@ -23,6 +23,7 @@
 
 namespace blink {
 class RTCDtlsTransport;
+class RTCInsertableStreams;
 class RTCPeerConnection;
 class RTCRtpCapabilities;
 class RTCRtpTransceiver;
@@ -49,6 +50,10 @@
   HeapVector<Member<RTCRtpSynchronizationSource>> getSynchronizationSources();
   HeapVector<Member<RTCRtpContributingSource>> getContributingSources();
   ScriptPromise getStats(ScriptState*);
+  RTCInsertableStreams* createEncodedAudioStreams(ScriptState*,
+                                                  ExceptionState&);
+  RTCInsertableStreams* createEncodedVideoStreams(ScriptState*,
+                                                  ExceptionState&);
 
   RTCRtpReceiverPlatform* platform_receiver();
   MediaStreamVector streams() const;
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.idl b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.idl
index 0d88ea8..868b9c0 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.idl
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.idl
@@ -15,4 +15,6 @@
     sequence<RTCRtpSynchronizationSource> getSynchronizationSources();
     sequence<RTCRtpContributingSource> getContributingSources();
     [CallWith=ScriptState] Promise<RTCStatsReport> getStats();
+    [RuntimeEnabled=RTCInsertableStreams, CallWith=ScriptState, RaisesException] RTCInsertableStreams createEncodedAudioStreams();
+    [RuntimeEnabled=RTCInsertableStreams, CallWith=ScriptState, RaisesException] RTCInsertableStreams createEncodedVideoStreams();
 };
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
index da327e84..0dc2f20 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
@@ -561,6 +561,22 @@
   sender_->SetStreams(stream_ids);
 }
 
+RTCInsertableStreams* RTCRtpSender::createEncodedAudioStreams(
+    ScriptState* script_state,
+    ExceptionState& exception_state) {
+  exception_state.ThrowDOMException(DOMExceptionCode::kNotSupportedError,
+                                    "Not supported");
+  return nullptr;
+}
+
+RTCInsertableStreams* RTCRtpSender::createEncodedVideoStreams(
+    ScriptState* script_state,
+    ExceptionState& exception_state) {
+  exception_state.ThrowDOMException(DOMExceptionCode::kNotSupportedError,
+                                    "Not supported");
+  return nullptr;
+}
+
 void RTCRtpSender::Trace(Visitor* visitor) {
   visitor->Trace(pc_);
   visitor->Trace(track_);
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.h b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.h
index fe8958b..c9d86b0 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.h
@@ -25,6 +25,7 @@
 class MediaStreamTrack;
 class RTCDtlsTransport;
 class RTCDTMFSender;
+class RTCInsertableStreams;
 class RTCPeerConnection;
 class RTCRtpCapabilities;
 class RTCRtpTransceiver;
@@ -59,6 +60,10 @@
   ScriptPromise setParameters(ScriptState*, const RTCRtpSendParameters*);
   ScriptPromise getStats(ScriptState*);
   void setStreams(HeapVector<Member<MediaStream>> streams, ExceptionState&);
+  RTCInsertableStreams* createEncodedAudioStreams(ScriptState*,
+                                                  ExceptionState&);
+  RTCInsertableStreams* createEncodedVideoStreams(ScriptState*,
+                                                  ExceptionState&);
 
   RTCRtpSenderPlatform* web_sender();
   // Sets the track. This must be called when the |RTCRtpSenderPlatform| has its
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.idl b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.idl
index bcef231..54f446de 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.idl
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.idl
@@ -15,5 +15,7 @@
     [Measure] readonly attribute RTCDTMFSender? dtmf;
     [Measure, RaisesException] void setStreams(MediaStream... streams);
     [CallWith=ScriptState] Promise<RTCStatsReport> getStats();
+    [RuntimeEnabled=RTCInsertableStreams, CallWith=ScriptState, RaisesException] RTCInsertableStreams createEncodedAudioStreams();
+    [RuntimeEnabled=RTCInsertableStreams, CallWith=ScriptState, RaisesException] RTCInsertableStreams createEncodedVideoStreams();
     // TODO(hbos): Implement the rest of RTCRtpSender, https://crbug.com/700916.
 };
diff --git a/third_party/blink/renderer/modules/quota/storage_estimate.idl b/third_party/blink/renderer/modules/quota/storage_estimate.idl
index 46b9a73..78c827a 100644
--- a/third_party/blink/renderer/modules/quota/storage_estimate.idl
+++ b/third_party/blink/renderer/modules/quota/storage_estimate.idl
@@ -7,5 +7,5 @@
 dictionary StorageEstimate {
     unsigned long long usage;
     unsigned long long quota;
-    [RuntimeEnabled=StorageQuotaDetails] StorageUsageDetails usageDetails;
+    StorageUsageDetails usageDetails;
 };
diff --git a/third_party/blink/renderer/modules/storage/storage_controller_test.cc b/third_party/blink/renderer/modules/storage/storage_controller_test.cc
index ce017666..35af301 100644
--- a/third_party/blink/renderer/modules/storage/storage_controller_test.cc
+++ b/third_party/blink/renderer/modules/storage/storage_controller_test.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/run_loop.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
@@ -65,7 +66,7 @@
 
   StorageController::DomStorageConnection connection;
   PostCrossThreadTask(
-      *base::CreateSequencedTaskRunner({base::ThreadPool()}), FROM_HERE,
+      *base::ThreadPool::CreateSequencedTaskRunner({}), FROM_HERE,
       CrossThreadBindOnce(
           [](mojo::PendingReceiver<mojom::blink::DomStorage> receiver) {
             mojo::MakeSelfOwnedReceiver(std::make_unique<MockDomStorage>(),
@@ -116,7 +117,7 @@
   Persistent<FakeAreaSource> source_area =
       MakeGarbageCollected<FakeAreaSource>(kPageUrl);
 
-  auto task_runner = base::CreateSequencedTaskRunner({base::ThreadPool()});
+  auto task_runner = base::ThreadPool::CreateSequencedTaskRunner({});
 
   auto mock_dom_storage = std::make_unique<MockDomStorage>();
   MockDomStorage* dom_storage_ptr = mock_dom_storage.get();
diff --git a/third_party/blink/renderer/modules/webdatabase/web_database_host.cc b/third_party/blink/renderer/modules/webdatabase/web_database_host.cc
index ca564e3..d3615747 100644
--- a/third_party/blink/renderer/modules/webdatabase/web_database_host.cc
+++ b/third_party/blink/renderer/modules/webdatabase/web_database_host.cc
@@ -9,6 +9,7 @@
 #include "base/single_thread_task_runner.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
 #include "third_party/blink/public/mojom/webdatabase/web_database.mojom-blink.h"
 #include "third_party/blink/public/platform/platform.h"
@@ -38,9 +39,8 @@
   if (!shared_remote_) {
     DCHECK(pending_remote_);
     shared_remote_ = mojo::SharedRemote<mojom::blink::WebDatabaseHost>(
-        std::move(pending_remote_),
-        base::CreateSequencedTaskRunner(
-            {base::ThreadPool(), base::WithBaseSyncPrimitives()}));
+        std::move(pending_remote_), base::ThreadPool::CreateSequencedTaskRunner(
+                                        {base::WithBaseSyncPrimitives()}));
   }
 
   return *shared_remote_;
diff --git a/third_party/blink/renderer/platform/blob/blob_bytes_provider.cc b/third_party/blink/renderer/platform/blob/blob_bytes_provider.cc
index 22cac3da..00e755e 100644
--- a/third_party/blink/renderer/platform/blob/blob_bytes_provider.cc
+++ b/third_party/blink/renderer/platform/blob/blob_bytes_provider.cc
@@ -6,6 +6,7 @@
 
 #include "base/numerics/safe_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/platform/instrumentation/histogram.h"
@@ -117,8 +118,8 @@
 // static
 BlobBytesProvider* BlobBytesProvider::CreateAndBind(
     mojo::PendingReceiver<mojom::blink::BytesProvider> receiver) {
-  auto task_runner = base::CreateSequencedTaskRunner(
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE});
+  auto task_runner = base::ThreadPool::CreateSequencedTaskRunner(
+      {base::MayBlock(), base::TaskPriority::USER_VISIBLE});
   auto provider = base::WrapUnique(new BlobBytesProvider(task_runner));
   auto* result = provider.get();
   // TODO(mek): Consider binding BytesProvider on the IPC thread instead, only
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
index 6746282c..23fe13a 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
+++ b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
@@ -13,6 +13,7 @@
 #include "cc/trees/layer_tree_host.h"
 #include "cc/trees/mutator_host.h"
 #include "third_party/blink/public/platform/platform.h"
+#include "third_party/blink/renderer/platform/geometry/geometry_as_json.h"
 #include "third_party/blink/renderer/platform/graphics/compositing/content_layer_client_impl.h"
 #include "third_party/blink/renderer/platform/graphics/graphics_context.h"
 #include "third_party/blink/renderer/platform/graphics/paint/clip_paint_property_node.h"
@@ -60,6 +61,14 @@
   root_layer_->RemoveAllChildren();
 }
 
+std::unique_ptr<JSONArray> PaintArtifactCompositor::GetPendingLayersAsJSON(
+    const PaintArtifact* paint_artifact) const {
+  std::unique_ptr<JSONArray> result = std::make_unique<JSONArray>();
+  for (const PendingLayer& pending_layer : pending_layers_)
+    result->PushObject(pending_layer.ToJSON(paint_artifact));
+  return result;
+}
+
 // Get a JSON representation of what layers exist for this PAC.  Note that
 // |paint_artifact| is only needed for pre-CAP mode.
 std::unique_ptr<JSONObject> PaintArtifactCompositor::GetLayersAsJSON(
@@ -477,6 +486,30 @@
   return float_clip_rect.IsTight() ? float_clip_rect.Rect() : FloatRect();
 }
 
+std::unique_ptr<JSONObject> PaintArtifactCompositor::PendingLayer::ToJSON(
+    const PaintArtifact* paint_artifact) const {
+  std::unique_ptr<JSONObject> result = std::make_unique<JSONObject>();
+  result->SetArray("bounds", RectAsJSONArray(bounds));
+  result->SetArray("rect_known_to_be_opaque",
+                   RectAsJSONArray(rect_known_to_be_opaque));
+  result->SetObject("property_tree_state", property_tree_state.ToJSON());
+  result->SetArray("offset_of_decomposited_transforms",
+                   PointAsJSONArray(offset_of_decomposited_transforms));
+  std::unique_ptr<JSONArray> chunks = std::make_unique<JSONArray>();
+  for (wtf_size_t chunk_index : paint_chunk_indices) {
+    if (paint_artifact) {
+      StringBuilder sb;
+      sb.AppendFormat("index=%i ", chunk_index);
+      sb.Append(paint_artifact->PaintChunks()[chunk_index].ToString());
+      chunks->PushString(sb.ToString());
+    } else {
+      chunks->PushInteger(chunk_index);
+    }
+  }
+  result->SetArray("paint_chunks", std::move(chunks));
+  return result;
+}
+
 FloatRect PaintArtifactCompositor::PendingLayer::VisualRectForOverlapTesting()
     const {
   FloatClipRect visual_rect(bounds);
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.h b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.h
index 45eca060..053b69b 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.h
+++ b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.h
@@ -167,6 +167,9 @@
   // going to be removed from its frame.
   void WillBeRemovedFromFrame();
 
+  std::unique_ptr<JSONArray> GetPendingLayersAsJSON(
+      const PaintArtifact* = nullptr) const;
+
   std::unique_ptr<JSONObject> GetLayersAsJSON(
       LayerTreeFlags,
       const PaintArtifact* = nullptr) const;
@@ -252,6 +255,8 @@
                                                const FloatRect&);
     FloatRect MapRectKnownToBeOpaque(const PropertyTreeState&) const;
 
+    std::unique_ptr<JSONObject> ToJSON(const PaintArtifact* = nullptr) const;
+
     FloatRect VisualRectForOverlapTesting() const;
 
     // The rects are in the space of property_tree_state.
diff --git a/third_party/blink/renderer/platform/graphics/paint/property_tree_state.cc b/third_party/blink/renderer/platform/graphics/paint/property_tree_state.cc
index 690447f4..8d9cbb7 100644
--- a/third_party/blink/renderer/platform/graphics/paint/property_tree_state.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/property_tree_state.cc
@@ -49,6 +49,14 @@
 
 #endif
 
+std::unique_ptr<JSONObject> PropertyTreeState::ToJSON() const {
+  std::unique_ptr<JSONObject> result = std::make_unique<JSONObject>();
+  result->SetObject("transform", transform_->ToJSON());
+  result->SetObject("clip", clip_->ToJSON());
+  result->SetObject("effect", effect_->ToJSON());
+  return result;
+}
+
 size_t PropertyTreeState::CacheMemoryUsageInBytes() const {
   return Clip().CacheMemoryUsageInBytes() +
          Transform().CacheMemoryUsageInBytes();
diff --git a/third_party/blink/renderer/platform/graphics/paint/property_tree_state.h b/third_party/blink/renderer/platform/graphics/paint/property_tree_state.h
index 5fa74731..d8ac0092 100644
--- a/third_party/blink/renderer/platform/graphics/paint/property_tree_state.h
+++ b/third_party/blink/renderer/platform/graphics/paint/property_tree_state.h
@@ -79,6 +79,7 @@
   // Dumps the tree from this state up to the root as a string.
   String ToTreeString() const;
 #endif
+  std::unique_ptr<JSONObject> ToJSON() const;
 
   // Returns memory usage of the transform & clip caches of this state plus
   // ancestors.
diff --git a/third_party/blink/renderer/platform/heap/BUILD.gn b/third_party/blink/renderer/platform/heap/BUILD.gn
index 01488d44..15c1c7d 100644
--- a/third_party/blink/renderer/platform/heap/BUILD.gn
+++ b/third_party/blink/renderer/platform/heap/BUILD.gn
@@ -46,6 +46,7 @@
     "blink_gc_memory_dump_provider.h",
     "cancelable_task_scheduler.cc",
     "cancelable_task_scheduler.h",
+    "collection_support/heap_vector_backing.h",
     "disallow_new_wrapper.h",
     "finalizer_traits.h",
     "garbage_collected.h",
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
new file mode 100644
index 0000000..de4095b
--- /dev/null
+++ b/third_party/blink/renderer/platform/heap/collection_support/heap_vector_backing.h
@@ -0,0 +1,203 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_COLLECTION_SUPPORT_HEAP_VECTOR_BACKING_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_COLLECTION_SUPPORT_HEAP_VECTOR_BACKING_H_
+
+#include "base/logging.h"
+#include "third_party/blink/renderer/platform/heap/finalizer_traits.h"
+#include "third_party/blink/renderer/platform/heap/gc_info.h"
+#include "third_party/blink/renderer/platform/heap/heap.h"
+#include "third_party/blink/renderer/platform/heap/thread_state.h"
+#include "third_party/blink/renderer/platform/heap/threading_traits.h"
+#include "third_party/blink/renderer/platform/heap/trace_traits.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
+
+namespace blink {
+
+template <typename T, typename Traits = WTF::VectorTraits<T>>
+class HeapVectorBacking final {
+  DISALLOW_NEW();
+  IS_GARBAGE_COLLECTED_TYPE();
+
+ public:
+  template <typename Backing>
+  static void* AllocateObject(size_t size) {
+    ThreadState* state =
+        ThreadStateFor<ThreadingTrait<T>::kAffinity>::GetState();
+    DCHECK(state->IsAllocationAllowed());
+    const char* type_name = WTF_HEAP_PROFILER_TYPE_NAME(Backing);
+    return state->Heap().AllocateOnArenaIndex(
+        state, size, BlinkGC::kVectorArenaIndex, GCInfoTrait<Backing>::Index(),
+        type_name);
+  }
+
+  static void Finalize(void* pointer);
+  void FinalizeGarbageCollectedObject() { Finalize(this); }
+};
+
+template <typename T, typename Traits>
+void HeapVectorBacking<T, Traits>::Finalize(void* pointer) {
+  static_assert(Traits::kNeedsDestruction,
+                "Only vector buffers with items requiring destruction should "
+                "be finalized");
+  static_assert(
+      Traits::kCanClearUnusedSlotsWithMemset || std::is_polymorphic<T>::value,
+      "HeapVectorBacking doesn't support objects that cannot be cleared as "
+      "unused with memset or don't have a vtable");
+
+  static_assert(
+      !std::is_trivially_destructible<T>::value,
+      "Finalization of trivially destructible classes should not happen.");
+  HeapObjectHeader* header = HeapObjectHeader::FromPayload(pointer);
+  // Use the payload size as recorded by the heap to determine how many
+  // elements to finalize.
+  size_t length = header->PayloadSize() / sizeof(T);
+  char* payload = static_cast<char*>(pointer);
+#ifdef ANNOTATE_CONTIGUOUS_CONTAINER
+  ANNOTATE_CHANGE_SIZE(payload, length * sizeof(T), 0, length * sizeof(T));
+#endif
+  // As commented above, HeapVectorBacking calls finalizers for unused slots
+  // (which are already zeroed out).
+  if (std::is_polymorphic<T>::value) {
+    for (unsigned i = 0; i < length; ++i) {
+      char* element = payload + i * sizeof(T);
+      if (blink::VTableInitialized(element))
+        reinterpret_cast<T*>(element)->~T();
+    }
+  } else {
+    T* buffer = reinterpret_cast<T*>(payload);
+    for (unsigned i = 0; i < length; ++i)
+      buffer[i].~T();
+  }
+}
+
+template <typename T>
+struct MakeGarbageCollectedTrait<HeapVectorBacking<T>> {
+  static HeapVectorBacking<T>* Call(size_t num_elements) {
+    CHECK_GT(num_elements, 0u);
+    void* memory =
+        HeapVectorBacking<T>::template AllocateObject<HeapVectorBacking<T>>(
+            num_elements * sizeof(T));
+    HeapObjectHeader* header = HeapObjectHeader::FromPayload(memory);
+    // Placement new as regular operator new() is deleted.
+    HeapVectorBacking<T>* object = ::new (memory) HeapVectorBacking<T>();
+    header->MarkFullyConstructed<HeapObjectHeader::AccessMode::kAtomic>();
+    return object;
+  }
+};
+
+template <typename T, typename Traits>
+struct FinalizerTrait<HeapVectorBacking<T, Traits>> {
+  STATIC_ONLY(FinalizerTrait);
+  static const bool kNonTrivialFinalizer = Traits::kNeedsDestruction;
+  static void Finalize(void* obj) {
+    internal::FinalizerTraitImpl<HeapVectorBacking<T, Traits>,
+                                 kNonTrivialFinalizer>::Finalize(obj);
+  }
+};
+
+template <typename T, typename Traits>
+struct ThreadingTrait<HeapVectorBacking<T, Traits>> {
+  STATIC_ONLY(ThreadingTrait);
+  static const ThreadAffinity kAffinity = ThreadingTrait<T>::Affinity;
+};
+
+template <typename T, typename Traits>
+struct TraceTrait<HeapVectorBacking<T, Traits>> {
+  STATIC_ONLY(TraceTrait);
+  using Backing = HeapVectorBacking<T, Traits>;
+
+ public:
+  static TraceDescriptor GetTraceDescriptor(void* self) {
+    return {self, TraceTrait<Backing>::Trace};
+  }
+
+  static void Trace(blink::Visitor* visitor, void* self) {
+    if (visitor->ConcurrentTracingBailOut({self, &Trace}))
+      return;
+
+    static_assert(!WTF::IsWeak<T>::value,
+                  "Weakness is not supported in HeapVector and HeapDeque");
+    if (WTF::IsTraceableInCollectionTrait<Traits>::value) {
+      WTF::TraceInCollectionTrait<WTF::kNoWeakHandling,
+                                  HeapVectorBacking<T, Traits>,
+                                  void>::Trace(visitor, self);
+    }
+  }
+};
+
+}  // namespace blink
+
+namespace WTF {
+
+// This trace method is used only for on-stack HeapVectors found in
+// conservative scanning. On-heap HeapVectors are traced by Vector::trace.
+template <typename T, typename Traits>
+struct TraceInCollectionTrait<kNoWeakHandling,
+                              blink::HeapVectorBacking<T, Traits>,
+                              void> {
+  static bool Trace(blink::Visitor* visitor, void* self) {
+    // HeapVectorBacking does not know the exact size of the vector
+    // and just knows the capacity of the vector. Due to the constraint,
+    // HeapVectorBacking can support only the following objects:
+    //
+    // - An object that has a vtable. In this case, HeapVectorBacking
+    //   traces only slots that are not zeroed out. This is because if
+    //   the object has a vtable, the zeroed slot means that it is
+    //   an unused slot (Remember that the unused slots are guaranteed
+    //   to be zeroed out by VectorUnusedSlotClearer).
+    //
+    // - An object that can be initialized with memset. In this case,
+    //   HeapVectorBacking traces all slots including unused slots.
+    //   This is fine because the fact that the object can be initialized
+    //   with memset indicates that it is safe to treat the zerod slot
+    //   as a valid object.
+    static_assert(!IsTraceableInCollectionTrait<Traits>::value ||
+                      Traits::kCanClearUnusedSlotsWithMemset ||
+                      std::is_polymorphic<T>::value,
+                  "HeapVectorBacking doesn't support objects that cannot be "
+                  "cleared as unused with memset.");
+
+    // This trace method is instantiated for vectors where
+    // IsTraceableInCollectionTrait<Traits>::value is false, but the trace
+    // method should not be called. Thus we cannot static-assert
+    // IsTraceableInCollectionTrait<Traits>::value but should runtime-assert it.
+    DCHECK(IsTraceableInCollectionTrait<Traits>::value);
+
+    T* array = reinterpret_cast<T*>(self);
+    blink::HeapObjectHeader* header =
+        blink::HeapObjectHeader::FromPayload(self);
+    // Use the payload size as recorded by the heap to determine how many
+    // elements to trace.
+    size_t length = header->PayloadSize() / sizeof(T);
+#ifdef ANNOTATE_CONTIGUOUS_CONTAINER
+    // As commented above, HeapVectorBacking can trace unused slots
+    // (which are already zeroed out).
+    ANNOTATE_CHANGE_SIZE(array, length, 0, length);
+#endif
+    if (std::is_polymorphic<T>::value) {
+      char* pointer = reinterpret_cast<char*>(array);
+      for (unsigned i = 0; i < length; ++i) {
+        char* element = pointer + i * sizeof(T);
+        if (blink::VTableInitialized(element)) {
+          blink::TraceIfNeeded<
+              T, IsTraceableInCollectionTrait<Traits>::value>::Trace(visitor,
+                                                                     array[i]);
+        }
+      }
+    } else {
+      for (size_t i = 0; i < length; ++i) {
+        blink::TraceIfNeeded<
+            T, IsTraceableInCollectionTrait<Traits>::value>::Trace(visitor,
+                                                                   array[i]);
+      }
+    }
+    return false;
+  }
+};
+
+}  // namespace WTF
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_COLLECTION_SUPPORT_HEAP_VECTOR_BACKING_H_
diff --git a/third_party/blink/renderer/platform/heap/finalizer_traits.h b/third_party/blink/renderer/platform/heap/finalizer_traits.h
index 03ff1d9..47d22cc 100644
--- a/third_party/blink/renderer/platform/heap/finalizer_traits.h
+++ b/third_party/blink/renderer/platform/heap/finalizer_traits.h
@@ -91,8 +91,6 @@
 };
 
 class HeapAllocator;
-template <typename T, typename Traits>
-class HeapVectorBacking;
 template <typename Table>
 class HeapHashTableBacking;
 
@@ -150,16 +148,6 @@
   }
 };
 
-template <typename T, typename Traits>
-struct FinalizerTrait<HeapVectorBacking<T, Traits>> {
-  STATIC_ONLY(FinalizerTrait);
-  static const bool kNonTrivialFinalizer = Traits::kNeedsDestruction;
-  static void Finalize(void* obj) {
-    internal::FinalizerTraitImpl<HeapVectorBacking<T, Traits>,
-                                 kNonTrivialFinalizer>::Finalize(obj);
-  }
-};
-
 }  // namespace blink
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_FINALIZER_TRAITS_H_
diff --git a/third_party/blink/renderer/platform/heap/heap.h b/third_party/blink/renderer/platform/heap/heap.h
index 66c8272..28c077caa 100644
--- a/third_party/blink/renderer/platform/heap/heap.h
+++ b/third_party/blink/renderer/platform/heap/heap.h
@@ -532,61 +532,75 @@
   DISALLOW_COPY_AND_ASSIGN(GarbageCollected);
 };
 
-// Default MakeGarbageCollected: Constructs an instance of T, which is a garbage
-// collected type.
-template <typename T, typename... Args>
-T* MakeGarbageCollected(Args&&... args) {
-  static_assert(WTF::IsGarbageCollectedType<T>::value,
-                "T needs to be a garbage collected object");
-  static_assert(std::is_trivially_destructible<T>::value ||
-                    std::has_virtual_destructor<T>::value ||
-                    std::is_final<T>::value ||
-                    internal::IsGarbageCollectedContainer<T>::value ||
-                    internal::HasFinalizeGarbageCollectedObject<T>::value,
-                "Finalized GarbageCollected class should either have a virtual "
-                "destructor or be marked as final");
-  static_assert(!IsGarbageCollectedMixin<T>::value ||
-                    sizeof(T) <= kLargeObjectSizeThreshold,
-                "GarbageCollectedMixin may not be a large object");
-  void* memory = T::template AllocateObject<T>(sizeof(T));
-  HeapObjectHeader* header = HeapObjectHeader::FromPayload(memory);
-  // Placement new as regular operator new() is deleted.
-  T* object = ::new (memory) T(std::forward<Args>(args)...);
-  header->MarkFullyConstructed<HeapObjectHeader::AccessMode::kAtomic>();
-  return object;
-}
-
 // Used for passing custom sizes to MakeGarbageCollected.
 struct AdditionalBytes {
   explicit AdditionalBytes(size_t bytes) : value(bytes) {}
   const size_t value;
 };
 
+template <typename T>
+struct MakeGarbageCollectedTrait {
+  template <typename... Args>
+  static T* Call(Args&&... args) {
+    static_assert(WTF::IsGarbageCollectedType<T>::value,
+                  "T needs to be a garbage collected object");
+    static_assert(
+        std::is_trivially_destructible<T>::value ||
+            std::has_virtual_destructor<T>::value || std::is_final<T>::value ||
+            internal::IsGarbageCollectedContainer<T>::value ||
+            internal::HasFinalizeGarbageCollectedObject<T>::value,
+        "Finalized GarbageCollected class should either have a virtual "
+        "destructor or be marked as final");
+    static_assert(!IsGarbageCollectedMixin<T>::value ||
+                      sizeof(T) <= kLargeObjectSizeThreshold,
+                  "GarbageCollectedMixin may not be a large object");
+    void* memory = T::template AllocateObject<T>(sizeof(T));
+    HeapObjectHeader* header = HeapObjectHeader::FromPayload(memory);
+    // Placement new as regular operator new() is deleted.
+    T* object = ::new (memory) T(std::forward<Args>(args)...);
+    header->MarkFullyConstructed<HeapObjectHeader::AccessMode::kAtomic>();
+    return object;
+  }
+
+  template <typename... Args>
+  static T* Call(AdditionalBytes additional_bytes, Args&&... args) {
+    static_assert(WTF::IsGarbageCollectedType<T>::value,
+                  "T needs to be a garbage collected object");
+    static_assert(
+        std::is_trivially_destructible<T>::value ||
+            std::has_virtual_destructor<T>::value || std::is_final<T>::value ||
+            internal::IsGarbageCollectedContainer<T>::value ||
+            internal::HasFinalizeGarbageCollectedObject<T>::value,
+        "Finalized GarbageCollected class should either have a virtual "
+        "destructor or be marked as final.");
+    const size_t size = sizeof(T) + additional_bytes.value;
+    if (IsGarbageCollectedMixin<T>::value) {
+      // Ban large mixin so we can use PageFromObject() on them.
+      CHECK_GE(kLargeObjectSizeThreshold, size)
+          << "GarbageCollectedMixin may not be a large object";
+    }
+    void* memory = T::template AllocateObject<T>(size);
+    HeapObjectHeader* header = HeapObjectHeader::FromPayload(memory);
+    // Placement new as regular operator new() is deleted.
+    T* object = ::new (memory) T(std::forward<Args>(args)...);
+    header->MarkFullyConstructed<HeapObjectHeader::AccessMode::kAtomic>();
+    return object;
+  }
+};
+
+// Default MakeGarbageCollected: Constructs an instance of T, which is a garbage
+// collected type.
+template <typename T, typename... Args>
+T* MakeGarbageCollected(Args&&... args) {
+  return MakeGarbageCollectedTrait<T>::Call(std::forward<Args>(args)...);
+}
+
 // Constructs an instance of T, which is a garbage collected type. This special
 // version takes size which enables constructing inline objects.
 template <typename T, typename... Args>
 T* MakeGarbageCollected(AdditionalBytes additional_bytes, Args&&... args) {
-  static_assert(WTF::IsGarbageCollectedType<T>::value,
-                "T needs to be a garbage collected object");
-  static_assert(std::is_trivially_destructible<T>::value ||
-                    std::has_virtual_destructor<T>::value ||
-                    std::is_final<T>::value ||
-                    internal::IsGarbageCollectedContainer<T>::value ||
-                    internal::HasFinalizeGarbageCollectedObject<T>::value,
-                "Finalized GarbageCollected class should either have a virtual "
-                "destructor or be marked as final.");
-  const size_t size = sizeof(T) + additional_bytes.value;
-  if (IsGarbageCollectedMixin<T>::value) {
-    // Ban large mixin so we can use PageFromObject() on them.
-    CHECK_GE(kLargeObjectSizeThreshold, size)
-        << "GarbageCollectedMixin may not be a large object";
-  }
-  void* memory = T::template AllocateObject<T>(size);
-  HeapObjectHeader* header = HeapObjectHeader::FromPayload(memory);
-  // Placement new as regular operator new() is deleted.
-  T* object = ::new (memory) T(std::forward<Args>(args)...);
-  header->MarkFullyConstructed<HeapObjectHeader::AccessMode::kAtomic>();
-  return object;
+  return MakeGarbageCollectedTrait<T>::Call(additional_bytes,
+                                            std::forward<Args>(args)...);
 }
 
 // Assigning class types to their arenas.
diff --git a/third_party/blink/renderer/platform/heap/heap_allocator.h b/third_party/blink/renderer/platform/heap/heap_allocator.h
index 8378a08..55521e83 100644
--- a/third_party/blink/renderer/platform/heap/heap_allocator.h
+++ b/third_party/blink/renderer/platform/heap/heap_allocator.h
@@ -8,6 +8,7 @@
 #include <type_traits>
 
 #include "build/build_config.h"
+#include "third_party/blink/renderer/platform/heap/collection_support/heap_vector_backing.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
 #include "third_party/blink/renderer/platform/heap/heap_buildflags.h"
 #include "third_party/blink/renderer/platform/heap/marking_visitor.h"
@@ -45,16 +46,6 @@
 struct IsAllowedInContainer<T, typename T::IsDisallowedInContainerMarker>
     : std::false_type {};
 
-template <typename T, typename Traits = WTF::VectorTraits<T>>
-class HeapVectorBacking {
-  DISALLOW_NEW();
-  IS_GARBAGE_COLLECTED_TYPE();
-
- public:
-  static void Finalize(void* pointer);
-  void FinalizeGarbageCollectedObject() { Finalize(this); }
-};
-
 template <typename Table>
 class HeapHashTableBacking {
   DISALLOW_NEW();
@@ -88,16 +79,8 @@
   }
   template <typename T>
   static T* AllocateVectorBacking(size_t size) {
-    ThreadState* state =
-        ThreadStateFor<ThreadingTrait<T>::kAffinity>::GetState();
-    DCHECK(state->IsAllocationAllowed());
-    uint32_t gc_info_index = GCInfoTrait<HeapVectorBacking<T>>::Index();
-    const char* type_name =
-        WTF_HEAP_PROFILER_TYPE_NAME(HeapHashTableBacking<HeapVectorBacking<T>>);
     return reinterpret_cast<T*>(
-        MarkAsConstructed(state->Heap().AllocateOnArenaIndex(
-            state, ThreadHeap::AllocationSizeFromSize(size),
-            BlinkGC::kVectorArenaIndex, gc_info_index, type_name)));
+        MakeGarbageCollected<HeapVectorBacking<T>>(size / sizeof(T)));
   }
   static void FreeVectorBacking(void*);
   static bool ExpandVectorBacking(void*, size_t);
@@ -413,43 +396,6 @@
   }
 };
 
-template <typename T, typename Traits>
-void HeapVectorBacking<T, Traits>::Finalize(void* pointer) {
-  static_assert(Traits::kNeedsDestruction,
-                "Only vector buffers with items requiring destruction should "
-                "be finalized");
-  // See the comment in HeapVectorBacking::trace.
-  static_assert(
-      Traits::kCanClearUnusedSlotsWithMemset || std::is_polymorphic<T>::value,
-      "HeapVectorBacking doesn't support objects that cannot be cleared as "
-      "unused with memset or don't have a vtable");
-
-  static_assert(
-      !std::is_trivially_destructible<T>::value,
-      "Finalization of trivially destructible classes should not happen.");
-  HeapObjectHeader* header = HeapObjectHeader::FromPayload(pointer);
-  // Use the payload size as recorded by the heap to determine how many
-  // elements to finalize.
-  size_t length = header->PayloadSize() / sizeof(T);
-  char* payload = static_cast<char*>(pointer);
-#ifdef ANNOTATE_CONTIGUOUS_CONTAINER
-  ANNOTATE_CHANGE_SIZE(payload, length * sizeof(T), 0, length * sizeof(T));
-#endif
-  // As commented above, HeapVectorBacking calls finalizers for unused slots
-  // (which are already zeroed out).
-  if (std::is_polymorphic<T>::value) {
-    for (unsigned i = 0; i < length; ++i) {
-      char* element = payload + i * sizeof(T);
-      if (blink::VTableInitialized(element))
-        reinterpret_cast<T*>(element)->~T();
-    }
-  } else {
-    T* buffer = reinterpret_cast<T*>(payload);
-    for (unsigned i = 0; i < length; ++i)
-      buffer[i].~T();
-  }
-}
-
 template <typename Table>
 void HeapHashTableBacking<Table>::Finalize(void* pointer) {
   using Value = typename Table::ValueType;
diff --git a/third_party/blink/renderer/platform/heap/persistent.h b/third_party/blink/renderer/platform/heap/persistent.h
index 0b098c1..f8b3dd81 100644
--- a/third_party/blink/renderer/platform/heap/persistent.h
+++ b/third_party/blink/renderer/platform/heap/persistent.h
@@ -39,10 +39,16 @@
   base::Location location_;
 };
 
-#if BUILDFLAG(RAW_HEAP_SNAPSHOTS)
+#if !BUILDFLAG(FROM_HERE_USES_LOCATION_BUILTINS) && \
+    BUILDFLAG(RAW_HEAP_SNAPSHOTS)
+#if !BUILDFLAG(ENABLE_LOCATION_SOURCE)
+#define PERSISTENT_FROM_HERE \
+  PersistentLocation(::base::Location::CreateFromHere(__FILE__))
+#else
 #define PERSISTENT_FROM_HERE \
   PersistentLocation(        \
       ::base::Location::CreateFromHere(__func__, __FILE__, __LINE__))
+#endif
 #else
 #define PERSISTENT_FROM_HERE PersistentLocation()
 #endif  // BUILDFLAG(RAW_HEAP_SNAPSHOTS)
diff --git a/third_party/blink/renderer/platform/heap/thread_state.cc b/third_party/blink/renderer/platform/heap/thread_state.cc
index 27196bfa..5c3be13 100644
--- a/third_party/blink/renderer/platform/heap/thread_state.cc
+++ b/third_party/blink/renderer/platform/heap/thread_state.cc
@@ -953,7 +953,7 @@
       "BlinkGC.TimeForGlobalWeakProcessing",
       event.scope_data[ThreadHeapStatsCollector::kMarkWeakProcessing]);
 
-  base::TimeDelta marking_duration = event.marking_time();
+  base::TimeDelta marking_duration = event.foreground_marking_time();
   constexpr size_t kMinObjectSizeForReportingThroughput = 1024 * 1024;
   if (base::TimeTicks::IsHighResolution() &&
       (event.object_size_in_bytes_before_sweeping >
diff --git a/third_party/blink/renderer/platform/heap/threading_traits.h b/third_party/blink/renderer/platform/heap/threading_traits.h
index 43c9c2ee..f0ea84bf 100644
--- a/third_party/blink/renderer/platform/heap/threading_traits.h
+++ b/third_party/blink/renderer/platform/heap/threading_traits.h
@@ -58,8 +58,6 @@
 class HeapAllocator;
 template <typename Table>
 class HeapHashTableBacking;
-template <typename T, typename Traits>
-class HeapVectorBacking;
 template <typename T>
 class Member;
 template <typename T>
@@ -118,12 +116,6 @@
   static const ThreadAffinity kAffinity = ThreadingTrait<T>::kAffinity;
 };
 
-template <typename T, typename Traits>
-struct ThreadingTrait<HeapVectorBacking<T, Traits>> {
-  STATIC_ONLY(ThreadingTrait);
-  static const ThreadAffinity kAffinity = ThreadingTrait<T>::Affinity;
-};
-
 template <typename T, size_t inlineCapacity>
 struct ThreadingTrait<Deque<T, inlineCapacity, HeapAllocator>> {
   STATIC_ONLY(ThreadingTrait);
diff --git a/third_party/blink/renderer/platform/heap/trace_traits.h b/third_party/blink/renderer/platform/heap/trace_traits.h
index 762ac30e..82ce014 100644
--- a/third_party/blink/renderer/platform/heap/trace_traits.h
+++ b/third_party/blink/renderer/platform/heap/trace_traits.h
@@ -172,30 +172,6 @@
   static_cast<T*>(self)->Trace(visitor);
 }
 
-template <typename T, typename Traits>
-struct TraceTrait<HeapVectorBacking<T, Traits>> {
-  STATIC_ONLY(TraceTrait);
-  using Backing = HeapVectorBacking<T, Traits>;
-
- public:
-  static TraceDescriptor GetTraceDescriptor(void* self) {
-    return {self, TraceTrait<Backing>::Trace};
-  }
-
-  static void Trace(blink::Visitor* visitor, void* self) {
-    if (visitor->ConcurrentTracingBailOut({self, &Trace}))
-      return;
-
-    static_assert(!WTF::IsWeak<T>::value,
-                  "Weakness is not supported in HeapVector and HeapDeque");
-    if (WTF::IsTraceableInCollectionTrait<Traits>::value) {
-      WTF::TraceInCollectionTrait<WTF::kNoWeakHandling,
-                                  HeapVectorBacking<T, Traits>,
-                                  void>::Trace(visitor, self);
-    }
-  }
-};
-
 // The trace trait for the heap hashtable backing is used when we find a
 // direct pointer to the backing from the conservative stack scanner. This
 // normally indicates that there is an ongoing iteration over the table, and so
@@ -400,70 +376,6 @@
   }
 };
 
-// This trace method is used only for on-stack HeapVectors found in
-// conservative scanning. On-heap HeapVectors are traced by Vector::trace.
-template <typename T, typename Traits>
-struct TraceInCollectionTrait<kNoWeakHandling,
-                              blink::HeapVectorBacking<T, Traits>,
-                              void> {
-  static bool Trace(blink::Visitor* visitor, void* self) {
-    // HeapVectorBacking does not know the exact size of the vector
-    // and just knows the capacity of the vector. Due to the constraint,
-    // HeapVectorBacking can support only the following objects:
-    //
-    // - An object that has a vtable. In this case, HeapVectorBacking
-    //   traces only slots that are not zeroed out. This is because if
-    //   the object has a vtable, the zeroed slot means that it is
-    //   an unused slot (Remember that the unused slots are guaranteed
-    //   to be zeroed out by VectorUnusedSlotClearer).
-    //
-    // - An object that can be initialized with memset. In this case,
-    //   HeapVectorBacking traces all slots including unused slots.
-    //   This is fine because the fact that the object can be initialized
-    //   with memset indicates that it is safe to treat the zerod slot
-    //   as a valid object.
-    static_assert(!IsTraceableInCollectionTrait<Traits>::value ||
-                      Traits::kCanClearUnusedSlotsWithMemset ||
-                      std::is_polymorphic<T>::value,
-                  "HeapVectorBacking doesn't support objects that cannot be "
-                  "cleared as unused with memset.");
-
-    // This trace method is instantiated for vectors where
-    // IsTraceableInCollectionTrait<Traits>::value is false, but the trace
-    // method should not be called. Thus we cannot static-assert
-    // IsTraceableInCollectionTrait<Traits>::value but should runtime-assert it.
-    DCHECK(IsTraceableInCollectionTrait<Traits>::value);
-
-    T* array = reinterpret_cast<T*>(self);
-    blink::HeapObjectHeader* header =
-        blink::HeapObjectHeader::FromPayload(self);
-    // Use the payload size as recorded by the heap to determine how many
-    // elements to trace.
-    size_t length = header->PayloadSize() / sizeof(T);
-#ifdef ANNOTATE_CONTIGUOUS_CONTAINER
-    // As commented above, HeapVectorBacking can trace unused slots
-    // (which are already zeroed out).
-    ANNOTATE_CHANGE_SIZE(array, length, 0, length);
-#endif
-    if (std::is_polymorphic<T>::value) {
-      char* pointer = reinterpret_cast<char*>(array);
-      for (unsigned i = 0; i < length; ++i) {
-        char* element = pointer + i * sizeof(T);
-        if (blink::VTableInitialized(element))
-          blink::TraceIfNeeded<
-              T, IsTraceableInCollectionTrait<Traits>::value>::Trace(visitor,
-                                                                     array[i]);
-      }
-    } else {
-      for (size_t i = 0; i < length; ++i)
-        blink::TraceIfNeeded<
-            T, IsTraceableInCollectionTrait<Traits>::value>::Trace(visitor,
-                                                                   array[i]);
-    }
-    return false;
-  }
-};
-
 // This trace method is for tracing a HashTableBacking either through regular
 // tracing (via the relevant TraceTraits) or when finding a HashTableBacking
 // through conservative stack scanning (which will treat all references in the
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 43f6bd18..8727b65 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -168,10 +168,6 @@
       status: "stable",
     },
     {
-      name: "AsyncClipboard",
-      status: "stable",
-    },
-    {
       name: "AudioOutputDevices",
       // Android does not yet support switching of audio output devices
       status: {"Android": "", "default": "stable"},
@@ -239,12 +235,6 @@
       name: "BlinkRuntimeCallStats",
     },
     {
-      // Adding simpler reading methods - stream(), text(), and arrayBuffer() -
-      // to the Blob interface. See: https://github.com/w3c/FileAPI/pull/117
-      name: "BlobReadMethods",
-      status: "stable"
-    },
-    {
       name: "BlockCredentialedSubresources",
       status: "stable",
     },
@@ -1464,6 +1454,10 @@
       origin_trial_feature_name: "RTCQuicTransport",
       status: "experimental",
     },
+    // Enables the use of Insertable Streams.
+    {
+      name: "RTCInsertableStreams",
+    },
     // Enables the use of the RTCQuicTransport object.
     {
       name: "RTCQuicTransport",
@@ -1633,10 +1627,6 @@
       status: "test",
     },
     {
-      name: "StorageQuotaDetails",
-      status: "stable"
-    },
-    {
       name: "StrictMimeTypesForWorkers",
       status: "experimental"
     },
diff --git a/third_party/blink/web_tests/FlagExpectations/enable-features=UseSkiaRenderer b/third_party/blink/web_tests/FlagExpectations/enable-features=UseSkiaRenderer
index 4ebe511..ac1ddc7 100644
--- a/third_party/blink/web_tests/FlagExpectations/enable-features=UseSkiaRenderer
+++ b/third_party/blink/web_tests/FlagExpectations/enable-features=UseSkiaRenderer
@@ -17,7 +17,7 @@
 crbug.com/1052768 [ Linux ] css3/filters/effect-reference-subregion.html [ Failure Pass ]
 
 # Flaky on Windows.
+crbug.com/1026375 [ Win ] media/video-currentTime-delay.html [ Slow ]
+crbug.com/1026375 [ Win ] media/encrypted-media/encrypted-media-playback-setmediakeys-before-src.html [ Slow ]
 crbug.com/1026375 [ Win ] media/controls/video-enter-exit-fullscreen-while-hovering-shows-controls.html [ Failure Pass ]
-crbug.com/1026375 [ Win ] media/encrypted-media/encrypted-media-playback-setmediakeys-before-src.html [ Failure Pass ]
-crbug.com/1026375 [ Win ] media/video-currentTime-delay.html [ Failure Pass ]
 crbug.com/1026375 [ Win ] media/video-pause-immediately.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index fa94beba..1239300 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -7,9 +7,6 @@
 # Further documentation:
 # https://chromium.googlesource.com/chromium/src/+/master/docs/testing/web_test_expectations.md
 
-# Temporarily disabled for 1043030
-crbug.com/1043030 http/tests/devtools/sources/source-frame-toolbar-items.js [ Pass Failure ]
-
 # Intentional failures to test the layout test system.
 harness-tests/crash.html [ Crash ]
 harness-tests/timeout.html [ Timeout ]
@@ -1409,9 +1406,7 @@
 crbug.com/711709 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/floats-clear/floats-130.xht [ Skip ]
 crbug.com/711709 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/floats-clear/floats-131.xht [ Skip ]
 crbug.com/711709 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/floats-clear/floats-137.xht [ Skip ]
-crbug.com/982194 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/positioning/abspos-float-with-inline-container.html [ Failure ]
 crbug.com/982194 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/positioning/toogle-abspos-on-relpos-inline-child.html [ Failure ]
-crbug.com/982194 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/abspos/abspos-in-block-in-inline-in-relpos-inline.html [ Failure ]
 crbug.com/982194 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/floats/float-nowrap-7.html [ Failure ]
 crbug.com/982194 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/floats/float-nowrap-8.html [ Failure ]
 crbug.com/982194 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/floats/float-nowrap-9.html [ Failure ]
@@ -1434,7 +1429,6 @@
 crbug.com/711807 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/normal-flow/min-width-applies-to-006.xht [ Failure ]
 crbug.com/711807 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/normal-flow/replaced-intrinsic-001.xht [ Failure ]
 crbug.com/711807 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/normal-flow/replaced-intrinsic-002.xht [ Failure ]
-crbug.com/982194 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/positioning/abspos-inline-007.xht [ Failure ]
 crbug.com/711805 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/positioning/abspos-inline-001.xht [ Skip ]
 crbug.com/711805 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/positioning/abspos-inline-002.xht [ Skip ]
 crbug.com/711805 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/positioning/abspos-inline-003.xht [ Skip ]
@@ -1454,18 +1448,6 @@
 crbug.com/711805 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/positioning/position-relative-035.xht [ Skip ]
 crbug.com/711805 virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/positioning/position-relative-036.xht [ Skip ]
 crbug.com/829028 virtual/layout_ng_fragment_traversal/fast/block/float/4145535Crash.html [ Failure Pass ]
-crbug.com/982194 virtual/layout_ng_fragment_traversal/fast/block/positioning/058.html [ Failure ]
-crbug.com/982194 virtual/layout_ng_fragment_traversal/fast/block/positioning/absolute-in-inline-dynamic.html [ Failure ]
-crbug.com/982194 virtual/layout_ng_fragment_traversal/fast/block/positioning/absolute-in-inline-ltr-2.html [ Failure ]
-crbug.com/982194 virtual/layout_ng_fragment_traversal/fast/block/positioning/absolute-in-inline-ltr-3.html [ Failure ]
-crbug.com/982194 virtual/layout_ng_fragment_traversal/fast/block/positioning/absolute-in-inline-ltr.html [ Failure ]
-crbug.com/982194 virtual/layout_ng_fragment_traversal/fast/block/positioning/absolute-in-inline-rtl-2.html [ Failure ]
-crbug.com/982194 virtual/layout_ng_fragment_traversal/fast/block/positioning/absolute-in-inline-rtl-3.html [ Failure ]
-crbug.com/982194 virtual/layout_ng_fragment_traversal/fast/block/positioning/absolute-in-inline-rtl.html [ Failure ]
-crbug.com/982194 virtual/layout_ng_fragment_traversal/fast/block/positioning/absolute-in-inline-short-ltr.html [ Failure ]
-crbug.com/982194 virtual/layout_ng_fragment_traversal/fast/block/positioning/absolute-in-inline-short-rtl.html [ Failure ]
-crbug.com/982194 virtual/layout_ng_fragment_traversal/fast/block/positioning/hiding-inside-relpositioned-inline.html [ Failure ]
-crbug.com/982194 virtual/layout_ng_fragment_traversal/fast/block/positioning/rel-positioned-inline-changes-width.html [ Failure ]
 
 crbug.com/591099 [ Mac ] virtual/layout_ng_fragment_traversal/external/wpt/css/CSS2/text/white-space-bidirectionality-001.xht [ Failure ]
 
@@ -2108,202 +2090,6 @@
 crbug.com/1053725 [ Mac ] fast/css/text-overflow-input.html [ Skip ]
 crbug.com/1053725 [ Mac ] fast/css-grid-layout/preferred-width-computed-after-layout.html [ Skip ]
 
-# -- Section 2
-# -- Section 2
-# -- Section 2
-
-crbug.com/1053725 [ Mac ] fast/dom/52776.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/dom/focus-contenteditable.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/dom/HTMLMeterElement/meter-boundary-values.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/dom/HTMLMeterElement/meter-element.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/dom/HTMLMeterElement/meter-optimums.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/dom/HTMLMeterElement/meter-styles-changing-pseudo.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/dom/HTMLMeterElement/meter-styles.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/dom/HTMLProgressElement/progress-element.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/dynamic/008.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/events/reveal-link-when-focused.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/files/file-in-input-display.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/001.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/basic-buttons.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/basic-inputs.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/blankbuttons.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/button-default-title.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/button-positioned.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/button-sizes.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/button-style-color.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/button-table-styles.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/button-text-transform.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/control-clip-overflow.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/control-clip.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/control-restrict-line-height.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/encoding-test.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/floating-textfield-relayout.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/form-element-geometry.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/formmove.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/formmove2.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/formmove3.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/huge-mac-input-clamped-height.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/huge-mac-input-clamped-width.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/implicit-submission.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/indeterminate.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/input-align.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/input-appearance-height.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/input-button-sizes.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/input-first-letter.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/input-type-text-min-width.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/input-value.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/minWidthPercent.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/placeholder-position.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/plaintext-mode-2.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/stuff-on-my-optgroup.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/suggested-value.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/tabbing-input-iframe.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/targeted-frame-submission.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/text-control-intrinsic-widths.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/text-style-color.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/validation-bubble-appearance-edge.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/validation-bubble-appearance-escape.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/validation-bubble-appearance-iframe.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/validation-bubble-appearance-rtl-ui.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/validation-bubble-appearance-wrap.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/validation-bubble-device-emulation-change.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/validation-bubble-device-emulation.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/visual-hebrew-text-field.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/button/button-align.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/button/button-cannot-be-nested.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/button/button-inner-block-reuse.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/button/button-white-space.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/calendar-picker/calendar-picker-appearance-ar.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/calendar-picker/calendar-picker-appearance-coarse.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/calendar-picker/calendar-picker-appearance-minimum-date.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/calendar-picker/calendar-picker-appearance-required-ar.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/calendar-picker/calendar-picker-appearance-required.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/calendar-picker/calendar-picker-appearance-ru.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/calendar-picker/calendar-picker-appearance-step.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/calendar-picker/calendar-picker-appearance-zoom200.html [ Skip ]
-# Put back commented version at line 7518:
-crbug.com/1053725 [ Mac ] fast/forms/calendar-picker/calendar-picker-appearance.html [ Skip ]
-# Put back commented version at line 7519:
-crbug.com/1053725 [ Mac ] fast/forms/calendar-picker/month-picker-appearance-step.html [ Skip ]
-# Put back commented version at line 7523:
-crbug.com/1053725 [ Mac ] fast/forms/calendar-picker/month-picker-appearance.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/calendar-picker/week-picker-appearance-step.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/calendar-picker/week-picker-appearance.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/checkbox/checkbox-appearance-basic.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/color/color-suggestion-picker-appearance-zoom125.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/color/color-suggestion-picker-appearance-zoom200.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/color/color-suggestion-picker-appearance.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/color/color-suggestion-picker-one-row-appearance.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/color/color-suggestion-picker-two-row-appearance.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/color/color-suggestion-picker-with-scrollbar-appearance.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/color/input-appearance-color.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/color/input-color-choose-default-value-after-set-value.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/color/input-color-onchange-event.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/datalist/input-appearance-range-with-datalist-zoomed.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/datalist/input-appearance-range-with-datalist.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/datalist/input-appearance-range-with-padding-with-datalist.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/datalist/input-appearance-range-with-transform.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/date/date-appearance-l10n.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/date/date-appearance-pseudo-elements.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/datetimelocal/datetimelocal-appearance-basic.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/datetimelocal/datetimelocal-appearance-l10n.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/fieldset/fieldset-align.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/file/file-appearance-basic.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/file/file-input-direction.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/file/file-input-pressed-state.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/file/input-file-re-render.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/image/002.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/image/005.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/image/image-alt-text.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/month/month-appearance-basic.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/month/month-appearance-l10n.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/month/month-appearance-pseudo-elements.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/number/number-appearance-datalist.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/number/number-appearance-rtl.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/number/number-appearance-spinbutton-disabled-readonly.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/number/number-appearance-spinbutton-layer.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/radio/radio-appearance-basic.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/range/input-appearance-range.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/range/range-appearance-basic.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/range/range-update.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/range/slider-padding.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/range/slider-thumb-shared-style.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/search/search-appearance-basic.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/search/search-cancel-button-style-sharing.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/search/search-display-none-cancel-button.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/search/search-rtl.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/search/search-vertical-alignment.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/search/searchfield-heights.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/003.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/004.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/HTMLOptionElement_label01.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/HTMLOptionElement_label02.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/HTMLOptionElement_label03.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/HTMLOptionElement_label04.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/HTMLOptionElement_label05.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/HTMLOptionElement_label06.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/HTMLOptionElement_label07.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/basic-selects.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/disabled-select-change-index.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/input-select-after-resize.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/listbox-appearance-basic.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/listbox-appearance-separator.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/listbox-bidi-align.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/listbox-clip.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/listbox-scrollbar-incremental-load.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/listbox-width-change.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/listbox-with-display-none-option.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/menulist-appearance-basic.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/menulist-appearance-none.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/menulist-appearance-rtl.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/menulist-clip.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/menulist-deselect-update.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/menulist-narrow-width.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/menulist-no-overflow.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/menulist-option-wrap.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/menulist-popup-open-hide-using-keyboard.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/menulist-restrict-line-height.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/menulist-separator-painting.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/menulist-style-color.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/menulist-type-ahead-find-original-item.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/menulist-update-text-popup.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/menulist-width-change.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/multiselect-in-listbox-keyboard-focusring.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/optgroup-clicking.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/optgroup-rendering.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/option-mouseevents.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/option-script.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/option-strip-whitespace.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/option-text-clip.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-align.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-autofilled.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-background-none.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-baseline.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-block-background.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-change-listbox-size.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-change-listbox-to-popup.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-change-popup-to-listbox.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-clientheight-large-size.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-dirty-parent-pref-widths.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-disabled-appearance.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-empty-option-height.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-initial-position.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-item-background-clip.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-list-box-with-height.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-listbox-multiple-no-focusring.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-multiple-rtl.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-overflow-scroll-inherited.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-overflow-scroll.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-popup-pagekeys.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-selected.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-size-invalid.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-style.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-visual-hebrew.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/select-writing-direction-natural.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/select/selectlist-minsize.html [ Skip ]
-crbug.com/1053725 [ Mac ] fast/forms/submit/submit-appearance-basic.html [ Skip ]
-
 # -- Section 3
 # -- Section 3
 # -- Section 3
@@ -2695,6 +2481,17 @@
 
 
 
+# Needs further triage:
+crbug.com/1053725 [ Mac ] fast/forms/implicit-submission.html [ Skip ]
+crbug.com/1053725 [ Mac ] fast/forms/select/option-mouseevents.html [ Skip ]
+crbug.com/1053725 [ Mac ] fast/forms/select/menulist-popup-open-hide-using-keyboard.html [ Skip ]
+crbug.com/1053725 [ Mac ] http/tests/devtools/oopif/oopif-elements-navigate-out.html [ Skip ]
+crbug.com/1053725 [ Mac ] virtual/web-components-v0-disabled/fast/dom/title-text-property.html [ Skip ]
+crbug.com/1053725 [ Mac ] virtual/form-controls-refresh-disabled/fast/forms/select/select-popup-pagekeys.html [ Skip ]
+crbug.com/1053725 [ Mac ] virtual/form-controls-refresh-disabled/fast/forms/select/menulist-update-text-popup.html [ Skip ]
+crbug.com/1053725 [ Mac ] virtual/form-controls-refresh-disabled/fast/forms/select/menulist-popup-open-hide-using-keyboard.html [ Skip ]
+
+
 # ======
 # ====== End of rebaselines for crbug.com/1053725 ======
 # ======
@@ -3690,6 +3487,9 @@
 crbug.com/1053965 external/wpt/css/css-values/ex-unit-004.html [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 [ Linux ] external/wpt/content-dpr/content-dpr-various-elements.html [ Failure ]
+crbug.com/626703 [ Mac ] external/wpt/content-dpr/content-dpr-various-elements.html [ Failure ]
+crbug.com/626703 [ Win ] external/wpt/content-dpr/content-dpr-various-elements.html [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/websockets/opening-handshake/005.html [ Timeout ]
 crbug.com/626703 [ Mac ] external/wpt/websockets/opening-handshake/005.html [ Timeout ]
 crbug.com/626703 [ Win ] external/wpt/websockets/opening-handshake/005.html [ Timeout ]
@@ -7317,12 +7117,12 @@
 crbug.com/1048149 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html [ Crash Timeout ]
 crbug.com/1048149 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html [ Crash Timeout ]
 crbug.com/1048149 [ Mac ] http/tests/inspector-protocol/emulation/emulation-oopifs.js [ Crash ]
-#crbug.com/1048149 [ Mac ] fast/forms/calendar-picker/calendar-picker-appearance.html [ Pass Crash ]
+crbug.com/1048149 [ Mac ] fast/forms/calendar-picker/calendar-picker-appearance.html [ Pass Crash ]
 crbug.com/1048149 [ Mac ] fast/forms/calendar-picker/calendar-picker-mouse-operations.html [ Pass Crash ]
 crbug.com/1048149 [ Mac ] fast/forms/calendar-picker/calendar-picker-touch-operations.html [ Pass Crash ]
 crbug.com/1048149 [ Mac ] fast/forms/calendar-picker/date-picker-choose-default-value-after-set-value.html [ Pass Crash ]
-#crbug.com/1048149 [ Mac ] fast/forms/calendar-picker/month-picker-appearance.html [ Pass Crash ]
-#crbug.com/1048149 [ Mac ] fast/forms/calendar-picker/month-picker-appearance-step.html [ Pass Crash ]
+crbug.com/1048149 [ Mac ] fast/forms/calendar-picker/month-picker-appearance.html [ Pass Crash ]
+crbug.com/1048149 [ Mac ] fast/forms/calendar-picker/month-picker-appearance-step.html [ Pass Crash ]
 crbug.com/1048149 [ Mac ] virtual/controls-refresh/color/color-picker-appearance-zoom125.html [ Pass Crash ]
 crbug.com/1048149 [ Mac ] virtual/controls-refresh/color/color-picker-top-left-selection-position-after-reopen.html [ Pass Crash ]
 crbug.com/1048149 [ Mac ] virtual/controls-refresh/color/color-picker-zoom150-bottom-edge-no-nan.html [ Pass Crash ]
@@ -7443,10 +7243,4 @@
 crbug.com/1055006 [ Linux ] external/wpt/std-toast/methods.html [ Pass Failure Timeout ]
 crbug.com/1055006 [ Linux ] external/wpt/std-toast/options.html [ Pass Failure Timeout ]
 
-# These tests test invalid behavior, a fix in V8 is in flight.
-crbug.com/v8/10126 external/wpt/wasm/webapi/invalid-code.any.html [ Skip ]
-crbug.com/v8/10126 external/wpt/wasm/webapi/invalid-code.any.serviceworker.html [ Skip ]
-crbug.com/v8/10126 external/wpt/wasm/webapi/invalid-code.any.sharedworker.html [ Skip ]
-crbug.com/v8/10126 external/wpt/wasm/webapi/invalid-code.any.worker.html [ Skip ]
-
 crbug.com/1048597 [ Linux Debug ] virtual/android/fullscreen/video-scrolled-iframe.html [ Pass Timeout ]
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json
index d9c6892f11..1b0dbcf 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json
@@ -8189,6 +8189,18 @@
      {}
     ]
    ],
+   "content-dpr/content-dpr-various-elements.html": [
+    [
+     "content-dpr/content-dpr-various-elements.html",
+     [
+      [
+       "/content-dpr/content-dpr-various-elements-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "content-dpr/image-pseudo-element-content-dpr.html": [
     [
      "content-dpr/image-pseudo-element-content-dpr.html",
@@ -108409,6 +108421,18 @@
      {}
     ]
    ],
+   "css/selectors/not-links.html": [
+    [
+     "css/selectors/not-links.html",
+     [
+      [
+       "/css/selectors/not-links-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/selectors/of-type-selectors.xhtml": [
     [
      "css/selectors/of-type-selectors.xhtml",
@@ -132652,6 +132676,9 @@
    "contacts/resources/non-main-frame-select.html": [
     []
    ],
+   "content-dpr/content-dpr-various-elements-ref.html": [
+    []
+   ],
    "content-dpr/image-pseudo-element-content-dpr-ref.html": [
     []
    ],
@@ -157450,6 +157477,9 @@
    "css/selectors/invalidation/sheet-going-away-002-ref.html": [
     []
    ],
+   "css/selectors/not-links-ref.html": [
+    []
+   ],
    "css/selectors/of-type-selectors-ref.xhtml": [
     []
    ],
@@ -167653,9 +167683,6 @@
    "html/infrastructure/urls/resolving-urls/query-encoding/utf-16be_include=loading-expected.txt": [
     []
    ],
-   "html/infrastructure/urls/resolving-urls/query-encoding/utf-16be_include=xmldocument-expected.txt": [
-    []
-   ],
    "html/infrastructure/urls/resolving-urls/query-encoding/utf-16le_include=appcache-expected.txt": [
     []
    ],
@@ -167665,9 +167692,6 @@
    "html/infrastructure/urls/resolving-urls/query-encoding/utf-16le_include=loading-expected.txt": [
     []
    ],
-   "html/infrastructure/urls/resolving-urls/query-encoding/utf-16le_include=xmldocument-expected.txt": [
-    []
-   ],
    "html/infrastructure/urls/resolving-urls/query-encoding/utf-8_include=appcache-expected.txt": [
     []
    ],
@@ -167683,9 +167707,6 @@
    "html/infrastructure/urls/resolving-urls/query-encoding/utf-8_include=workers-expected.txt": [
     []
    ],
-   "html/infrastructure/urls/resolving-urls/query-encoding/utf-8_include=xmldocument-expected.txt": [
-    []
-   ],
    "html/infrastructure/urls/resolving-urls/query-encoding/windows-1251_include=appcache-expected.txt": [
     []
    ],
@@ -167716,9 +167737,6 @@
    "html/infrastructure/urls/resolving-urls/query-encoding/windows-1251_include=xml-expected.txt": [
     []
    ],
-   "html/infrastructure/urls/resolving-urls/query-encoding/windows-1251_include=xmldocument-expected.txt": [
-    []
-   ],
    "html/infrastructure/urls/resolving-urls/query-encoding/windows-1252_include=appcache-expected.txt": [
     []
    ],
@@ -167749,9 +167767,6 @@
    "html/infrastructure/urls/resolving-urls/query-encoding/windows-1252_include=xml-expected.txt": [
     []
    ],
-   "html/infrastructure/urls/resolving-urls/query-encoding/windows-1252_include=xmldocument-expected.txt": [
-    []
-   ],
    "html/interaction/focus/document-level-focus-apis/support/test.html": [
     []
    ],
@@ -169219,9 +169234,6 @@
    "html/semantics/embedded-content/the-img-element/svg-img-with-external-stylesheet-ref.html": [
     []
    ],
-   "html/semantics/embedded-content/the-object-element/object-attributes-expected.txt": [
-    []
-   ],
    "html/semantics/embedded-content/the-object-element/object-in-object-fallback-2-expected.txt": [
     []
    ],
@@ -193171,9 +193183,6 @@
    "workers/interfaces/WorkerGlobalScope/location/redirect.js": [
     []
    ],
-   "workers/interfaces/WorkerGlobalScope/location/returns-same-object.js": [
-    []
-   ],
    "workers/interfaces/WorkerGlobalScope/location/setting-members.js": [
     []
    ],
@@ -263236,12 +263245,6 @@
      {
       "timeout": "long"
      }
-    ],
-    [
-     "html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=xmldocument",
-     {
-      "timeout": "long"
-     }
     ]
    ],
    "html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html": [
@@ -263346,12 +263349,6 @@
      {
       "timeout": "long"
      }
-    ],
-    [
-     "html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=xmldocument",
-     {
-      "timeout": "long"
-     }
     ]
    ],
    "html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html": [
@@ -263456,12 +263453,6 @@
      {
       "timeout": "long"
      }
-    ],
-    [
-     "html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=xmldocument",
-     {
-      "timeout": "long"
-     }
     ]
    ],
    "html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html": [
@@ -263566,12 +263557,6 @@
      {
       "timeout": "long"
      }
-    ],
-    [
-     "html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=xmldocument",
-     {
-      "timeout": "long"
-     }
     ]
    ],
    "html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html": [
@@ -263676,12 +263661,6 @@
      {
       "timeout": "long"
      }
-    ],
-    [
-     "html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=xmldocument",
-     {
-      "timeout": "long"
-     }
     ]
    ],
    "html/infrastructure/urls/terminology-0/document-base-url.html": [
@@ -370520,10 +370499,39 @@
      {}
     ]
    ],
-   "workers/interfaces/WorkerGlobalScope/location/returns-same-object.html": [
+   "workers/interfaces/WorkerGlobalScope/location/returns-same-object.any.js": [
     [
-     "workers/interfaces/WorkerGlobalScope/location/returns-same-object.html",
-     {}
+     "workers/interfaces/WorkerGlobalScope/location/returns-same-object.any.serviceworker.html",
+     {
+      "script_metadata": [
+       [
+        "global",
+        "!default,worker"
+       ]
+      ]
+     }
+    ],
+    [
+     "workers/interfaces/WorkerGlobalScope/location/returns-same-object.any.sharedworker.html",
+     {
+      "script_metadata": [
+       [
+        "global",
+        "!default,worker"
+       ]
+      ]
+     }
+    ],
+    [
+     "workers/interfaces/WorkerGlobalScope/location/returns-same-object.any.worker.html",
+     {
+      "script_metadata": [
+       [
+        "global",
+        "!default,worker"
+       ]
+      ]
+     }
     ]
    ],
    "workers/interfaces/WorkerGlobalScope/location/setting-members.html": [
@@ -391685,6 +391693,14 @@
    "c64ecd067c82d050f989f1cbe005fe0b33bb9e96",
    "support"
   ],
+  "content-dpr/content-dpr-various-elements-ref.html": [
+   "9a7e10e51b06ab6a4c2453b8f048cfd8709bd471",
+   "support"
+  ],
+  "content-dpr/content-dpr-various-elements.html": [
+   "728ef264e9db2231f74459101be07490473fa021",
+   "reftest"
+  ],
   "content-dpr/image-pseudo-element-content-dpr-ref.html": [
    "baa25ac87c8f96ca630d2a6b508d6f3649fb8bb8",
    "support"
@@ -391702,7 +391718,7 @@
    "reftest"
   ],
   "content-dpr/image-with-dpr-header.html": [
-   "6c4e60844763469bbe21990879191eac0f296230",
+   "bfa1509d46455945acb9b31d6789726b2f860c84",
    "testharness"
   ],
   "content-dpr/resources/background.png": [
@@ -479785,6 +479801,14 @@
    "8fe33a95795354117177f78eae7f1081ef0b1947",
    "testharness"
   ],
+  "css/selectors/not-links-ref.html": [
+   "1efe5943f4e33eb0046fa89dfac8a97eeff3da85",
+   "support"
+  ],
+  "css/selectors/not-links.html": [
+   "d49a86fd0ea710d8fd36798e84034f3042e58e81",
+   "reftest"
+  ],
   "css/selectors/of-type-selectors-ref.xhtml": [
    "ae866213df0112292c3bade7c48ad2d27f9a14f8",
    "support"
@@ -506402,7 +506426,7 @@
    "support"
   ],
   "html/infrastructure/urls/resolving-urls/query-encoding/resources/resolve-url.js": [
-   "cbe97edbbb3caf35f49d4f4859a263e1060d05b8",
+   "cac16d0b492f2362b49625a9961dc6608104d8bf",
    "support"
   ],
   "html/infrastructure/urls/resolving-urls/query-encoding/resources/resource.py": [
@@ -506414,7 +506438,7 @@
    "support"
   ],
   "html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html": [
-   "ae28fb6d6a7c08ff3ccc5353139e2842492d9950",
+   "db15896c86c1dfdec07f04ca7f923141ab1d2dfe",
    "testharness"
   ],
   "html/infrastructure/urls/resolving-urls/query-encoding/utf-16be_include=appcache-expected.txt": [
@@ -506429,12 +506453,8 @@
    "eebd6f9e9c5440785762f87b572ac83d586cc8ee",
    "support"
   ],
-  "html/infrastructure/urls/resolving-urls/query-encoding/utf-16be_include=xmldocument-expected.txt": [
-   "b4b92efbe970e701e88c237e040a171156202284",
-   "support"
-  ],
   "html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html": [
-   "1d0bb574a77bb9a78cba3a8bb4a869ea780944a4",
+   "1a3e4926b466f5ec6b3ee10938a5bc15d884722f",
    "testharness"
   ],
   "html/infrastructure/urls/resolving-urls/query-encoding/utf-16le_include=appcache-expected.txt": [
@@ -506449,12 +506469,8 @@
    "eebd6f9e9c5440785762f87b572ac83d586cc8ee",
    "support"
   ],
-  "html/infrastructure/urls/resolving-urls/query-encoding/utf-16le_include=xmldocument-expected.txt": [
-   "b4b92efbe970e701e88c237e040a171156202284",
-   "support"
-  ],
   "html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html": [
-   "c521c9dc398b4c200bc357d4a66c55efd38f7ae9",
+   "7434dc9176c9f8695a4cf89e2cbec5a7d2ead6f3",
    "testharness"
   ],
   "html/infrastructure/urls/resolving-urls/query-encoding/utf-8_include=appcache-expected.txt": [
@@ -506477,12 +506493,8 @@
    "01ec67eb3fe9ac5b3304e231579cb062484e605e",
    "support"
   ],
-  "html/infrastructure/urls/resolving-urls/query-encoding/utf-8_include=xmldocument-expected.txt": [
-   "b4b92efbe970e701e88c237e040a171156202284",
-   "support"
-  ],
   "html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html": [
-   "e80e12403aedfdddfd1aa73ed4057316a4e5a931",
+   "1c8ade458826b3a7d8076003b28ea65ba7aa363d",
    "testharness"
   ],
   "html/infrastructure/urls/resolving-urls/query-encoding/windows-1251_include=appcache-expected.txt": [
@@ -506525,12 +506537,8 @@
    "c6fd82892f6e7c3a8c43e553156f37ec369b9360",
    "support"
   ],
-  "html/infrastructure/urls/resolving-urls/query-encoding/windows-1251_include=xmldocument-expected.txt": [
-   "b4b92efbe970e701e88c237e040a171156202284",
-   "support"
-  ],
   "html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html": [
-   "c2c6b0adeb13df97352f37ccfef9bd6b1fce9e63",
+   "5cefb612eafcd78f477a9464fa6f5aa940508f20",
    "testharness"
   ],
   "html/infrastructure/urls/resolving-urls/query-encoding/windows-1252_include=appcache-expected.txt": [
@@ -506573,10 +506581,6 @@
    "51ae80165dffe53781122372fdcf58694f3637dc",
    "support"
   ],
-  "html/infrastructure/urls/resolving-urls/query-encoding/windows-1252_include=xmldocument-expected.txt": [
-   "b4b92efbe970e701e88c237e040a171156202284",
-   "support"
-  ],
   "html/infrastructure/urls/terminology-0/document-base-url.html": [
    "ee9d726481287a10f4048f307d74333e787fbca2",
    "testharness"
@@ -512073,12 +512077,8 @@
    "c7a577a9d417fdc063ce0aeab21a06ca5568fc6e",
    "testharness"
   ],
-  "html/semantics/embedded-content/the-object-element/object-attributes-expected.txt": [
-   "7798742e69084d292d2c36e4644f801035bd348e",
-   "support"
-  ],
   "html/semantics/embedded-content/the-object-element/object-attributes.html": [
-   "30fdcf520b8b519ab58187f40fd460454ffb39a3",
+   "26a99a3ffc42f3a01f25ef25967a3985929a0bf8",
    "testharness"
   ],
   "html/semantics/embedded-content/the-object-element/object-events.html": [
@@ -605997,14 +605997,10 @@
    "2db48544a2d7d7f55201043e73297283cd99c263",
    "support"
   ],
-  "workers/interfaces/WorkerGlobalScope/location/returns-same-object.html": [
-   "b69ea3aa05828c398cc1bc63f677930f9ee70ce0",
+  "workers/interfaces/WorkerGlobalScope/location/returns-same-object.any.js": [
+   "ba9be9ce8a8534bfc17aa20f1df119ce4efad934",
    "testharness"
   ],
-  "workers/interfaces/WorkerGlobalScope/location/returns-same-object.js": [
-   "c004d8f7e564e2c43860d6f7da6d1cedffc5a9df",
-   "support"
-  ],
   "workers/interfaces/WorkerGlobalScope/location/setting-members.html": [
    "7ea79b689704c0712804901e8db6a26925a3f660",
    "testharness"
diff --git a/third_party/blink/web_tests/external/wpt/content-dpr/content-dpr-various-elements-ref.html b/third_party/blink/web_tests/external/wpt/content-dpr/content-dpr-various-elements-ref.html
new file mode 100644
index 0000000..9a7e10e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/content-dpr/content-dpr-various-elements-ref.html
@@ -0,0 +1,48 @@
+<html>
+  <head>
+    <title>Content-DPR: various elements</title>
+    <link rel="author" title="Noam Rosenthal" href="noam@webkit.org">
+    <meta name="assert" content="Assert that content-dpr is taken into account for images in all relevant elements (input/canvas/svg/video-poster)">
+    <style>
+      .row {
+        display: flex;
+      }
+
+      .row > * {
+        object-fit: none;
+        object-position: top left;
+        margin: 5px;
+        width: 100px;
+        height: 100px;
+        background: yellow;
+      }
+    </style>
+    <script>
+    document.addEventListener("DOMContentLoaded", () => {
+        const canvas = document.getElementById('canvas')
+        const image = new Image()
+        image.onload = () => {
+          const ctx = canvas.getContext('2d')
+          ctx.drawImage(image, 0, 0, 50, 50)
+        }
+        image.src = "resources/square.png"
+    });
+    </script>
+  </head>
+  <body>
+    <p>There following green boxes should all be 50px by 50px (cover 25% of the yellow boxes)</p>
+    <div class="row">
+      <div>
+        <img src="resources/square.png" width="50" height="50" />
+      </div>
+      <div>
+        <video poster="resources/square.png" width="50" height="50"></video>
+      </div>
+      <svg xmlns="http://www.w3.org/2000/svg" ><image href="resources/square.png"  width="50" height="50" /></svg>
+      <div>
+        <input type="image" src="resources/square.png" width="50" height="50" />
+      </div>
+      <canvas id="canvas" width="100" height="100">
+    </div>
+  </body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/content-dpr/content-dpr-various-elements.html b/third_party/blink/web_tests/external/wpt/content-dpr/content-dpr-various-elements.html
new file mode 100644
index 0000000..728ef26
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/content-dpr/content-dpr-various-elements.html
@@ -0,0 +1,47 @@
+<html>
+  <head>
+    <title>Content-DPR: various elements</title>
+    <link rel="author" title="Noam Rosenthal" href="noam@webkit.org">
+    <link rel="match" href="content-dpr-various-elements-ref.html" />
+    <meta name="assert" content="Assert that content-dpr is taken into account for images in all relevant elements (input/canvas/svg/video-poster)">
+    <style>
+      .row {
+        display: flex;
+      }
+
+      .row > * {
+        object-fit: none;
+        object-position: top left;
+        margin: 5px;
+        width: 100px;
+        height: 100px;
+        background: yellow;
+      }
+    </style>
+    <script>
+    document.addEventListener("DOMContentLoaded", () => {
+        const canvas = document.getElementById('canvas')
+        const image = new Image()
+        image.onload = () => {
+          const ctx = canvas.getContext('2d')
+          ctx.drawImage(image, 0, 0)
+        }
+        image.src = "resources/dpr.py?name=square.png&mimeType=image/png&dpr=2&cacheKiller=canvas"
+    });
+    </script>
+  </head>
+  <body>
+    <p>There following green boxes should all be 50px by 50px (cover 25% of the yellow boxes)</p>
+    <div class="row">
+      <div>
+        <img src="resources/square.png" width="50" height="50" />
+      </div>
+      <video poster="resources/dpr.py?name=square.png&mimeType=image/png&dpr=2&cacheKiller=2"></video>
+      <svg xmlns="http://www.w3.org/2000/svg" ><image href="resources/dpr.py?name=square.png&mimeType=image/png&dpr=2&cacheKiller=3" /></svg>
+      <div>
+        <input type="image" src="resources/dpr.py?name=square.png&mimeType=image/png&dpr=2&cacheKiller=4" />
+      </div>
+      <canvas id="canvas" width="100" height="100">
+    </div>
+  </body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/content-dpr/image-with-dpr-header.html b/third_party/blink/web_tests/external/wpt/content-dpr/image-with-dpr-header.html
index 6c4e608..bfa1509 100644
--- a/third_party/blink/web_tests/external/wpt/content-dpr/image-with-dpr-header.html
+++ b/third_party/blink/web_tests/external/wpt/content-dpr/image-with-dpr-header.html
@@ -7,6 +7,8 @@
 <img id="smaller_than_one" src="resources/dpr.py?name=square.png&mimeType=image/png&dpr=0.5">
 <img id="srcset" srcset="resources/square.png 4x">
 <img id="invalid" src="resources/dpr.py?name=square.png&mimeType=image/png&dpr=xx">
+<img id="invalid_negative" src="resources/dpr.py?name=square.png&mimeType=image/png&dpr=-2">
+<img id="invalid_zero" src="resources/dpr.py?name=square.png&mimeType=image/png&dpr=0">
 <img id="header_and_srcset_invalid" srcset="resources/dpr.py?name=square.png&mimeType=image/png&dpr=xx 4x">
 <img id="header_and_srcset_valid" srcset="resources/dpr.py?name=square.png&mimeType=image/png&dpr=4.0 2x">
 <img id="explicit_width" src="resources/dpr.py?name=square.png&mimeType=image/png&dpr=4.0" width="100" height="100">
@@ -21,6 +23,8 @@
             assert_equals(document.getElementById("smaller_than_one").naturalWidth, 200, "Smaller than one Content-DPR header value")
             assert_equals(document.getElementById("srcset").naturalWidth, 25, "srcset")
             assert_equals(document.getElementById("invalid").naturalWidth, 100, "Invalid Content-DPR header value")
+            assert_equals(document.getElementById("invalid_negative").naturalWidth, 100, "Negative Content-DPR header value")
+            assert_equals(document.getElementById("invalid_zero").naturalWidth, 100, "Zero Content-DPR header value")
             assert_equals(document.getElementById("header_and_srcset_invalid").naturalWidth, 25, "Invalid Content-DPR header value with valid srcset")
             assert_equals(document.getElementById("header_and_srcset_valid").naturalWidth, 25, "Value Content-DPR header value and srcset")
             assert_equals(document.getElementById("explicit_width").naturalWidth, 25, "Explicit width attribute")
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/not-links-ref.html b/third_party/blink/web_tests/external/wpt/css/selectors/not-links-ref.html
new file mode 100644
index 0000000..1efe594
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/not-links-ref.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<title>Test that *:not(:link):not(:visited) does not match links</title>
+<body>
+  <a href="#">Unvisited</a>
+  <a href="">Visited</a>
+  <span style="background-color: green">Green</span>
+  <p>
+    Only "Green" should have a green background.
+  </p>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/not-links.html b/third_party/blink/web_tests/external/wpt/css/selectors/not-links.html
new file mode 100644
index 0000000..d49a86f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/not-links.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<title>Test that *:not(:link):not(:visited) does not match links</title>
+<link rel="match" href="not-links-ref.html">
+<link rel="help" href="https://drafts.csswg.org/selectors-4/#negation">
+<style>
+  body > *:not(:link):not(:visited) {
+    background-color: green;
+  }
+</style>
+<body>
+  <a href="#">Unvisited</a>
+  <a href="">Visited</a>
+  <span>Green</span>
+  <p style="background-color: initial">
+    Only "Green" should have a green background.
+  </p>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-object-element/object-attributes-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-object-element/object-attributes-expected.txt
deleted file mode 100644
index 7798742..0000000
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-object-element/object-attributes-expected.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-This is a testharness.js-based test.
-FAIL object.contentWindow assert_equals: The contentWindow's name of the object element should be 'o1'. expected "o1" but got "o"
-PASS object.width
-PASS object.height
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-object-element/object-attributes.html b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-object-element/object-attributes.html
index 30fdcf5..26a99a3f 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-object-element/object-attributes.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-object-element/object-attributes.html
@@ -28,10 +28,10 @@
       assert_equals(obj2.contentWindow, null, "The contentWindow of the object element should be null when it type attribute starts with 'image/'.");
       obj1.setAttribute("name", "o1");
       assert_equals(obj1.name, "o1", "The name of the object element should be 'o1'.");
-      assert_equals(obj1.contentWindow.name, "o1", "The contentWindow's name of the object element should be 'o1'.");
+      assert_equals(obj1.contentWindow.name, "o", "The contentWindow's name of the object element should still be 'o'.");
       obj1.removeAttribute("name");
       assert_equals(obj1.name, "", "The name of the object element should be empty string.");
-      assert_equals(obj1.contentWindow.name, "", "The contentWindow's name of the object element should be empty string.");
+      assert_equals(obj1.contentWindow.name, "o", "The contentWindow's name of the object element should still be 'o'.");
     });
     t1.done()
 
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/commitStyles-expected.txt b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/commitStyles-expected.txt
index 3c047f9f..84fe342 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/commitStyles-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/commitStyles-expected.txt
@@ -7,6 +7,7 @@
 PASS Commits variable references as their computed values
 PASS Commits custom variables
 PASS Commits em units as pixel values
+PASS Commits transforms
 PASS Commits the intermediate value of an animation in the middle of stack
 PASS Commit composites on top of the underlying value
 PASS Triggers mutation observers when updating style
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/commitStyles.html b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/commitStyles.html
index ca7d641..abda8f10 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/commitStyles.html
+++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/commitStyles.html
@@ -166,6 +166,18 @@
   assert_numeric_style_equals(getComputedStyle(div).width, 100);
 }, 'Commits em units as pixel values');
 
+test(t => {
+  const div = createDiv(t);
+  const animation = div.animate(
+    { transform: 'translate(20px, 20px)' },
+    { duration: 1, fill: 'forwards' }
+  );
+  animation.finish();
+  animation.commitStyles();
+  animation.cancel();
+  assert_equals(getComputedStyle(div).transform, 'matrix(1, 0, 0, 1, 20, 20)');
+}, 'Commits transforms');
+
 promise_test(async t => {
   const div = createDiv(t);
   div.style.opacity = '0.1';
diff --git a/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerGlobalScope/location/returns-same-object.any.js b/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerGlobalScope/location/returns-same-object.any.js
new file mode 100644
index 0000000..ba9be9ce
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerGlobalScope/location/returns-same-object.any.js
@@ -0,0 +1,5 @@
+// META: global=!default,worker
+
+test(function() {
+  assert_equals(location, location);
+}, 'location === location');
diff --git a/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerGlobalScope/location/returns-same-object.html b/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerGlobalScope/location/returns-same-object.html
deleted file mode 100644
index b69ea3a..0000000
--- a/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerGlobalScope/location/returns-same-object.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html>
-<title>location === location</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div id="log"></div>
-<script>
-async_test(function() {
-  var worker = new Worker('returns-same-object.js');
-  worker.onmessage = this.step_func(function(e) {
-    assert_true(e.data);
-    this.done();
-  });
-});
-</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerGlobalScope/location/returns-same-object.js b/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerGlobalScope/location/returns-same-object.js
deleted file mode 100644
index c004d8f7..0000000
--- a/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerGlobalScope/location/returns-same-object.js
+++ /dev/null
@@ -1 +0,0 @@
-postMessage(location === location);
\ No newline at end of file
diff --git a/third_party/blink/web_tests/fast/dom/HTMLMeterElement/meter-element-expected.png b/third_party/blink/web_tests/fast/dom/HTMLMeterElement/meter-element-expected.png
index 29293e2..95b569f 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLMeterElement/meter-element-expected.png
+++ b/third_party/blink/web_tests/fast/dom/HTMLMeterElement/meter-element-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png b/third_party/blink/web_tests/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
index b5a5a2e..4ad508f8 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
+++ b/third_party/blink/web_tests/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/HTMLProgressElement/progress-element-expected.png b/third_party/blink/web_tests/fast/dom/HTMLProgressElement/progress-element-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/win/fast/dom/HTMLProgressElement/progress-element-expected.png
rename to third_party/blink/web_tests/fast/dom/HTMLProgressElement/progress-element-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/datalist/input-appearance-range-with-datalist-expected.png b/third_party/blink/web_tests/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
index c4bf029b..19832a6e 100644
--- a/third_party/blink/web_tests/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
+++ b/third_party/blink/web_tests/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/implicit-submission-expected.txt b/third_party/blink/web_tests/fast/forms/implicit-submission-expected.txt
index 42243de..63e9015 100644
--- a/third_party/blink/web_tests/fast/forms/implicit-submission-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/implicit-submission-expected.txt
@@ -19,7 +19,7 @@
 Single checkbox with a submit should submit: PASS
 Single checkbox with a submit disabled should not submit: PASS
 Single select should not submit: PASS
-Select with a submit should submit: PASS
+Select with a submit should submit: FAIL
 Select with a disabled submit should not submit: PASS
 Multi-line select with a submit should submit: PASS
 Multi-line select with a disabled submit should not submit: PASS
diff --git a/third_party/blink/web_tests/fast/forms/range/range-update-expected.png b/third_party/blink/web_tests/fast/forms/range/range-update-expected.png
index d03847c..5da4a0c 100644
--- a/third_party/blink/web_tests/fast/forms/range/range-update-expected.png
+++ b/third_party/blink/web_tests/fast/forms/range/range-update-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select/option-mouseevents-expected.txt b/third_party/blink/web_tests/fast/forms/select/option-mouseevents-expected.txt
index 3a47db9..856cbaa3 100644
--- a/third_party/blink/web_tests/fast/forms/select/option-mouseevents-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/option-mouseevents-expected.txt
@@ -17,7 +17,7 @@
 PASS: event.pageX should be 22 and is
 PASS: event.pageY should be 104 and is
 PASS: event.offsetX should be 13 and is
-PASS: event.offsetY should be 5 and is
+FAIL: event.offsetY should be 5 but instead is 2
 PASS: event.x should be 22 and is
 PASS: event.y should be 104 and is
 PASS: event type should be mousedown and is
@@ -25,7 +25,7 @@
 PASS: event.pageX should be 22 and is
 PASS: event.pageY should be 104 and is
 PASS: event.offsetX should be 13 and is
-PASS: event.offsetY should be 5 and is
+FAIL: event.offsetY should be 5 but instead is 2
 PASS: event.x should be 22 and is
 PASS: event.y should be 104 and is
 PASS: event type should be mouseup and is
@@ -33,7 +33,7 @@
 PASS: event.pageX should be 22 and is
 PASS: event.pageY should be 184 and is
 PASS: event.offsetX should be 13 and is
-PASS: event.offsetY should be 5 and is
+FAIL: event.offsetY should be 5 but instead is 2
 PASS: event.x should be 22 and is
 PASS: event.y should be 184 and is
 PASS: event type should be mouseup and is
@@ -41,7 +41,7 @@
 PASS: event.pageX should be 22 and is
 PASS: event.pageY should be 184 and is
 PASS: event.offsetX should be 13 and is
-PASS: event.offsetY should be 5 and is
+FAIL: event.offsetY should be 5 but instead is 2
 PASS: event.x should be 22 and is
 PASS: event.y should be 184 and is
 PASS: event type should be click and is
@@ -49,7 +49,7 @@
 PASS: event.pageX should be 22 and is
 PASS: event.pageY should be 262 and is
 PASS: event.offsetX should be 13 and is
-PASS: event.offsetY should be 4.8125 and is
+FAIL: event.offsetY should be 4.8125 but instead is 2
 PASS: event.x should be 22 and is
 PASS: event.y should be 262 and is
 PASS: event type should be click and is
@@ -57,7 +57,7 @@
 PASS: event.pageX should be 22 and is
 PASS: event.pageY should be 262 and is
 PASS: event.offsetX should be 13 and is
-PASS: event.offsetY should be 4.8125 and is
+FAIL: event.offsetY should be 4.8125 but instead is 2
 PASS: event.x should be 22 and is
 PASS: event.y should be 262 and is
 PASS: event type should be dblclick and is
@@ -65,7 +65,7 @@
 PASS: event.pageX should be 22 and is
 PASS: event.pageY should be 344 and is
 PASS: event.offsetX should be 13 and is
-PASS: event.offsetY should be 5 and is
+FAIL: event.offsetY should be 5 but instead is 2
 PASS: event.x should be 22 and is
 PASS: event.y should be 344 and is
 PASS: event type should be dblclick and is
@@ -73,7 +73,7 @@
 PASS: event.pageX should be 22 and is
 PASS: event.pageY should be 344 and is
 PASS: event.offsetX should be 13 and is
-PASS: event.offsetY should be 5 and is
+FAIL: event.offsetY should be 5 but instead is 2
 PASS: event.x should be 22 and is
 PASS: event.y should be 344 and is
 PASS: event type should be mousedown and is
diff --git a/third_party/blink/web_tests/fast/forms/select/select-popup-pagekeys-expected.txt b/third_party/blink/web_tests/fast/forms/select/select-popup-pagekeys-expected.txt
index 4a05f8f..ecde184f 100644
--- a/third_party/blink/web_tests/fast/forms/select/select-popup-pagekeys-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/select-popup-pagekeys-expected.txt
@@ -20,53 +20,15 @@
 5
 6
 7
-FAIL: selectedIndex should be 3 (is 0) after a PageDown from index 0
-FAIL: selectedIndex should be 4 (is 1) after a PageDown from index 1
-FAIL: selectedIndex should be 5 (is 2) after a PageDown from index 2
-FAIL: selectedIndex should be 6 (is 3) after a PageDown from index 3
-FAIL: selectedIndex should be 6 (is 4) after a PageDown from index 4
-FAIL: selectedIndex should be 6 (is 5) after a PageDown from index 5
-FAIL: selectedIndex should be 3 (is 6) after a PageUp from index 6
-FAIL: selectedIndex should be 2 (is 5) after a PageUp from index 5
-FAIL: selectedIndex should be 1 (is 4) after a PageUp from index 4
-FAIL: selectedIndex should be 0 (is 3) after a PageUp from index 3
-FAIL: selectedIndex should be 0 (is 2) after a PageUp from index 2
-FAIL: selectedIndex should be 0 (is 1) after a PageUp from index 1
-FAIL: selectedIndex should be 0 (is 6) after a Home from index 6
-FAIL: selectedIndex should be 0 (is 5) after a Home from index 5
-FAIL: selectedIndex should be 0 (is 4) after a Home from index 4
-FAIL: selectedIndex should be 0 (is 3) after a Home from index 3
-FAIL: selectedIndex should be 0 (is 2) after a Home from index 2
-FAIL: selectedIndex should be 0 (is 1) after a Home from index 1
-FAIL: selectedIndex should be 6 (is 5) after a End from index 5
-FAIL: selectedIndex should be 6 (is 4) after a End from index 4
-FAIL: selectedIndex should be 6 (is 3) after a End from index 3
-FAIL: selectedIndex should be 6 (is 2) after a End from index 2
-FAIL: selectedIndex should be 6 (is 1) after a End from index 1
-FAIL: selectedIndex should be 6 (is 0) after a End from index 0
-FAIL: selectedIndex should be 4 (is 1) after a PageDown from index 1
-FAIL: selectedIndex should be 5 (is 2) after a PageDown from index 2
-FAIL: selectedIndex should be 6 (is 4) after a PageDown from index 4
-FAIL: selectedIndex should be 6 (is 5) after a PageDown from index 5
-FAIL: selectedIndex should be 2 (is 6) after a PageUp from index 6
-FAIL: selectedIndex should be 2 (is 5) after a PageUp from index 5
-FAIL: selectedIndex should be 1 (is 4) after a PageUp from index 4
-FAIL: selectedIndex should be 1 (is 2) after a PageUp from index 2
-FAIL: selectedIndex should be 1 (is 7) after a Home from index 7
-FAIL: selectedIndex should be 1 (is 6) after a Home from index 6
-FAIL: selectedIndex should be 1 (is 5) after a Home from index 5
-FAIL: selectedIndex should be 1 (is 4) after a Home from index 4
-FAIL: selectedIndex should be 1 (is 3) after a Home from index 3
-FAIL: selectedIndex should be 1 (is 2) after a Home from index 2
-FAIL: selectedIndex should be 1 (is 0) after a Home from index 0
-FAIL: selectedIndex should be 6 (is 7) after a End from index 7
-FAIL: selectedIndex should be 6 (is 5) after a End from index 5
-FAIL: selectedIndex should be 6 (is 4) after a End from index 4
-FAIL: selectedIndex should be 6 (is 3) after a End from index 3
-FAIL: selectedIndex should be 6 (is 2) after a End from index 2
-FAIL: selectedIndex should be 6 (is 1) after a End from index 1
-FAIL: selectedIndex should be 6 (is 0) after a End from index 0
+PASS: testPageDownNoDisabledElements passed
+PASS: testPageUpNoDisabledElements passed
+PASS: testHomeNoDisabledElements passed
+PASS: testEndNoDisabledElements passed
+PASS: testPageDownWithDisabledElements passed
+PASS: testPageUpWithDisabledElements passed
+PASS: testHomeWithDisabledElements passed
+PASS: testEndWithDisabledElements passed
 
-FAIL: SOME TESTS FAILED (SEE ABOVE)
+PASS: ALL TESTS SUCCEEDED
 
 
diff --git a/third_party/blink/web_tests/fast/forms/suggested-value-expected.txt b/third_party/blink/web_tests/fast/forms/suggested-value-expected.txt
index 48939cf2..e26dd4b 100644
--- a/third_party/blink/web_tests/fast/forms/suggested-value-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggested-value-expected.txt
@@ -55,15 +55,6 @@
 |           shadow:pseudoId="-webkit-datetime-edit-year-field"
 |           "2014"
 |     <div>
-|       id="clear"
-|       pseudo="-webkit-clear-button"
-|       style=""
-|       shadow:pseudoId="-webkit-clear-button"
-|     <div>
-|       id="spin"
-|       pseudo="-webkit-inner-spin-button"
-|       shadow:pseudoId="-webkit-inner-spin-button"
-|     <div>
 |       id="picker"
 |       pseudo="-webkit-calendar-picker-indicator"
 |       shadow:pseudoId="-webkit-calendar-picker-indicator"
diff --git a/third_party/blink/web_tests/http/tests/devtools/oopif/oopif-performance-monitor-expected.txt b/third_party/blink/web_tests/http/tests/devtools/oopif/oopif-performance-monitor-expected.txt
index f54424e..c9a47ec9 100644
--- a/third_party/blink/web_tests/http/tests/devtools/oopif/oopif-performance-monitor-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/oopif/oopif-performance-monitor-expected.txt
@@ -4,9 +4,9 @@
 Metrics reported:
 AdSubframes
 AudioHandlers
-CaptureSnapshotDuration
 ContextLifecycleStateObservers
 DetachedScriptStates
+DevToolsCommandDuration
 Documents
 DomContentLoaded
 FirstMeaningfulPaint
diff --git a/third_party/blink/web_tests/http/tests/devtools/sources/source-frame-toolbar-items-expected.txt b/third_party/blink/web_tests/http/tests/devtools/sources/source-frame-toolbar-items-expected.txt
index 3b31a94..1191e02 100644
--- a/third_party/blink/web_tests/http/tests/devtools/sources/source-frame-toolbar-items-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/sources/source-frame-toolbar-items-expected.txt
@@ -5,12 +5,14 @@
 
 Line 1, Column 1
 
+
 foo.js:16
 Coverage: n/a
 Items for test.js:
 
 Line 1, Column 1
 
+
 foo.js:13
 Coverage: n/a
 Script execution resumed.
diff --git a/third_party/blink/web_tests/inspector-protocol/performance/perf-push-metrics-expected.txt b/third_party/blink/web_tests/inspector-protocol/performance/perf-push-metrics-expected.txt
index eaa2d9d..b596012 100644
--- a/third_party/blink/web_tests/inspector-protocol/performance/perf-push-metrics-expected.txt
+++ b/third_party/blink/web_tests/inspector-protocol/performance/perf-push-metrics-expected.txt
@@ -22,7 +22,7 @@
 	RecalcStyleCount
 	LayoutDuration
 	RecalcStyleDuration
-	CaptureSnapshotDuration
+	DevToolsCommandDuration
 	ScriptDuration
 	V8CompileDuration
 	TaskDuration
@@ -56,7 +56,7 @@
 	RecalcStyleCount
 	LayoutDuration
 	RecalcStyleDuration
-	CaptureSnapshotDuration
+	DevToolsCommandDuration
 	ScriptDuration
 	V8CompileDuration
 	TaskDuration
@@ -90,7 +90,7 @@
 	RecalcStyleCount
 	LayoutDuration
 	RecalcStyleDuration
-	CaptureSnapshotDuration
+	DevToolsCommandDuration
 	ScriptDuration
 	V8CompileDuration
 	TaskDuration
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/radio/radio-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/radio/radio-appearance-basic-expected.png
deleted file mode 100644
index 9dc7241..0000000
--- a/third_party/blink/web_tests/platform/linux/fast/forms/radio/radio-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/dynamic/008-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/dynamic/008-expected.png
index f062501..c4f7c5d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/dynamic/008-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/dynamic/008-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/files/file-in-input-display-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/files/file-in-input-display-expected.png
deleted file mode 100644
index 32c6fe8..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/files/file-in-input-display-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
index dc15238..9de63d7 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
index 3e6061ea..84cba9f 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
index 076a05c..84cba9f 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
index 4b7477e..073504da 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
index 892601c3..d1dc5a2 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
index 958d057..b145f305 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
index 473e4d58..2e2a1c3 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
index 8a95dc6..a726529 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
index 2b720dd..c8ab8a4 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/month-picker-appearance-expected.png
index 52aafd20..02aa44d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/month-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
index 5874440..22257063 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/week-picker-appearance-expected.png
index d05f004..6392593 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/week-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/week-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
index 2676be7b..9ed7983 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/date/date-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/date/date-appearance-l10n-expected.png
index 9a9d8f1..a71a0e5 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/date/date-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/date/date-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/date/date-appearance-pseudo-elements-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/date/date-appearance-pseudo-elements-expected.png
index 7c8f93a..f11bed8 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/date/date-appearance-pseudo-elements-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/date/date-appearance-pseudo-elements-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
index aa2c42b..635b7a1 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
index 19272a12e..d9ec006 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/file/file-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/file/file-appearance-basic-expected.png
deleted file mode 100644
index 8073cf2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/file/file-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/form-element-geometry-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/form-element-geometry-expected.png
index acf6b56f..0f7452ae 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/form-element-geometry-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/form-element-geometry-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/month/month-appearance-basic-expected.png
index c6472e86..23f06768 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/month/month-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/month/month-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/month/month-appearance-l10n-expected.png
index 6008979..0d5b378 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/month/month-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/month/month-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/month/month-appearance-pseudo-elements-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/month/month-appearance-pseudo-elements-expected.png
index 38d8b16..0115b71 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/month/month-appearance-pseudo-elements-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/month/month-appearance-pseudo-elements-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.png
index f27d0191..bbf5421 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/basic-selects-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/basic-selects-expected.png
deleted file mode 100644
index 6b0f740..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/basic-selects-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/listbox-appearance-separator-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/listbox-appearance-separator-expected.png
index d409fdd..454411a9 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/listbox-appearance-separator-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/listbox-appearance-separator-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-appearance-basic-expected.png
deleted file mode 100644
index ade422efc..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-appearance-rtl-expected.png
deleted file mode 100644
index 43a52d0..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-appearance-rtl-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-option-wrap-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-option-wrap-expected.png
index f31abe8..a649fc2 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-option-wrap-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-option-wrap-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-update-text-popup-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-update-text-popup-expected.txt
deleted file mode 100644
index 5bf6a57..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-update-text-popup-expected.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-Tests <select> text update when popup is visible and selectionIndex changes.
-Needs run-layout-test.
-
-A
-B
-C
-layer at (0,0) size 40x18
-  LayoutNGBlockFlow (positioned) {DIV} at (8,50) size 40x18
-    LayoutMenuList {SELECT} at (0,0) size 40x18 [bgcolor=#F8F8F8]
-    LayoutText {#text} at (0,0) size 0x0
-layer at (8,0) size 9x18
-  LayoutBlockFlow {DIV} at (8,0) size 9x18
-    LayoutText {#text} at (0,2) size 9x13
-      text run at (0,2) width 9: "C"
-
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/targeted-frame-submission-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/targeted-frame-submission-expected.png
index 90a3ac9..c62f5e9e 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/targeted-frame-submission-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/targeted-frame-submission-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-edge-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-edge-expected.png
index 99c9d10..e0d60ba 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-edge-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-edge-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-escape-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-escape-expected.png
index c7ebd9d..2f3aa4f 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-escape-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-escape-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-iframe-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-iframe-expected.png
index c925b30..3c0ce1a 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-iframe-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-iframe-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-rtl-ui-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
index f792af31..0e2da30 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-wrap-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-wrap-expected.png
index a08badb..bafb964 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-wrap-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-appearance-wrap-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-device-emulation-change-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-device-emulation-change-expected.png
index 074fbc6..ef915bc 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-device-emulation-change-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-device-emulation-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-device-emulation-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-device-emulation-expected.png
index 074fbc6..ef915bc 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-device-emulation-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/validation-bubble-device-emulation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/001-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/001-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/001-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/basic-buttons-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/basic-buttons-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/basic-buttons-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/basic-buttons-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/basic-inputs-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/basic-inputs-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/blankbuttons-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/blankbuttons-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/blankbuttons-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/blankbuttons-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button-default-title-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button-default-title-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button-default-title-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button-default-title-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button-positioned-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button-positioned-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button-positioned-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button-positioned-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button-sizes-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button-sizes-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button-style-color-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button-style-color-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button-table-styles-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button-table-styles-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button-table-styles-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button-table-styles-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button-text-transform-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button-text-transform-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button-text-transform-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button-text-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button/button-align-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button/button-align-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button/button-align-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button/button-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button/button-cannot-be-nested-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button/button-cannot-be-nested-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button/button-cannot-be-nested-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button/button-cannot-be-nested-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button/button-white-space-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button/button-white-space-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/button/button-white-space-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/button/button-white-space-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
new file mode 100644
index 0000000..dc15238
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
new file mode 100644
index 0000000..3e6061ea
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
new file mode 100644
index 0000000..4b7477e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
new file mode 100644
index 0000000..892601c3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
new file mode 100644
index 0000000..958d057
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
new file mode 100644
index 0000000..473e4d58
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
new file mode 100644
index 0000000..8a95dc6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
new file mode 100644
index 0000000..2b720dd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png
new file mode 100644
index 0000000..52aafd20
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
new file mode 100644
index 0000000..5874440
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png
new file mode 100644
index 0000000..d05f004
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
new file mode 100644
index 0000000..2676be7b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/color/color-suggestion-picker-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/control-clip-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/control-clip-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/control-clip-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/control-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/control-clip-overflow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/control-clip-overflow-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/control-clip-overflow-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/control-clip-overflow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/control-restrict-line-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/control-restrict-line-height-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/control-restrict-line-height-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/control-restrict-line-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-l10n-expected.png
new file mode 100644
index 0000000..9a9d8f1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/file/file-input-direction-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-direction-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/file/file-input-direction-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/file/file-input-pressed-state-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-pressed-state-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/file/file-input-pressed-state-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-pressed-state-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/file/input-file-re-render-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/file/input-file-re-render-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/file/input-file-re-render-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/file/input-file-re-render-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/floating-textfield-relayout-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/floating-textfield-relayout-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/floating-textfield-relayout-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/floating-textfield-relayout-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png
new file mode 100644
index 0000000..acf6b56f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/formmove-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/formmove-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/formmove-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/formmove-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/formmove3-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/formmove3-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/formmove3-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/formmove3-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/image/002-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/image/002-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/image/002-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/image/002-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/image/005-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/image/005-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/image/005-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/image/005-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/image/image-alt-text-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/image/image-alt-text-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/image/image-alt-text-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/image/image-alt-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/indeterminate-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/indeterminate-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/indeterminate-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/indeterminate-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/input-align-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/input-align-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/input-align-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/input-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/input-appearance-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/input-appearance-height-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/input-appearance-height-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/input-appearance-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/input-button-sizes-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/input-button-sizes-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/input-first-letter-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/input-first-letter-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/input-first-letter-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/input-first-letter-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/input-type-text-min-width-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/input-type-text-min-width-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/input-type-text-min-width-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/input-type-text-min-width-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/input-value-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/input-value-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/minWidthPercent-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/minWidthPercent-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/minWidthPercent-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/minWidthPercent-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png
new file mode 100644
index 0000000..6008979
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/number/number-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-rtl-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/number/number-appearance-rtl-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/number/number-appearance-spinbutton-layer-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-layer-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/number/number-appearance-spinbutton-layer-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-layer-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/placeholder-position-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/placeholder-position-expected.png
new file mode 100644
index 0000000..f27d0191
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/placeholder-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/plaintext-mode-2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/plaintext-mode-2-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/plaintext-mode-2-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/plaintext-mode-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/search/search-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/search/search-appearance-basic-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/search/search-appearance-basic-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/search/search-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/search/search-cancel-button-style-sharing-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/search/search-cancel-button-style-sharing-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/search/search-cancel-button-style-sharing-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/search/search-cancel-button-style-sharing-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/search/search-display-none-cancel-button-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/search/search-display-none-cancel-button-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/search/search-display-none-cancel-button-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/search/search-display-none-cancel-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/search/search-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/search/search-rtl-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/search/search-rtl-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/search/search-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/search/search-vertical-alignment-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/search/search-vertical-alignment-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/search/search-vertical-alignment-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/search/search-vertical-alignment-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/search/searchfield-heights-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/search/searchfield-heights-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/search/searchfield-heights-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/search/searchfield-heights-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/003-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/003-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/003-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/004-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/004-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/004-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/004-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/HTMLOptionElement_label01-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label01-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/HTMLOptionElement_label01-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label01-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/HTMLOptionElement_label02-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/HTMLOptionElement_label02-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/HTMLOptionElement_label03-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/HTMLOptionElement_label03-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/HTMLOptionElement_label04-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/HTMLOptionElement_label04-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/HTMLOptionElement_label05-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label05-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/HTMLOptionElement_label05-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label05-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/disabled-select-change-index-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/disabled-select-change-index-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/disabled-select-change-index-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/disabled-select-change-index-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/listbox-appearance-basic-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-separator-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-separator-expected.png
new file mode 100644
index 0000000..d409fdd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-separator-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/listbox-bidi-align-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/listbox-bidi-align-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/listbox-scrollbar-incremental-load-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-scrollbar-incremental-load-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/listbox-scrollbar-incremental-load-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-scrollbar-incremental-load-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/listbox-width-change-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-width-change-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/listbox-width-change-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-width-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/listbox-with-display-none-option-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-with-display-none-option-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/listbox-with-display-none-option-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-with-display-none-option-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-appearance-none-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-none-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-appearance-none-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-none-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-clip-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-clip-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-clip-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-deselect-update-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-deselect-update-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-deselect-update-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-deselect-update-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-no-overflow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-no-overflow-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-no-overflow-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-no-overflow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-option-wrap-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-option-wrap-expected.png
new file mode 100644
index 0000000..f31abe8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-option-wrap-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-restrict-line-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-restrict-line-height-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-restrict-line-height-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-restrict-line-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-style-color-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-style-color-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-style-color-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-width-change-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-width-change-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/menulist-width-change-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-width-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/optgroup-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/optgroup-rendering-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/optgroup-rendering-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/optgroup-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/option-script-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/option-script-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/option-script-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/option-script-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/option-strip-whitespace-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/option-strip-whitespace-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/option-text-clip-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/option-text-clip-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/option-text-clip-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/option-text-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-align-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-align-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-align-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-autofilled-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-autofilled-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-autofilled-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-autofilled-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-background-none-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-background-none-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-background-none-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-background-none-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-baseline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-baseline-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-baseline-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-baseline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-block-background-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-block-background-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-block-background-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-block-background-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-change-listbox-size-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-size-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-change-listbox-size-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-change-listbox-to-popup-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-to-popup-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-change-listbox-to-popup-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-to-popup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-change-popup-to-listbox-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-popup-to-listbox-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-change-popup-to-listbox-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-popup-to-listbox-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-dirty-parent-pref-widths-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-dirty-parent-pref-widths-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-dirty-parent-pref-widths-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-dirty-parent-pref-widths-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-disabled-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-disabled-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-disabled-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-disabled-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-empty-option-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-empty-option-height-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-empty-option-height-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-empty-option-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-initial-position-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-initial-position-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-initial-position-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-initial-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-item-background-clip-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-item-background-clip-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-item-background-clip-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-item-background-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-list-box-with-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-list-box-with-height-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-list-box-with-height-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-list-box-with-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-listbox-multiple-no-focusring-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-listbox-multiple-no-focusring-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-listbox-multiple-no-focusring-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-listbox-multiple-no-focusring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-multiple-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-multiple-rtl-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-multiple-rtl-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-multiple-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-overflow-scroll-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-overflow-scroll-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-overflow-scroll-inherited-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-inherited-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-overflow-scroll-inherited-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-inherited-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-selected-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-selected-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-selected-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-selected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-size-invalid-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-size-invalid-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-size-invalid-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-size-invalid-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-style-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-style-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-style-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-style-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-writing-direction-natural-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/select/select-writing-direction-natural-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/stuff-on-my-optgroup-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/stuff-on-my-optgroup-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/stuff-on-my-optgroup-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/stuff-on-my-optgroup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/submit/submit-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/submit/submit-appearance-basic-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/tabbing-input-iframe-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/tabbing-input-iframe-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/tabbing-input-iframe-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/tabbing-input-iframe-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/targeted-frame-submission-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/targeted-frame-submission-expected.png
new file mode 100644
index 0000000..90a3ac9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/targeted-frame-submission-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/text-style-color-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/text-style-color-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.10/fast/forms/text-style-color-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/text-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-edge-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-edge-expected.png
new file mode 100644
index 0000000..99c9d10
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-edge-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-escape-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-escape-expected.png
new file mode 100644
index 0000000..c7ebd9d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-escape-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-iframe-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-iframe-expected.png
new file mode 100644
index 0000000..c925b30
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-iframe-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-rtl-ui-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
new file mode 100644
index 0000000..f792af31
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-wrap-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-wrap-expected.png
new file mode 100644
index 0000000..a08badb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-wrap-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-change-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-change-expected.png
new file mode 100644
index 0000000..074fbc6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-expected.png
new file mode 100644
index 0000000..074fbc6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/dynamic/008-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/dynamic/008-expected.png
deleted file mode 100644
index 2c3d27a..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/dynamic/008-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/files/file-in-input-display-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/files/file-in-input-display-expected.png
deleted file mode 100644
index b4a3223..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/files/file-in-input-display-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
deleted file mode 100644
index de7ab8e0..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
index 6b662b5..3f705a75 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
index 441c62b..3509c9e 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/file/file-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/file/file-appearance-basic-expected.png
deleted file mode 100644
index 68037190b..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/file/file-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/month/month-appearance-l10n-expected.png
index 57c872e..ed63e033 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/month/month-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/month/month-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/basic-selects-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/basic-selects-expected.png
deleted file mode 100644
index 05b2752..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/basic-selects-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-appearance-basic-expected.png
deleted file mode 100644
index eea0ee9..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-appearance-rtl-expected.png
deleted file mode 100644
index 1890bbea..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-appearance-rtl-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-edge-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-edge-expected.png
index 6890dd5..a2ed4f6 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-edge-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-edge-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-escape-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-escape-expected.png
index 96b4bfb4..b094b80 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-escape-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-escape-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-iframe-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-iframe-expected.png
index 1fee014..d5c70dc 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-iframe-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-iframe-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-rtl-ui-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
index 7cefad1..838e5a6f 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-wrap-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-wrap-expected.png
index 33b944f..29dd257 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-wrap-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-appearance-wrap-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-device-emulation-change-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-device-emulation-change-expected.png
index 2b67867..6068c94 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-device-emulation-change-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-device-emulation-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-device-emulation-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-device-emulation-expected.png
index 2b67867..6068c94 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-device-emulation-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/validation-bubble-device-emulation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/basic-buttons-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/basic-buttons-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/basic-buttons-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/basic-buttons-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/basic-inputs-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/basic-inputs-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/blankbuttons-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/blankbuttons-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/blankbuttons-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/blankbuttons-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button-default-title-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button-default-title-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button-default-title-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button-default-title-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button-positioned-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button-positioned-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button-positioned-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button-positioned-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button-sizes-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button-sizes-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button-style-color-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button-style-color-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button-table-styles-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button-table-styles-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button-table-styles-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button-table-styles-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button-text-transform-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button-text-transform-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button-text-transform-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button-text-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button/button-align-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button/button-align-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button/button-align-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button/button-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button/button-cannot-be-nested-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button/button-cannot-be-nested-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button/button-cannot-be-nested-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button/button-cannot-be-nested-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button/button-inner-block-reuse-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button/button-inner-block-reuse-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button/button-inner-block-reuse-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button/button-inner-block-reuse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button/button-white-space-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button/button-white-space-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/button/button-white-space-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/button/button-white-space-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
new file mode 100644
index 0000000..6b662b5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/month-picker-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/week-picker-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/color/color-suggestion-picker-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/control-clip-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/control-clip-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/control-clip-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/control-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/control-clip-overflow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/control-clip-overflow-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/control-clip-overflow-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/control-clip-overflow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/control-restrict-line-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/control-restrict-line-height-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/control-restrict-line-height-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/control-restrict-line-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/file/file-input-direction-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-direction-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/file/file-input-direction-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/file/file-input-pressed-state-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-pressed-state-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/file/file-input-pressed-state-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-pressed-state-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/file/input-file-re-render-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/file/input-file-re-render-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/file/input-file-re-render-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/file/input-file-re-render-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/floating-textfield-relayout-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/floating-textfield-relayout-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/floating-textfield-relayout-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/floating-textfield-relayout-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/form-element-geometry-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/form-element-geometry-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/formmove3-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/formmove3-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/formmove3-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/formmove3-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/image/002-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/image/002-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/image/002-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/image/002-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/image/005-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/image/005-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/image/005-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/image/005-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/image/image-alt-text-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/image/image-alt-text-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/image/image-alt-text-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/image/image-alt-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/input-align-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/input-align-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/input-align-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/input-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/input-appearance-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/input-appearance-height-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/input-appearance-height-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/input-appearance-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/input-button-sizes-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/input-button-sizes-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/input-first-letter-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/input-first-letter-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/input-first-letter-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/input-first-letter-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/input-type-text-min-width-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/input-type-text-min-width-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/input-type-text-min-width-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/input-type-text-min-width-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/input-value-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/input-value-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/minWidthPercent-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/minWidthPercent-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/minWidthPercent-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/minWidthPercent-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png
new file mode 100644
index 0000000..57c872e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/number/number-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-rtl-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/number/number-appearance-rtl-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/number/number-appearance-spinbutton-layer-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-layer-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/number/number-appearance-spinbutton-layer-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-layer-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/placeholder-position-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/placeholder-position-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/placeholder-position-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/placeholder-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/plaintext-mode-2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/plaintext-mode-2-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/plaintext-mode-2-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/plaintext-mode-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/search/search-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/search/search-appearance-basic-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/search/search-appearance-basic-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/search/search-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/search/search-cancel-button-style-sharing-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/search/search-cancel-button-style-sharing-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/search/search-cancel-button-style-sharing-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/search/search-cancel-button-style-sharing-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/search/search-display-none-cancel-button-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/search/search-display-none-cancel-button-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/search/search-display-none-cancel-button-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/search/search-display-none-cancel-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/search/search-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/search/search-rtl-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/search/search-rtl-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/search/search-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/search/search-vertical-alignment-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/search/search-vertical-alignment-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/search/search-vertical-alignment-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/search/search-vertical-alignment-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/search/searchfield-heights-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/search/searchfield-heights-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/search/searchfield-heights-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/search/searchfield-heights-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/003-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/003-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/003-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/004-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/004-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/004-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/004-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/HTMLOptionElement_label01-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label01-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/HTMLOptionElement_label01-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label01-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/HTMLOptionElement_label02-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/HTMLOptionElement_label02-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/HTMLOptionElement_label03-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/HTMLOptionElement_label03-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/HTMLOptionElement_label04-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/HTMLOptionElement_label04-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/HTMLOptionElement_label05-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label05-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/HTMLOptionElement_label05-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label05-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/disabled-select-change-index-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/disabled-select-change-index-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/disabled-select-change-index-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/disabled-select-change-index-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/listbox-appearance-basic-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/listbox-appearance-separator-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-separator-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/listbox-appearance-separator-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-separator-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/listbox-bidi-align-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/listbox-bidi-align-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/listbox-scrollbar-incremental-load-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-scrollbar-incremental-load-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/listbox-scrollbar-incremental-load-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-scrollbar-incremental-load-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/listbox-width-change-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-width-change-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/listbox-width-change-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-width-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/listbox-with-display-none-option-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-with-display-none-option-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/listbox-with-display-none-option-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-with-display-none-option-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-appearance-none-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-none-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-appearance-none-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-none-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-clip-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-clip-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-clip-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-deselect-update-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-deselect-update-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-deselect-update-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-deselect-update-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-no-overflow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-no-overflow-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-no-overflow-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-no-overflow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-option-wrap-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-option-wrap-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-option-wrap-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-option-wrap-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-restrict-line-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-restrict-line-height-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-restrict-line-height-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-restrict-line-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-style-color-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-style-color-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-style-color-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-width-change-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-width-change-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/menulist-width-change-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-width-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/optgroup-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/optgroup-rendering-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/optgroup-rendering-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/optgroup-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/option-script-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/option-script-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/option-script-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/option-script-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/option-strip-whitespace-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/option-strip-whitespace-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/option-text-clip-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/option-text-clip-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/option-text-clip-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/option-text-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-align-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-align-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-align-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-autofilled-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-autofilled-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-autofilled-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-autofilled-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-background-none-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-background-none-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-background-none-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-background-none-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-baseline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-baseline-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-baseline-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-baseline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-block-background-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-block-background-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-block-background-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-block-background-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-change-listbox-size-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-size-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-change-listbox-size-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-change-listbox-to-popup-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-to-popup-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-change-listbox-to-popup-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-to-popup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-change-popup-to-listbox-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-popup-to-listbox-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-change-popup-to-listbox-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-popup-to-listbox-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-dirty-parent-pref-widths-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-dirty-parent-pref-widths-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-dirty-parent-pref-widths-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-dirty-parent-pref-widths-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-disabled-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-disabled-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-disabled-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-disabled-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-initial-position-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-initial-position-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-initial-position-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-initial-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-item-background-clip-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-item-background-clip-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-item-background-clip-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-item-background-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-list-box-with-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-list-box-with-height-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-list-box-with-height-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-list-box-with-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-listbox-multiple-no-focusring-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-listbox-multiple-no-focusring-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-listbox-multiple-no-focusring-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-listbox-multiple-no-focusring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-multiple-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-multiple-rtl-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-multiple-rtl-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-multiple-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-overflow-scroll-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-overflow-scroll-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-overflow-scroll-inherited-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-inherited-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-overflow-scroll-inherited-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-inherited-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-selected-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-selected-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-selected-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-selected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-size-invalid-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-size-invalid-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-size-invalid-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-size-invalid-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-style-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-style-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-style-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-style-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-writing-direction-natural-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/select/select-writing-direction-natural-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/stuff-on-my-optgroup-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/stuff-on-my-optgroup-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/stuff-on-my-optgroup-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/stuff-on-my-optgroup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/submit/submit-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/submit/submit-appearance-basic-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/tabbing-input-iframe-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/tabbing-input-iframe-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/tabbing-input-iframe-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/tabbing-input-iframe-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/targeted-frame-submission-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/targeted-frame-submission-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/targeted-frame-submission-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/targeted-frame-submission-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/text-style-color-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/text-style-color-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.11/fast/forms/text-style-color-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/text-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-edge-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-edge-expected.png
new file mode 100644
index 0000000..6890dd5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-edge-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-escape-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-escape-expected.png
new file mode 100644
index 0000000..96b4bfb4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-escape-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-iframe-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-iframe-expected.png
new file mode 100644
index 0000000..1fee014
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-iframe-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-rtl-ui-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
new file mode 100644
index 0000000..7cefad1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-wrap-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-wrap-expected.png
new file mode 100644
index 0000000..33b944f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-wrap-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-change-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-change-expected.png
new file mode 100644
index 0000000..2b67867
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-expected.png
new file mode 100644
index 0000000..2b67867
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/dom/HTMLMeterElement/meter-optimums-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/dom/HTMLMeterElement/meter-optimums-expected.png
index edb4c57..0384a07 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/dom/HTMLMeterElement/meter-optimums-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/dom/HTMLMeterElement/meter-optimums-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
deleted file mode 100644
index e7774961..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/file/file-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/file/file-appearance-basic-expected.png
deleted file mode 100644
index b674dde..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/file/file-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/form-element-geometry-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/form-element-geometry-expected.png
index 7bd4f1e..ac1cbf92 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/form-element-geometry-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/form-element-geometry-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/basic-selects-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/basic-selects-expected.png
deleted file mode 100644
index cb0cc64..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/basic-selects-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/menulist-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/menulist-appearance-basic-expected.png
deleted file mode 100644
index d9f0c389..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/menulist-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/menulist-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/menulist-appearance-rtl-expected.png
deleted file mode 100644
index be32ae1..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/menulist-appearance-rtl-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/text-control-intrinsic-widths-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/text-control-intrinsic-widths-expected.txt
index 737d076..53d1ed72 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/text-control-intrinsic-widths-expected.txt
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/text-control-intrinsic-widths-expected.txt
@@ -4,408 +4,408 @@
 
 Lucida Grande
 input
-size=1 clientWidth=9
-size=2 clientWidth=16
-size=3 clientWidth=23
-size=4 clientWidth=30
-size=5 clientWidth=37
-size=10 clientWidth=72
-size=20 clientWidth=141
-size=50 clientWidth=350
-size=100 clientWidth=698
-size=500 clientWidth=3480
-size=1000 clientWidth=6958
+size=1 clientWidth=12
+size=2 clientWidth=21
+size=3 clientWidth=29
+size=4 clientWidth=38
+size=5 clientWidth=46
+size=10 clientWidth=88
+size=20 clientWidth=173
+size=50 clientWidth=425
+size=100 clientWidth=847
+size=500 clientWidth=4218
+size=1000 clientWidth=8433
 
 
 textarea
 cols=1 clientWidth=26
-cols=2 clientWidth=33
-cols=3 clientWidth=40
-cols=4 clientWidth=47
-cols=5 clientWidth=54
-cols=10 clientWidth=89
-cols=20 clientWidth=159
-cols=50 clientWidth=367
-cols=100 clientWidth=715
-cols=500 clientWidth=3497
-cols=1000 clientWidth=6975
+cols=2 clientWidth=34
+cols=3 clientWidth=43
+cols=4 clientWidth=51
+cols=5 clientWidth=60
+cols=10 clientWidth=102
+cols=20 clientWidth=186
+cols=50 clientWidth=439
+cols=100 clientWidth=860
+cols=500 clientWidth=4232
+cols=1000 clientWidth=8446
 
 
 Courier
 input
-size=1 clientWidth=9
-size=2 clientWidth=15
-size=3 clientWidth=22
-size=4 clientWidth=28
-size=5 clientWidth=35
-size=10 clientWidth=68
-size=20 clientWidth=134
-size=50 clientWidth=332
-size=100 clientWidth=662
-size=500 clientWidth=3303
-size=1000 clientWidth=6603
+size=1 clientWidth=12
+size=2 clientWidth=20
+size=3 clientWidth=28
+size=4 clientWidth=36
+size=5 clientWidth=44
+size=10 clientWidth=84
+size=20 clientWidth=164
+size=50 clientWidth=404
+size=100 clientWidth=804
+size=500 clientWidth=4004
+size=1000 clientWidth=8003
 
 
 textarea
-cols=1 clientWidth=26
+cols=1 clientWidth=25
 cols=2 clientWidth=33
-cols=3 clientWidth=39
-cols=4 clientWidth=46
-cols=5 clientWidth=53
-cols=10 clientWidth=86
-cols=20 clientWidth=152
-cols=50 clientWidth=350
-cols=100 clientWidth=680
-cols=500 clientWidth=3320
-cols=1000 clientWidth=6621
+cols=3 clientWidth=41
+cols=4 clientWidth=49
+cols=5 clientWidth=57
+cols=10 clientWidth=97
+cols=20 clientWidth=177
+cols=50 clientWidth=417
+cols=100 clientWidth=817
+cols=500 clientWidth=4017
+cols=1000 clientWidth=8017
 
 
 Helvetica
 input
-size=1 clientWidth=8
-size=2 clientWidth=14
-size=3 clientWidth=20
-size=4 clientWidth=26
-size=5 clientWidth=33
-size=10 clientWidth=63
-size=20 clientWidth=124
-size=50 clientWidth=308
-size=100 clientWidth=614
-size=500 clientWidth=3061
-size=1000 clientWidth=6120
+size=1 clientWidth=11
+size=2 clientWidth=19
+size=3 clientWidth=26
+size=4 clientWidth=34
+size=5 clientWidth=41
+size=10 clientWidth=78
+size=20 clientWidth=152
+size=50 clientWidth=375
+size=100 clientWidth=745
+size=500 clientWidth=3711
+size=1000 clientWidth=7418
 
 
 textarea
-cols=1 clientWidth=26
+cols=1 clientWidth=25
 cols=2 clientWidth=32
-cols=3 clientWidth=38
-cols=4 clientWidth=44
-cols=5 clientWidth=50
-cols=10 clientWidth=81
-cols=20 clientWidth=142
-cols=50 clientWidth=325
-cols=100 clientWidth=631
-cols=500 clientWidth=3078
-cols=1000 clientWidth=6137
+cols=3 clientWidth=40
+cols=4 clientWidth=47
+cols=5 clientWidth=55
+cols=10 clientWidth=92
+cols=20 clientWidth=166
+cols=50 clientWidth=388
+cols=100 clientWidth=759
+cols=500 clientWidth=3724
+cols=1000 clientWidth=7431
 
 
 Monaco
 input
-size=1 clientWidth=9
-size=2 clientWidth=15
-size=3 clientWidth=22
-size=4 clientWidth=28
-size=5 clientWidth=35
-size=10 clientWidth=68
-size=20 clientWidth=134
-size=50 clientWidth=332
-size=100 clientWidth=662
-size=500 clientWidth=3303
-size=1000 clientWidth=6603
+size=1 clientWidth=12
+size=2 clientWidth=20
+size=3 clientWidth=28
+size=4 clientWidth=36
+size=5 clientWidth=44
+size=10 clientWidth=84
+size=20 clientWidth=164
+size=50 clientWidth=404
+size=100 clientWidth=804
+size=500 clientWidth=4004
+size=1000 clientWidth=8003
 
 
 textarea
-cols=1 clientWidth=26
+cols=1 clientWidth=25
 cols=2 clientWidth=33
-cols=3 clientWidth=39
-cols=4 clientWidth=46
-cols=5 clientWidth=53
-cols=10 clientWidth=86
-cols=20 clientWidth=152
-cols=50 clientWidth=350
-cols=100 clientWidth=680
-cols=500 clientWidth=3320
-cols=1000 clientWidth=6621
+cols=3 clientWidth=41
+cols=4 clientWidth=49
+cols=5 clientWidth=57
+cols=10 clientWidth=97
+cols=20 clientWidth=177
+cols=50 clientWidth=417
+cols=100 clientWidth=817
+cols=500 clientWidth=4017
+cols=1000 clientWidth=8017
 
 
 Times
 input
-size=1 clientWidth=8
-size=2 clientWidth=13
-size=3 clientWidth=19
-size=4 clientWidth=24
-size=5 clientWidth=30
-size=10 clientWidth=57
-size=20 clientWidth=112
-size=50 clientWidth=277
-size=100 clientWidth=552
-size=500 clientWidth=2752
-size=1000 clientWidth=5502
+size=1 clientWidth=11
+size=2 clientWidth=17
+size=3 clientWidth=24
+size=4 clientWidth=31
+size=5 clientWidth=37
+size=10 clientWidth=71
+size=20 clientWidth=137
+size=50 clientWidth=337
+size=100 clientWidth=671
+size=500 clientWidth=3337
+size=1000 clientWidth=6669
 
 
 textarea
-cols=1 clientWidth=25
-cols=2 clientWidth=30
-cols=3 clientWidth=36
-cols=4 clientWidth=41
-cols=5 clientWidth=47
-cols=10 clientWidth=74
-cols=20 clientWidth=129
-cols=50 clientWidth=294
-cols=100 clientWidth=569
-cols=500 clientWidth=2769
-cols=1000 clientWidth=5519
+cols=1 clientWidth=24
+cols=2 clientWidth=31
+cols=3 clientWidth=37
+cols=4 clientWidth=44
+cols=5 clientWidth=51
+cols=10 clientWidth=84
+cols=20 clientWidth=151
+cols=50 clientWidth=351
+cols=100 clientWidth=684
+cols=500 clientWidth=3350
+cols=1000 clientWidth=6682
 
 
 Andale Mono
 input
-size=1 clientWidth=12
-size=2 clientWidth=19
-size=3 clientWidth=26
-size=4 clientWidth=33
-size=5 clientWidth=40
-size=10 clientWidth=75
-size=20 clientWidth=145
-size=50 clientWidth=355
-size=100 clientWidth=705
-size=500 clientWidth=3505
-size=1000 clientWidth=7005
+size=1 clientWidth=16
+size=2 clientWidth=24
+size=3 clientWidth=32
+size=4 clientWidth=40
+size=5 clientWidth=48
+size=10 clientWidth=88
+size=20 clientWidth=168
+size=50 clientWidth=408
+size=100 clientWidth=808
+size=500 clientWidth=4008
+size=1000 clientWidth=8008
 
 
 textarea
-cols=1 clientWidth=26
+cols=1 clientWidth=25
 cols=2 clientWidth=33
-cols=3 clientWidth=40
-cols=4 clientWidth=47
-cols=5 clientWidth=54
-cols=10 clientWidth=89
-cols=20 clientWidth=159
-cols=50 clientWidth=369
-cols=100 clientWidth=719
-cols=500 clientWidth=3519
-cols=1000 clientWidth=7019
+cols=3 clientWidth=41
+cols=4 clientWidth=49
+cols=5 clientWidth=57
+cols=10 clientWidth=97
+cols=20 clientWidth=177
+cols=50 clientWidth=417
+cols=100 clientWidth=817
+cols=500 clientWidth=4017
+cols=1000 clientWidth=8017
 
 
 Arial
 input
-size=1 clientWidth=12
-size=2 clientWidth=18
-size=3 clientWidth=24
-size=4 clientWidth=30
-size=5 clientWidth=36
-size=10 clientWidth=66
-size=20 clientWidth=126
-size=50 clientWidth=306
-size=100 clientWidth=606
-size=500 clientWidth=3006
-size=1000 clientWidth=6006
+size=1 clientWidth=16
+size=2 clientWidth=23
+size=3 clientWidth=30
+size=4 clientWidth=37
+size=5 clientWidth=44
+size=10 clientWidth=79
+size=20 clientWidth=149
+size=50 clientWidth=359
+size=100 clientWidth=709
+size=500 clientWidth=3509
+size=1000 clientWidth=7009
 
 
 textarea
-cols=1 clientWidth=25
+cols=1 clientWidth=24
 cols=2 clientWidth=31
-cols=3 clientWidth=37
-cols=4 clientWidth=43
-cols=5 clientWidth=49
-cols=10 clientWidth=79
-cols=20 clientWidth=139
-cols=50 clientWidth=319
-cols=100 clientWidth=619
-cols=500 clientWidth=3019
-cols=1000 clientWidth=6019
+cols=3 clientWidth=38
+cols=4 clientWidth=45
+cols=5 clientWidth=52
+cols=10 clientWidth=87
+cols=20 clientWidth=157
+cols=50 clientWidth=367
+cols=100 clientWidth=717
+cols=500 clientWidth=3517
+cols=1000 clientWidth=7017
 
 
 Comic Sans MS
 input
-size=1 clientWidth=14
-size=2 clientWidth=20
-size=3 clientWidth=26
-size=4 clientWidth=32
-size=5 clientWidth=38
-size=10 clientWidth=68
-size=20 clientWidth=128
-size=50 clientWidth=308
-size=100 clientWidth=608
-size=500 clientWidth=3008
-size=1000 clientWidth=6008
+size=1 clientWidth=19
+size=2 clientWidth=27
+size=3 clientWidth=35
+size=4 clientWidth=43
+size=5 clientWidth=51
+size=10 clientWidth=91
+size=20 clientWidth=171
+size=50 clientWidth=411
+size=100 clientWidth=811
+size=500 clientWidth=4011
+size=1000 clientWidth=8011
 
 
 textarea
 cols=1 clientWidth=25
-cols=2 clientWidth=31
-cols=3 clientWidth=37
-cols=4 clientWidth=43
-cols=5 clientWidth=49
-cols=10 clientWidth=79
-cols=20 clientWidth=139
-cols=50 clientWidth=319
-cols=100 clientWidth=619
-cols=500 clientWidth=3019
-cols=1000 clientWidth=6019
+cols=2 clientWidth=33
+cols=3 clientWidth=41
+cols=4 clientWidth=49
+cols=5 clientWidth=57
+cols=10 clientWidth=97
+cols=20 clientWidth=177
+cols=50 clientWidth=417
+cols=100 clientWidth=817
+cols=500 clientWidth=4017
+cols=1000 clientWidth=8017
 
 
 Courier New
 input
-size=1 clientWidth=11
-size=2 clientWidth=18
-size=3 clientWidth=25
-size=4 clientWidth=32
-size=5 clientWidth=39
-size=10 clientWidth=74
-size=20 clientWidth=144
-size=50 clientWidth=354
-size=100 clientWidth=704
-size=500 clientWidth=3504
-size=1000 clientWidth=7004
+size=1 clientWidth=15
+size=2 clientWidth=23
+size=3 clientWidth=31
+size=4 clientWidth=39
+size=5 clientWidth=47
+size=10 clientWidth=87
+size=20 clientWidth=167
+size=50 clientWidth=407
+size=100 clientWidth=807
+size=500 clientWidth=4007
+size=1000 clientWidth=8007
 
 
 textarea
-cols=1 clientWidth=26
+cols=1 clientWidth=25
 cols=2 clientWidth=33
-cols=3 clientWidth=40
-cols=4 clientWidth=47
-cols=5 clientWidth=54
-cols=10 clientWidth=89
-cols=20 clientWidth=159
-cols=50 clientWidth=369
-cols=100 clientWidth=719
-cols=500 clientWidth=3519
-cols=1000 clientWidth=7019
+cols=3 clientWidth=41
+cols=4 clientWidth=49
+cols=5 clientWidth=57
+cols=10 clientWidth=97
+cols=20 clientWidth=177
+cols=50 clientWidth=417
+cols=100 clientWidth=817
+cols=500 clientWidth=4017
+cols=1000 clientWidth=8017
 
 
 Georgia
 input
-size=1 clientWidth=12
-size=2 clientWidth=18
-size=3 clientWidth=24
-size=4 clientWidth=30
-size=5 clientWidth=36
-size=10 clientWidth=66
-size=20 clientWidth=126
-size=50 clientWidth=306
-size=100 clientWidth=606
-size=500 clientWidth=3006
-size=1000 clientWidth=6006
+size=1 clientWidth=16
+size=2 clientWidth=23
+size=3 clientWidth=30
+size=4 clientWidth=37
+size=5 clientWidth=44
+size=10 clientWidth=79
+size=20 clientWidth=149
+size=50 clientWidth=359
+size=100 clientWidth=709
+size=500 clientWidth=3509
+size=1000 clientWidth=7009
 
 
 textarea
-cols=1 clientWidth=25
+cols=1 clientWidth=24
 cols=2 clientWidth=31
-cols=3 clientWidth=37
-cols=4 clientWidth=43
-cols=5 clientWidth=49
-cols=10 clientWidth=79
-cols=20 clientWidth=139
-cols=50 clientWidth=319
-cols=100 clientWidth=619
-cols=500 clientWidth=3019
-cols=1000 clientWidth=6019
+cols=3 clientWidth=38
+cols=4 clientWidth=45
+cols=5 clientWidth=52
+cols=10 clientWidth=87
+cols=20 clientWidth=157
+cols=50 clientWidth=367
+cols=100 clientWidth=717
+cols=500 clientWidth=3517
+cols=1000 clientWidth=7017
 
 
 Times New Roman
 input
-size=1 clientWidth=12
-size=2 clientWidth=18
-size=3 clientWidth=24
-size=4 clientWidth=30
-size=5 clientWidth=36
-size=10 clientWidth=66
-size=20 clientWidth=126
-size=50 clientWidth=306
-size=100 clientWidth=606
-size=500 clientWidth=3006
-size=1000 clientWidth=6006
+size=1 clientWidth=16
+size=2 clientWidth=23
+size=3 clientWidth=30
+size=4 clientWidth=37
+size=5 clientWidth=44
+size=10 clientWidth=79
+size=20 clientWidth=149
+size=50 clientWidth=359
+size=100 clientWidth=709
+size=500 clientWidth=3509
+size=1000 clientWidth=7009
 
 
 textarea
-cols=1 clientWidth=25
+cols=1 clientWidth=24
 cols=2 clientWidth=31
-cols=3 clientWidth=37
-cols=4 clientWidth=43
-cols=5 clientWidth=49
-cols=10 clientWidth=79
-cols=20 clientWidth=139
-cols=50 clientWidth=319
-cols=100 clientWidth=619
-cols=500 clientWidth=3019
-cols=1000 clientWidth=6019
+cols=3 clientWidth=38
+cols=4 clientWidth=45
+cols=5 clientWidth=52
+cols=10 clientWidth=87
+cols=20 clientWidth=157
+cols=50 clientWidth=367
+cols=100 clientWidth=717
+cols=500 clientWidth=3517
+cols=1000 clientWidth=7017
 
 
 Trebuchet MS
 input
-size=1 clientWidth=12
-size=2 clientWidth=18
-size=3 clientWidth=24
-size=4 clientWidth=30
-size=5 clientWidth=36
-size=10 clientWidth=66
-size=20 clientWidth=126
-size=50 clientWidth=306
-size=100 clientWidth=606
-size=500 clientWidth=3006
-size=1000 clientWidth=6006
+size=1 clientWidth=17
+size=2 clientWidth=24
+size=3 clientWidth=31
+size=4 clientWidth=38
+size=5 clientWidth=45
+size=10 clientWidth=80
+size=20 clientWidth=150
+size=50 clientWidth=360
+size=100 clientWidth=710
+size=500 clientWidth=3510
+size=1000 clientWidth=7010
 
 
 textarea
-cols=1 clientWidth=25
+cols=1 clientWidth=24
 cols=2 clientWidth=31
-cols=3 clientWidth=37
-cols=4 clientWidth=43
-cols=5 clientWidth=49
-cols=10 clientWidth=79
-cols=20 clientWidth=139
-cols=50 clientWidth=319
-cols=100 clientWidth=619
-cols=500 clientWidth=3019
-cols=1000 clientWidth=6019
+cols=3 clientWidth=38
+cols=4 clientWidth=45
+cols=5 clientWidth=52
+cols=10 clientWidth=87
+cols=20 clientWidth=157
+cols=50 clientWidth=367
+cols=100 clientWidth=717
+cols=500 clientWidth=3517
+cols=1000 clientWidth=7017
 
 
 Verdana
 input
-size=1 clientWidth=13
-size=2 clientWidth=20
-size=3 clientWidth=27
-size=4 clientWidth=34
-size=5 clientWidth=41
-size=10 clientWidth=76
-size=20 clientWidth=146
-size=50 clientWidth=356
-size=100 clientWidth=706
-size=500 clientWidth=3506
-size=1000 clientWidth=7006
-
-
-textarea
-cols=1 clientWidth=26
-cols=2 clientWidth=33
-cols=3 clientWidth=40
-cols=4 clientWidth=47
-cols=5 clientWidth=54
-cols=10 clientWidth=89
-cols=20 clientWidth=159
-cols=50 clientWidth=369
-cols=100 clientWidth=719
-cols=500 clientWidth=3519
-cols=1000 clientWidth=7019
-
-
-Webdings
-input
-size=1 clientWidth=11
-size=2 clientWidth=17
-size=3 clientWidth=23
-size=4 clientWidth=29
-size=5 clientWidth=35
-size=10 clientWidth=65
-size=20 clientWidth=125
-size=50 clientWidth=305
-size=100 clientWidth=605
-size=500 clientWidth=3005
-size=1000 clientWidth=6005
+size=1 clientWidth=17
+size=2 clientWidth=25
+size=3 clientWidth=33
+size=4 clientWidth=41
+size=5 clientWidth=49
+size=10 clientWidth=89
+size=20 clientWidth=169
+size=50 clientWidth=409
+size=100 clientWidth=809
+size=500 clientWidth=4009
+size=1000 clientWidth=8009
 
 
 textarea
 cols=1 clientWidth=25
+cols=2 clientWidth=33
+cols=3 clientWidth=41
+cols=4 clientWidth=49
+cols=5 clientWidth=57
+cols=10 clientWidth=97
+cols=20 clientWidth=177
+cols=50 clientWidth=417
+cols=100 clientWidth=817
+cols=500 clientWidth=4017
+cols=1000 clientWidth=8017
+
+
+Webdings
+input
+size=1 clientWidth=15
+size=2 clientWidth=22
+size=3 clientWidth=29
+size=4 clientWidth=36
+size=5 clientWidth=43
+size=10 clientWidth=78
+size=20 clientWidth=148
+size=50 clientWidth=358
+size=100 clientWidth=708
+size=500 clientWidth=3508
+size=1000 clientWidth=7008
+
+
+textarea
+cols=1 clientWidth=24
 cols=2 clientWidth=31
-cols=3 clientWidth=37
-cols=4 clientWidth=43
-cols=5 clientWidth=49
-cols=10 clientWidth=79
-cols=20 clientWidth=139
-cols=50 clientWidth=319
-cols=100 clientWidth=619
-cols=500 clientWidth=3019
-cols=1000 clientWidth=6019
+cols=3 clientWidth=38
+cols=4 clientWidth=45
+cols=5 clientWidth=52
+cols=10 clientWidth=87
+cols=20 clientWidth=157
+cols=50 clientWidth=367
+cols=100 clientWidth=717
+cols=500 clientWidth=3517
+cols=1000 clientWidth=7017
 
 
 PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-appearance-edge-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-appearance-edge-expected.png
index d6f1a241..643b297 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-appearance-edge-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-appearance-edge-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-appearance-escape-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-appearance-escape-expected.png
index b5aa063..f8f8482 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-appearance-escape-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-appearance-escape-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-appearance-iframe-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-appearance-iframe-expected.png
index d99695d..97b0ce28 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-appearance-iframe-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-appearance-iframe-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-appearance-rtl-ui-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
index 51c2ee5..8feac9a9 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-device-emulation-change-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-device-emulation-change-expected.png
index 49f9477..548f3506 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-device-emulation-change-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-device-emulation-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-device-emulation-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-device-emulation-expected.png
index 49f9477..548f3506 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-device-emulation-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/validation-bubble-device-emulation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/basic-inputs-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/basic-inputs-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/button-sizes-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/button-sizes-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/button-style-color-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/button-style-color-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/month-picker-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/week-picker-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png
new file mode 100644
index 0000000..7bd4f1e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/input-button-sizes-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/input-button-sizes-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/input-value-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/input-value-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/plaintext-mode-2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/plaintext-mode-2-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/plaintext-mode-2-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/plaintext-mode-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/search/search-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/search/search-appearance-basic-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/search/search-appearance-basic-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/search/search-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/HTMLOptionElement_label02-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/HTMLOptionElement_label02-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/HTMLOptionElement_label03-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/HTMLOptionElement_label03-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/HTMLOptionElement_label04-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/HTMLOptionElement_label04-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/input-select-after-resize-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/input-select-after-resize-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/input-select-after-resize-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/input-select-after-resize-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/listbox-appearance-basic-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/listbox-bidi-align-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/listbox-bidi-align-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/listbox-with-display-none-option-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-with-display-none-option-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/listbox-with-display-none-option-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-with-display-none-option-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/option-script-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/option-script-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/option-script-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/option-script-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/option-strip-whitespace-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/option-strip-whitespace-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/select-multiple-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/select-multiple-rtl-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/select-multiple-rtl-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/select-multiple-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/select-writing-direction-natural-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/select/select-writing-direction-natural-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/submit/submit-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/submit/submit-appearance-basic-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/text-control-intrinsic-widths-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/text-control-intrinsic-widths-expected.txt
new file mode 100644
index 0000000..737d076
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/text-control-intrinsic-widths-expected.txt
@@ -0,0 +1,414 @@
+This test measures the width of textareas and text inputs for different fonts.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Lucida Grande
+input
+size=1 clientWidth=9
+size=2 clientWidth=16
+size=3 clientWidth=23
+size=4 clientWidth=30
+size=5 clientWidth=37
+size=10 clientWidth=72
+size=20 clientWidth=141
+size=50 clientWidth=350
+size=100 clientWidth=698
+size=500 clientWidth=3480
+size=1000 clientWidth=6958
+
+
+textarea
+cols=1 clientWidth=26
+cols=2 clientWidth=33
+cols=3 clientWidth=40
+cols=4 clientWidth=47
+cols=5 clientWidth=54
+cols=10 clientWidth=89
+cols=20 clientWidth=159
+cols=50 clientWidth=367
+cols=100 clientWidth=715
+cols=500 clientWidth=3497
+cols=1000 clientWidth=6975
+
+
+Courier
+input
+size=1 clientWidth=9
+size=2 clientWidth=15
+size=3 clientWidth=22
+size=4 clientWidth=28
+size=5 clientWidth=35
+size=10 clientWidth=68
+size=20 clientWidth=134
+size=50 clientWidth=332
+size=100 clientWidth=662
+size=500 clientWidth=3303
+size=1000 clientWidth=6603
+
+
+textarea
+cols=1 clientWidth=26
+cols=2 clientWidth=33
+cols=3 clientWidth=39
+cols=4 clientWidth=46
+cols=5 clientWidth=53
+cols=10 clientWidth=86
+cols=20 clientWidth=152
+cols=50 clientWidth=350
+cols=100 clientWidth=680
+cols=500 clientWidth=3320
+cols=1000 clientWidth=6621
+
+
+Helvetica
+input
+size=1 clientWidth=8
+size=2 clientWidth=14
+size=3 clientWidth=20
+size=4 clientWidth=26
+size=5 clientWidth=33
+size=10 clientWidth=63
+size=20 clientWidth=124
+size=50 clientWidth=308
+size=100 clientWidth=614
+size=500 clientWidth=3061
+size=1000 clientWidth=6120
+
+
+textarea
+cols=1 clientWidth=26
+cols=2 clientWidth=32
+cols=3 clientWidth=38
+cols=4 clientWidth=44
+cols=5 clientWidth=50
+cols=10 clientWidth=81
+cols=20 clientWidth=142
+cols=50 clientWidth=325
+cols=100 clientWidth=631
+cols=500 clientWidth=3078
+cols=1000 clientWidth=6137
+
+
+Monaco
+input
+size=1 clientWidth=9
+size=2 clientWidth=15
+size=3 clientWidth=22
+size=4 clientWidth=28
+size=5 clientWidth=35
+size=10 clientWidth=68
+size=20 clientWidth=134
+size=50 clientWidth=332
+size=100 clientWidth=662
+size=500 clientWidth=3303
+size=1000 clientWidth=6603
+
+
+textarea
+cols=1 clientWidth=26
+cols=2 clientWidth=33
+cols=3 clientWidth=39
+cols=4 clientWidth=46
+cols=5 clientWidth=53
+cols=10 clientWidth=86
+cols=20 clientWidth=152
+cols=50 clientWidth=350
+cols=100 clientWidth=680
+cols=500 clientWidth=3320
+cols=1000 clientWidth=6621
+
+
+Times
+input
+size=1 clientWidth=8
+size=2 clientWidth=13
+size=3 clientWidth=19
+size=4 clientWidth=24
+size=5 clientWidth=30
+size=10 clientWidth=57
+size=20 clientWidth=112
+size=50 clientWidth=277
+size=100 clientWidth=552
+size=500 clientWidth=2752
+size=1000 clientWidth=5502
+
+
+textarea
+cols=1 clientWidth=25
+cols=2 clientWidth=30
+cols=3 clientWidth=36
+cols=4 clientWidth=41
+cols=5 clientWidth=47
+cols=10 clientWidth=74
+cols=20 clientWidth=129
+cols=50 clientWidth=294
+cols=100 clientWidth=569
+cols=500 clientWidth=2769
+cols=1000 clientWidth=5519
+
+
+Andale Mono
+input
+size=1 clientWidth=12
+size=2 clientWidth=19
+size=3 clientWidth=26
+size=4 clientWidth=33
+size=5 clientWidth=40
+size=10 clientWidth=75
+size=20 clientWidth=145
+size=50 clientWidth=355
+size=100 clientWidth=705
+size=500 clientWidth=3505
+size=1000 clientWidth=7005
+
+
+textarea
+cols=1 clientWidth=26
+cols=2 clientWidth=33
+cols=3 clientWidth=40
+cols=4 clientWidth=47
+cols=5 clientWidth=54
+cols=10 clientWidth=89
+cols=20 clientWidth=159
+cols=50 clientWidth=369
+cols=100 clientWidth=719
+cols=500 clientWidth=3519
+cols=1000 clientWidth=7019
+
+
+Arial
+input
+size=1 clientWidth=12
+size=2 clientWidth=18
+size=3 clientWidth=24
+size=4 clientWidth=30
+size=5 clientWidth=36
+size=10 clientWidth=66
+size=20 clientWidth=126
+size=50 clientWidth=306
+size=100 clientWidth=606
+size=500 clientWidth=3006
+size=1000 clientWidth=6006
+
+
+textarea
+cols=1 clientWidth=25
+cols=2 clientWidth=31
+cols=3 clientWidth=37
+cols=4 clientWidth=43
+cols=5 clientWidth=49
+cols=10 clientWidth=79
+cols=20 clientWidth=139
+cols=50 clientWidth=319
+cols=100 clientWidth=619
+cols=500 clientWidth=3019
+cols=1000 clientWidth=6019
+
+
+Comic Sans MS
+input
+size=1 clientWidth=14
+size=2 clientWidth=20
+size=3 clientWidth=26
+size=4 clientWidth=32
+size=5 clientWidth=38
+size=10 clientWidth=68
+size=20 clientWidth=128
+size=50 clientWidth=308
+size=100 clientWidth=608
+size=500 clientWidth=3008
+size=1000 clientWidth=6008
+
+
+textarea
+cols=1 clientWidth=25
+cols=2 clientWidth=31
+cols=3 clientWidth=37
+cols=4 clientWidth=43
+cols=5 clientWidth=49
+cols=10 clientWidth=79
+cols=20 clientWidth=139
+cols=50 clientWidth=319
+cols=100 clientWidth=619
+cols=500 clientWidth=3019
+cols=1000 clientWidth=6019
+
+
+Courier New
+input
+size=1 clientWidth=11
+size=2 clientWidth=18
+size=3 clientWidth=25
+size=4 clientWidth=32
+size=5 clientWidth=39
+size=10 clientWidth=74
+size=20 clientWidth=144
+size=50 clientWidth=354
+size=100 clientWidth=704
+size=500 clientWidth=3504
+size=1000 clientWidth=7004
+
+
+textarea
+cols=1 clientWidth=26
+cols=2 clientWidth=33
+cols=3 clientWidth=40
+cols=4 clientWidth=47
+cols=5 clientWidth=54
+cols=10 clientWidth=89
+cols=20 clientWidth=159
+cols=50 clientWidth=369
+cols=100 clientWidth=719
+cols=500 clientWidth=3519
+cols=1000 clientWidth=7019
+
+
+Georgia
+input
+size=1 clientWidth=12
+size=2 clientWidth=18
+size=3 clientWidth=24
+size=4 clientWidth=30
+size=5 clientWidth=36
+size=10 clientWidth=66
+size=20 clientWidth=126
+size=50 clientWidth=306
+size=100 clientWidth=606
+size=500 clientWidth=3006
+size=1000 clientWidth=6006
+
+
+textarea
+cols=1 clientWidth=25
+cols=2 clientWidth=31
+cols=3 clientWidth=37
+cols=4 clientWidth=43
+cols=5 clientWidth=49
+cols=10 clientWidth=79
+cols=20 clientWidth=139
+cols=50 clientWidth=319
+cols=100 clientWidth=619
+cols=500 clientWidth=3019
+cols=1000 clientWidth=6019
+
+
+Times New Roman
+input
+size=1 clientWidth=12
+size=2 clientWidth=18
+size=3 clientWidth=24
+size=4 clientWidth=30
+size=5 clientWidth=36
+size=10 clientWidth=66
+size=20 clientWidth=126
+size=50 clientWidth=306
+size=100 clientWidth=606
+size=500 clientWidth=3006
+size=1000 clientWidth=6006
+
+
+textarea
+cols=1 clientWidth=25
+cols=2 clientWidth=31
+cols=3 clientWidth=37
+cols=4 clientWidth=43
+cols=5 clientWidth=49
+cols=10 clientWidth=79
+cols=20 clientWidth=139
+cols=50 clientWidth=319
+cols=100 clientWidth=619
+cols=500 clientWidth=3019
+cols=1000 clientWidth=6019
+
+
+Trebuchet MS
+input
+size=1 clientWidth=12
+size=2 clientWidth=18
+size=3 clientWidth=24
+size=4 clientWidth=30
+size=5 clientWidth=36
+size=10 clientWidth=66
+size=20 clientWidth=126
+size=50 clientWidth=306
+size=100 clientWidth=606
+size=500 clientWidth=3006
+size=1000 clientWidth=6006
+
+
+textarea
+cols=1 clientWidth=25
+cols=2 clientWidth=31
+cols=3 clientWidth=37
+cols=4 clientWidth=43
+cols=5 clientWidth=49
+cols=10 clientWidth=79
+cols=20 clientWidth=139
+cols=50 clientWidth=319
+cols=100 clientWidth=619
+cols=500 clientWidth=3019
+cols=1000 clientWidth=6019
+
+
+Verdana
+input
+size=1 clientWidth=13
+size=2 clientWidth=20
+size=3 clientWidth=27
+size=4 clientWidth=34
+size=5 clientWidth=41
+size=10 clientWidth=76
+size=20 clientWidth=146
+size=50 clientWidth=356
+size=100 clientWidth=706
+size=500 clientWidth=3506
+size=1000 clientWidth=7006
+
+
+textarea
+cols=1 clientWidth=26
+cols=2 clientWidth=33
+cols=3 clientWidth=40
+cols=4 clientWidth=47
+cols=5 clientWidth=54
+cols=10 clientWidth=89
+cols=20 clientWidth=159
+cols=50 clientWidth=369
+cols=100 clientWidth=719
+cols=500 clientWidth=3519
+cols=1000 clientWidth=7019
+
+
+Webdings
+input
+size=1 clientWidth=11
+size=2 clientWidth=17
+size=3 clientWidth=23
+size=4 clientWidth=29
+size=5 clientWidth=35
+size=10 clientWidth=65
+size=20 clientWidth=125
+size=50 clientWidth=305
+size=100 clientWidth=605
+size=500 clientWidth=3005
+size=1000 clientWidth=6005
+
+
+textarea
+cols=1 clientWidth=25
+cols=2 clientWidth=31
+cols=3 clientWidth=37
+cols=4 clientWidth=43
+cols=5 clientWidth=49
+cols=10 clientWidth=79
+cols=20 clientWidth=139
+cols=50 clientWidth=319
+cols=100 clientWidth=619
+cols=500 clientWidth=3019
+cols=1000 clientWidth=6019
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-edge-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-edge-expected.png
new file mode 100644
index 0000000..d6f1a241
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-edge-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-escape-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-escape-expected.png
new file mode 100644
index 0000000..b5aa063
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-escape-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-iframe-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-iframe-expected.png
new file mode 100644
index 0000000..d99695d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-iframe-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-rtl-ui-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
new file mode 100644
index 0000000..51c2ee5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-change-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-change-expected.png
new file mode 100644
index 0000000..49f9477
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-expected.png
new file mode 100644
index 0000000..49f9477
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/52776-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/52776-expected.png
index 9584e676..d679ded 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/52776-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/52776-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/files/file-in-input-display-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/files/file-in-input-display-expected.png
deleted file mode 100644
index 7ddbaae..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/files/file-in-input-display-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
deleted file mode 100644
index 0e1f705..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/checkbox/checkbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/checkbox/checkbox-appearance-basic-expected.png
deleted file mode 100644
index bd4d401..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/checkbox/checkbox-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
deleted file mode 100644
index 7da091e23..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
index 925b11e..047777a 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/file/file-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/file/file-appearance-basic-expected.png
deleted file mode 100644
index 3140c9e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/file/file-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/formmove2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/formmove2-expected.png
deleted file mode 100644
index a936e77..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/formmove2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/month/month-appearance-basic-expected.png
deleted file mode 100644
index d262a4eb..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/month/month-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/month/month-appearance-l10n-expected.png
index 02e89e9..6363b74 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/month/month-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/month/month-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/number/number-appearance-datalist-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/number/number-appearance-datalist-expected.png
deleted file mode 100644
index 2709ab5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/number/number-appearance-datalist-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/radio/radio-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/radio/radio-appearance-basic-expected.png
deleted file mode 100644
index b2f620f5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/radio/radio-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/HTMLOptionElement_label06-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/HTMLOptionElement_label06-expected.png
deleted file mode 100644
index ae6ff78..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/HTMLOptionElement_label06-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/HTMLOptionElement_label07-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/HTMLOptionElement_label07-expected.png
deleted file mode 100644
index 777bee1..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/HTMLOptionElement_label07-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/basic-selects-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/basic-selects-expected.png
deleted file mode 100644
index 13bcacf..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/basic-selects-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-appearance-basic-expected.png
index 8c70bef0..f7cd5e6 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-appearance-basic-expected.png
deleted file mode 100644
index 64319b9..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-appearance-rtl-expected.png
deleted file mode 100644
index b764cd4c..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-appearance-rtl-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-narrow-width-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-narrow-width-expected.png
deleted file mode 100644
index 23c4201..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-narrow-width-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png
index 7c15710..8fb6065 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-listbox-multiple-no-focusring-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-listbox-multiple-no-focusring-expected.png
index 0d2efd9b..54fbcc3 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-listbox-multiple-no-focusring-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-listbox-multiple-no-focusring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-visual-hebrew-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-visual-hebrew-expected.png
deleted file mode 100644
index 5fa1f1c1..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-visual-hebrew-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/tabbing-input-iframe-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/tabbing-input-iframe-expected.png
index 978dc16..d1a7458 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/tabbing-input-iframe-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/tabbing-input-iframe-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-edge-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-edge-expected.png
index fe4b786..85bbed7 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-edge-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-edge-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-escape-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-escape-expected.png
index f157b52e..992c9ccb 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-escape-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-escape-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-iframe-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-iframe-expected.png
index 1db94a4..5788c07 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-iframe-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-iframe-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-rtl-ui-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
index 12f9f60..a5736111 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-wrap-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-wrap-expected.png
index a2f8db54..706a4181f 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-wrap-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-appearance-wrap-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-device-emulation-change-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-device-emulation-change-expected.png
index 641ded64..f201688 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-device-emulation-change-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-device-emulation-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-device-emulation-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-device-emulation-expected.png
index 641ded64..f201688 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-device-emulation-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/validation-bubble-device-emulation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/001-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/001-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/001-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/basic-buttons-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/basic-buttons-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/basic-buttons-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/basic-buttons-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/basic-inputs-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/basic-inputs-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/blankbuttons-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/blankbuttons-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/blankbuttons-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/blankbuttons-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button-default-title-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button-default-title-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button-default-title-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button-default-title-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button-positioned-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button-positioned-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button-positioned-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button-positioned-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button-sizes-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button-sizes-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button-style-color-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button-style-color-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button-table-styles-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button-table-styles-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button-table-styles-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button-table-styles-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button-text-transform-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button-text-transform-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button-text-transform-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button-text-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button/button-align-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button/button-align-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button/button-align-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button/button-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button/button-cannot-be-nested-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button/button-cannot-be-nested-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button/button-cannot-be-nested-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button/button-cannot-be-nested-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button/button-inner-block-reuse-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button/button-inner-block-reuse-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button/button-inner-block-reuse-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button/button-inner-block-reuse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button/button-white-space-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button/button-white-space-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/button/button-white-space-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/button/button-white-space-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/month-picker-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/week-picker-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color/color-suggestion-picker-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/control-clip-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/control-clip-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/control-clip-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/control-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/control-clip-overflow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/control-clip-overflow-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/control-clip-overflow-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/control-clip-overflow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/control-restrict-line-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/control-restrict-line-height-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/control-restrict-line-height-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/control-restrict-line-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/file/file-input-direction-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-direction-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/file/file-input-direction-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/file/file-input-pressed-state-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-pressed-state-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/file/file-input-pressed-state-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-pressed-state-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/file/input-file-re-render-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/file/input-file-re-render-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/file/input-file-re-render-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/file/input-file-re-render-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/form-element-geometry-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/form-element-geometry-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/formmove-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/formmove-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/formmove-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/formmove-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/formmove3-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/formmove3-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/formmove3-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/formmove3-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/image/002-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/image/002-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/image/002-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/image/002-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/image/005-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/image/005-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/image/005-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/image/005-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/indeterminate-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/indeterminate-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/indeterminate-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/indeterminate-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/input-align-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/input-align-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/input-align-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/input-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/input-appearance-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/input-appearance-height-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/input-appearance-height-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/input-appearance-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/input-button-sizes-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/input-button-sizes-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/input-first-letter-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/input-first-letter-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/input-first-letter-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/input-first-letter-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/input-value-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/input-value-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/minWidthPercent-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/minWidthPercent-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/minWidthPercent-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/minWidthPercent-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png
new file mode 100644
index 0000000..02e89e9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/number/number-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-rtl-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/number/number-appearance-rtl-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/placeholder-position-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/placeholder-position-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/placeholder-position-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/placeholder-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/plaintext-mode-2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/plaintext-mode-2-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/plaintext-mode-2-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/plaintext-mode-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/search/search-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/search/search-appearance-basic-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/search/search-appearance-basic-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/search/search-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/search/search-cancel-button-style-sharing-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/search/search-cancel-button-style-sharing-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/search/search-cancel-button-style-sharing-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/search/search-cancel-button-style-sharing-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/search/search-display-none-cancel-button-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/search/search-display-none-cancel-button-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/search/search-display-none-cancel-button-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/search/search-display-none-cancel-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/search/search-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/search/search-rtl-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/search/search-rtl-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/search/search-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/search/searchfield-heights-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/search/searchfield-heights-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/search/searchfield-heights-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/search/searchfield-heights-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/003-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/003-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/003-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/004-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/004-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/004-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/004-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/HTMLOptionElement_label01-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label01-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/HTMLOptionElement_label01-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label01-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/HTMLOptionElement_label02-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/HTMLOptionElement_label02-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/HTMLOptionElement_label03-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/HTMLOptionElement_label03-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/HTMLOptionElement_label04-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/HTMLOptionElement_label04-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/HTMLOptionElement_label05-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label05-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/HTMLOptionElement_label05-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label05-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/disabled-select-change-index-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/disabled-select-change-index-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/disabled-select-change-index-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/disabled-select-change-index-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/input-select-after-resize-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/input-select-after-resize-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/input-select-after-resize-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/input-select-after-resize-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png
new file mode 100644
index 0000000..8c70bef0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-appearance-separator-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-separator-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-appearance-separator-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-separator-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-bidi-align-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-bidi-align-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-scrollbar-incremental-load-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-scrollbar-incremental-load-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-scrollbar-incremental-load-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-scrollbar-incremental-load-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-width-change-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-width-change-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-width-change-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-width-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-with-display-none-option-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-with-display-none-option-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-with-display-none-option-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-with-display-none-option-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-deselect-update-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-deselect-update-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-deselect-update-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-deselect-update-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-option-wrap-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-option-wrap-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-option-wrap-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-option-wrap-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-restrict-line-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-restrict-line-height-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-restrict-line-height-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-restrict-line-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-style-color-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-style-color-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-style-color-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-width-change-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-width-change-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/menulist-width-change-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-width-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png
new file mode 100644
index 0000000..7c15710
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/optgroup-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/optgroup-rendering-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/optgroup-rendering-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/optgroup-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/option-script-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/option-script-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/option-script-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/option-script-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/option-strip-whitespace-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/option-strip-whitespace-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/option-text-clip-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/option-text-clip-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/option-text-clip-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/option-text-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-align-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-align-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-align-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-baseline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-baseline-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-baseline-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-baseline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-block-background-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-block-background-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-block-background-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-block-background-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-change-listbox-size-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-size-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-change-listbox-size-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-change-listbox-to-popup-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-to-popup-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-change-listbox-to-popup-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-to-popup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-change-popup-to-listbox-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-popup-to-listbox-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-change-popup-to-listbox-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-popup-to-listbox-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-dirty-parent-pref-widths-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-dirty-parent-pref-widths-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-dirty-parent-pref-widths-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-dirty-parent-pref-widths-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-disabled-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-disabled-appearance-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-disabled-appearance-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-disabled-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-initial-position-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-initial-position-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-initial-position-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-initial-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-list-box-with-height-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-list-box-with-height-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-list-box-with-height-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-list-box-with-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-listbox-multiple-no-focusring-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-listbox-multiple-no-focusring-expected.png
new file mode 100644
index 0000000..0d2efd9b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-listbox-multiple-no-focusring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-overflow-scroll-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-overflow-scroll-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-overflow-scroll-inherited-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-inherited-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-overflow-scroll-inherited-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-inherited-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-selected-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-selected-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-selected-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-selected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-size-invalid-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-size-invalid-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-size-invalid-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-size-invalid-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-style-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-style-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-style-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-style-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-writing-direction-natural-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-writing-direction-natural-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/stuff-on-my-optgroup-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/stuff-on-my-optgroup-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/stuff-on-my-optgroup-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/stuff-on-my-optgroup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/submit/submit-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/submit/submit-appearance-basic-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/tabbing-input-iframe-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/tabbing-input-iframe-expected.png
new file mode 100644
index 0000000..978dc16
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/tabbing-input-iframe-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/targeted-frame-submission-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/targeted-frame-submission-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/targeted-frame-submission-expected.png
rename to third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/targeted-frame-submission-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-edge-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-edge-expected.png
new file mode 100644
index 0000000..fe4b786
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-edge-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-escape-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-escape-expected.png
new file mode 100644
index 0000000..f157b52e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-escape-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-iframe-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-iframe-expected.png
new file mode 100644
index 0000000..1db94a4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-iframe-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-rtl-ui-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
new file mode 100644
index 0000000..12f9f60
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-wrap-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-wrap-expected.png
new file mode 100644
index 0000000..a2f8db54
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-wrap-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-change-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-change-expected.png
new file mode 100644
index 0000000..641ded64
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-expected.png
new file mode 100644
index 0000000..641ded64
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/web-components-v0-disabled/fast/dom/title-text-property-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/web-components-v0-disabled/fast/dom/title-text-property-expected.txt
new file mode 100644
index 0000000..0a1ece0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/web-components-v0-disabled/fast/dom/title-text-property-expected.txt
@@ -0,0 +1,4 @@
+TITLE CHANGED: 'This is the new title'
+Original title is: 'Original Title'
+Setting new title to: 'This is the new title'
+New title is: 'This is the new title'
diff --git a/third_party/blink/web_tests/platform/mac/fast/dom/52776-expected.png b/third_party/blink/web_tests/platform/mac/fast/dom/52776-expected.png
index 74f7ec0..6dd8114 100644
--- a/third_party/blink/web_tests/platform/mac/fast/dom/52776-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/dom/52776-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/dom/HTMLMeterElement/meter-boundary-values-expected.png b/third_party/blink/web_tests/platform/mac/fast/dom/HTMLMeterElement/meter-boundary-values-expected.png
index 5978a710..fe9477b 100644
--- a/third_party/blink/web_tests/platform/mac/fast/dom/HTMLMeterElement/meter-boundary-values-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/dom/HTMLMeterElement/meter-boundary-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/dom/HTMLMeterElement/meter-optimums-expected.png b/third_party/blink/web_tests/platform/mac/fast/dom/HTMLMeterElement/meter-optimums-expected.png
index 29b88e25..14f92fd1 100644
--- a/third_party/blink/web_tests/platform/mac/fast/dom/HTMLMeterElement/meter-optimums-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/dom/HTMLMeterElement/meter-optimums-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo-expected.png b/third_party/blink/web_tests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo-expected.png
index c2bcfc54..6dd9d55 100644
--- a/third_party/blink/web_tests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-changing-pseudo-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.png b/third_party/blink/web_tests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.png
index d2c018e..49be4ce6 100644
--- a/third_party/blink/web_tests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/dom/HTMLMeterElement/meter-styles-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/dom/focus-contenteditable-expected.png b/third_party/blink/web_tests/platform/mac/fast/dom/focus-contenteditable-expected.png
index 0b85393..3e25dad 100644
--- a/third_party/blink/web_tests/platform/mac/fast/dom/focus-contenteditable-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/dom/focus-contenteditable-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/dynamic/008-expected.png b/third_party/blink/web_tests/platform/mac/fast/dynamic/008-expected.png
index 81456dd..b1026fc 100644
--- a/third_party/blink/web_tests/platform/mac/fast/dynamic/008-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/dynamic/008-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/events/reveal-link-when-focused-expected.png b/third_party/blink/web_tests/platform/mac/fast/events/reveal-link-when-focused-expected.png
index 2c2362f6..3673e2e 100644
--- a/third_party/blink/web_tests/platform/mac/fast/events/reveal-link-when-focused-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/events/reveal-link-when-focused-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/files/file-in-input-display-expected.png b/third_party/blink/web_tests/platform/mac/fast/files/file-in-input-display-expected.png
index 07912eb..7011c91e 100644
--- a/third_party/blink/web_tests/platform/mac/fast/files/file-in-input-display-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/files/file-in-input-display-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/001-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/001-expected.png
index 224eef8..6daeec4 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/001-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/basic-buttons-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/basic-buttons-expected.png
index f6b5a21..d50560c2 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/basic-buttons-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/basic-buttons-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/basic-inputs-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/basic-inputs-expected.png
index 87be8a60..cd7ebc1 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/basic-inputs-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/basic-inputs-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/blankbuttons-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/blankbuttons-expected.png
index e61fa7a..f902b90 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/blankbuttons-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/blankbuttons-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/button-default-title-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/button-default-title-expected.png
index 7123fdfa..3a3186e 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/button-default-title-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/button-default-title-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/button-positioned-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/button-positioned-expected.png
index fe9a62a2..8ae7fd0c 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/button-positioned-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/button-positioned-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/button-sizes-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/button-sizes-expected.png
index 6835fdb..06884b8 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/button-sizes-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/button-style-color-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/button-style-color-expected.png
index ad36b6d..7b0e2f7 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/button-style-color-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/button-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/button-table-styles-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/button-table-styles-expected.png
index 71077b3..98c572a 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/button-table-styles-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/button-table-styles-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/button-text-transform-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/button-text-transform-expected.png
index 75bbc7c..95f0d98 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/button-text-transform-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/button-text-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/button/button-align-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/button/button-align-expected.png
index d94b2e9..461806d 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/button/button-align-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/button/button-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/button/button-cannot-be-nested-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/button/button-cannot-be-nested-expected.png
index 667740be..cf199a1 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/button/button-cannot-be-nested-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/button/button-cannot-be-nested-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/button/button-inner-block-reuse-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/button/button-inner-block-reuse-expected.png
index 0f749c6..f120d52 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/button/button-inner-block-reuse-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/button/button-inner-block-reuse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/button/button-white-space-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/button/button-white-space-expected.png
index 37e9527..a0aae13 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/button/button-white-space-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/button/button-white-space-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
index 82b272b..7421bf2 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
index 6dfb988..4141f78 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
index 26f6714..4141f78 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
index 38ea6af..0e05069 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
index 8468df8..f5aa7827 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
index 204fd321..fc21fe4 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
index bc01391..9031d3c 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
index 0b8f9be7..617964df 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
index dee10cdc..ab7ca39 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/month-picker-appearance-expected.png
index 7bc052e..a411f1d 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/month-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
index 611ca3f3..f9b9283c 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/week-picker-appearance-expected.png
index 9a44310..84130562 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/week-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/week-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
index e23f565..913bcd0 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/checkbox/checkbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/checkbox/checkbox-appearance-basic-expected.png
index a189967..e2a90a59 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/checkbox/checkbox-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/checkbox/checkbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-appearance-expected.png
index fbfbbbc..4f58855 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
index 163f30fc..a1382c1 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
index b80b902..8467014 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
index c73fbb3..847c09e 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
index 3352000..390f5b13 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
index 552028e6..27c4ab0 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color/input-appearance-color-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color/input-appearance-color-expected.png
index f8fc8fcd..458cc720 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/color/input-appearance-color-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/color/input-appearance-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/control-clip-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/control-clip-expected.png
index eb7e092e..94fc35a8 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/control-clip-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/control-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/control-clip-overflow-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/control-clip-overflow-expected.png
index 1452deab..8b1e861 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/control-clip-overflow-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/control-clip-overflow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/control-restrict-line-height-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/control-restrict-line-height-expected.png
index 1ca3cc0..1f1ebf5 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/control-restrict-line-height-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/control-restrict-line-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png
new file mode 100644
index 0000000..106a146
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png
new file mode 100644
index 0000000..a158ce3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/datalist/input-appearance-range-with-transform-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/datalist/input-appearance-range-with-transform-expected.png
index 322c863..85508e32 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/datalist/input-appearance-range-with-transform-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/datalist/input-appearance-range-with-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-l10n-expected.png
index 5473bcaa..832eca8 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-pseudo-elements-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-pseudo-elements-expected.png
index 85f9add..301e9ea 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-pseudo-elements-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/date/date-appearance-pseudo-elements-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
index a9ecd18..42d0a7e 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
index 9906b7f..536ede29 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/encoding-test-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/encoding-test-expected.png
index 4951917d..73c5dac 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/encoding-test-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/encoding-test-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/fieldset/fieldset-align-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/fieldset/fieldset-align-expected.png
index bc34023..3a8ff8abe 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/fieldset/fieldset-align-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/fieldset/fieldset-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/file/file-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/file/file-appearance-basic-expected.png
index bca230a..b65a856e 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/file/file-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/file/file-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/file/file-input-direction-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/file/file-input-direction-expected.png
index 4dc23636..bf0d7fd8 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/file/file-input-direction-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/file/file-input-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/file/file-input-pressed-state-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/file/file-input-pressed-state-expected.png
index aa46072..b75e05e2 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/file/file-input-pressed-state-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/file/file-input-pressed-state-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/file/input-file-re-render-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/file/input-file-re-render-expected.png
index 0f5ee50..113940e 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/file/input-file-re-render-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/file/input-file-re-render-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/floating-textfield-relayout-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/floating-textfield-relayout-expected.png
index fa17c3a..5a2be06 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/floating-textfield-relayout-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/floating-textfield-relayout-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/form-element-geometry-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/form-element-geometry-expected.png
index 50fdc3b9..fff8f0a 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/form-element-geometry-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/form-element-geometry-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/formmove-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/formmove-expected.png
index d51a21a2..1948e08 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/formmove-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/formmove-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/formmove2-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/formmove2-expected.png
index 21dd51d..230d00c 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/formmove2-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/formmove2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/formmove3-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/formmove3-expected.png
index a92bd85e..19a47ce9 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/formmove3-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/formmove3-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/huge-mac-input-clamped-height-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/huge-mac-input-clamped-height-expected.png
index 15c856a1..f44a496d 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/huge-mac-input-clamped-height-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/huge-mac-input-clamped-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/huge-mac-input-clamped-width-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/huge-mac-input-clamped-width-expected.png
index 05e7b37..fed942c0 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/huge-mac-input-clamped-width-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/huge-mac-input-clamped-width-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/image/002-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/image/002-expected.png
index 6fa40e8..51dbd3a 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/image/002-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/image/002-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/image/005-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/image/005-expected.png
index a85af005..edae266 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/image/005-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/image/005-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/image/image-alt-text-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/image/image-alt-text-expected.png
index 2397027..6012e3e 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/image/image-alt-text-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/image/image-alt-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/indeterminate-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/indeterminate-expected.png
index 121ad81..5a8c3fa4 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/indeterminate-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/indeterminate-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/input-align-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/input-align-expected.png
index 77c1a71..8a250f29 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/input-align-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/input-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/input-appearance-height-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/input-appearance-height-expected.png
index 991324c..ceb2a22 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/input-appearance-height-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/input-appearance-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/input-button-sizes-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/input-button-sizes-expected.png
index 97181dc..34563d1 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/input-button-sizes-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/input-button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/input-first-letter-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/input-first-letter-expected.png
index 3bd6b75..281d4d9 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/input-first-letter-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/input-first-letter-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/input-type-text-min-width-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/input-type-text-min-width-expected.png
index 608dfb87..619cfd2 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/input-type-text-min-width-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/input-type-text-min-width-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/input-value-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/input-value-expected.png
index 8de28aad..8bac8dff 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/input-value-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/input-value-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/minWidthPercent-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/minWidthPercent-expected.png
index 44c775e..a56ff04 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/minWidthPercent-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/minWidthPercent-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-basic-expected.png
index f87308a..7ea28f68 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-l10n-expected.png
index 320ea35..8f7ee6d9 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-l10n-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-pseudo-elements-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-pseudo-elements-expected.png
index 11c46f1..b871f0e 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-pseudo-elements-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/month/month-appearance-pseudo-elements-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/number/number-appearance-datalist-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/number/number-appearance-datalist-expected.png
index efc919e..66aad9f3 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/number/number-appearance-datalist-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/number/number-appearance-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/number/number-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/number/number-appearance-rtl-expected.png
index e4bc8a9..52ff8c97 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/number/number-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/number/number-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
index 0de38ac..f5ffdd4c 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/number/number-appearance-spinbutton-layer-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/number/number-appearance-spinbutton-layer-expected.png
index 7a01da1..512007e10 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/number/number-appearance-spinbutton-layer-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/number/number-appearance-spinbutton-layer-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/placeholder-position-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/placeholder-position-expected.png
index 488a1e9e..212230cb 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/placeholder-position-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/placeholder-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/plaintext-mode-2-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/plaintext-mode-2-expected.png
index f8da6586..0dd7885 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/plaintext-mode-2-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/plaintext-mode-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/radio/radio-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/radio/radio-appearance-basic-expected.png
index cdcdc81c..af5567d 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/radio/radio-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/radio/radio-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/range/input-appearance-range-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/range/input-appearance-range-expected.png
new file mode 100644
index 0000000..875a5f5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/range/input-appearance-range-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/range/range-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/range/range-appearance-basic-expected.png
index 9034c80..d1eef0fc 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/range/range-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/range/range-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/range/slider-padding-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/range/slider-padding-expected.png
new file mode 100644
index 0000000..585c89e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/range/slider-padding-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/range/slider-thumb-shared-style-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/range/slider-thumb-shared-style-expected.png
new file mode 100644
index 0000000..28baf4e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/range/slider-thumb-shared-style-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/search/search-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/search/search-appearance-basic-expected.png
index d16c705f..fcdc898 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/search/search-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/search/search-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/search/search-cancel-button-style-sharing-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/search/search-cancel-button-style-sharing-expected.png
index a0469dd..567caa5 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/search/search-cancel-button-style-sharing-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/search/search-cancel-button-style-sharing-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/search/search-display-none-cancel-button-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/search/search-display-none-cancel-button-expected.png
index d54b496..7f331865 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/search/search-display-none-cancel-button-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/search/search-display-none-cancel-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/search/search-rtl-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/search/search-rtl-expected.png
index 6c4b4ed9..d630b68 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/search/search-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/search/search-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/search/search-vertical-alignment-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/search/search-vertical-alignment-expected.png
index da608b7..f003d4c 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/search/search-vertical-alignment-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/search/search-vertical-alignment-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/search/searchfield-heights-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/search/searchfield-heights-expected.png
index e101f94..1143036d 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/search/searchfield-heights-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/search/searchfield-heights-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/003-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/003-expected.png
index d50bf0c..e85ffbb 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/003-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/004-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/004-expected.png
index 78f1078..a1ccf9a 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/004-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/004-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label01-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label01-expected.png
index 35a6f752..7b774e3 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label01-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label01-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label02-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label02-expected.png
index e60f4ac8..2fc62f5f 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label02-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label02-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label03-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label03-expected.png
index bf2486a..1c7c31c 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label03-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label03-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label04-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label04-expected.png
index 5115a4d..49e69f3 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label04-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label04-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label05-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label05-expected.png
index 03aafb5..a78f57e 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label05-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label05-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label06-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label06-expected.png
index c57c80a..e22904d 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label06-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label06-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label07-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label07-expected.png
index 5f6c6bdf..65ad42a 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label07-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/HTMLOptionElement_label07-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/basic-selects-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/basic-selects-expected.png
index 4f24c82..b2268dd 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/basic-selects-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/basic-selects-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/disabled-select-change-index-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/disabled-select-change-index-expected.png
index 870197db..352f206 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/disabled-select-change-index-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/disabled-select-change-index-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/input-select-after-resize-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/input-select-after-resize-expected.png
index 568c2b3..364c645 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/input-select-after-resize-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/input-select-after-resize-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-appearance-basic-expected.png
index af05576..80c04c4 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-appearance-separator-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-appearance-separator-expected.png
index 62253b23..59da8884 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-appearance-separator-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-appearance-separator-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-bidi-align-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-bidi-align-expected.png
index 031b0ef..319edf0c 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-bidi-align-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-bidi-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-clip-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-clip-expected.png
index 1496cfd..753b8dc 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-clip-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-scrollbar-incremental-load-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-scrollbar-incremental-load-expected.png
index df81706..e79b3e3 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-scrollbar-incremental-load-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-scrollbar-incremental-load-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-width-change-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-width-change-expected.png
index 9df2003..3dfefaa 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-width-change-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-width-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-with-display-none-option-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-with-display-none-option-expected.png
index aa7f78a..c8b1a38 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-with-display-none-option-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-with-display-none-option-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-appearance-basic-expected.png
index acbde808..36a0e9c 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-appearance-none-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-appearance-none-expected.png
index ee8512f..38dbef2 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-appearance-none-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-appearance-none-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-appearance-rtl-expected.png
index 47afecc..8473de0 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-clip-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-clip-expected.png
index a248bde..22be28e 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-clip-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-deselect-update-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-deselect-update-expected.png
index 3fed84d..2b79b4fc 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-deselect-update-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-deselect-update-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-narrow-width-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-narrow-width-expected.png
index e2dde61c..70c6038 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-narrow-width-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-narrow-width-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-no-overflow-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-no-overflow-expected.png
index d5eb786..1b9727cf 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-no-overflow-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-no-overflow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-option-wrap-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-option-wrap-expected.png
index 0b1d0b2..311cc5c 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-option-wrap-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-option-wrap-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-popup-open-hide-using-keyboard-expected.txt b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-popup-open-hide-using-keyboard-expected.txt
index 1f4743f4..1020ae81 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-popup-open-hide-using-keyboard-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-popup-open-hide-using-keyboard-expected.txt
@@ -10,15 +10,15 @@
 PASS internals.isSelectPopupVisible(popup) is true
 FAIL internals.isSelectPopupVisible(popup) should be false. Was true.
 Test opening of popup using F4
-FAIL internals.isSelectPopupVisible(popup) should be true. Was false.
+PASS internals.isSelectPopupVisible(popup) is true
 Test opening of popup using enter key
-FAIL internals.isSelectPopupVisible(popup) should be true. Was false.
+PASS internals.isSelectPopupVisible(popup) is true
 Works for all platforms
 Test opening of popup using space key
 PASS internals.isSelectPopupVisible(popup) is true
 Works for only mac
 Test opening of popup using up key
-PASS internals.isSelectPopupVisible(popup) is true
+FAIL internals.isSelectPopupVisible(popup) should be true. Was false.
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-restrict-line-height-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-restrict-line-height-expected.png
index 63cd917..65e1117 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-restrict-line-height-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-restrict-line-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-separator-painting-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-separator-painting-expected.png
index 2e02747..3de40b55 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-separator-painting-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-separator-painting-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-style-color-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-style-color-expected.png
index da737925..b9392f4 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-style-color-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-update-text-popup-expected.txt b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-update-text-popup-expected.txt
index ee8ac49..73430f6 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-update-text-popup-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-update-text-popup-expected.txt
@@ -4,12 +4,12 @@
 A
 B
 C
-layer at (0,0) size 39x18
-  LayoutNGBlockFlow (positioned) {DIV} at (8,50) size 39x18
-    LayoutMenuList {SELECT} at (0,0) size 39x18 [bgcolor=#F8F8F8]
+layer at (0,0) size 32x19
+  LayoutNGBlockFlow (positioned) {DIV} at (8,50) size 32x19
+    LayoutMenuList {SELECT} at (0,0) size 32x19 [bgcolor=#FFFFFF] [border: (1px solid #767676)]
     LayoutText {#text} at (0,0) size 0x0
-layer at (8,0) size 8x18
-  LayoutBlockFlow {DIV} at (8,0) size 8x18
-    LayoutText {#text} at (0,2) size 8x13
-      text run at (0,2) width 8: "C"
+layer at (5,1) size 10x17
+  LayoutBlockFlow {DIV} at (5,1) size 10x17
+    LayoutText {#text} at (0,1) size 10x15
+      text run at (0,1) width 10: "C"
 
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-width-change-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-width-change-expected.png
index 0bca4ff..b5a5c8a 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-width-change-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-width-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png
index ef5a01ac..64878ac 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/optgroup-rendering-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/optgroup-rendering-expected.png
index 3dc10711..fbecd16 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/optgroup-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/optgroup-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/option-script-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/option-script-expected.png
index 030cd80..4c549f3 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/option-script-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/option-script-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/option-strip-whitespace-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/option-strip-whitespace-expected.png
index 2affdf1..fe8f5dc 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/option-strip-whitespace-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/option-strip-whitespace-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/option-text-clip-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/option-text-clip-expected.png
index f102d12..8ef66ed 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/option-text-clip-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/option-text-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-align-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-align-expected.png
index f815ca8..d561e89d 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-align-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-autofilled-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-autofilled-expected.png
index 91492e1..8b5ebde 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-autofilled-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-autofilled-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-background-none-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-background-none-expected.png
index 863ba331..c45dd90f 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-background-none-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-background-none-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-baseline-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-baseline-expected.png
index 641d961..3bb5148f4 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-baseline-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-baseline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-block-background-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-block-background-expected.png
index d85cf345..2696dd3 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-block-background-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-block-background-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-change-listbox-size-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-change-listbox-size-expected.png
index f6101a4..1db86ca 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-change-listbox-size-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-change-listbox-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-change-listbox-to-popup-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-change-listbox-to-popup-expected.png
index dd5a0524..91964b9 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-change-listbox-to-popup-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-change-listbox-to-popup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-change-popup-to-listbox-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-change-popup-to-listbox-expected.png
index 0822cc5c..f4a1ede 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-change-popup-to-listbox-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-change-popup-to-listbox-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-dirty-parent-pref-widths-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-dirty-parent-pref-widths-expected.png
index 1b2afb0f..3f1a26b 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-dirty-parent-pref-widths-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-dirty-parent-pref-widths-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-disabled-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-disabled-appearance-expected.png
index fe5dec6..2d042fe 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-disabled-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-disabled-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-empty-option-height-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-empty-option-height-expected.png
index c10b72a..908addffc 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-empty-option-height-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-empty-option-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-initial-position-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-initial-position-expected.png
index 25499608..bbc04aa 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-initial-position-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-initial-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-item-background-clip-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-item-background-clip-expected.png
index 5d94ab2..a09c3fc 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-item-background-clip-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-item-background-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-list-box-with-height-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-list-box-with-height-expected.png
index 75720f9..a167695 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-list-box-with-height-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-list-box-with-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-listbox-multiple-no-focusring-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-listbox-multiple-no-focusring-expected.png
index b26c3e6..3f35dfd 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-listbox-multiple-no-focusring-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-listbox-multiple-no-focusring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-multiple-rtl-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-multiple-rtl-expected.png
index f567e315..2f3158a 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-multiple-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-multiple-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-overflow-scroll-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-overflow-scroll-expected.png
index 16e348b..dafa474 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-overflow-scroll-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-overflow-scroll-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-overflow-scroll-inherited-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-overflow-scroll-inherited-expected.png
index f34fae2..9d850842 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-overflow-scroll-inherited-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-overflow-scroll-inherited-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-selected-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-selected-expected.png
index f11362c..2337e3b 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-selected-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-selected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-size-invalid-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-size-invalid-expected.png
index 69a0ebd..ab0e3bd 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-size-invalid-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-size-invalid-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-style-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-style-expected.png
index 6965851..5d5b9413 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-style-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-style-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-visual-hebrew-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-visual-hebrew-expected.png
index 360d998..6dbe830 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-visual-hebrew-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-visual-hebrew-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-writing-direction-natural-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-writing-direction-natural-expected.png
index 907473a2..e66b5201 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-writing-direction-natural-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-writing-direction-natural-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/selectlist-minsize-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/selectlist-minsize-expected.png
index 86dcaf0b..364c645 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/selectlist-minsize-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/selectlist-minsize-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/stuff-on-my-optgroup-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/stuff-on-my-optgroup-expected.png
index 09ed7dd..e3b133c1 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/stuff-on-my-optgroup-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/stuff-on-my-optgroup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/submit/submit-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/submit/submit-appearance-basic-expected.png
index 39ee66f4..790a33f 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/submit/submit-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/submit/submit-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/tabbing-input-iframe-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/tabbing-input-iframe-expected.png
index a320400..bdae10db 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/tabbing-input-iframe-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/tabbing-input-iframe-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/targeted-frame-submission-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/targeted-frame-submission-expected.png
index 4017a05..8aad841 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/targeted-frame-submission-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/targeted-frame-submission-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/text-control-intrinsic-widths-expected.txt b/third_party/blink/web_tests/platform/mac/fast/forms/text-control-intrinsic-widths-expected.txt
index 9ce6adf..a9b4caf9 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/text-control-intrinsic-widths-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/text-control-intrinsic-widths-expected.txt
@@ -4,408 +4,408 @@
 
 Lucida Grande
 input
-size=1 clientWidth=9
-size=2 clientWidth=16
-size=3 clientWidth=23
-size=4 clientWidth=30
-size=5 clientWidth=37
-size=10 clientWidth=72
-size=20 clientWidth=141
-size=50 clientWidth=350
-size=100 clientWidth=698
-size=500 clientWidth=3480
-size=1000 clientWidth=6958
+size=1 clientWidth=12
+size=2 clientWidth=21
+size=3 clientWidth=29
+size=4 clientWidth=38
+size=5 clientWidth=46
+size=10 clientWidth=88
+size=20 clientWidth=173
+size=50 clientWidth=425
+size=100 clientWidth=847
+size=500 clientWidth=4218
+size=1000 clientWidth=8433
 
 
 textarea
 cols=1 clientWidth=26
-cols=2 clientWidth=33
-cols=3 clientWidth=40
-cols=4 clientWidth=47
-cols=5 clientWidth=54
-cols=10 clientWidth=89
-cols=20 clientWidth=159
-cols=50 clientWidth=367
-cols=100 clientWidth=715
-cols=500 clientWidth=3497
-cols=1000 clientWidth=6975
+cols=2 clientWidth=34
+cols=3 clientWidth=43
+cols=4 clientWidth=51
+cols=5 clientWidth=60
+cols=10 clientWidth=102
+cols=20 clientWidth=186
+cols=50 clientWidth=439
+cols=100 clientWidth=860
+cols=500 clientWidth=4232
+cols=1000 clientWidth=8446
 
 
 Courier
 input
-size=1 clientWidth=9
-size=2 clientWidth=15
-size=3 clientWidth=22
-size=4 clientWidth=28
-size=5 clientWidth=35
-size=10 clientWidth=68
-size=20 clientWidth=134
-size=50 clientWidth=332
-size=100 clientWidth=662
-size=500 clientWidth=3303
-size=1000 clientWidth=6603
+size=1 clientWidth=12
+size=2 clientWidth=20
+size=3 clientWidth=28
+size=4 clientWidth=36
+size=5 clientWidth=44
+size=10 clientWidth=84
+size=20 clientWidth=164
+size=50 clientWidth=404
+size=100 clientWidth=804
+size=500 clientWidth=4004
+size=1000 clientWidth=8003
 
 
 textarea
-cols=1 clientWidth=26
+cols=1 clientWidth=25
 cols=2 clientWidth=33
-cols=3 clientWidth=39
-cols=4 clientWidth=46
-cols=5 clientWidth=53
-cols=10 clientWidth=86
-cols=20 clientWidth=152
-cols=50 clientWidth=350
-cols=100 clientWidth=680
-cols=500 clientWidth=3320
-cols=1000 clientWidth=6621
+cols=3 clientWidth=41
+cols=4 clientWidth=49
+cols=5 clientWidth=57
+cols=10 clientWidth=97
+cols=20 clientWidth=177
+cols=50 clientWidth=417
+cols=100 clientWidth=817
+cols=500 clientWidth=4017
+cols=1000 clientWidth=8017
 
 
 Helvetica
 input
-size=1 clientWidth=8
-size=2 clientWidth=14
-size=3 clientWidth=20
-size=4 clientWidth=26
-size=5 clientWidth=33
-size=10 clientWidth=63
-size=20 clientWidth=124
-size=50 clientWidth=308
-size=100 clientWidth=614
-size=500 clientWidth=3061
-size=1000 clientWidth=6120
+size=1 clientWidth=11
+size=2 clientWidth=19
+size=3 clientWidth=26
+size=4 clientWidth=34
+size=5 clientWidth=41
+size=10 clientWidth=78
+size=20 clientWidth=152
+size=50 clientWidth=375
+size=100 clientWidth=745
+size=500 clientWidth=3711
+size=1000 clientWidth=7418
 
 
 textarea
-cols=1 clientWidth=26
+cols=1 clientWidth=25
 cols=2 clientWidth=32
-cols=3 clientWidth=38
-cols=4 clientWidth=44
-cols=5 clientWidth=50
-cols=10 clientWidth=81
-cols=20 clientWidth=142
-cols=50 clientWidth=325
-cols=100 clientWidth=631
-cols=500 clientWidth=3078
-cols=1000 clientWidth=6137
+cols=3 clientWidth=40
+cols=4 clientWidth=47
+cols=5 clientWidth=55
+cols=10 clientWidth=92
+cols=20 clientWidth=166
+cols=50 clientWidth=388
+cols=100 clientWidth=759
+cols=500 clientWidth=3724
+cols=1000 clientWidth=7431
 
 
 Monaco
 input
-size=1 clientWidth=9
-size=2 clientWidth=15
-size=3 clientWidth=22
-size=4 clientWidth=28
-size=5 clientWidth=35
-size=10 clientWidth=68
-size=20 clientWidth=134
-size=50 clientWidth=332
-size=100 clientWidth=662
-size=500 clientWidth=3303
-size=1000 clientWidth=6603
+size=1 clientWidth=12
+size=2 clientWidth=20
+size=3 clientWidth=28
+size=4 clientWidth=36
+size=5 clientWidth=44
+size=10 clientWidth=84
+size=20 clientWidth=164
+size=50 clientWidth=404
+size=100 clientWidth=804
+size=500 clientWidth=4004
+size=1000 clientWidth=8003
 
 
 textarea
-cols=1 clientWidth=26
+cols=1 clientWidth=25
 cols=2 clientWidth=33
-cols=3 clientWidth=39
-cols=4 clientWidth=46
-cols=5 clientWidth=53
-cols=10 clientWidth=86
-cols=20 clientWidth=152
-cols=50 clientWidth=350
-cols=100 clientWidth=680
-cols=500 clientWidth=3320
-cols=1000 clientWidth=6621
+cols=3 clientWidth=41
+cols=4 clientWidth=49
+cols=5 clientWidth=57
+cols=10 clientWidth=97
+cols=20 clientWidth=177
+cols=50 clientWidth=417
+cols=100 clientWidth=817
+cols=500 clientWidth=4017
+cols=1000 clientWidth=8017
 
 
 Times
 input
-size=1 clientWidth=8
-size=2 clientWidth=13
-size=3 clientWidth=19
-size=4 clientWidth=24
-size=5 clientWidth=30
-size=10 clientWidth=57
-size=20 clientWidth=112
-size=50 clientWidth=277
-size=100 clientWidth=552
-size=500 clientWidth=2752
-size=1000 clientWidth=5502
+size=1 clientWidth=11
+size=2 clientWidth=17
+size=3 clientWidth=24
+size=4 clientWidth=31
+size=5 clientWidth=37
+size=10 clientWidth=71
+size=20 clientWidth=137
+size=50 clientWidth=337
+size=100 clientWidth=671
+size=500 clientWidth=3337
+size=1000 clientWidth=6669
 
 
 textarea
-cols=1 clientWidth=25
-cols=2 clientWidth=30
-cols=3 clientWidth=36
-cols=4 clientWidth=41
-cols=5 clientWidth=47
-cols=10 clientWidth=74
-cols=20 clientWidth=129
-cols=50 clientWidth=294
-cols=100 clientWidth=569
-cols=500 clientWidth=2769
-cols=1000 clientWidth=5519
+cols=1 clientWidth=24
+cols=2 clientWidth=31
+cols=3 clientWidth=37
+cols=4 clientWidth=44
+cols=5 clientWidth=51
+cols=10 clientWidth=84
+cols=20 clientWidth=151
+cols=50 clientWidth=351
+cols=100 clientWidth=684
+cols=500 clientWidth=3350
+cols=1000 clientWidth=6682
 
 
 Andale Mono
 input
-size=1 clientWidth=12
-size=2 clientWidth=19
-size=3 clientWidth=26
-size=4 clientWidth=33
-size=5 clientWidth=40
-size=10 clientWidth=75
-size=20 clientWidth=145
-size=50 clientWidth=355
-size=100 clientWidth=705
-size=500 clientWidth=3505
-size=1000 clientWidth=7005
+size=1 clientWidth=16
+size=2 clientWidth=24
+size=3 clientWidth=32
+size=4 clientWidth=40
+size=5 clientWidth=48
+size=10 clientWidth=88
+size=20 clientWidth=168
+size=50 clientWidth=408
+size=100 clientWidth=808
+size=500 clientWidth=4008
+size=1000 clientWidth=8008
 
 
 textarea
-cols=1 clientWidth=26
+cols=1 clientWidth=25
 cols=2 clientWidth=33
-cols=3 clientWidth=40
-cols=4 clientWidth=47
-cols=5 clientWidth=54
-cols=10 clientWidth=89
-cols=20 clientWidth=159
-cols=50 clientWidth=369
-cols=100 clientWidth=719
-cols=500 clientWidth=3519
-cols=1000 clientWidth=7019
+cols=3 clientWidth=41
+cols=4 clientWidth=49
+cols=5 clientWidth=57
+cols=10 clientWidth=97
+cols=20 clientWidth=177
+cols=50 clientWidth=417
+cols=100 clientWidth=817
+cols=500 clientWidth=4017
+cols=1000 clientWidth=8017
 
 
 Arial
 input
-size=1 clientWidth=12
-size=2 clientWidth=18
-size=3 clientWidth=24
-size=4 clientWidth=30
-size=5 clientWidth=36
-size=10 clientWidth=66
-size=20 clientWidth=126
-size=50 clientWidth=306
-size=100 clientWidth=606
-size=500 clientWidth=3006
-size=1000 clientWidth=6006
+size=1 clientWidth=16
+size=2 clientWidth=23
+size=3 clientWidth=30
+size=4 clientWidth=37
+size=5 clientWidth=44
+size=10 clientWidth=79
+size=20 clientWidth=149
+size=50 clientWidth=359
+size=100 clientWidth=709
+size=500 clientWidth=3509
+size=1000 clientWidth=7009
 
 
 textarea
-cols=1 clientWidth=25
+cols=1 clientWidth=24
 cols=2 clientWidth=31
-cols=3 clientWidth=37
-cols=4 clientWidth=43
-cols=5 clientWidth=49
-cols=10 clientWidth=79
-cols=20 clientWidth=139
-cols=50 clientWidth=319
-cols=100 clientWidth=619
-cols=500 clientWidth=3019
-cols=1000 clientWidth=6019
+cols=3 clientWidth=38
+cols=4 clientWidth=45
+cols=5 clientWidth=52
+cols=10 clientWidth=87
+cols=20 clientWidth=157
+cols=50 clientWidth=367
+cols=100 clientWidth=717
+cols=500 clientWidth=3517
+cols=1000 clientWidth=7017
 
 
 Comic Sans MS
 input
-size=1 clientWidth=14
-size=2 clientWidth=20
-size=3 clientWidth=26
-size=4 clientWidth=32
-size=5 clientWidth=38
-size=10 clientWidth=68
-size=20 clientWidth=128
-size=50 clientWidth=308
-size=100 clientWidth=608
-size=500 clientWidth=3008
-size=1000 clientWidth=6008
+size=1 clientWidth=19
+size=2 clientWidth=27
+size=3 clientWidth=35
+size=4 clientWidth=43
+size=5 clientWidth=51
+size=10 clientWidth=91
+size=20 clientWidth=171
+size=50 clientWidth=411
+size=100 clientWidth=811
+size=500 clientWidth=4011
+size=1000 clientWidth=8011
 
 
 textarea
 cols=1 clientWidth=25
-cols=2 clientWidth=31
-cols=3 clientWidth=37
-cols=4 clientWidth=43
-cols=5 clientWidth=49
-cols=10 clientWidth=79
-cols=20 clientWidth=139
-cols=50 clientWidth=319
-cols=100 clientWidth=619
-cols=500 clientWidth=3019
-cols=1000 clientWidth=6019
+cols=2 clientWidth=33
+cols=3 clientWidth=41
+cols=4 clientWidth=49
+cols=5 clientWidth=57
+cols=10 clientWidth=97
+cols=20 clientWidth=177
+cols=50 clientWidth=417
+cols=100 clientWidth=817
+cols=500 clientWidth=4017
+cols=1000 clientWidth=8017
 
 
 Courier New
 input
-size=1 clientWidth=11
-size=2 clientWidth=18
-size=3 clientWidth=25
-size=4 clientWidth=32
-size=5 clientWidth=39
-size=10 clientWidth=74
-size=20 clientWidth=144
-size=50 clientWidth=354
-size=100 clientWidth=704
-size=500 clientWidth=3504
-size=1000 clientWidth=7004
+size=1 clientWidth=15
+size=2 clientWidth=23
+size=3 clientWidth=31
+size=4 clientWidth=39
+size=5 clientWidth=47
+size=10 clientWidth=87
+size=20 clientWidth=167
+size=50 clientWidth=407
+size=100 clientWidth=807
+size=500 clientWidth=4007
+size=1000 clientWidth=8007
 
 
 textarea
-cols=1 clientWidth=26
+cols=1 clientWidth=25
 cols=2 clientWidth=33
-cols=3 clientWidth=40
-cols=4 clientWidth=47
-cols=5 clientWidth=54
-cols=10 clientWidth=89
-cols=20 clientWidth=159
-cols=50 clientWidth=369
-cols=100 clientWidth=719
-cols=500 clientWidth=3519
-cols=1000 clientWidth=7019
+cols=3 clientWidth=41
+cols=4 clientWidth=49
+cols=5 clientWidth=57
+cols=10 clientWidth=97
+cols=20 clientWidth=177
+cols=50 clientWidth=417
+cols=100 clientWidth=817
+cols=500 clientWidth=4017
+cols=1000 clientWidth=8017
 
 
 Georgia
 input
-size=1 clientWidth=12
-size=2 clientWidth=18
-size=3 clientWidth=24
-size=4 clientWidth=30
-size=5 clientWidth=36
-size=10 clientWidth=66
-size=20 clientWidth=126
-size=50 clientWidth=306
-size=100 clientWidth=606
-size=500 clientWidth=3006
-size=1000 clientWidth=6006
+size=1 clientWidth=16
+size=2 clientWidth=23
+size=3 clientWidth=30
+size=4 clientWidth=37
+size=5 clientWidth=44
+size=10 clientWidth=79
+size=20 clientWidth=149
+size=50 clientWidth=359
+size=100 clientWidth=709
+size=500 clientWidth=3509
+size=1000 clientWidth=7009
 
 
 textarea
-cols=1 clientWidth=25
+cols=1 clientWidth=24
 cols=2 clientWidth=31
-cols=3 clientWidth=37
-cols=4 clientWidth=43
-cols=5 clientWidth=49
-cols=10 clientWidth=79
-cols=20 clientWidth=139
-cols=50 clientWidth=319
-cols=100 clientWidth=619
-cols=500 clientWidth=3019
-cols=1000 clientWidth=6019
+cols=3 clientWidth=38
+cols=4 clientWidth=45
+cols=5 clientWidth=52
+cols=10 clientWidth=87
+cols=20 clientWidth=157
+cols=50 clientWidth=367
+cols=100 clientWidth=717
+cols=500 clientWidth=3517
+cols=1000 clientWidth=7017
 
 
 Times New Roman
 input
-size=1 clientWidth=12
-size=2 clientWidth=18
-size=3 clientWidth=24
-size=4 clientWidth=30
-size=5 clientWidth=36
-size=10 clientWidth=66
-size=20 clientWidth=126
-size=50 clientWidth=306
-size=100 clientWidth=606
-size=500 clientWidth=3006
-size=1000 clientWidth=6006
+size=1 clientWidth=16
+size=2 clientWidth=23
+size=3 clientWidth=30
+size=4 clientWidth=37
+size=5 clientWidth=44
+size=10 clientWidth=79
+size=20 clientWidth=149
+size=50 clientWidth=359
+size=100 clientWidth=709
+size=500 clientWidth=3509
+size=1000 clientWidth=7009
 
 
 textarea
-cols=1 clientWidth=25
+cols=1 clientWidth=24
 cols=2 clientWidth=31
-cols=3 clientWidth=37
-cols=4 clientWidth=43
-cols=5 clientWidth=49
-cols=10 clientWidth=79
-cols=20 clientWidth=139
-cols=50 clientWidth=319
-cols=100 clientWidth=619
-cols=500 clientWidth=3019
-cols=1000 clientWidth=6019
+cols=3 clientWidth=38
+cols=4 clientWidth=45
+cols=5 clientWidth=52
+cols=10 clientWidth=87
+cols=20 clientWidth=157
+cols=50 clientWidth=367
+cols=100 clientWidth=717
+cols=500 clientWidth=3517
+cols=1000 clientWidth=7017
 
 
 Trebuchet MS
 input
-size=1 clientWidth=12
-size=2 clientWidth=18
-size=3 clientWidth=24
-size=4 clientWidth=30
-size=5 clientWidth=36
-size=10 clientWidth=66
-size=20 clientWidth=126
-size=50 clientWidth=306
-size=100 clientWidth=606
-size=500 clientWidth=3006
-size=1000 clientWidth=6006
+size=1 clientWidth=17
+size=2 clientWidth=24
+size=3 clientWidth=31
+size=4 clientWidth=38
+size=5 clientWidth=45
+size=10 clientWidth=80
+size=20 clientWidth=150
+size=50 clientWidth=360
+size=100 clientWidth=710
+size=500 clientWidth=3510
+size=1000 clientWidth=7010
 
 
 textarea
-cols=1 clientWidth=25
+cols=1 clientWidth=24
 cols=2 clientWidth=31
-cols=3 clientWidth=37
-cols=4 clientWidth=43
-cols=5 clientWidth=49
-cols=10 clientWidth=79
-cols=20 clientWidth=139
-cols=50 clientWidth=319
-cols=100 clientWidth=619
-cols=500 clientWidth=3019
-cols=1000 clientWidth=6019
+cols=3 clientWidth=38
+cols=4 clientWidth=45
+cols=5 clientWidth=52
+cols=10 clientWidth=87
+cols=20 clientWidth=157
+cols=50 clientWidth=367
+cols=100 clientWidth=717
+cols=500 clientWidth=3517
+cols=1000 clientWidth=7017
 
 
 Verdana
 input
-size=1 clientWidth=13
-size=2 clientWidth=20
-size=3 clientWidth=27
-size=4 clientWidth=34
-size=5 clientWidth=41
-size=10 clientWidth=76
-size=20 clientWidth=146
-size=50 clientWidth=356
-size=100 clientWidth=706
-size=500 clientWidth=3506
-size=1000 clientWidth=7006
+size=1 clientWidth=17
+size=2 clientWidth=25
+size=3 clientWidth=33
+size=4 clientWidth=41
+size=5 clientWidth=49
+size=10 clientWidth=89
+size=20 clientWidth=169
+size=50 clientWidth=409
+size=100 clientWidth=809
+size=500 clientWidth=4009
+size=1000 clientWidth=8009
 
 
 textarea
-cols=1 clientWidth=26
+cols=1 clientWidth=25
 cols=2 clientWidth=33
-cols=3 clientWidth=40
-cols=4 clientWidth=47
-cols=5 clientWidth=54
-cols=10 clientWidth=89
-cols=20 clientWidth=159
-cols=50 clientWidth=369
-cols=100 clientWidth=719
-cols=500 clientWidth=3519
-cols=1000 clientWidth=7019
+cols=3 clientWidth=41
+cols=4 clientWidth=49
+cols=5 clientWidth=57
+cols=10 clientWidth=97
+cols=20 clientWidth=177
+cols=50 clientWidth=417
+cols=100 clientWidth=817
+cols=500 clientWidth=4017
+cols=1000 clientWidth=8017
 
 
 Webdings
 input
-size=1 clientWidth=11
-size=2 clientWidth=22
-size=3 clientWidth=33
-size=4 clientWidth=44
-size=5 clientWidth=55
-size=10 clientWidth=110
-size=20 clientWidth=220
-size=50 clientWidth=550
-size=100 clientWidth=1100
-size=500 clientWidth=5500
-size=1000 clientWidth=11000
+size=1 clientWidth=15
+size=2 clientWidth=28
+size=3 clientWidth=41
+size=4 clientWidth=54
+size=5 clientWidth=67
+size=10 clientWidth=132
+size=20 clientWidth=262
+size=50 clientWidth=652
+size=100 clientWidth=1302
+size=500 clientWidth=6502
+size=1000 clientWidth=13002
 
 
 textarea
 cols=1 clientWidth=30
-cols=2 clientWidth=41
-cols=3 clientWidth=52
-cols=4 clientWidth=63
-cols=5 clientWidth=74
-cols=10 clientWidth=129
-cols=20 clientWidth=239
-cols=50 clientWidth=569
-cols=100 clientWidth=1119
-cols=500 clientWidth=5519
-cols=1000 clientWidth=11019
+cols=2 clientWidth=43
+cols=3 clientWidth=56
+cols=4 clientWidth=69
+cols=5 clientWidth=82
+cols=10 clientWidth=147
+cols=20 clientWidth=277
+cols=50 clientWidth=667
+cols=100 clientWidth=1317
+cols=500 clientWidth=6517
+cols=1000 clientWidth=13017
 
 
 PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/text-style-color-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/text-style-color-expected.png
index 0215eb3..85ffeb8 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/text-style-color-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/text-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-edge-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-edge-expected.png
index e6004e7..2e73e32 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-edge-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-edge-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-escape-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-escape-expected.png
index 83c47f73..acf5cae5 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-escape-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-escape-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-iframe-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-iframe-expected.png
index db3e8939..1bcbe1ba 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-iframe-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-iframe-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-rtl-ui-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
index ca65fba..382c23a 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-wrap-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-wrap-expected.png
index 44f980ea..e6ee3d96 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-wrap-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-appearance-wrap-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-device-emulation-change-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-device-emulation-change-expected.png
index 7c6653f..feaa1d9 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-device-emulation-change-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-device-emulation-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-device-emulation-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-device-emulation-expected.png
index 7c6653f..feaa1d9 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-device-emulation-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/validation-bubble-device-emulation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/visual-hebrew-text-field-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/visual-hebrew-text-field-expected.png
index 35b33b7..5b09e56 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/visual-hebrew-text-field-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/visual-hebrew-text-field-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/http/tests/devtools/oopif/oopif-elements-navigate-out-expected.txt b/third_party/blink/web_tests/platform/mac/http/tests/devtools/oopif/oopif-elements-navigate-out-expected.txt
new file mode 100644
index 0000000..30b2537
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/http/tests/devtools/oopif/oopif-elements-navigate-out-expected.txt
@@ -0,0 +1,31 @@
+Tests that oopif iframes are rendered inline.
+
+
+Dump tree
+- <html>
+      <head></head>
+    - <body>
+        - <div>
+            - <iframe id="page-iframe" src="http://127.0.0.1:8000/devtools/oopif/resources/inner-iframe.html">
+                - #document
+                    - <html>
+                          <head></head>
+                          <body>IFRAME\n</body>
+                      </html>
+              </iframe>
+          </div>
+      </body>
+  </html>
+
+Dump tree
+
+Dump tree
+- <html>
+      <head></head>
+    - <body>
+        - <div>
+            + <iframe id="page-iframe" src="http://devtools.oopif.test:8000/devtools/oopif/resources/inner-iframe.html">…</iframe>
+          </div>
+      </body>
+  </html>
+
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/001-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/001-expected.png
new file mode 100644
index 0000000..224eef8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/basic-buttons-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/basic-buttons-expected.png
new file mode 100644
index 0000000..f6b5a21
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/basic-buttons-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png
new file mode 100644
index 0000000..87be8a60
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/basic-inputs-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/dom/HTMLProgressElement/progress-element-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/blankbuttons-expected.png
similarity index 65%
copy from third_party/blink/web_tests/platform/mac/fast/dom/HTMLProgressElement/progress-element-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/blankbuttons-expected.png
index 16bddd3..e61fa7a 100644
--- a/third_party/blink/web_tests/platform/mac/fast/dom/HTMLProgressElement/progress-element-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/blankbuttons-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-default-title-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-default-title-expected.png
new file mode 100644
index 0000000..7123fdfa
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-default-title-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-positioned-expected.png
similarity index 68%
copy from third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-positioned-expected.png
index 1c4da88..fe9a62a2 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-positioned-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png
new file mode 100644
index 0000000..6835fdb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png
new file mode 100644
index 0000000..ad36b6d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-table-styles-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-table-styles-expected.png
new file mode 100644
index 0000000..71077b3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-table-styles-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-text-transform-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-text-transform-expected.png
new file mode 100644
index 0000000..75bbc7c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button-text-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button/button-align-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button/button-align-expected.png
new file mode 100644
index 0000000..d94b2e9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button/button-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button/button-cannot-be-nested-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button/button-cannot-be-nested-expected.png
new file mode 100644
index 0000000..667740be
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button/button-cannot-be-nested-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button/button-inner-block-reuse-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button/button-inner-block-reuse-expected.png
new file mode 100644
index 0000000..0f749c6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button/button-inner-block-reuse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button/button-white-space-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button/button-white-space-expected.png
new file mode 100644
index 0000000..37e9527
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/button/button-white-space-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
new file mode 100644
index 0000000..82b272b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
new file mode 100644
index 0000000..6dfb988
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
new file mode 100644
index 0000000..38ea6af
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-minimum-date-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
new file mode 100644
index 0000000..8468df8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-ar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
new file mode 100644
index 0000000..204fd321
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-required-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
new file mode 100644
index 0000000..bc01391
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
new file mode 100644
index 0000000..0b8f9be7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
new file mode 100644
index 0000000..dee10cdc
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png
new file mode 100644
index 0000000..7bc052e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
new file mode 100644
index 0000000..611ca3f3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/month-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png
new file mode 100644
index 0000000..9a44310
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
new file mode 100644
index 0000000..e23f565
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/checkbox/checkbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/checkbox/checkbox-appearance-basic-expected.png
new file mode 100644
index 0000000..a189967
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/checkbox/checkbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..fbfbbbc
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
new file mode 100644
index 0000000..163f30fc
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
new file mode 100644
index 0000000..b80b902
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
new file mode 100644
index 0000000..c73fbb3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-one-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
new file mode 100644
index 0000000..3352000
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-two-row-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
new file mode 100644
index 0000000..552028e6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/color-suggestion-picker-with-scrollbar-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/input-appearance-color-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/input-appearance-color-expected.png
new file mode 100644
index 0000000..f8fc8fcd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/input-appearance-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color/input-color-choose-default-value-after-set-value-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/input-color-choose-default-value-after-set-value-expected.txt
similarity index 100%
rename from third_party/blink/web_tests/platform/mac/fast/forms/color/input-color-choose-default-value-after-set-value-expected.txt
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/input-color-choose-default-value-after-set-value-expected.txt
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color/input-color-onchange-event-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/input-color-onchange-event-expected.txt
similarity index 100%
rename from third_party/blink/web_tests/platform/mac/fast/forms/color/input-color-onchange-event-expected.txt
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/color/input-color-onchange-event-expected.txt
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/control-clip-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/control-clip-expected.png
new file mode 100644
index 0000000..eb7e092e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/control-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/control-clip-overflow-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/control-clip-overflow-expected.png
new file mode 100644
index 0000000..1452deab
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/control-clip-overflow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/control-restrict-line-height-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/control-restrict-line-height-expected.png
new file mode 100644
index 0000000..1ca3cc0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/control-restrict-line-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
new file mode 100644
index 0000000..c4bf029b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png
similarity index 100%
rename from third_party/blink/web_tests/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png
similarity index 100%
rename from third_party/blink/web_tests/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/datalist/input-appearance-range-with-padding-with-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-l10n-expected.png
new file mode 100644
index 0000000..5473bcaa
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/date/date-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
new file mode 100644
index 0000000..a9ecd18
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
new file mode 100644
index 0000000..9906b7f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/encoding-test-expected.png
similarity index 71%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/encoding-test-expected.png
index 1c4da88..4951917d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/encoding-test-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/fieldset/fieldset-align-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/fieldset/fieldset-align-expected.png
new file mode 100644
index 0000000..bc34023
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/fieldset/fieldset-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/file/file-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/file/file-appearance-basic-expected.png
new file mode 100644
index 0000000..bca230a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/file/file-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-direction-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-direction-expected.png
new file mode 100644
index 0000000..4dc23636
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-pressed-state-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-pressed-state-expected.png
new file mode 100644
index 0000000..aa46072
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/file/file-input-pressed-state-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/file/input-file-re-render-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/file/input-file-re-render-expected.png
new file mode 100644
index 0000000..0f5ee50
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/file/input-file-re-render-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/floating-textfield-relayout-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/floating-textfield-relayout-expected.png
new file mode 100644
index 0000000..fa17c3a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/floating-textfield-relayout-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png
new file mode 100644
index 0000000..50fdc3b9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/form-element-geometry-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/formmove-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/formmove-expected.png
new file mode 100644
index 0000000..d51a21a2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/formmove-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/formmove2-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/formmove2-expected.png
new file mode 100644
index 0000000..21dd51d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/formmove2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/range/range-update-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/formmove3-expected.png
similarity index 64%
copy from third_party/blink/web_tests/platform/win/fast/forms/range/range-update-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/formmove3-expected.png
index 5da4a0c..a92bd85e 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/range/range-update-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/formmove3-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/huge-mac-input-clamped-height-expected.png
similarity index 71%
copy from third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/huge-mac-input-clamped-height-expected.png
index 1c4da88..15c856a1 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/huge-mac-input-clamped-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/huge-mac-input-clamped-width-expected.png
similarity index 69%
copy from third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/huge-mac-input-clamped-width-expected.png
index 1c4da88..05e7b37 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/huge-mac-input-clamped-width-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/selectlist-minsize-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/image/002-expected.png
similarity index 64%
rename from third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/selectlist-minsize-expected.png
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/image/002-expected.png
index d6cbbd9..6fa40e8 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/selectlist-minsize-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/image/002-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/image/005-expected.png
similarity index 63%
copy from third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/image/005-expected.png
index 1c4da88..a85af005 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/image/005-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/image/image-alt-text-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/image/image-alt-text-expected.png
new file mode 100644
index 0000000..2397027
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/image/image-alt-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/implicit-submission-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/implicit-submission-expected.txt
similarity index 97%
rename from third_party/blink/web_tests/platform/win/fast/forms/implicit-submission-expected.txt
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/implicit-submission-expected.txt
index 63e9015..42243de 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/implicit-submission-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/implicit-submission-expected.txt
@@ -19,7 +19,7 @@
 Single checkbox with a submit should submit: PASS
 Single checkbox with a submit disabled should not submit: PASS
 Single select should not submit: PASS
-Select with a submit should submit: FAIL
+Select with a submit should submit: PASS
 Select with a disabled submit should not submit: PASS
 Multi-line select with a submit should submit: PASS
 Multi-line select with a disabled submit should not submit: PASS
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/indeterminate-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/indeterminate-expected.png
new file mode 100644
index 0000000..121ad81
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/indeterminate-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-align-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-align-expected.png
new file mode 100644
index 0000000..77c1a71
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-appearance-height-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-appearance-height-expected.png
new file mode 100644
index 0000000..991324c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-appearance-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png
new file mode 100644
index 0000000..97181dc
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-button-sizes-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-first-letter-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-first-letter-expected.png
new file mode 100644
index 0000000..3bd6b75
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-first-letter-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-type-text-min-width-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-type-text-min-width-expected.png
new file mode 100644
index 0000000..608dfb87
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-type-text-min-width-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png
new file mode 100644
index 0000000..8de28aad
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/input-value-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/dom/HTMLProgressElement/progress-element-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/minWidthPercent-expected.png
similarity index 75%
rename from third_party/blink/web_tests/platform/mac/fast/dom/HTMLProgressElement/progress-element-expected.png
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/minWidthPercent-expected.png
index 16bddd3..44c775e 100644
--- a/third_party/blink/web_tests/platform/mac/fast/dom/HTMLProgressElement/progress-element-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/minWidthPercent-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-basic-expected.png
new file mode 100644
index 0000000..f87308a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png
new file mode 100644
index 0000000..320ea35
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/month/month-appearance-l10n-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-datalist-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-datalist-expected.png
new file mode 100644
index 0000000..efc919e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-datalist-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-rtl-expected.png
new file mode 100644
index 0000000..e4bc8a9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
new file mode 100644
index 0000000..0de38ac
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-layer-expected.png
similarity index 75%
rename from third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-layer-expected.png
index 4ad508f8..7a01da1 100644
--- a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/number/number-appearance-spinbutton-layer-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/placeholder-position-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/placeholder-position-expected.png
new file mode 100644
index 0000000..488a1e9e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/placeholder-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/plaintext-mode-2-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/plaintext-mode-2-expected.png
new file mode 100644
index 0000000..f8da6586
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/plaintext-mode-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/radio/radio-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/radio/radio-appearance-basic-expected.png
new file mode 100644
index 0000000..cdcdc81c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/radio/radio-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/range/input-appearance-range-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/range/input-appearance-range-expected.png
similarity index 100%
rename from third_party/blink/web_tests/fast/forms/range/input-appearance-range-expected.png
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/range/input-appearance-range-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/range/range-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/range/range-appearance-basic-expected.png
new file mode 100644
index 0000000..9034c80
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/range/range-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/dom/HTMLProgressElement/progress-element-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/range/range-update-expected.png
similarity index 68%
copy from third_party/blink/web_tests/platform/mac/fast/dom/HTMLProgressElement/progress-element-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/range/range-update-expected.png
index 16bddd3..d03847c 100644
--- a/third_party/blink/web_tests/platform/mac/fast/dom/HTMLProgressElement/progress-element-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/range/range-update-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/range/slider-padding-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/range/slider-padding-expected.png
similarity index 100%
rename from third_party/blink/web_tests/fast/forms/range/slider-padding-expected.png
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/range/slider-padding-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/range/slider-thumb-shared-style-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/range/slider-thumb-shared-style-expected.png
similarity index 100%
rename from third_party/blink/web_tests/fast/forms/range/slider-thumb-shared-style-expected.png
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/range/slider-thumb-shared-style-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/search-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/search-appearance-basic-expected.png
new file mode 100644
index 0000000..d16c705f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/search-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/search-cancel-button-style-sharing-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/search-cancel-button-style-sharing-expected.png
new file mode 100644
index 0000000..a0469dd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/search-cancel-button-style-sharing-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/search-display-none-cancel-button-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/search-display-none-cancel-button-expected.png
new file mode 100644
index 0000000..d54b496
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/search-display-none-cancel-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/search-rtl-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/search-rtl-expected.png
new file mode 100644
index 0000000..6c4b4ed9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/search-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/search-vertical-alignment-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/search-vertical-alignment-expected.png
new file mode 100644
index 0000000..da608b7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/search-vertical-alignment-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/searchfield-heights-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/searchfield-heights-expected.png
new file mode 100644
index 0000000..e101f94
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/search/searchfield-heights-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/003-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/003-expected.png
new file mode 100644
index 0000000..d50bf0c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/004-expected.png
similarity index 60%
copy from third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/004-expected.png
index 4ad508f8..78f1078 100644
--- a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/004-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label01-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label01-expected.png
new file mode 100644
index 0000000..35a6f752
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label01-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png
new file mode 100644
index 0000000..e60f4ac8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label02-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png
new file mode 100644
index 0000000..bf2486a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label03-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png
new file mode 100644
index 0000000..5115a4d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label04-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label05-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label05-expected.png
new file mode 100644
index 0000000..03aafb5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label05-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label06-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label06-expected.png
new file mode 100644
index 0000000..c57c80a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label06-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label07-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label07-expected.png
new file mode 100644
index 0000000..5f6c6bdf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/HTMLOptionElement_label07-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/basic-selects-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/basic-selects-expected.png
new file mode 100644
index 0000000..4f24c82
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/basic-selects-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/disabled-select-change-index-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/disabled-select-change-index-expected.png
new file mode 100644
index 0000000..870197db
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/disabled-select-change-index-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/input-select-after-resize-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/input-select-after-resize-expected.png
new file mode 100644
index 0000000..568c2b3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/input-select-after-resize-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png
new file mode 100644
index 0000000..af05576
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-separator-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-separator-expected.png
new file mode 100644
index 0000000..62253b23
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-appearance-separator-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png
new file mode 100644
index 0000000..031b0ef
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-bidi-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/range/range-update-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-clip-expected.png
similarity index 66%
copy from third_party/blink/web_tests/platform/win/fast/forms/range/range-update-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-clip-expected.png
index 5da4a0c..1496cfd 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/range/range-update-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-scrollbar-incremental-load-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-scrollbar-incremental-load-expected.png
new file mode 100644
index 0000000..df81706
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-scrollbar-incremental-load-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-width-change-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-width-change-expected.png
new file mode 100644
index 0000000..9df2003
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-width-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-with-display-none-option-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-with-display-none-option-expected.png
new file mode 100644
index 0000000..aa7f78a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/listbox-with-display-none-option-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-basic-expected.png
new file mode 100644
index 0000000..acbde808
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-none-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-none-expected.png
new file mode 100644
index 0000000..ee8512f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-none-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-rtl-expected.png
new file mode 100644
index 0000000..47afecc
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-clip-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-clip-expected.png
new file mode 100644
index 0000000..a248bde
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-deselect-update-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-deselect-update-expected.png
new file mode 100644
index 0000000..3fed84d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-deselect-update-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-narrow-width-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-narrow-width-expected.png
new file mode 100644
index 0000000..e2dde61c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-narrow-width-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-no-overflow-expected.png
similarity index 68%
copy from third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-no-overflow-expected.png
index 1c4da88..d5eb786 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/dom/HTMLProgressElement/progress-element-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-no-overflow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-option-wrap-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-option-wrap-expected.png
new file mode 100644
index 0000000..0b1d0b2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-option-wrap-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-popup-open-hide-using-keyboard-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-popup-open-hide-using-keyboard-expected.txt
new file mode 100644
index 0000000..1f4743f4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-popup-open-hide-using-keyboard-expected.txt
@@ -0,0 +1,27 @@
+Test for opening select popup and closing.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+These tests run specfically for Linux and Windows
+Test opening and closing of popup using alt and down arrow key
+PASS internals.isSelectPopupVisible(popup) is true
+FAIL internals.isSelectPopupVisible(popup) should be false. Was true.
+Test opening and closing of popup using alt and up arrow key
+PASS internals.isSelectPopupVisible(popup) is true
+FAIL internals.isSelectPopupVisible(popup) should be false. Was true.
+Test opening of popup using F4
+FAIL internals.isSelectPopupVisible(popup) should be true. Was false.
+Test opening of popup using enter key
+FAIL internals.isSelectPopupVisible(popup) should be true. Was false.
+Works for all platforms
+Test opening of popup using space key
+PASS internals.isSelectPopupVisible(popup) is true
+Works for only mac
+Test opening of popup using up key
+PASS internals.isSelectPopupVisible(popup) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+One
+Two
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-restrict-line-height-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-restrict-line-height-expected.png
new file mode 100644
index 0000000..63cd917
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-restrict-line-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/dom/HTMLProgressElement/progress-element-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-separator-painting-expected.png
similarity index 69%
copy from third_party/blink/web_tests/platform/mac/fast/dom/HTMLProgressElement/progress-element-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-separator-painting-expected.png
index 16bddd3..2e02747 100644
--- a/third_party/blink/web_tests/platform/mac/fast/dom/HTMLProgressElement/progress-element-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-separator-painting-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-style-color-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-style-color-expected.png
new file mode 100644
index 0000000..da737925
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-type-ahead-find-original-item-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-type-ahead-find-original-item-expected.txt
similarity index 100%
rename from third_party/blink/web_tests/platform/mac/fast/forms/select/menulist-type-ahead-find-original-item-expected.txt
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-type-ahead-find-original-item-expected.txt
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-update-text-popup-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-update-text-popup-expected.txt
new file mode 100644
index 0000000..ee8ac49
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-update-text-popup-expected.txt
@@ -0,0 +1,15 @@
+Tests <select> text update when popup is visible and selectionIndex changes.
+Needs run-layout-test.
+
+A
+B
+C
+layer at (0,0) size 39x18
+  LayoutNGBlockFlow (positioned) {DIV} at (8,50) size 39x18
+    LayoutMenuList {SELECT} at (0,0) size 39x18 [bgcolor=#F8F8F8]
+    LayoutText {#text} at (0,0) size 0x0
+layer at (8,0) size 8x18
+  LayoutBlockFlow {DIV} at (8,0) size 8x18
+    LayoutText {#text} at (0,2) size 8x13
+      text run at (0,2) width 8: "C"
+
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-width-change-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-width-change-expected.png
new file mode 100644
index 0000000..0bca4ff
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/menulist-width-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png
new file mode 100644
index 0000000..ef5a01ac
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/optgroup-clicking-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/optgroup-clicking-expected.txt
similarity index 100%
rename from third_party/blink/web_tests/platform/mac/fast/forms/select/optgroup-clicking-expected.txt
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/optgroup-clicking-expected.txt
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/optgroup-rendering-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/optgroup-rendering-expected.png
new file mode 100644
index 0000000..3dc10711
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/optgroup-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/option-mouseevents-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/option-mouseevents-expected.txt
similarity index 88%
rename from third_party/blink/web_tests/platform/win/fast/forms/select/option-mouseevents-expected.txt
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/option-mouseevents-expected.txt
index 856cbaa3..3a47db9 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/option-mouseevents-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/option-mouseevents-expected.txt
@@ -17,7 +17,7 @@
 PASS: event.pageX should be 22 and is
 PASS: event.pageY should be 104 and is
 PASS: event.offsetX should be 13 and is
-FAIL: event.offsetY should be 5 but instead is 2
+PASS: event.offsetY should be 5 and is
 PASS: event.x should be 22 and is
 PASS: event.y should be 104 and is
 PASS: event type should be mousedown and is
@@ -25,7 +25,7 @@
 PASS: event.pageX should be 22 and is
 PASS: event.pageY should be 104 and is
 PASS: event.offsetX should be 13 and is
-FAIL: event.offsetY should be 5 but instead is 2
+PASS: event.offsetY should be 5 and is
 PASS: event.x should be 22 and is
 PASS: event.y should be 104 and is
 PASS: event type should be mouseup and is
@@ -33,7 +33,7 @@
 PASS: event.pageX should be 22 and is
 PASS: event.pageY should be 184 and is
 PASS: event.offsetX should be 13 and is
-FAIL: event.offsetY should be 5 but instead is 2
+PASS: event.offsetY should be 5 and is
 PASS: event.x should be 22 and is
 PASS: event.y should be 184 and is
 PASS: event type should be mouseup and is
@@ -41,7 +41,7 @@
 PASS: event.pageX should be 22 and is
 PASS: event.pageY should be 184 and is
 PASS: event.offsetX should be 13 and is
-FAIL: event.offsetY should be 5 but instead is 2
+PASS: event.offsetY should be 5 and is
 PASS: event.x should be 22 and is
 PASS: event.y should be 184 and is
 PASS: event type should be click and is
@@ -49,7 +49,7 @@
 PASS: event.pageX should be 22 and is
 PASS: event.pageY should be 262 and is
 PASS: event.offsetX should be 13 and is
-FAIL: event.offsetY should be 4.8125 but instead is 2
+PASS: event.offsetY should be 4.8125 and is
 PASS: event.x should be 22 and is
 PASS: event.y should be 262 and is
 PASS: event type should be click and is
@@ -57,7 +57,7 @@
 PASS: event.pageX should be 22 and is
 PASS: event.pageY should be 262 and is
 PASS: event.offsetX should be 13 and is
-FAIL: event.offsetY should be 4.8125 but instead is 2
+PASS: event.offsetY should be 4.8125 and is
 PASS: event.x should be 22 and is
 PASS: event.y should be 262 and is
 PASS: event type should be dblclick and is
@@ -65,7 +65,7 @@
 PASS: event.pageX should be 22 and is
 PASS: event.pageY should be 344 and is
 PASS: event.offsetX should be 13 and is
-FAIL: event.offsetY should be 5 but instead is 2
+PASS: event.offsetY should be 5 and is
 PASS: event.x should be 22 and is
 PASS: event.y should be 344 and is
 PASS: event type should be dblclick and is
@@ -73,7 +73,7 @@
 PASS: event.pageX should be 22 and is
 PASS: event.pageY should be 344 and is
 PASS: event.offsetX should be 13 and is
-FAIL: event.offsetY should be 5 but instead is 2
+PASS: event.offsetY should be 5 and is
 PASS: event.x should be 22 and is
 PASS: event.y should be 344 and is
 PASS: event type should be mousedown and is
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/option-script-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/option-script-expected.png
new file mode 100644
index 0000000..030cd80
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/option-script-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png
new file mode 100644
index 0000000..2affdf1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/option-strip-whitespace-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/option-text-clip-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/option-text-clip-expected.png
new file mode 100644
index 0000000..f102d12
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/option-text-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-align-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-align-expected.png
new file mode 100644
index 0000000..f815ca8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-align-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-autofilled-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-autofilled-expected.png
new file mode 100644
index 0000000..91492e1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-autofilled-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-background-none-expected.png
similarity index 74%
copy from third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-background-none-expected.png
index 4ad508f8..863ba331 100644
--- a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-background-none-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-baseline-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-baseline-expected.png
new file mode 100644
index 0000000..641d961
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-baseline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-block-background-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-block-background-expected.png
new file mode 100644
index 0000000..d85cf345
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-block-background-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-size-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-size-expected.png
new file mode 100644
index 0000000..f6101a4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-to-popup-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-to-popup-expected.png
new file mode 100644
index 0000000..dd5a0524
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-listbox-to-popup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-popup-to-listbox-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-popup-to-listbox-expected.png
new file mode 100644
index 0000000..0822cc5c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-change-popup-to-listbox-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-clientheight-large-size-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-clientheight-large-size-expected.txt
similarity index 100%
rename from third_party/blink/web_tests/platform/mac/fast/forms/select/select-clientheight-large-size-expected.txt
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-clientheight-large-size-expected.txt
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-dirty-parent-pref-widths-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-dirty-parent-pref-widths-expected.png
new file mode 100644
index 0000000..1b2afb0f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-dirty-parent-pref-widths-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-disabled-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-disabled-appearance-expected.png
new file mode 100644
index 0000000..fe5dec6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-disabled-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/range/range-update-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-empty-option-height-expected.png
similarity index 78%
rename from third_party/blink/web_tests/platform/win/fast/forms/range/range-update-expected.png
rename to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-empty-option-height-expected.png
index 5da4a0c..c10b72a 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/range/range-update-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-empty-option-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-initial-position-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-initial-position-expected.png
new file mode 100644
index 0000000..25499608
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-initial-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-item-background-clip-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-item-background-clip-expected.png
new file mode 100644
index 0000000..5d94ab2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-item-background-clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-list-box-with-height-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-list-box-with-height-expected.png
new file mode 100644
index 0000000..75720f9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-list-box-with-height-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-listbox-multiple-no-focusring-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-listbox-multiple-no-focusring-expected.png
new file mode 100644
index 0000000..b26c3e6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-listbox-multiple-no-focusring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-multiple-rtl-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-multiple-rtl-expected.png
new file mode 100644
index 0000000..f567e315
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-multiple-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-expected.png
new file mode 100644
index 0000000..16e348b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-inherited-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-inherited-expected.png
new file mode 100644
index 0000000..f34fae2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-overflow-scroll-inherited-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-popup-pagekeys-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-popup-pagekeys-expected.txt
new file mode 100644
index 0000000..4a05f8f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-popup-pagekeys-expected.txt
@@ -0,0 +1,72 @@
+This test verifies that the Home/End/PageUp/PageDown keys work correctly for pop-up <select> elements that have focus but are not currently popped-up.
+
+Output below is a series of PASS or FAIL lines showing expected and actual selection indexes, followed by a single PASS or FAIL for the status of the entire test.
+
+NOTE: This test will fail on Mac OS, on which these keys are NOT supposed to change the selection of a focused pop-up.
+
+0
+1
+2
+3
+4
+5
+6
+ 
+0
+1
+2
+3
+4
+5
+6
+7
+FAIL: selectedIndex should be 3 (is 0) after a PageDown from index 0
+FAIL: selectedIndex should be 4 (is 1) after a PageDown from index 1
+FAIL: selectedIndex should be 5 (is 2) after a PageDown from index 2
+FAIL: selectedIndex should be 6 (is 3) after a PageDown from index 3
+FAIL: selectedIndex should be 6 (is 4) after a PageDown from index 4
+FAIL: selectedIndex should be 6 (is 5) after a PageDown from index 5
+FAIL: selectedIndex should be 3 (is 6) after a PageUp from index 6
+FAIL: selectedIndex should be 2 (is 5) after a PageUp from index 5
+FAIL: selectedIndex should be 1 (is 4) after a PageUp from index 4
+FAIL: selectedIndex should be 0 (is 3) after a PageUp from index 3
+FAIL: selectedIndex should be 0 (is 2) after a PageUp from index 2
+FAIL: selectedIndex should be 0 (is 1) after a PageUp from index 1
+FAIL: selectedIndex should be 0 (is 6) after a Home from index 6
+FAIL: selectedIndex should be 0 (is 5) after a Home from index 5
+FAIL: selectedIndex should be 0 (is 4) after a Home from index 4
+FAIL: selectedIndex should be 0 (is 3) after a Home from index 3
+FAIL: selectedIndex should be 0 (is 2) after a Home from index 2
+FAIL: selectedIndex should be 0 (is 1) after a Home from index 1
+FAIL: selectedIndex should be 6 (is 5) after a End from index 5
+FAIL: selectedIndex should be 6 (is 4) after a End from index 4
+FAIL: selectedIndex should be 6 (is 3) after a End from index 3
+FAIL: selectedIndex should be 6 (is 2) after a End from index 2
+FAIL: selectedIndex should be 6 (is 1) after a End from index 1
+FAIL: selectedIndex should be 6 (is 0) after a End from index 0
+FAIL: selectedIndex should be 4 (is 1) after a PageDown from index 1
+FAIL: selectedIndex should be 5 (is 2) after a PageDown from index 2
+FAIL: selectedIndex should be 6 (is 4) after a PageDown from index 4
+FAIL: selectedIndex should be 6 (is 5) after a PageDown from index 5
+FAIL: selectedIndex should be 2 (is 6) after a PageUp from index 6
+FAIL: selectedIndex should be 2 (is 5) after a PageUp from index 5
+FAIL: selectedIndex should be 1 (is 4) after a PageUp from index 4
+FAIL: selectedIndex should be 1 (is 2) after a PageUp from index 2
+FAIL: selectedIndex should be 1 (is 7) after a Home from index 7
+FAIL: selectedIndex should be 1 (is 6) after a Home from index 6
+FAIL: selectedIndex should be 1 (is 5) after a Home from index 5
+FAIL: selectedIndex should be 1 (is 4) after a Home from index 4
+FAIL: selectedIndex should be 1 (is 3) after a Home from index 3
+FAIL: selectedIndex should be 1 (is 2) after a Home from index 2
+FAIL: selectedIndex should be 1 (is 0) after a Home from index 0
+FAIL: selectedIndex should be 6 (is 7) after a End from index 7
+FAIL: selectedIndex should be 6 (is 5) after a End from index 5
+FAIL: selectedIndex should be 6 (is 4) after a End from index 4
+FAIL: selectedIndex should be 6 (is 3) after a End from index 3
+FAIL: selectedIndex should be 6 (is 2) after a End from index 2
+FAIL: selectedIndex should be 6 (is 1) after a End from index 1
+FAIL: selectedIndex should be 6 (is 0) after a End from index 0
+
+FAIL: SOME TESTS FAILED (SEE ABOVE)
+
+
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-selected-expected.png
similarity index 60%
copy from third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-selected-expected.png
index 4ad508f8..f11362c 100644
--- a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-selected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-size-invalid-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-size-invalid-expected.png
new file mode 100644
index 0000000..69a0ebd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-size-invalid-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-style-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-style-expected.png
new file mode 100644
index 0000000..6965851
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-style-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-visual-hebrew-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-visual-hebrew-expected.png
new file mode 100644
index 0000000..360d998
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-visual-hebrew-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png
new file mode 100644
index 0000000..907473a2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/select-writing-direction-natural-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/selectlist-minsize-expected.png
similarity index 67%
copy from third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/selectlist-minsize-expected.png
index 4ad508f8..86dcaf0b 100644
--- a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/select/selectlist-minsize-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/stuff-on-my-optgroup-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/stuff-on-my-optgroup-expected.png
new file mode 100644
index 0000000..09ed7dd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/stuff-on-my-optgroup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png
new file mode 100644
index 0000000..39ee66f4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/submit/submit-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/tabbing-input-iframe-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/tabbing-input-iframe-expected.png
new file mode 100644
index 0000000..a320400
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/tabbing-input-iframe-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/targeted-frame-submission-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/targeted-frame-submission-expected.png
new file mode 100644
index 0000000..4017a05
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/targeted-frame-submission-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/text-control-intrinsic-widths-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/text-control-intrinsic-widths-expected.txt
new file mode 100644
index 0000000..9ce6adf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/text-control-intrinsic-widths-expected.txt
@@ -0,0 +1,414 @@
+This test measures the width of textareas and text inputs for different fonts.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Lucida Grande
+input
+size=1 clientWidth=9
+size=2 clientWidth=16
+size=3 clientWidth=23
+size=4 clientWidth=30
+size=5 clientWidth=37
+size=10 clientWidth=72
+size=20 clientWidth=141
+size=50 clientWidth=350
+size=100 clientWidth=698
+size=500 clientWidth=3480
+size=1000 clientWidth=6958
+
+
+textarea
+cols=1 clientWidth=26
+cols=2 clientWidth=33
+cols=3 clientWidth=40
+cols=4 clientWidth=47
+cols=5 clientWidth=54
+cols=10 clientWidth=89
+cols=20 clientWidth=159
+cols=50 clientWidth=367
+cols=100 clientWidth=715
+cols=500 clientWidth=3497
+cols=1000 clientWidth=6975
+
+
+Courier
+input
+size=1 clientWidth=9
+size=2 clientWidth=15
+size=3 clientWidth=22
+size=4 clientWidth=28
+size=5 clientWidth=35
+size=10 clientWidth=68
+size=20 clientWidth=134
+size=50 clientWidth=332
+size=100 clientWidth=662
+size=500 clientWidth=3303
+size=1000 clientWidth=6603
+
+
+textarea
+cols=1 clientWidth=26
+cols=2 clientWidth=33
+cols=3 clientWidth=39
+cols=4 clientWidth=46
+cols=5 clientWidth=53
+cols=10 clientWidth=86
+cols=20 clientWidth=152
+cols=50 clientWidth=350
+cols=100 clientWidth=680
+cols=500 clientWidth=3320
+cols=1000 clientWidth=6621
+
+
+Helvetica
+input
+size=1 clientWidth=8
+size=2 clientWidth=14
+size=3 clientWidth=20
+size=4 clientWidth=26
+size=5 clientWidth=33
+size=10 clientWidth=63
+size=20 clientWidth=124
+size=50 clientWidth=308
+size=100 clientWidth=614
+size=500 clientWidth=3061
+size=1000 clientWidth=6120
+
+
+textarea
+cols=1 clientWidth=26
+cols=2 clientWidth=32
+cols=3 clientWidth=38
+cols=4 clientWidth=44
+cols=5 clientWidth=50
+cols=10 clientWidth=81
+cols=20 clientWidth=142
+cols=50 clientWidth=325
+cols=100 clientWidth=631
+cols=500 clientWidth=3078
+cols=1000 clientWidth=6137
+
+
+Monaco
+input
+size=1 clientWidth=9
+size=2 clientWidth=15
+size=3 clientWidth=22
+size=4 clientWidth=28
+size=5 clientWidth=35
+size=10 clientWidth=68
+size=20 clientWidth=134
+size=50 clientWidth=332
+size=100 clientWidth=662
+size=500 clientWidth=3303
+size=1000 clientWidth=6603
+
+
+textarea
+cols=1 clientWidth=26
+cols=2 clientWidth=33
+cols=3 clientWidth=39
+cols=4 clientWidth=46
+cols=5 clientWidth=53
+cols=10 clientWidth=86
+cols=20 clientWidth=152
+cols=50 clientWidth=350
+cols=100 clientWidth=680
+cols=500 clientWidth=3320
+cols=1000 clientWidth=6621
+
+
+Times
+input
+size=1 clientWidth=8
+size=2 clientWidth=13
+size=3 clientWidth=19
+size=4 clientWidth=24
+size=5 clientWidth=30
+size=10 clientWidth=57
+size=20 clientWidth=112
+size=50 clientWidth=277
+size=100 clientWidth=552
+size=500 clientWidth=2752
+size=1000 clientWidth=5502
+
+
+textarea
+cols=1 clientWidth=25
+cols=2 clientWidth=30
+cols=3 clientWidth=36
+cols=4 clientWidth=41
+cols=5 clientWidth=47
+cols=10 clientWidth=74
+cols=20 clientWidth=129
+cols=50 clientWidth=294
+cols=100 clientWidth=569
+cols=500 clientWidth=2769
+cols=1000 clientWidth=5519
+
+
+Andale Mono
+input
+size=1 clientWidth=12
+size=2 clientWidth=19
+size=3 clientWidth=26
+size=4 clientWidth=33
+size=5 clientWidth=40
+size=10 clientWidth=75
+size=20 clientWidth=145
+size=50 clientWidth=355
+size=100 clientWidth=705
+size=500 clientWidth=3505
+size=1000 clientWidth=7005
+
+
+textarea
+cols=1 clientWidth=26
+cols=2 clientWidth=33
+cols=3 clientWidth=40
+cols=4 clientWidth=47
+cols=5 clientWidth=54
+cols=10 clientWidth=89
+cols=20 clientWidth=159
+cols=50 clientWidth=369
+cols=100 clientWidth=719
+cols=500 clientWidth=3519
+cols=1000 clientWidth=7019
+
+
+Arial
+input
+size=1 clientWidth=12
+size=2 clientWidth=18
+size=3 clientWidth=24
+size=4 clientWidth=30
+size=5 clientWidth=36
+size=10 clientWidth=66
+size=20 clientWidth=126
+size=50 clientWidth=306
+size=100 clientWidth=606
+size=500 clientWidth=3006
+size=1000 clientWidth=6006
+
+
+textarea
+cols=1 clientWidth=25
+cols=2 clientWidth=31
+cols=3 clientWidth=37
+cols=4 clientWidth=43
+cols=5 clientWidth=49
+cols=10 clientWidth=79
+cols=20 clientWidth=139
+cols=50 clientWidth=319
+cols=100 clientWidth=619
+cols=500 clientWidth=3019
+cols=1000 clientWidth=6019
+
+
+Comic Sans MS
+input
+size=1 clientWidth=14
+size=2 clientWidth=20
+size=3 clientWidth=26
+size=4 clientWidth=32
+size=5 clientWidth=38
+size=10 clientWidth=68
+size=20 clientWidth=128
+size=50 clientWidth=308
+size=100 clientWidth=608
+size=500 clientWidth=3008
+size=1000 clientWidth=6008
+
+
+textarea
+cols=1 clientWidth=25
+cols=2 clientWidth=31
+cols=3 clientWidth=37
+cols=4 clientWidth=43
+cols=5 clientWidth=49
+cols=10 clientWidth=79
+cols=20 clientWidth=139
+cols=50 clientWidth=319
+cols=100 clientWidth=619
+cols=500 clientWidth=3019
+cols=1000 clientWidth=6019
+
+
+Courier New
+input
+size=1 clientWidth=11
+size=2 clientWidth=18
+size=3 clientWidth=25
+size=4 clientWidth=32
+size=5 clientWidth=39
+size=10 clientWidth=74
+size=20 clientWidth=144
+size=50 clientWidth=354
+size=100 clientWidth=704
+size=500 clientWidth=3504
+size=1000 clientWidth=7004
+
+
+textarea
+cols=1 clientWidth=26
+cols=2 clientWidth=33
+cols=3 clientWidth=40
+cols=4 clientWidth=47
+cols=5 clientWidth=54
+cols=10 clientWidth=89
+cols=20 clientWidth=159
+cols=50 clientWidth=369
+cols=100 clientWidth=719
+cols=500 clientWidth=3519
+cols=1000 clientWidth=7019
+
+
+Georgia
+input
+size=1 clientWidth=12
+size=2 clientWidth=18
+size=3 clientWidth=24
+size=4 clientWidth=30
+size=5 clientWidth=36
+size=10 clientWidth=66
+size=20 clientWidth=126
+size=50 clientWidth=306
+size=100 clientWidth=606
+size=500 clientWidth=3006
+size=1000 clientWidth=6006
+
+
+textarea
+cols=1 clientWidth=25
+cols=2 clientWidth=31
+cols=3 clientWidth=37
+cols=4 clientWidth=43
+cols=5 clientWidth=49
+cols=10 clientWidth=79
+cols=20 clientWidth=139
+cols=50 clientWidth=319
+cols=100 clientWidth=619
+cols=500 clientWidth=3019
+cols=1000 clientWidth=6019
+
+
+Times New Roman
+input
+size=1 clientWidth=12
+size=2 clientWidth=18
+size=3 clientWidth=24
+size=4 clientWidth=30
+size=5 clientWidth=36
+size=10 clientWidth=66
+size=20 clientWidth=126
+size=50 clientWidth=306
+size=100 clientWidth=606
+size=500 clientWidth=3006
+size=1000 clientWidth=6006
+
+
+textarea
+cols=1 clientWidth=25
+cols=2 clientWidth=31
+cols=3 clientWidth=37
+cols=4 clientWidth=43
+cols=5 clientWidth=49
+cols=10 clientWidth=79
+cols=20 clientWidth=139
+cols=50 clientWidth=319
+cols=100 clientWidth=619
+cols=500 clientWidth=3019
+cols=1000 clientWidth=6019
+
+
+Trebuchet MS
+input
+size=1 clientWidth=12
+size=2 clientWidth=18
+size=3 clientWidth=24
+size=4 clientWidth=30
+size=5 clientWidth=36
+size=10 clientWidth=66
+size=20 clientWidth=126
+size=50 clientWidth=306
+size=100 clientWidth=606
+size=500 clientWidth=3006
+size=1000 clientWidth=6006
+
+
+textarea
+cols=1 clientWidth=25
+cols=2 clientWidth=31
+cols=3 clientWidth=37
+cols=4 clientWidth=43
+cols=5 clientWidth=49
+cols=10 clientWidth=79
+cols=20 clientWidth=139
+cols=50 clientWidth=319
+cols=100 clientWidth=619
+cols=500 clientWidth=3019
+cols=1000 clientWidth=6019
+
+
+Verdana
+input
+size=1 clientWidth=13
+size=2 clientWidth=20
+size=3 clientWidth=27
+size=4 clientWidth=34
+size=5 clientWidth=41
+size=10 clientWidth=76
+size=20 clientWidth=146
+size=50 clientWidth=356
+size=100 clientWidth=706
+size=500 clientWidth=3506
+size=1000 clientWidth=7006
+
+
+textarea
+cols=1 clientWidth=26
+cols=2 clientWidth=33
+cols=3 clientWidth=40
+cols=4 clientWidth=47
+cols=5 clientWidth=54
+cols=10 clientWidth=89
+cols=20 clientWidth=159
+cols=50 clientWidth=369
+cols=100 clientWidth=719
+cols=500 clientWidth=3519
+cols=1000 clientWidth=7019
+
+
+Webdings
+input
+size=1 clientWidth=11
+size=2 clientWidth=22
+size=3 clientWidth=33
+size=4 clientWidth=44
+size=5 clientWidth=55
+size=10 clientWidth=110
+size=20 clientWidth=220
+size=50 clientWidth=550
+size=100 clientWidth=1100
+size=500 clientWidth=5500
+size=1000 clientWidth=11000
+
+
+textarea
+cols=1 clientWidth=30
+cols=2 clientWidth=41
+cols=3 clientWidth=52
+cols=4 clientWidth=63
+cols=5 clientWidth=74
+cols=10 clientWidth=129
+cols=20 clientWidth=239
+cols=50 clientWidth=569
+cols=100 clientWidth=1119
+cols=500 clientWidth=5519
+cols=1000 clientWidth=11019
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/text-style-color-expected.png
similarity index 68%
copy from third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/text-style-color-expected.png
index 4ad508f8..0215eb3 100644
--- a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/text-style-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-edge-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-edge-expected.png
new file mode 100644
index 0000000..e6004e7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-edge-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-escape-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-escape-expected.png
new file mode 100644
index 0000000..83c47f73
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-escape-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-iframe-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-iframe-expected.png
new file mode 100644
index 0000000..db3e8939
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-iframe-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-rtl-ui-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
new file mode 100644
index 0000000..ca65fba
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-rtl-ui-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-wrap-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-wrap-expected.png
new file mode 100644
index 0000000..44f980ea
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-appearance-wrap-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-change-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-change-expected.png
new file mode 100644
index 0000000..7c6653f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-expected.png
new file mode 100644
index 0000000..7c6653f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/validation-bubble-device-emulation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/visual-hebrew-text-field-expected.png b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/visual-hebrew-text-field-expected.png
new file mode 100644
index 0000000..35b33b7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/form-controls-refresh-disabled/fast/forms/visual-hebrew-text-field-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/web-components-v0-disabled/fast/dom/title-text-property-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/web-components-v0-disabled/fast/dom/title-text-property-expected.txt
new file mode 100644
index 0000000..9add247
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/web-components-v0-disabled/fast/dom/title-text-property-expected.txt
@@ -0,0 +1,3 @@
+Original title is: 'Original Title'
+Setting new title to: 'This is the new title'
+New title is: 'This is the new title'
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-expected.png b/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-expected.png
deleted file mode 100644
index 95b569f..0000000
--- a/third_party/blink/web_tests/platform/win/fast/dom/HTMLMeterElement/meter-element-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/datalist/input-appearance-range-with-datalist-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
deleted file mode 100644
index 19832a6e..0000000
--- a/third_party/blink/web_tests/platform/win/fast/forms/datalist/input-appearance-range-with-datalist-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/select-popup-pagekeys-expected.txt b/third_party/blink/web_tests/platform/win/fast/forms/select/select-popup-pagekeys-expected.txt
deleted file mode 100644
index ecde184f..0000000
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/select-popup-pagekeys-expected.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-This test verifies that the Home/End/PageUp/PageDown keys work correctly for pop-up <select> elements that have focus but are not currently popped-up.
-
-Output below is a series of PASS or FAIL lines showing expected and actual selection indexes, followed by a single PASS or FAIL for the status of the entire test.
-
-NOTE: This test will fail on Mac OS, on which these keys are NOT supposed to change the selection of a focused pop-up.
-
-0
-1
-2
-3
-4
-5
-6
- 
-0
-1
-2
-3
-4
-5
-6
-7
-PASS: testPageDownNoDisabledElements passed
-PASS: testPageUpNoDisabledElements passed
-PASS: testHomeNoDisabledElements passed
-PASS: testEndNoDisabledElements passed
-PASS: testPageDownWithDisabledElements passed
-PASS: testPageUpWithDisabledElements passed
-PASS: testHomeWithDisabledElements passed
-PASS: testEndWithDisabledElements passed
-
-PASS: ALL TESTS SUCCEEDED
-
-
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/suggested-value-expected.txt b/third_party/blink/web_tests/platform/win/fast/forms/suggested-value-expected.txt
deleted file mode 100644
index e26dd4b..0000000
--- a/third_party/blink/web_tests/platform/win/fast/forms/suggested-value-expected.txt
+++ /dev/null
@@ -1,99 +0,0 @@
-This test setting suggested values on an input element 
-and a textarea element. The dump below should have the "suggested value"
-instead of "initial value".
-| <input>
-|   id="test"
-|   type="text"
-|   value="initial value"
-|   this.value="initial value"
-|   <shadow:root>
-|     <div>
-|       id="placeholder"
-|       pseudo="-internal-input-suggested"
-|       style="display: block !important;"
-|       shadow:pseudoId="-internal-input-suggested"
-|       "suggested value"
-|     <div>
-|       "initial value"
-| <input>
-|   id="month"
-|   type="month"
-|   this.value=""
-|   <shadow:root>
-|     <div>
-|       datetimeformat="MMMM yyyy"
-|       id="date-time-edit"
-|       pseudo="-webkit-datetime-edit"
-|       shadow:pseudoId="-webkit-datetime-edit"
-|       <div>
-|         pseudo="-webkit-datetime-edit-fields-wrapper"
-|         shadow:pseudoId="-webkit-datetime-edit-fields-wrapper"
-|         <span>
-|           aria-label="Month"
-|           aria-placeholder="---------"
-|           aria-valuemax="12"
-|           aria-valuemin="1"
-|           aria-valuenow="1"
-|           aria-valuetext="January"
-|           pseudo="-webkit-datetime-edit-month-field"
-|           role="spinbutton"
-|           shadow:pseudoId="-webkit-datetime-edit-month-field"
-|           "January"
-|         <div>
-|           pseudo="-webkit-datetime-edit-text"
-|           shadow:pseudoId="-webkit-datetime-edit-text"
-|           " "
-|         <span>
-|           aria-label="Year"
-|           aria-placeholder="----"
-|           aria-valuemax="275760"
-|           aria-valuemin="1"
-|           aria-valuenow="2014"
-|           aria-valuetext="2014"
-|           pseudo="-webkit-datetime-edit-year-field"
-|           role="spinbutton"
-|           shadow:pseudoId="-webkit-datetime-edit-year-field"
-|           "2014"
-|     <div>
-|       id="picker"
-|       pseudo="-webkit-calendar-picker-indicator"
-|       shadow:pseudoId="-webkit-calendar-picker-indicator"
-| <textarea>
-|   id="textarea"
-|   this.value="initial value"
-|   <shadow:root>
-|     <div>
-|       id="placeholder"
-|       pseudo="-internal-input-suggested"
-|       style="display: block !important;"
-|       shadow:pseudoId="-internal-input-suggested"
-|       "suggested value"
-|     <div>
-|       "initial value"
-| <select>
-|   id="select"
-|   <option>
-|     "initial value"
-|     <shadow:root>
-|       "initial value"
-|   <option>
-|     "inserted value"
-|     <shadow:root>
-|       "inserted value"
-|   <shadow:root>
-|     <div>
-|       aria-hidden="true"
-|       "initial value"
-|     <slot>
-|       name="user-agent-custom-assign-slot"
-| "input.value: initial value"
-| "internals.suggestedValue(input): suggested value"
-| "input.selectionStart: 0"
-| "input.selectionEnd: 0"
-| "month.value: "
-| "internals.suggestedValue(month): 2014-01"
-| "textarea.value: initial value"
-| "internals.suggestedValue(textarea): suggested value"
-| "select.value: initial value"
-| "internals.suggestedValue(select): suggested value"
-| "internals.suggestedValue(select): "
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/radio/radio-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win7/fast/forms/radio/radio-appearance-basic-expected.png
deleted file mode 100644
index 9dc7241..0000000
--- a/third_party/blink/web_tests/platform/win7/fast/forms/radio/radio-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/r8/README.chromium b/third_party/r8/README.chromium
index 37c590fc..a7dd74c 100644
--- a/third_party/r8/README.chromium
+++ b/third_party/r8/README.chromium
@@ -1,7 +1,7 @@
 Name: R8
 URL: https://r8.googlesource.com/r8
-Revision: 5cca4af33d246f51b49650d7480493247947eda9
-Version: 2.0.2-dev
+Revision: cc4b64009b85ce83b072e62e30bd4c2accaec5be
+Version: 2.1.8-dev
 License: BSD 3-Clause
 License File: NOT_SHIPPED
 Security Critical: no
diff --git a/third_party/r8/local_modifications.diff b/third_party/r8/local_modifications.diff
index 6d77a92..daa9e92 100644
--- a/third_party/r8/local_modifications.diff
+++ b/third_party/r8/local_modifications.diff
@@ -1,19 +1,19 @@
 diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
-index 595ac28da..e96f06364 100644
+index 232b54a54..5c3a227b3 100644
 --- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
 +++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
-@@ -194,8 +194,8 @@ public class InternalOptions {
-   public boolean enableDynamicTypeOptimization = true;
+@@ -198,8 +198,8 @@ public class InternalOptions {
+   public boolean enableFieldAssignmentTracker = true;
    public boolean enableFieldBitAccessAnalysis =
        System.getProperty("com.android.tools.r8.fieldBitAccessAnalysis") != null;
 -  public boolean enableHorizontalClassMerging = true;
 -  public boolean enableVerticalClassMerging = true;
-+  public boolean enableHorizontalClassMerging = false;
-+  public boolean enableVerticalClassMerging = false;
++  public boolean enableHorizontalClassMerging = System.getProperty("com.android.tools.r8.enableClassMerging") != null;
++  public boolean enableVerticalClassMerging = System.getProperty("com.android.tools.r8.enableClassMerging") != null;
    public boolean enableArgumentRemoval = true;
    public boolean enableUnusedArgumentRemoval = true;
    public boolean enableUnusedInterfaceRemoval = true;
-@@ -919,7 +919,7 @@ public class InternalOptions {
+@@ -956,7 +956,7 @@ public class InternalOptions {
      public static final String CLASS_NAME = "com.android.tools.r8.GeneratedOutlineSupport";
      public static final String METHOD_PREFIX = "outline";
  
diff --git a/tools/determinism/deterministic_build_whitelist.pyl b/tools/determinism/deterministic_build_whitelist.pyl
index da0e4661..ab48ed2 100644
--- a/tools/determinism/deterministic_build_whitelist.pyl
+++ b/tools/determinism/deterministic_build_whitelist.pyl
@@ -132,6 +132,12 @@
     'nacl_test_data\\glibc\\sysconf_nprocessors_onln_test_libs\\lib32\\libppapi_cpp_lib.dll',
     'nacl_test_data\\glibc\\sysconf_nprocessors_onln_test_libs\\lib64\\libppapi_cpp_lib.dll',
 
+    # https://crbug.com/1040247
+    'nacl_irt_x86_32.nexe',
+    'nacl_irt_x86_32.nexe.debug',
+    'nacl_irt_x86_64.nexe',
+    'nacl_irt_x86_64.nexe.debug',
+
     # TODO(thakis): Figure out what's up with these three (and their isolate).
     'mini_installer.exe',
     'mini_installer.exe.pdb',
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index cf92e9a..dd57ba7 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -9672,6 +9672,9 @@
 </enum>
 
 <enum name="ClickToCallDeviceState">
+  <obsolete>
+    Removed in M82 after collecting enough data. See https://crbug.com/1053140.
+  </obsolete>
   <int value="0" label="Screen off, in background"/>
   <int value="1" label="Screen on, in background"/>
   <int value="2" label="Screen off, in foreground"/>
@@ -54583,6 +54586,11 @@
   <int value="4" label="kJSONIsNotList"/>
 </enum>
 
+<enum name="ReaderModeEntryPoint">
+  <int value="0" label="Omnibox icon"/>
+  <int value="1" label="Menu option"/>
+</enum>
+
 <enum name="ReadingListContextMenuActions">
   <int value="0" label="New Tab"/>
   <int value="1" label="New Incognito Tab"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index d2371bf..8bfe3b9 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -39534,6 +39534,25 @@
   <summary>Records whether a page has distilled data.</summary>
 </histogram>
 
+<histogram name="DomDistiller.ReaderMode.EntryPoint"
+    enum="ReaderModeEntryPoint" expires_after="2020-09-01">
+  <owner>katie@chromium.org</owner>
+  <owner>gilmanmh@google.com</owner>
+  <owner>chrome-a11y-core@google.com</owner>
+  <summary>The method a user used to enter reader mode on an article.</summary>
+</histogram>
+
+<histogram name="DomDistiller.ReaderMode.ExitPoint" enum="ReaderModeEntryPoint"
+    expires_after="2020-09-01">
+  <owner>katie@chromium.org</owner>
+  <owner>gilmanmh@google.com</owner>
+  <owner>chrome-a11y-core@google.com</owner>
+  <summary>
+    The method a user used to exit reader mode and return to the original
+    article.
+  </summary>
+</histogram>
+
 <histogram name="DomDistiller.ReaderShownForPageLoad" enum="Boolean"
     expires_after="M77">
   <owner>mdjones@chromium.org</owner>
@@ -146594,6 +146613,9 @@
 </histogram>
 
 <histogram name="Sharing.ClickToCallPhoneCall" units="ms" expires_after="M82">
+  <obsolete>
+    Removed in M82 after collecting enough data. See https://crbug.com/1053140.
+  </obsolete>
   <owner>mvanouwerkerk@chromium.org</owner>
   <owner>knollr@chromium.org</owner>
   <summary>
@@ -146666,6 +146688,9 @@
 
 <histogram name="Sharing.ClickToCallReceiveDeviceState"
     enum="ClickToCallDeviceState" expires_after="M82">
+  <obsolete>
+    Removed in M82 after collecting enough data. See https://crbug.com/1053140.
+  </obsolete>
   <owner>mvanouwerkerk@chromium.org</owner>
   <owner>knollr@chromium.org</owner>
   <summary>
diff --git a/tools/perf/.gitignore b/tools/perf/.gitignore
index 6741552..44bf1b4f 100644
--- a/tools/perf/.gitignore
+++ b/tools/perf/.gitignore
@@ -1,5 +1,6 @@
 /*.html
 /_cached_data
 /artifacts
+/core/results_processor/perfetto_binary_roller/bin
 /data
 /internal
diff --git a/tools/perf/core/results_processor/perfetto_binary_roller/README.md b/tools/perf/core/results_processor/perfetto_binary_roller/README.md
new file mode 100644
index 0000000..3523b89
--- /dev/null
+++ b/tools/perf/core/results_processor/perfetto_binary_roller/README.md
@@ -0,0 +1,21 @@
+<!-- Copyright 2020 The Chromium Authors. All rights reserved.
+     Use of this source code is governed by a BSD-style license that can be
+     found in the LICENSE file.
+-->
+
+# Perfetto Binary Roller
+
+Results Processor needs some pre-built binaries from Perfetto project, e.g.,
+`trace_processor_shell` for converting proto traces and computing TBMv3 metrics.
+These binaries can be either built from Chromium checkout or downloaded from
+the cloud. This module provides scripts for updating the binary stored in the
+cloud.
+
+The update process works as follows:
+- CI bots build the binary for all telemetry host platforms (win/lin/mac) and
+call `upload_trace_processor` script.
+- Someone calls `roll_trace_processor` script locally to update the TP version
+in use to the latest version uploaded by the CI.
+
+Please see [this doc](https://docs.google.com/document/d/1b-0Z7HTsAwuqPlWnyy3bW-NSdaRO-clUntW8bYkKxAM)
+for discussion and details.
diff --git a/tools/perf/core/results_processor/perfetto_binary_roller/__init__.py b/tools/perf/core/results_processor/perfetto_binary_roller/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tools/perf/core/results_processor/perfetto_binary_roller/__init__.py
diff --git a/tools/perf/core/results_processor/perfetto_binary_roller/binary_deps.json b/tools/perf/core/results_processor/perfetto_binary_roller/binary_deps.json
new file mode 100644
index 0000000..5925faa
--- /dev/null
+++ b/tools/perf/core/results_processor/perfetto_binary_roller/binary_deps.json
@@ -0,0 +1,16 @@
+{
+    "trace_processor_shell": {
+        "win": {
+            "hash": "c3ac8732de3e945fa5021747ce2a7253ce1133d2",
+            "remote_path": "perfetto_binaries/trace_processor_shell/win/32bee3cbd581f7d7f5515f761c1a225870d8f4fe/trace_processor_shell.exe"
+        },
+        "mac": {
+            "hash": "39b9f26264bd7360e067c118110226a8cc661076",
+            "remote_path": "perfetto_binaries/trace_processor_shell/mac/8f2b5ba75973eb75547470d97a6afc204dce6e64/trace_processor_shell"
+        },
+        "linux": {
+            "hash": "cbe21d2f9ccd6bc16d1c475cc5d4e53a69731068",
+            "remote_path": "perfetto_binaries/trace_processor_shell/linux/8f2b5ba75973eb75547470d97a6afc204dce6e64/trace_processor_shell"
+        }
+    }
+}
\ No newline at end of file
diff --git a/tools/perf/core/results_processor/perfetto_binary_roller/binary_deps_manager.py b/tools/perf/core/results_processor/perfetto_binary_roller/binary_deps_manager.py
new file mode 100644
index 0000000..ec2f6e7c
--- /dev/null
+++ b/tools/perf/core/results_processor/perfetto_binary_roller/binary_deps_manager.py
@@ -0,0 +1,110 @@
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import json
+import os
+import posixpath
+import stat
+
+import py_utils
+from py_utils import cloud_storage
+from py_utils import tempfile_ext
+
+CS_BUCKET = cloud_storage.PUBLIC_BUCKET
+CS_FOLDER = 'perfetto_binaries'
+LATEST_FILENAME = 'latest'
+LOCAL_STORAGE_FOLDER = os.path.join(os.path.dirname(__file__), 'bin')
+CONFIG_PATH = os.path.join(os.path.dirname(__file__), 'binary_deps.json')
+
+
+def _GetHostPlatform():
+  os_name = py_utils.GetHostOsName()
+  # If we're running directly on a Chrome OS device, fetch the binaries for
+  # linux instead, which should be compatible with CrOS.
+  if os_name == 'chromeos':
+    os_name = 'linux'
+  return os_name
+
+
+def _GetLatestPath(binary_name, platform):
+  with tempfile_ext.NamedTemporaryFile() as latest_file:
+    latest_file.close()
+    remote_path = posixpath.join(CS_FOLDER, binary_name, platform,
+                                 LATEST_FILENAME)
+    cloud_storage.Get(CS_BUCKET, remote_path, latest_file.name)
+    with open(latest_file.name) as latest:
+      return latest.read()
+
+
+def _CalculateHash(remote_path):
+  with tempfile_ext.NamedTemporaryFile() as f:
+    f.close()
+    cloud_storage.Get(CS_BUCKET, remote_path, f.name)
+    return cloud_storage.CalculateHash(f.name)
+
+
+def _SetLatestPathForBinary(binary_name, platform, latest_path):
+  with tempfile_ext.NamedTemporaryFile() as latest_file:
+    latest_file.write(latest_path)
+    latest_file.close()
+    remote_latest_file = posixpath.join(CS_FOLDER, binary_name, platform,
+                                        LATEST_FILENAME)
+    cloud_storage.Insert(
+        CS_BUCKET, remote_latest_file, latest_file.name, publicly_readable=True)
+
+
+def UploadHostBinary(binary_name, binary_path, version):
+  """Upload the binary to the cloud.
+
+  This function uploads the host binary (e.g. trace_processor_shell) to the
+  cloud and updates the 'latest' file for the host platform to point to the
+  newly uploaded file. Note that it doesn't modify the config and so doesn't
+  affect which binaries will be downloaded by FetchHostBinary.
+  """
+  filename = os.path.basename(binary_path)
+  platform = _GetHostPlatform()
+  remote_path = posixpath.join(CS_FOLDER, binary_name, platform, version,
+                               filename)
+  if not cloud_storage.Exists(CS_BUCKET, remote_path):
+    cloud_storage.Insert(
+        CS_BUCKET, remote_path, binary_path, publicly_readable=True)
+  _SetLatestPathForBinary(binary_name, platform, remote_path)
+
+
+def SwitchBinaryToLatestVersion(binary_name):
+  """Switch the binary version in use to the latest one.
+
+  This function updates the config file to contain the path to the latest
+  available binary version. This will make FetchHostBinary download the latest
+  file.
+  """
+  with open(CONFIG_PATH) as f:
+    config = json.load(f)
+  for platform in config[binary_name]:
+    new_path = _GetLatestPath(binary_name, platform)
+    config[binary_name][platform]['remote_path'] = new_path
+    config[binary_name][platform]['hash'] = _CalculateHash(new_path)
+  with open(CONFIG_PATH, 'w') as f:
+    json.dump(config, f, indent=4, separators=(',', ': '))
+
+
+def FetchHostBinary(binary_name):
+  """Download the binary from the cloud.
+
+  This function fetches the binary for the host platform from the cloud.
+  The cloud path is read from the config.
+  """
+  with open(CONFIG_PATH) as f:
+    config = json.load(f)
+  platform = _GetHostPlatform()
+  remote_path = config[binary_name][platform]['remote_path']
+  expected_hash = config[binary_name][platform]['hash']
+  filename = posixpath.basename(remote_path)
+  local_path = os.path.join(LOCAL_STORAGE_FOLDER, filename)
+  cloud_storage.Get(CS_BUCKET, remote_path, local_path)
+  if cloud_storage.CalculateHash(local_path) != expected_hash:
+    raise RuntimeError('The downloaded binary has wrong hash.')
+  mode = os.stat(local_path).st_mode
+  os.chmod(local_path, mode | stat.S_IXUSR)
+  return local_path
diff --git a/tools/perf/core/results_processor/perfetto_binary_roller/binary_deps_manager_unittest.py b/tools/perf/core/results_processor/perfetto_binary_roller/binary_deps_manager_unittest.py
new file mode 100644
index 0000000..a44bc47
--- /dev/null
+++ b/tools/perf/core/results_processor/perfetto_binary_roller/binary_deps_manager_unittest.py
@@ -0,0 +1,132 @@
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import json
+import os
+import shutil
+import tempfile
+import unittest
+
+from core.results_processor.perfetto_binary_roller import binary_deps_manager
+
+import mock
+
+
+class BinaryDepsManagerTests(unittest.TestCase):
+  def setUp(self):
+    self.temp_dir = tempfile.mkdtemp()
+    self.config_path = os.path.join(self.temp_dir, 'config.json')
+    binary_deps_manager.CONFIG_PATH = self.config_path
+
+  def tearDown(self):
+    shutil.rmtree(self.temp_dir)
+
+  def writeConfig(self, config):
+    with open(self.config_path, 'w') as f:
+      json.dump(config, f)
+
+  def readConfig(self):
+    with open(self.config_path) as f:
+      return json.load(f)
+
+  def testUploadHostBinary(self):
+    with mock.patch('py_utils.cloud_storage.Exists') as exists_patch:
+      with mock.patch('py_utils.cloud_storage.Insert') as insert_patch:
+        with mock.patch('py_utils.GetHostOsName') as get_os_patch:
+          exists_patch.return_value = False
+          get_os_patch.return_value = 'testos'
+          binary_deps_manager.UploadHostBinary('dep', '/path/to/bin', 'abc123')
+
+    insert_patch.assert_has_calls([
+        mock.call(
+            'chromium-telemetry',
+            'perfetto_binaries/dep/testos/abc123/bin',
+            '/path/to/bin',
+            publicly_readable=True),
+        mock.call(
+            'chromium-telemetry',
+            'perfetto_binaries/dep/testos/latest',
+            mock.ANY,
+            publicly_readable=True),
+    ])
+
+  def testUploadHostBinaryExists(self):
+    with mock.patch('py_utils.cloud_storage.Exists') as exists_patch:
+      with mock.patch('py_utils.cloud_storage.Insert') as insert_patch:
+        with mock.patch('py_utils.GetHostOsName') as get_os_patch:
+          exists_patch.return_value = True
+          get_os_patch.return_value = 'testos'
+          binary_deps_manager.UploadHostBinary('dep', '/path/to/bin', 'abc123')
+
+    insert_patch.assert_called_once_with(
+        'chromium-telemetry',
+        'perfetto_binaries/dep/testos/latest',
+        mock.ANY,
+        publicly_readable=True,
+    )
+
+  def testSwitchBinaryVersion(self):
+    self.writeConfig({'dep': {'testos': {'remote_path': 'old/path/to/bin'}}})
+    latest_path = 'new/path/to/bin'
+
+    def write_latest_path(bucket, remote_path, local_path):
+      del bucket, remote_path  # unused
+      with open(local_path, 'w') as f:
+        f.write(latest_path)
+
+    with mock.patch('py_utils.cloud_storage.Get') as get_patch:
+      with mock.patch('py_utils.cloud_storage.CalculateHash') as hash_patch:
+        get_patch.side_effect = write_latest_path
+        hash_patch.return_value = '123'
+        binary_deps_manager.SwitchBinaryToLatestVersion('dep')
+
+    self.assertEqual(
+        self.readConfig(),
+        {'dep': {
+            'testos': {
+                'remote_path': latest_path,
+                'hash': '123',
+            }
+        }})
+
+  def testFetchHostBinary(self):
+    remote_path = 'remote/path/to/bin'
+    self.writeConfig({
+        'dep': {
+            'testos': {
+                'remote_path': remote_path,
+                'hash': '123',
+            }
+        }
+    })
+    with mock.patch('py_utils.cloud_storage.Get') as get_patch:
+      with mock.patch('py_utils.GetHostOsName') as get_os_patch:
+        with mock.patch('py_utils.cloud_storage.CalculateHash') as hash_patch:
+          with mock.patch('os.stat'):
+            with mock.patch('os.chmod'):
+              hash_patch.return_value = '123'
+              get_os_patch.return_value = 'testos'
+              local_path = binary_deps_manager.FetchHostBinary('dep')
+
+    self.assertEqual(os.path.basename(local_path), 'bin')
+    get_patch.assert_called_once_with('chromium-telemetry', remote_path,
+                                      local_path)
+
+  def testFetchHostBinaryWrongHash(self):
+    remote_path = 'remote/path/to/bin'
+    self.writeConfig({
+        'dep': {
+            'testos': {
+                'remote_path': remote_path,
+                'hash': '123',
+            }
+        }
+    })
+    with mock.patch('py_utils.cloud_storage.Get'):
+      with mock.patch('py_utils.GetHostOsName') as get_os_patch:
+        with mock.patch('py_utils.cloud_storage.CalculateHash') as hash_patch:
+          hash_patch.return_value = '234'
+          get_os_patch.return_value = 'testos'
+          with self.assertRaises(RuntimeError):
+            binary_deps_manager.FetchHostBinary('dep')
diff --git a/tools/perf/core/results_processor/perfetto_binary_roller/roll_trace_processor b/tools/perf/core/results_processor/perfetto_binary_roller/roll_trace_processor
new file mode 100755
index 0000000..1dccc8c2
--- /dev/null
+++ b/tools/perf/core/results_processor/perfetto_binary_roller/roll_trace_processor
@@ -0,0 +1,20 @@
+#!/usr/bin/env vpython
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import sys
+sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..'))
+
+from core import path_util
+path_util.AddPyUtilsToPath()
+path_util.AddTracingToPath()
+
+from core.results_processor.perfetto_binary_roller import binary_deps_manager
+from core.tbmv3 import trace_processor
+
+
+if __name__ == '__main__':
+  binary_deps_manager.SwitchBinaryToLatestVersion(
+      trace_processor.TP_BINARY_NAME)
diff --git a/tools/perf/core/results_processor/perfetto_binary_roller/upload_trace_processor b/tools/perf/core/results_processor/perfetto_binary_roller/upload_trace_processor
new file mode 100755
index 0000000..880821e8
--- /dev/null
+++ b/tools/perf/core/results_processor/perfetto_binary_roller/upload_trace_processor
@@ -0,0 +1,32 @@
+#!/usr/bin/env vpython
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import argparse
+import os
+import sys
+sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..'))
+
+from core import path_util
+path_util.AddPyUtilsToPath()
+path_util.AddTracingToPath()
+
+from core.results_processor.perfetto_binary_roller import binary_deps_manager
+from core.tbmv3 import trace_processor
+
+
+def main(argv):
+  parser = argparse.ArgumentParser()
+  parser.add_argument(
+      'path', help='Path to trace_processor_shell binary.')
+  parser.add_argument(
+      'revision', help='Perfetto revision.')
+  args = parser.parse_args()
+
+  binary_deps_manager.UploadHostBinary(
+      trace_processor.TP_BINARY_NAME, args.path, args.revision)
+
+
+if __name__ == '__main__':
+  sys.exit(main(sys.argv))
diff --git a/ui/aura/native_window_occlusion_tracker_win.cc b/ui/aura/native_window_occlusion_tracker_win.cc
index 89506ba..b19207d4 100644
--- a/ui/aura/native_window_occlusion_tracker_win.cc
+++ b/ui/aura/native_window_occlusion_tracker_win.cc
@@ -12,6 +12,7 @@
 #include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/win/scoped_gdi_object.h"
@@ -110,8 +111,8 @@
        // event hooks will happen on the same thread, as required by Windows,
        // and the task runner will have a message loop to call
        // EventHookCallback.
-      update_occlusion_task_runner_(base::CreateCOMSTATaskRunner(
-          {base::ThreadPool(), base::MayBlock(),
+      update_occlusion_task_runner_(base::ThreadPool::CreateCOMSTATaskRunner(
+          {base::MayBlock(),
            // This may be needed to determine that a window is no longer
            // occluded.
            base::TaskPriority::USER_VISIBLE,
diff --git a/ui/base/clipboard/clipboard_util_win.cc b/ui/base/clipboard/clipboard_util_win.cc
index be5b03c..0162d6e 100644
--- a/ui/base/clipboard/clipboard_util_win.cc
+++ b/ui/base/clipboard/clipboard_util_win.cc
@@ -20,6 +20,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "base/win/scoped_hglobal.h"
 #include "base/win/shlwapi.h"
@@ -625,9 +626,8 @@
   }
 
   // Queue a task to actually write the temp files on a worker thread.
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_BLOCKING},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_BLOCKING},
       base::BindOnce(&WriteAllFileContentsToTempFiles, display_names,
                      memory_backed_contents),
       std::move(callback));  // callback on the UI thread
diff --git a/ui/base/ime/win/on_screen_keyboard_display_manager_input_pane.cc b/ui/base/ime/win/on_screen_keyboard_display_manager_input_pane.cc
index ee259e9..74882554 100644
--- a/ui/base/ime/win/on_screen_keyboard_display_manager_input_pane.cc
+++ b/ui/base/ime/win/on_screen_keyboard_display_manager_input_pane.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/win/com_init_util.h"
 #include "base/win/core_winrt_util.h"
 #include "base/win/windows_version.h"
@@ -179,7 +180,7 @@
     : hwnd_(hwnd),
       main_task_runner_(base::ThreadTaskRunnerHandle::Get()),
       background_task_runner_(
-          base::CreateCOMSTATaskRunner({base::ThreadPool(), base::MayBlock()})),
+          base::ThreadPool::CreateCOMSTATaskRunner({base::MayBlock()})),
       virtual_keyboard_input_pane_(
           base::MakeRefCounted<OnScreenKeyboardDisplayManagerInputPane::
                                    VirtualKeyboardInputPane>(
@@ -239,7 +240,7 @@
 void OnScreenKeyboardDisplayManagerInputPane::SetInputPaneForTesting(
     Microsoft::WRL::ComPtr<ABI::Windows::UI::ViewManagement::IInputPane> pane) {
   DCHECK(main_task_runner_->BelongsToCurrentThread());
-  base::CreateCOMSTATaskRunner({base::ThreadPool(), base::MayBlock()})
+  base::ThreadPool::CreateCOMSTATaskRunner({base::MayBlock()})
       ->PostTask(FROM_HERE,
                  base::BindOnce(
                      &OnScreenKeyboardDisplayManagerInputPane::
diff --git a/ui/base/win/session_change_observer.cc b/ui/base/win/session_change_observer.cc
index 7c46b36..44c20e2 100644
--- a/ui/base/win/session_change_observer.cc
+++ b/ui/base/win/session_change_observer.cc
@@ -17,6 +17,7 @@
 #include "base/memory/singleton.h"
 #include "base/observer_list.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "ui/gfx/win/singleton_hwnd.h"
 #include "ui/gfx/win/singleton_hwnd_observer.h"
 
@@ -38,8 +39,8 @@
         base::IgnoreResult(&WTSRegisterSessionNotification),
         gfx::SingletonHwnd::GetInstance()->hwnd(), NOTIFY_FOR_THIS_SESSION);
 
-    base::CreateCOMSTATaskRunner({base::ThreadPool()})
-        ->PostTask(FROM_HERE, std::move(wts_register));
+    base::ThreadPool::CreateCOMSTATaskRunner({})->PostTask(
+        FROM_HERE, std::move(wts_register));
   }
 
   ~WtsRegistrationNotificationManager() { RemoveSingletonHwndObserver(); }
diff --git a/ui/display/win/color_profile_reader.cc b/ui/display/win/color_profile_reader.cc
index bc9bf53..4276beb 100644
--- a/ui/display/win/color_profile_reader.cc
+++ b/ui/display/win/color_profile_reader.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/files/file_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "ui/display/win/display_info.h"
 #include "ui/gfx/icc_profile.h"
 
@@ -67,9 +68,8 @@
   // Enumerate device profile paths on a background thread.  When this
   // completes it will run another task on a background thread to read
   // the profiles.
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(
           &ColorProfileReader::BuildDeviceToPathMapOnBackgroundThread),
       base::BindOnce(&ColorProfileReader::BuildDeviceToPathMapCompleted,
@@ -97,9 +97,8 @@
 
   device_to_path_map_ = new_device_to_path_map;
 
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&ColorProfileReader::ReadProfilesOnBackgroundThread,
                      new_device_to_path_map),
       base::BindOnce(&ColorProfileReader::ReadProfilesCompleted,
diff --git a/ui/events/ozone/device/device_manager_manual.cc b/ui/events/ozone/device/device_manager_manual.cc
index 10420dc..8c1063b 100644
--- a/ui/events/ozone/device/device_manager_manual.cc
+++ b/ui/events/ozone/device/device_manager_manual.cc
@@ -11,6 +11,7 @@
 #include "base/logging.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "ui/events/ozone/device/device_event.h"
@@ -34,8 +35,8 @@
 }  // namespace
 
 DeviceManagerManual::DeviceManagerManual()
-    : blocking_task_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock()})),
+    : blocking_task_runner_(
+          base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()})),
       watcher_(new base::FilePathWatcher,
                base::OnTaskRunnerDeleter(blocking_task_runner_)) {}
 
@@ -80,10 +81,9 @@
 
 void DeviceManagerManual::InitiateScanDevices() {
   std::vector<base::FilePath>* result = new std::vector<base::FilePath>();
-  base::PostTaskAndReply(
+  base::ThreadPool::PostTaskAndReply(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(),
-       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&ScanDevicesOnWorkerThread, result),
       base::BindOnce(&DeviceManagerManual::OnDevicesScanned,
                      weak_ptr_factory_.GetWeakPtr(), base::Owned(result)));
diff --git a/ui/events/ozone/evdev/libgestures_glue/gesture_feedback.cc b/ui/events/ozone/evdev/libgestures_glue/gesture_feedback.cc
index 2da19db..b1d4e9e 100644
--- a/ui/events/ozone/evdev/libgestures_glue/gesture_feedback.cc
+++ b/ui/events/ozone/evdev/libgestures_glue/gesture_feedback.cc
@@ -16,6 +16,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "ui/events/ozone/evdev/libgestures_glue/gesture_property_provider.h"
 
 namespace ui {
@@ -237,9 +238,9 @@
   }
 
   // Compress touchpad/mouse logs asynchronously
-  base::PostTaskAndReply(
+  base::ThreadPool::PostTaskAndReply(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
        base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&CompressDumpedLog,
                      base::Passed(&log_paths_to_be_compressed)),
diff --git a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
index c72e1a198..28eea9f 100644
--- a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
+++ b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
@@ -17,6 +17,7 @@
 #include "base/single_thread_task_runner.h"
 #include "base/stl_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
@@ -687,12 +688,12 @@
   }
   LoadKeymapCallback reply_callback = base::BindOnce(
       &XkbKeyboardLayoutEngine::OnKeymapLoaded, weak_ptr_factory_.GetWeakPtr());
-  base::PostTask(FROM_HERE,
-                 {base::ThreadPool(), base::MayBlock(),
-                  base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-                 base::BindOnce(&LoadKeymap, layout_name,
-                                base::ThreadTaskRunnerHandle::Get(),
-                                std::move(reply_callback)));
+  base::ThreadPool::PostTask(
+      FROM_HERE,
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      base::BindOnce(&LoadKeymap, layout_name,
+                     base::ThreadTaskRunnerHandle::Get(),
+                     std::move(reply_callback)));
 #else
   NOTIMPLEMENTED();
 #endif  // defined(OS_CHROMEOS)
diff --git a/ui/events/platform/x11/x11_hotplug_event_handler.cc b/ui/events/platform/x11/x11_hotplug_event_handler.cc
index db071e7..750181a 100644
--- a/ui/events/platform/x11/x11_hotplug_event_handler.cc
+++ b/ui/events/platform/x11/x11_hotplug_event_handler.cc
@@ -21,6 +21,7 @@
 #include "base/strings/string_util.h"
 #include "base/system/sys_info.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "ui/events/devices/device_data_manager.h"
 #include "ui/events/devices/device_hotplug_event_observer.h"
@@ -448,10 +449,9 @@
   // Parse the device information asynchronously since this operation may block.
   // Once the device information is extracted the parsed devices will be
   // returned via the callbacks.
-  base::PostTask(
+  base::ThreadPool::PostTask(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(),
-       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&HandleHotplugEventInWorker, device_infos, display_state,
                      base::ThreadTaskRunnerHandle::Get(),
                      std::move(callbacks)));
diff --git a/ui/login/display_manager.js b/ui/login/display_manager.js
index 0708d532..6e43f129 100644
--- a/ui/login/display_manager.js
+++ b/ui/login/display_manager.js
@@ -418,8 +418,7 @@
           $('version-labels').hidden = !$('version-labels').hidden;
       } else if (name == ACCELERATOR_RESET) {
         if (currentStepId == SCREEN_OOBE_RESET) {
-          $('reset').send(
-              login.Screen.CALLBACK_USER_ACTED, USER_ACTION_ROLLBACK_TOGGLED);
+          $('reset').userActed(USER_ACTION_ROLLBACK_TOGGLED);
         } else if (attributes.resetAllowed ||
             RESET_AVAILABLE_SCREEN_GROUP.indexOf(currentStepId) != -1) {
           chrome.send('toggleResetScreen');
diff --git a/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc b/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc
index 62cac1b7..ae654f1 100644
--- a/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc
+++ b/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/logging.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/trace_event/trace_event.h"
 #include "ui/gfx/gpu_fence.h"
 #include "ui/gfx/presentation_feedback.h"
@@ -154,11 +155,10 @@
   base::OnceClosure fence_retired_callback = base::BindOnce(
       &GbmSurfaceless::FenceRetired, weak_factory_.GetWeakPtr(), frame);
 
-  base::PostTaskAndReply(FROM_HERE,
-                         {base::ThreadPool(), base::MayBlock(),
-                          base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-                         std::move(fence_wait_task),
-                         std::move(fence_retired_callback));
+  base::ThreadPool::PostTaskAndReply(
+      FROM_HERE,
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      std::move(fence_wait_task), std::move(fence_retired_callback));
 }
 
 void GbmSurfaceless::PostSubBufferAsync(
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_legacy.cc b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_legacy.cc
index 9648c53..a09037c 100644
--- a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_legacy.cc
+++ b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_legacy.cc
@@ -12,6 +12,7 @@
 #include "base/bind.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "ui/gfx/gpu_fence.h"
 #include "ui/gfx/presentation_feedback.h"
 #include "ui/ozone/platform/drm/gpu/crtc_controller.h"
@@ -139,10 +140,9 @@
 void HardwareDisplayPlaneManagerLegacy::RequestPlanesReadyCallback(
     DrmOverlayPlaneList planes,
     base::OnceCallback<void(DrmOverlayPlaneList planes)> callback) {
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(),
-       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(&WaitForPlaneFences, std::move(planes)),
       std::move(callback));
 }
diff --git a/ui/ozone/platform/drm/host/drm_display_host_manager.cc b/ui/ozone/platform/drm/host/drm_display_host_manager.cc
index 08e62c0..ceb9661 100644
--- a/ui/ozone/platform/drm/host/drm_display_host_manager.cc
+++ b/ui/ozone/platform/drm/host/drm_display_host_manager.cc
@@ -15,6 +15,7 @@
 #include "base/files/file_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "ui/display/types/display_snapshot.h"
@@ -248,9 +249,9 @@
     switch (event.action_type) {
       case DeviceEvent::ADD:
         if (drm_devices_.find(event.path) == drm_devices_.end()) {
-          base::PostTask(
+          base::ThreadPool::PostTask(
               FROM_HERE,
-              {base::ThreadPool(), base::MayBlock(),
+              {base::MayBlock(),
                base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
               base::BindOnce(
                   &OpenDeviceAsync, event.path,
diff --git a/ui/ozone/platform/headless/headless_surface_factory.cc b/ui/ozone/platform/headless/headless_surface_factory.cc
index a610e734..dbbf7db 100644
--- a/ui/ozone/platform/headless/headless_surface_factory.cc
+++ b/ui/ozone/platform/headless/headless_surface_factory.cc
@@ -12,6 +12,7 @@
 #include "base/macros.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkSurface.h"
@@ -85,10 +86,10 @@
     // TODO(dnicoara) Use SkImage instead to potentially avoid a copy.
     // See crbug.com/361605 for details.
     if (surface_->getCanvas()->readPixels(bitmap, 0, 0)) {
-      base::PostTask(FROM_HERE,
-                     {base::ThreadPool(), base::MayBlock(),
-                      base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-                     base::BindOnce(&WriteDataToFile, base_path_, bitmap));
+      base::ThreadPool::PostTask(
+          FROM_HERE,
+          {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+          base::BindOnce(&WriteDataToFile, base_path_, bitmap));
     }
   }
   std::unique_ptr<gfx::VSyncProvider> CreateVSyncProvider() override {
@@ -122,10 +123,10 @@
     if (!bitmap.writePixels(pixmap))
       return false;
 
-    base::PostTask(FROM_HERE,
-                   {base::ThreadPool(), base::MayBlock(),
-                    base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-                   base::BindOnce(&WriteDataToFile, location_, bitmap));
+    base::ThreadPool::PostTask(
+        FROM_HERE,
+        {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+        base::BindOnce(&WriteDataToFile, location_, bitmap));
     return true;
   }
 
diff --git a/ui/ozone/platform/wayland/gpu/gbm_surfaceless_wayland.cc b/ui/ozone/platform/wayland/gpu/gbm_surfaceless_wayland.cc
index 1ce488ec..4cf71ed8e 100644
--- a/ui/ozone/platform/wayland/gpu/gbm_surfaceless_wayland.cc
+++ b/ui/ozone/platform/wayland/gpu/gbm_surfaceless_wayland.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/trace_event/trace_event.h"
 #include "ui/gfx/gpu_fence.h"
 #include "ui/ozone/common/egl_util.h"
@@ -119,11 +120,10 @@
   base::OnceClosure fence_retired_callback = base::BindOnce(
       &GbmSurfacelessWayland::FenceRetired, weak_factory_.GetWeakPtr(), frame);
 
-  base::PostTaskAndReply(FROM_HERE,
-                         {base::ThreadPool(), base::MayBlock(),
-                          base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-                         std::move(fence_wait_task),
-                         std::move(fence_retired_callback));
+  base::ThreadPool::PostTaskAndReply(
+      FROM_HERE,
+      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      std::move(fence_wait_task), std::move(fence_retired_callback));
 }
 
 void GbmSurfacelessWayland::PostSubBufferAsync(
diff --git a/ui/ozone/platform/wayland/test/test_data_offer.cc b/ui/ozone/platform/wayland/test/test_data_offer.cc
index 456945f..b830dad 100644
--- a/ui/ozone/platform/wayland/test/test_data_offer.cc
+++ b/ui/ozone/platform/wayland/test/test_data_offer.cc
@@ -13,6 +13,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "ui/ozone/platform/wayland/test/constants.h"
 
 namespace wl {
@@ -65,8 +66,8 @@
 
 TestDataOffer::TestDataOffer(wl_resource* resource)
     : ServerObject(resource),
-      task_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock()})),
+      task_runner_(
+          base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()})),
       write_data_weak_ptr_factory_(this) {}
 
 TestDataOffer::~TestDataOffer() {}
diff --git a/ui/ozone/platform/wayland/test/test_data_source.cc b/ui/ozone/platform/wayland/test/test_data_source.cc
index 6757ff3..530a2e4 100644
--- a/ui/ozone/platform/wayland/test/test_data_source.cc
+++ b/ui/ozone/platform/wayland/test/test_data_source.cc
@@ -14,6 +14,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/task_runner_util.h"
 #include "ui/ozone/platform/wayland/test/constants.h"
 
@@ -63,8 +64,8 @@
 
 TestDataSource::TestDataSource(wl_resource* resource)
     : ServerObject(resource),
-      task_runner_(base::CreateSequencedTaskRunner(
-          {base::ThreadPool(), base::MayBlock()})) {}
+      task_runner_(
+          base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()})) {}
 
 TestDataSource::~TestDataSource() {}
 
diff --git a/ui/snapshot/snapshot.cc b/ui/snapshot/snapshot.cc
index e3a0c8c..a8a9cbd 100644
--- a/ui/snapshot/snapshot.cc
+++ b/ui/snapshot/snapshot.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/gfx/codec/png_codec.h"
 #include "ui/gfx/image/image.h"
@@ -42,9 +43,8 @@
     base::OnceCallback<void(scoped_refptr<base::RefCountedMemory> data)>
         callback,
     gfx::Image image) {
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(encode_func, std::move(image)), std::move(callback));
 }
 
diff --git a/ui/snapshot/snapshot_async.cc b/ui/snapshot/snapshot_async.cc
index 275458c7b..c450be0 100644
--- a/ui/snapshot/snapshot_async.cc
+++ b/ui/snapshot/snapshot_async.cc
@@ -8,6 +8,7 @@
 #include "base/location.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "skia/ext/image_operations.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/gfx/image/image.h"
@@ -48,9 +49,8 @@
   // from GPU. Image scaling is implemented in content::GlHelper, but it's can't
   // be used here because it's not in content/public. Move the scaling code
   // somewhere so that it can be reused here.
-  base::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::ThreadPool(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
       base::BindOnce(ScaleBitmap, bitmap, target_size),
       base::BindOnce(&OnFrameScalingFinished, std::move(callback)));
 }
diff --git a/weblayer/browser/download_manager_delegate_impl.cc b/weblayer/browser/download_manager_delegate_impl.cc
index 92d4c5d0..18ce54b 100644
--- a/weblayer/browser/download_manager_delegate_impl.cc
+++ b/weblayer/browser/download_manager_delegate_impl.cc
@@ -6,6 +6,7 @@
 
 #include "base/files/file_util.h"
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "components/download/public/common/download_item.h"
 #include "content/public/browser/browser_task_traits.h"
@@ -80,15 +81,14 @@
   base::FilePath default_download_path;
   GetSaveDir(browser_context, nullptr, &default_download_path);
 
-  base::PostTask(FROM_HERE,
-                 {base::ThreadPool(), base::MayBlock(),
-                  base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
-                  base::TaskPriority::USER_VISIBLE},
-                 base::BindOnce(GenerateFilename, item->GetURL(),
-                                item->GetContentDisposition(),
-                                item->GetSuggestedFilename(),
-                                item->GetMimeType(), default_download_path,
-                                std::move(filename_determined_callback)));
+  base::ThreadPool::PostTask(
+      FROM_HERE,
+      {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN,
+       base::TaskPriority::USER_VISIBLE},
+      base::BindOnce(
+          GenerateFilename, item->GetURL(), item->GetContentDisposition(),
+          item->GetSuggestedFilename(), item->GetMimeType(),
+          default_download_path, std::move(filename_determined_callback)));
   return true;
 }
 
diff --git a/weblayer/browser/i18n_util.cc b/weblayer/browser/i18n_util.cc
index 7ab1c5f..a84bdc5 100644
--- a/weblayer/browser/i18n_util.cc
+++ b/weblayer/browser/i18n_util.cc
@@ -6,6 +6,7 @@
 
 #include "base/i18n/rtl.h"
 #include "base/no_destructor.h"
+#include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "net/http/http_util.h"
 
@@ -49,9 +50,8 @@
 
 #if defined(OS_ANDROID)
 static void JNI_LocaleChangedBroadcastReceiver_LocaleChanged(JNIEnv* env) {
-  base::PostTaskAndReply(
-      FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE},
+  base::ThreadPool::PostTaskAndReply(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE},
       base::BindOnce([]() {
         // Passing an empty |pref_locale| means the Android system locale will
         // be used (base::android::GetDefaultLocaleString()).
diff --git a/weblayer/browser/profile_impl.cc b/weblayer/browser/profile_impl.cc
index a3069599..acfb500 100644
--- a/weblayer/browser/profile_impl.cc
+++ b/weblayer/browser/profile_impl.cc
@@ -220,9 +220,9 @@
 bool ProfileImpl::DeleteDataFromDisk(base::OnceClosure done_callback) {
   if (num_browser_impl_ > 0)
     return false;
-  base::PostTaskAndReply(
+  base::ThreadPool::PostTaskAndReply(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
        base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
       base::BindOnce(&NukeProfileFromDisk, name_, data_path_),
       std::move(done_callback));
@@ -311,9 +311,9 @@
 static void JNI_ProfileImpl_EnumerateAllProfileNames(
     JNIEnv* env,
     const base::android::JavaParamRef<jobject>& callback) {
-  base::PostTaskAndReplyWithResult(
+  base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
-      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+      {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
        base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
       base::BindOnce(&ListProfileNames),
       base::BindOnce(&PassFilePathsToJavaCallback,
diff --git a/weblayer/browser/ssl_error_controller_client.cc b/weblayer/browser/ssl_error_controller_client.cc
index 9271716..3b0228f3 100644
--- a/weblayer/browser/ssl_error_controller_client.cc
+++ b/weblayer/browser/ssl_error_controller_client.cc
@@ -5,6 +5,7 @@
 #include "weblayer/browser/ssl_error_controller_client.h"
 
 #include "base/task/post_task.h"
+#include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "components/security_interstitials/content/utils.h"
 #include "components/security_interstitials/core/metrics_helper.h"
@@ -62,9 +63,8 @@
 void SSLErrorControllerClient::LaunchDateAndTimeSettings() {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
-  base::PostTask(
-      FROM_HERE,
-      {base::ThreadPool(), base::TaskPriority::USER_VISIBLE, base::MayBlock()},
+  base::ThreadPool::PostTask(
+      FROM_HERE, {base::TaskPriority::USER_VISIBLE, base::MayBlock()},
       base::BindOnce(&security_interstitials::LaunchDateAndTimeSettings));
 }