diff --git a/DEPS b/DEPS
index dc45f0a..d4ab8188 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': '915b779f9cfd5a885154bf4cb6b65230ed3ef5de',
+  'skia_revision': '32803ff7444854c109d1a751a2f240812aca0d29',
   # 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': '52f1f671f991cc901ca29cbf5efbef00a3397612',
+  'v8_revision': '1c5bed7f4415ea23027ee966d7e5f3daebf6dcab',
   # 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': 'b307010280b7f8f14b24660976c2938d4166c06c',
+  'angle_revision': 'a9f11bf14bcebf84788914012da0c3525d4b5e94',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -310,7 +310,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': 'c833c0c5925387f1173f1db68cb12c3df1c4b283',
+  'dawn_revision': '1f6c8c4d549574542a93ec7649e2b56a09696e1b',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -874,7 +874,7 @@
 
   # Build tools for Chrome OS. Note: This depends on third_party/pyelftools.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '5aa803aa2d841c696634d80dfd9c7932ccbf185f',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '1f4478ca783974c3cb4ea3d3200bc993fab75aff',
       'condition': 'checkout_linux',
   },
 
@@ -984,7 +984,7 @@
   },
 
   'src/third_party/glslang/src':
-    Var('chromium_git') + '/external/github.com/KhronosGroup/glslang.git' + '@' + '5e634c8999e631aacb7deacd968b40ff25fc15de',
+    Var('chromium_git') + '/external/github.com/KhronosGroup/glslang.git' + '@' + 'a3f0da56e4c9cfe22f6be29ff8dd8b9d2c059016',
 
   'src/third_party/google_toolbox_for_mac/src': {
       'url': Var('chromium_git') + '/external/github.com/google/google-toolbox-for-mac.git' + '@' + Var('google_toolbox_for_mac_revision'),
@@ -1308,7 +1308,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '0f707697f70a4480b4894f5298b30442dfb4d937',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '3c660b0e0c31b497ca1021b09b869eb54070498c',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1509,7 +1509,7 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '2701c130839edbeb226735b0775966b6423d9e83',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '261fc5197ea832181a162b67030fb330c3da6841',
+    Var('webrtc_git') + '/src.git' + '@' + '21bfa401ddea0d119b515c4806a36c0b00aa03ae',
 
   # Wuffs' canonical repository is at github.com/google/wuffs, but we use
   # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file.
diff --git a/android_webview/browser/aw_variations_seed_bridge.cc b/android_webview/browser/aw_variations_seed_bridge.cc
index 8aa5430..d0ad51a 100644
--- a/android_webview/browser/aw_variations_seed_bridge.cc
+++ b/android_webview/browser/aw_variations_seed_bridge.cc
@@ -38,7 +38,7 @@
   base::android::JavaByteArrayToString(env, j_data, &java_seed->data);
   java_seed->signature = base::android::ConvertJavaStringToUTF8(j_signature);
   java_seed->country = base::android::ConvertJavaStringToUTF8(j_country);
-  java_seed->date = static_cast<long>(j_date);
+  java_seed->date = j_date;
   java_seed->is_gzip_compressed = static_cast<bool>(j_is_gzip_compressed);
   return java_seed;
 }
diff --git a/android_webview/browser/cookie_manager.h b/android_webview/browser/cookie_manager.h
index fa763d7..3e5c61ac 100644
--- a/android_webview/browser/cookie_manager.h
+++ b/android_webview/browser/cookie_manager.h
@@ -36,6 +36,49 @@
 // Since Java calls can be made on the IO Thread, and must synchronously return
 // a result, and the CookieStore API allows it to asynchronously return results,
 // the CookieStore must be run on its own thread, to prevent deadlock.
+//
+// Initialization:
+//
+// There are two possible scenarios: 1) The CookieManager is used before the
+// Network Service is initialized. 2) The CookieManager is not used until after
+// the Network Service is initialized (during content initialization).
+//
+// Case 2) is straightforward: Once the NetworkContext and the
+// network::mojom::CookieManager are created, the AwContentBrowserClient calls
+// PassMojoCookieManagerToAwCookieManager, which ends up calling
+// CookieManager::SwapMojoCookieManagerAsync, setting the |mojo_cookie_manager_|
+// member of CookieManager (the AW one; it's an unfortunately overloaded term).
+//
+// In case 1), the CookieManager creates a provisional CookieStore
+// |cookie_store_|, which it uses for all operations (because the
+// network::mojom::CookieManager doesn't exist yet): For every cookie task
+// it receives, the CookieManager first checks for the presence of a
+// |mojo_cookie_manager_|, and if it doesn't exist, the CookieManager checks for
+// the presence of a provisionally-created CookieStore, creating one if it
+// doesn't exist (in GetCookieStore). Then whichever one it found will handle
+// the cookie task.
+//
+// When it comes time to create the NetworkContext, which comes with a
+// network::mojom::CookieManager, the provisionally-created CookieStore needs to
+// transfer its contents (with the results of the pre-content-initialization
+// cookie tasks) to the newly created network::mojom::CookieManager. It does
+// this by flushing its contents to disk and then calling the same method,
+// CookieManager::SwapMojoCookieManagerAsync, which binds the newly created
+// network::mojom::CookieManager to |mojo_cookie_manager_|. Thereafter, any
+// cookie tasks will be handled by |mojo_cookie_manager_| because it now exists.
+//
+// This works because the newly created network::mojom::CookieManager reads from
+// the same on-disk backing store that the provisionally-created CookieStore
+// just flushed its contents to.
+//
+// Why is this not a race condition? This was addressed in crbug.com/933461.
+// If the CookieManager receives cookie tasks while the flush is in progress,
+// those tasks are added to a task queue, which is not executed until after the
+// new |mojo_cookie_manager_| has finished being set. The new
+// |mojo_cookie_manager_| only loads from disk upon receiving a task (*not* upon
+// creation, importantly; see CookieMonster::FetchAllCookiesIfNecessary, which
+// is only called if cookie tasks are received), so it will not try to load from
+// disk until the flush is complete.
 class CookieManager {
  public:
   static CookieManager* GetInstance();
diff --git a/android_webview/browser/safe_browsing/aw_safe_browsing_whitelist_manager_unittest.cc b/android_webview/browser/safe_browsing/aw_safe_browsing_whitelist_manager_unittest.cc
index c42d008..84527f9 100644
--- a/android_webview/browser/safe_browsing/aw_safe_browsing_whitelist_manager_unittest.cc
+++ b/android_webview/browser/safe_browsing/aw_safe_browsing_whitelist_manager_unittest.cc
@@ -6,7 +6,6 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread_task_runner_handle.h"
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
index 5c14bd21..e25b008 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
@@ -264,7 +264,8 @@
             }
 
             // WebView needs to make sure to always use the wrapped application context.
-            ContextUtils.initApplicationContext(ClassLoaderContextWrapperFactory.get(ctx));
+            ctx = ClassLoaderContextWrapperFactory.get(ctx);
+            ContextUtils.initApplicationContext(ctx);
 
             // Find the package ID for the package that WebView's resources come from.
             // This will be the donor package if there is one, not our main package.
@@ -273,11 +274,9 @@
                 resourcePackage = packageInfo.applicationInfo.metaData.getString(
                         "com.android.webview.WebViewDonorPackage", resourcePackage);
             }
-            int packageId = webViewDelegate.getPackageId(
-                    ContextUtils.getApplicationContext().getResources(), resourcePackage);
+            int packageId = webViewDelegate.getPackageId(ctx.getResources(), resourcePackage);
 
-            mAwInit.setUpResourcesOnBackgroundThread(
-                    packageId, ContextUtils.getApplicationContext());
+            mAwInit.setUpResourcesOnBackgroundThread(packageId, ctx);
 
             try (ScopedSysTraceEvent e2 = ScopedSysTraceEvent.scoped(
                          "WebViewChromiumFactoryProvider.initCommandLine")) {
@@ -291,8 +290,7 @@
                 multiProcess = webViewDelegate.isMultiProcessEnabled();
             } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                 // Check the multiprocess developer setting directly on N.
-                multiProcess = Settings.Global.getInt(
-                                       ContextUtils.getApplicationContext().getContentResolver(),
+                multiProcess = Settings.Global.getInt(ctx.getContentResolver(),
                                        Settings.Global.WEBVIEW_MULTIPROCESS, 0)
                         == 1;
             }
@@ -301,7 +299,7 @@
                 cl.appendSwitch(AwSwitches.WEBVIEW_SANDBOXED_RENDERER);
             }
 
-            int applicationFlags = ContextUtils.getApplicationContext().getApplicationInfo().flags;
+            int applicationFlags = ctx.getApplicationInfo().flags;
             boolean isAppDebuggable = (applicationFlags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
             boolean isOsDebuggable = BuildInfo.isDebugAndroid();
             // Enable logging JS console messages in system logs only if the app is debuggable or
@@ -336,8 +334,7 @@
 
             mAwInit.startVariationsInit();
 
-            mShouldDisableThreadChecking =
-                    shouldDisableThreadChecking(ContextUtils.getApplicationContext());
+            mShouldDisableThreadChecking = shouldDisableThreadChecking(ctx);
 
             setSingleton(this);
         }
diff --git a/ash/wm/desks/desk_mini_view.cc b/ash/wm/desks/desk_mini_view.cc
index 9c46517..6cae287 100644
--- a/ash/wm/desks/desk_mini_view.cc
+++ b/ash/wm/desks/desk_mini_view.cc
@@ -40,13 +40,18 @@
   return desk_preview_view;
 }
 
+// Returns the width of the desk preview based on its |preview_height| and the
+// aspect ratio of the root window taken from |root_window_size|.
+int GetPreviewWidth(const gfx::Size& root_window_size, int preview_height) {
+  return preview_height * root_window_size.width() / root_window_size.height();
+}
+
 // The desk preview bounds are proportional to the bounds of the display on
 // which it resides, but always has a fixed height given as |preview_height|
 // which depends on the width of the OverviewGrid.
 gfx::Rect GetDeskPreviewBounds(aura::Window* root_window, int preview_height) {
   const auto root_size = root_window->GetBoundsInRootWindow().size();
-  return gfx::Rect(preview_height * root_size.width() / root_size.height(),
-                   preview_height);
+  return gfx::Rect(GetPreviewWidth(root_size, preview_height), preview_height);
 }
 
 }  // namespace
@@ -152,14 +157,14 @@
   auto* root_window = GetWidget()->GetNativeWindow()->GetRootWindow();
   DCHECK(root_window);
 
-  const bool uses_small_screen = owner_bar_->UsesSmallScreenLayout();
-  const gfx::Rect preview_bounds = GetDeskPreviewBounds(
-      root_window, DeskPreviewView::GetHeight(uses_small_screen));
+  const bool compact = owner_bar_->UsesCompactLayout();
+  const gfx::Rect preview_bounds =
+      GetDeskPreviewBounds(root_window, DeskPreviewView::GetHeight(compact));
   desk_preview_->SetBoundsRect(preview_bounds);
 
-  label_->SetVisible(!uses_small_screen);
+  label_->SetVisible(!compact);
 
-  if (!uses_small_screen) {
+  if (!compact) {
     const gfx::Size label_size = label_->GetPreferredSize();
     const gfx::Rect label_bounds{
         (preview_bounds.width() - label_size.width()) / 2,
@@ -181,16 +186,17 @@
   auto* root_window = GetWidget()->GetNativeWindow()->GetRootWindow();
   DCHECK(root_window);
 
-  const bool uses_small_screen = owner_bar_->UsesSmallScreenLayout();
-  const gfx::Rect preview_bounds = GetDeskPreviewBounds(
-      root_window, DeskPreviewView::GetHeight(uses_small_screen));
-  if (uses_small_screen)
+  const bool compact = owner_bar_->UsesCompactLayout();
+  const gfx::Rect preview_bounds =
+      GetDeskPreviewBounds(root_window, DeskPreviewView::GetHeight(compact));
+  if (compact)
     return preview_bounds.size();
 
-  const gfx::Size label_size = label_->GetPreferredSize();
-  return gfx::Size{
-      std::max(preview_bounds.width(), label_size.width()),
-      preview_bounds.height() + kLabelPreviewSpacing + label_size.height()};
+  // The preferred size takes into account only the width of the preview
+  // view.
+  return gfx::Size{preview_bounds.width(),
+                   preview_bounds.height() + kLabelPreviewSpacing +
+                       label_->GetPreferredSize().height()};
 }
 
 void DeskMiniView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
@@ -279,6 +285,14 @@
   return HitTestPoint(point_in_view);
 }
 
+int DeskMiniView::GetMinWidthForDefaultLayout() const {
+  auto* root_window = GetWidget()->GetNativeWindow()->GetRootWindow();
+  DCHECK(root_window);
+
+  return GetPreviewWidth(root_window->GetBoundsInRootWindow().size(),
+                         DeskPreviewView::GetHeight(/*compact=*/false));
+}
+
 void DeskMiniView::OnCloseButtonPressed() {
   auto* controller = DesksController::Get();
   if (!controller->CanRemoveDesks())
diff --git a/ash/wm/desks/desk_mini_view.h b/ash/wm/desks/desk_mini_view.h
index 5078227..5653c206 100644
--- a/ash/wm/desks/desk_mini_view.h
+++ b/ash/wm/desks/desk_mini_view.h
@@ -86,6 +86,12 @@
 
   bool IsPointOnMiniView(const gfx::Point& screen_location) const;
 
+  // Gets the minimum width of this view to properly lay out all its contents in
+  // default layout.
+  // The view containing this object can use the width returned from this
+  // function to decide its own proper size or layout.
+  int GetMinWidthForDefaultLayout() const;
+
   bool IsLabelVisibleForTesting() const { return label_->GetVisible(); }
   const DeskPreviewView* GetDeskPreviewForTesting() const {
     return desk_preview_.get();
diff --git a/ash/wm/desks/desk_preview_view.cc b/ash/wm/desks/desk_preview_view.cc
index 3fbfc623..3649853 100644
--- a/ash/wm/desks/desk_preview_view.cc
+++ b/ash/wm/desks/desk_preview_view.cc
@@ -29,7 +29,7 @@
 
 // The height of the preview view in dips.
 constexpr int kDeskPreviewHeight = 64;
-constexpr int kDeskPreviewHeightInSmallScreens = 48;
+constexpr int kDeskPreviewHeightInCompactLayout = 48;
 
 // The corner radius of the border in dips.
 constexpr int kBorderCornerRadius = 6;
@@ -241,9 +241,8 @@
 DeskPreviewView::~DeskPreviewView() = default;
 
 // static
-int DeskPreviewView::GetHeight(bool for_small_screens) {
-  return for_small_screens ? kDeskPreviewHeightInSmallScreens
-                           : kDeskPreviewHeight;
+int DeskPreviewView::GetHeight(bool compact) {
+  return compact ? kDeskPreviewHeightInCompactLayout : kDeskPreviewHeight;
 }
 
 void DeskPreviewView::SetBorderColor(SkColor color) {
diff --git a/ash/wm/desks/desk_preview_view.h b/ash/wm/desks/desk_preview_view.h
index 33fab39..1dc3bd7 100644
--- a/ash/wm/desks/desk_preview_view.h
+++ b/ash/wm/desks/desk_preview_view.h
@@ -62,8 +62,9 @@
   explicit DeskPreviewView(DeskMiniView* mini_view);
   ~DeskPreviewView() override;
 
-  // Returns the height of the DeskPreviewView.
-  static int GetHeight(bool for_small_screens);
+  // Returns the height of the DeskPreviewView based on whether the |compact|
+  // small screens layout is used or not.
+  static int GetHeight(bool compact);
 
   void SetBorderColor(SkColor color);
 
diff --git a/ash/wm/desks/desks_bar_view.cc b/ash/wm/desks/desks_bar_view.cc
index 2e968c3..c3b46a2 100644
--- a/ash/wm/desks/desks_bar_view.cc
+++ b/ash/wm/desks/desks_bar_view.cc
@@ -16,6 +16,7 @@
 #include "ash/wm/desks/desk_mini_view_animations.h"
 #include "ash/wm/desks/new_desk_button.h"
 #include "ash/wm/overview/overview_controller.h"
+#include "ash/wm/overview/overview_grid.h"
 #include "ash/wm/overview/overview_highlight_controller.h"
 #include "ash/wm/overview/overview_session.h"
 #include "base/stl_util.h"
@@ -34,8 +35,16 @@
 namespace {
 
 constexpr int kBarHeight = 104;
-constexpr int kBarHeightInSmallScreens = 64;
-constexpr int kUseSmallScreenLayoutWidthThreshold = 600;
+constexpr int kBarHeightInCompactLayout = 64;
+constexpr int kUseCompactLayoutWidthThreshold = 600;
+
+// New desk button layout constants.
+constexpr int kButtonRightMargin = 36;
+constexpr int kIconAndTextHorizontalPadding = 16;
+constexpr int kIconAndTextVerticalPadding = 8;
+
+// Spacing between mini views.
+constexpr int kMiniViewsSpacing = 12;
 
 base::string16 GetMiniViewTitle(int mini_view_index) {
   DCHECK_GE(mini_view_index, 0);
@@ -119,9 +128,10 @@
 // -----------------------------------------------------------------------------
 // DesksBarView:
 
-DesksBarView::DesksBarView()
+DesksBarView::DesksBarView(OverviewGrid* overview_grid)
     : background_view_(new views::View),
-      new_desk_button_(new NewDeskButton(this)) {
+      new_desk_button_(new NewDeskButton(this)),
+      overview_grid_(overview_grid) {
   SetPaintToLayer();
   layer()->SetFillsBoundsOpaquely(false);
 
@@ -143,10 +153,14 @@
 }
 
 // static
-int DesksBarView::GetBarHeight(int desks_bar_view_width) {
-  return desks_bar_view_width <= kUseSmallScreenLayoutWidthThreshold
-             ? kBarHeightInSmallScreens
-             : kBarHeight;
+int DesksBarView::GetBarHeightForWidth(const DesksBarView* desks_bar_view,
+                                       int width) {
+  if (width <= kUseCompactLayoutWidthThreshold ||
+      (desks_bar_view && width <= desks_bar_view->min_width_to_fit_contents_)) {
+    return kBarHeightInCompactLayout;
+  }
+
+  return kBarHeight;
 }
 
 // static
@@ -212,14 +226,10 @@
 void DesksBarView::Layout() {
   background_view_->SetBoundsRect(bounds());
 
-  constexpr int kButtonRightMargin = 36;
-  constexpr int kIconAndTextHorizontalPadding = 16;
-  constexpr int kIconAndTextVerticalPadding = 8;
-
-  const bool uses_small_screen_layout = UsesSmallScreenLayout();
-  new_desk_button_->SetLabelVisible(!uses_small_screen_layout);
+  const bool compact = UsesCompactLayout();
+  new_desk_button_->SetLabelVisible(!compact);
   gfx::Size new_desk_button_size = new_desk_button_->GetPreferredSize();
-  if (uses_small_screen_layout) {
+  if (compact) {
     new_desk_button_size.Enlarge(2 * kIconAndTextVerticalPadding,
                                  2 * kIconAndTextVerticalPadding);
   } else {
@@ -236,7 +246,6 @@
   if (mini_views_.empty())
     return;
 
-  constexpr int kMiniViewsSpacing = 12;
   const gfx::Size mini_view_size = mini_views_[0]->GetPreferredSize();
   const int total_width =
       mini_views_.size() * (mini_view_size.width() + kMiniViewsSpacing) -
@@ -253,8 +262,9 @@
   }
 }
 
-bool DesksBarView::UsesSmallScreenLayout() const {
-  return width() <= kUseSmallScreenLayoutWidthThreshold;
+bool DesksBarView::UsesCompactLayout() const {
+  return width() <= kUseCompactLayoutWidthThreshold ||
+         width() <= min_width_to_fit_contents_;
 }
 
 void DesksBarView::ButtonPressed(views::Button* sender,
@@ -296,7 +306,9 @@
   std::unique_ptr<DeskMiniView> removed_mini_view = std::move(*iter);
   auto partition_iter = mini_views_.erase(iter);
 
-  Layout();
+  UpdateMinimumWidthToFitContents();
+  overview_grid_->OnDesksChanged();
+
   UpdateMiniViewsLabels();
   new_desk_button_->UpdateButtonState();
 
@@ -338,7 +350,7 @@
 
     // The bar background is initially translated off the screen.
     gfx::Transform translate;
-    translate.Translate(0, -GetBarHeight(width()));
+    translate.Translate(0, -height());
     background_view_->layer()->SetTransform(translate);
     background_view_->layer()->SetOpacity(0);
 
@@ -365,7 +377,8 @@
     }
   }
 
-  Layout();
+  UpdateMinimumWidthToFitContents();
+  overview_grid_->OnDesksChanged();
 
   if (!animate)
     return;
@@ -396,4 +409,22 @@
                              : mini_views_[0]->bounds().x();
 }
 
+void DesksBarView::UpdateMinimumWidthToFitContents() {
+  int button_width = new_desk_button_->GetMinSize(/*compact=*/false).width();
+  button_width += 2 * kIconAndTextHorizontalPadding;
+  button_width += kButtonRightMargin;
+
+  if (mini_views_.empty()) {
+    min_width_to_fit_contents_ = button_width;
+    return;
+  }
+
+  const int mini_view_width = mini_views_[0]->GetMinWidthForDefaultLayout();
+  const int total_mini_views_width =
+      mini_views_.size() * (mini_view_width + kMiniViewsSpacing) -
+      kMiniViewsSpacing;
+
+  min_width_to_fit_contents_ = total_mini_views_width + button_width * 2;
+}
+
 }  // namespace ash
diff --git a/ash/wm/desks/desks_bar_view.h b/ash/wm/desks/desks_bar_view.h
index 84d58f35..a38cce0 100644
--- a/ash/wm/desks/desks_bar_view.h
+++ b/ash/wm/desks/desks_bar_view.h
@@ -18,6 +18,7 @@
 class DeskMiniView;
 class NewDeskButton;
 class DeskBarHoverObserver;
+class OverviewGrid;
 
 // A bar that resides at the top portion of the overview mode's ShieldView,
 // which contains the virtual desks mini_views, as well as the new desk button.
@@ -25,13 +26,15 @@
                                 public views::ButtonListener,
                                 public DesksController::Observer {
  public:
-  DesksBarView();
+  DesksBarView(OverviewGrid* overview_grid);
   ~DesksBarView() override;
 
-  // The height of the desk bar view based on the width of desks bar widget
-  // which will determine whether or not the compact small screens layout will
-  // be used.
-  static int GetBarHeight(int desks_bar_view_width);
+  // Returns the height of the desk bar view which is based on the given |width|
+  // and |desks_bar_view|'s content.
+  // If |desks_bar_view| is nullptr, the height returned will be solely based on
+  // the |width|.
+  static int GetBarHeightForWidth(const DesksBarView* desks_bar_view,
+                                  int width);
 
   // Creates and returns the widget that contains the DeskBarView in overview
   // mode. The returned widget has no content view yet, and hasn't been shown
@@ -76,9 +79,10 @@
   void Layout() override;
 
   // Returns true if the width of the DesksBarView is below a defined
-  // threshold, suggesting a compact small screens layout should be used for
+  // threshold or the contents no longer fit within this object's bounds in
+  // default mode, suggesting a compact small screens layout should be used for
   // both itself and its children.
-  bool UsesSmallScreenLayout() const;
+  bool UsesCompactLayout() const;
 
   // views::ButtonListener:
   void ButtonPressed(views::Button* sender, const ui::Event& event) override;
@@ -111,6 +115,9 @@
   // be moved when performing the mini_view creation or deletion animations.
   int GetFirstMiniViewXOffset() const;
 
+  // Updates the cached minimum width required to fit all contents.
+  void UpdateMinimumWidthToFitContents();
+
   // A view that shows a dark gary transparent background that can be animated
   // when the very first mini_views are created.
   views::View* background_view_;
@@ -133,6 +140,12 @@
   // view.
   bool dragged_item_over_bar_ = false;
 
+  // The OverviewGrid that contains this object.
+  OverviewGrid* overview_grid_;
+
+  // Caches the calculated minimum width to fit contents.
+  int min_width_to_fit_contents_ = 0;
+
   DISALLOW_COPY_AND_ASSIGN(DesksBarView);
 };
 
diff --git a/ash/wm/desks/desks_unittests.cc b/ash/wm/desks/desks_unittests.cc
index 138356a..2e3b2bd 100644
--- a/ash/wm/desks/desks_unittests.cc
+++ b/ash/wm/desks/desks_unittests.cc
@@ -205,15 +205,15 @@
 
 // Verifies DesksBarView layout under different screen sizes
 void DesksBarViewLayoutTestHelper(const DesksBarView* desks_bar_view,
-                                  bool use_small_screen_layout) {
+                                  bool use_compact_layout) {
   DCHECK(desks_bar_view);
   const NewDeskButton* button = desks_bar_view->new_desk_button();
-  EXPECT_EQ(button->IsLabelVisibleForTesting(), !use_small_screen_layout);
+  EXPECT_EQ(button->IsLabelVisibleForTesting(), !use_compact_layout);
 
   for (const auto& mini_view : desks_bar_view->mini_views()) {
     EXPECT_EQ(mini_view->GetDeskPreviewForTesting()->height(),
-              DeskPreviewView::GetHeight(use_small_screen_layout));
-    EXPECT_EQ(mini_view->IsLabelVisibleForTesting(), !use_small_screen_layout);
+              DeskPreviewView::GetHeight(use_compact_layout));
+    EXPECT_EQ(mini_view->IsLabelVisibleForTesting(), !use_compact_layout);
   }
 }
 
@@ -411,14 +411,14 @@
   while (controller->CanCreateDesks()) {
     NewDesk();
     DesksBarViewLayoutTestHelper(desks_bar_view,
-                                 /*use_small_screen_layout=*/false);
+                                 /*use_compact_layout=*/false);
   };
 
   UpdateDisplay("500x480");
   ASSERT_TRUE(overview_controller->InOverviewSession());
   while (controller->CanRemoveDesks()) {
     DesksBarViewLayoutTestHelper(desks_bar_view,
-                                 /*use_small_screen_layout=*/true);
+                                 /*use_compact_layout=*/true);
     RemoveDesk(controller->desks().back().get());
   }
 
@@ -426,7 +426,7 @@
   ASSERT_TRUE(overview_controller->InOverviewSession());
   while (controller->CanCreateDesks()) {
     DesksBarViewLayoutTestHelper(desks_bar_view,
-                                 /*use_small_screen_layout=*/false);
+                                 /*use_compact_layout=*/false);
     NewDesk();
   }
 }
diff --git a/ash/wm/desks/new_desk_button.cc b/ash/wm/desks/new_desk_button.cc
index 9f498e5..448e156 100644
--- a/ash/wm/desks/new_desk_button.cc
+++ b/ash/wm/desks/new_desk_button.cc
@@ -109,8 +109,8 @@
   label()->SetVisible(visible);
 }
 
-gfx::Size NewDeskButton::CalculatePreferredSize() const {
-  if (!label()->GetVisible()) {
+gfx::Size NewDeskButton::GetMinSize(bool compact) const {
+  if (compact) {
     gfx::Size size = image()->GetPreferredSize();
     const gfx::Insets insets(GetInsets());
     size.Enlarge(insets.width(), insets.height());
@@ -124,6 +124,10 @@
   return views::LabelButton::CalculatePreferredSize();
 }
 
+gfx::Size NewDeskButton::CalculatePreferredSize() const {
+  return GetMinSize(!label()->GetVisible());
+}
+
 void NewDeskButton::Layout() {
   if (!label()->GetVisible()) {
     gfx::Rect bounds = GetLocalBounds();
diff --git a/ash/wm/desks/new_desk_button.h b/ash/wm/desks/new_desk_button.h
index a3aa720..932dbb7 100644
--- a/ash/wm/desks/new_desk_button.h
+++ b/ash/wm/desks/new_desk_button.h
@@ -32,6 +32,13 @@
 
   void SetLabelVisible(bool visible);
 
+  // Gets the minimum size of this view to properly lay out all its contents.
+  // |compact| is set to true for compact mode or false for default mode.
+  // The view containing this object can use the size returned from this
+  // function to decide its own proper size or layout in default or compact
+  // mode.
+  gfx::Size GetMinSize(bool compact) const;
+
   gfx::Size CalculatePreferredSize() const override;
   void Layout() override;
 
diff --git a/ash/wm/overview/overview_grid.cc b/ash/wm/overview/overview_grid.cc
index 3fa7173..edbbd04ec 100644
--- a/ash/wm/overview/overview_grid.cc
+++ b/ash/wm/overview/overview_grid.cc
@@ -317,35 +317,6 @@
                      std::max(0, horizontal_inset - kWindowMargin));
 }
 
-// Returns the desks widget bounds in root, given the screen bounds of the
-// overview grid.
-gfx::Rect GetDesksWidgetBounds(aura::Window* root,
-                               OverviewSession* overview_session,
-                               const gfx::Rect& overview_grid_screen_bounds) {
-  gfx::Rect desks_widget_root_bounds = overview_grid_screen_bounds;
-  ::wm::ConvertRectFromScreen(root, &desks_widget_root_bounds);
-  desks_widget_root_bounds.set_height(
-      DesksBarView::GetBarHeight(desks_widget_root_bounds.width()));
-
-  // Shift the widget down to make room for the splitview indicator guidance
-  // when it's shown at the top of the screen when in portrait mode and no other
-  // windows are snapped.
-  auto* split_view_drag_indicators =
-      overview_session->split_view_drag_indicators();
-  if (split_view_drag_indicators &&
-      split_view_drag_indicators->current_indicator_state() ==
-          IndicatorState::kDragArea &&
-      !IsCurrentScreenOrientationLandscape() &&
-      !SplitViewController::Get(root)->InSplitViewMode()) {
-    desks_widget_root_bounds.Offset(0,
-                                    overview_grid_screen_bounds.height() *
-                                            kHighlightScreenPrimaryAxisRatio +
-                                        2 * kHighlightScreenEdgePaddingDp);
-  }
-
-  return screen_util::SnapBoundsToDisplayEdge(desks_widget_root_bounds, root);
-}
-
 // Returns the given |widget|'s bounds in its native window's root coordinates.
 gfx::Rect GetWidgetBoundsInRoot(views::Widget* widget) {
   auto* window = widget->GetNativeWindow();
@@ -740,14 +711,16 @@
   }
 }
 
-void OverviewGrid::MaybeUpdateDesksWidgetBounds() {
+bool OverviewGrid::MaybeUpdateDesksWidgetBounds() {
   if (!desks_widget_)
-    return;
+    return false;
 
-  const gfx::Rect desks_widget_bounds =
-      GetDesksWidgetBounds(root_window_, overview_session_, bounds_);
-  if (desks_widget_bounds != GetWidgetBoundsInRoot(desks_widget_.get()))
+  const gfx::Rect desks_widget_bounds = GetDesksWidgetBounds();
+  if (desks_widget_bounds != GetWidgetBoundsInRoot(desks_widget_.get())) {
     desks_widget_->SetBounds(desks_widget_bounds);
+    return true;
+  }
+  return false;
 }
 
 void OverviewGrid::UpdateDropTargetBackgroundVisibility(
@@ -1370,7 +1343,9 @@
     return bounds_;
 
   gfx::Rect effective_bounds = bounds_;
-  effective_bounds.Inset(0, DesksBarView::GetBarHeight(bounds_.width()), 0, 0);
+  effective_bounds.Inset(
+      0, DesksBarView::GetBarHeightForWidth(desks_bar_view_, bounds_.width()),
+      0, 0);
   return effective_bounds;
 }
 
@@ -1580,14 +1555,20 @@
   return width;
 }
 
+void OverviewGrid::OnDesksChanged() {
+  if (MaybeUpdateDesksWidgetBounds())
+    PositionWindows(/*animate=*/false, /*ignored_items=*/{});
+  else
+    desks_bar_view_->Layout();
+}
+
 void OverviewGrid::MaybeInitDesksWidget() {
   if (!desks_util::ShouldDesksBarBeCreated() || desks_widget_)
     return;
 
-  desks_widget_ = DesksBarView::CreateDesksWidget(
-      root_window_,
-      GetDesksWidgetBounds(root_window_, overview_session_, bounds_));
-  desks_bar_view_ = new DesksBarView;
+  desks_widget_ =
+      DesksBarView::CreateDesksWidget(root_window_, GetDesksWidgetBounds());
+  desks_bar_view_ = new DesksBarView(this);
 
   // The following order of function calls is significant: SetContentsView()
   // must be called before DesksBarView:: Init(). This is needed because the
@@ -1888,4 +1869,30 @@
                              /*animate=*/false);
 }
 
+// Returns the desks widget bounds in root, given the screen bounds of the
+// overview grid.
+gfx::Rect OverviewGrid::GetDesksWidgetBounds() const {
+  gfx::Rect desks_widget_root_bounds = bounds_;
+  ::wm::ConvertRectFromScreen(root_window_, &desks_widget_root_bounds);
+  desks_widget_root_bounds.set_height(DesksBarView::GetBarHeightForWidth(
+      desks_bar_view_, desks_widget_root_bounds.width()));
+  // Shift the widget down to make room for the splitview indicator guidance
+  // when it's shown at the top of the screen when in portrait mode and no other
+  // windows are snapped.
+  auto* split_view_drag_indicators =
+      overview_session_->split_view_drag_indicators();
+  if (split_view_drag_indicators &&
+      split_view_drag_indicators->current_indicator_state() ==
+          IndicatorState::kDragArea &&
+      !IsCurrentScreenOrientationLandscape() &&
+      !SplitViewController::Get(root_window_)->InSplitViewMode()) {
+    desks_widget_root_bounds.Offset(
+        0, bounds_.height() * kHighlightScreenPrimaryAxisRatio +
+               2 * kHighlightScreenEdgePaddingDp);
+  }
+
+  return screen_util::SnapBoundsToDisplayEdge(desks_widget_root_bounds,
+                                              root_window_);
+}
+
 }  // namespace ash
diff --git a/ash/wm/overview/overview_grid.h b/ash/wm/overview/overview_grid.h
index c940aa1..f0f669c 100644
--- a/ash/wm/overview/overview_grid.h
+++ b/ash/wm/overview/overview_grid.h
@@ -145,7 +145,8 @@
                            IndicatorState indicator_state);
 
   // Updates the desks bar widget bounds if necessary.
-  void MaybeUpdateDesksWidgetBounds();
+  // Returns true if the desks widget's bounds have been updated.
+  bool MaybeUpdateDesksWidgetBounds();
 
   // Updates the appearance of the drop target to visually indicate when the
   // dragged window is being dragged over it. For dragging from the top, pass
@@ -303,6 +304,10 @@
   // splitview or entering splitview.
   int CalculateWidthAndMaybeSetUnclippedBounds(OverviewItem* item, int height);
 
+  // Called when a desk is added or removed to update the bounds of the desks
+  // widget as it may need to switch between default and compact layouts.
+  void OnDesksChanged();
+
   // Returns true if the grid has no more windows.
   bool empty() const { return window_list_.empty(); }
 
@@ -402,6 +407,9 @@
   // the window's bounds if it has been resized.
   void AddDraggedWindowIntoOverviewOnDragEnd(aura::Window* dragged_window);
 
+  // Returns the the bounds of the desks widget in root window.
+  gfx::Rect GetDesksWidgetBounds() const;
+
   // Root window the grid is in.
   aura::Window* root_window_;
 
diff --git a/ash/wm/splitview/split_view_controller.cc b/ash/wm/splitview/split_view_controller.cc
index e3bf478..21e7346 100644
--- a/ash/wm/splitview/split_view_controller.cc
+++ b/ash/wm/splitview/split_view_controller.cc
@@ -767,15 +767,6 @@
   observers_.RemoveObserver(observer);
 }
 
-void SplitViewController::OnWindowDestroyed(aura::Window* window) {
-  DCHECK(InSplitViewMode());
-  DCHECK(IsWindowInSplitView(window));
-  auto iter = snapping_window_transformed_bounds_map_.find(window);
-  if (iter != snapping_window_transformed_bounds_map_.end())
-    snapping_window_transformed_bounds_map_.erase(iter);
-  OnSnappedWindowDetached(window, /*window_drag=*/false);
-}
-
 void SplitViewController::OnWindowPropertyChanged(aura::Window* window,
                                                   const void* key,
                                                   intptr_t old) {
@@ -827,48 +818,27 @@
   NotifyDividerPositionChanged();
 }
 
+void SplitViewController::OnWindowDestroyed(aura::Window* window) {
+  DCHECK(InSplitViewMode());
+  DCHECK(IsWindowInSplitView(window));
+  auto iter = snapping_window_transformed_bounds_map_.find(window);
+  if (iter != snapping_window_transformed_bounds_map_.end())
+    snapping_window_transformed_bounds_map_.erase(iter);
+  OnSnappedWindowDetached(window, /*window_drag=*/false);
+}
+
 void SplitViewController::OnResizeLoopStarted(aura::Window* window) {
   if (split_view_type_ != SplitViewType::kClamshellType || !InSplitViewMode()) {
     return;
   }
 
-  const int resize_component =
-      WindowState::Get(window)->drag_details()->window_component;
-  const OrientationLockType orientation_type = GetCurrentScreenOrientation();
-
   // In clamshell mode, if splitview is active (which means overview is active
   // at the same time), only the resize that happens on the window edge that's
   // next to the overview grid will resize the window and overview grid at the
   // same time. For the resize that happens on the other part of the window,
   // we'll just end splitview and overview mode.
-  bool should_end_splitview = true;
-  switch (orientation_type) {
-    case OrientationLockType::kLandscapePrimary:
-      should_end_splitview =
-          !(window == left_window_ && resize_component == HTRIGHT) &&
-          !(window == right_window_ && resize_component == HTLEFT);
-      break;
-    case OrientationLockType::kLandscapeSecondary:
-      should_end_splitview =
-          !(window == left_window_ && resize_component == HTLEFT) &&
-          !(window == right_window_ && resize_component == HTRIGHT);
-      break;
-    case OrientationLockType::kPortraitPrimary:
-      should_end_splitview =
-          !(window == left_window_ && resize_component == HTBOTTOM) &&
-          !(window == right_window_ && resize_component == HTTOP);
-      break;
-    case OrientationLockType::kPortraitSecondary:
-      should_end_splitview =
-          !(window == left_window_ && resize_component == HTTOP) &&
-          !(window == right_window_ && resize_component == HTBOTTOM);
-      break;
-    default:
-      break;
-  }
-
-  if (should_end_splitview) {
-    EndSplitView();
+  if (WindowState::Get(window)->drag_details()->window_component !=
+      GetWindowComponentForResize(window)) {
     Shell::Get()->overview_controller()->EndOverview();
   }
 }
@@ -1633,21 +1603,10 @@
 }
 
 int SplitViewController::GetWindowComponentForResize(aura::Window* window) {
-  if (IsWindowInSplitView(window)) {
-    switch (GetCurrentScreenOrientation()) {
-      case OrientationLockType::kLandscapePrimary:
-        return (window == left_window_) ? HTRIGHT : HTLEFT;
-      case OrientationLockType::kLandscapeSecondary:
-        return (window == left_window_) ? HTLEFT : HTRIGHT;
-      case OrientationLockType::kPortraitSecondary:
-        return (window == left_window_) ? HTTOP : HTBOTTOM;
-      case OrientationLockType::kPortraitPrimary:
-        return (window == left_window_) ? HTBOTTOM : HTTOP;
-      default:
-        return HTNOWHERE;
-    }
-  }
-  return HTNOWHERE;
+  DCHECK(IsWindowInSplitView(window));
+  return window == GetPhysicalLeftOrTopWindow()
+             ? (IsCurrentScreenOrientationLandscape() ? HTRIGHT : HTBOTTOM)
+             : (IsCurrentScreenOrientationLandscape() ? HTLEFT : HTTOP);
 }
 
 gfx::Point SplitViewController::GetEndDragLocationInScreen(
@@ -1660,22 +1619,12 @@
   const gfx::Rect bounds = (window == left_window_)
                                ? GetSnappedWindowBoundsInScreen(LEFT)
                                : GetSnappedWindowBoundsInScreen(RIGHT);
-  switch (GetCurrentScreenOrientation()) {
-    case OrientationLockType::kLandscapePrimary:
-      end_location.set_x(window == left_window_ ? bounds.right() : bounds.x());
-      break;
-    case OrientationLockType::kLandscapeSecondary:
-      end_location.set_x(window == left_window_ ? bounds.x() : bounds.right());
-      break;
-    case OrientationLockType::kPortraitSecondary:
-      end_location.set_y(window == left_window_ ? bounds.y() : bounds.bottom());
-      break;
-    case OrientationLockType::kPortraitPrimary:
-      end_location.set_y(window == left_window_ ? bounds.bottom() : bounds.y());
-      break;
-    default:
-      NOTREACHED();
-      break;
+  if (IsCurrentScreenOrientationLandscape()) {
+    end_location.set_x(window == GetPhysicalLeftOrTopWindow() ? bounds.right()
+                                                              : bounds.x());
+  } else {
+    end_location.set_y(window == GetPhysicalLeftOrTopWindow() ? bounds.bottom()
+                                                              : bounds.y());
   }
   return end_location;
 }
@@ -1720,10 +1669,8 @@
 void SplitViewController::SetWindowsTransformDuringResizing() {
   DCHECK(InSplitViewMode());
   const bool is_landscape = IsCurrentScreenOrientationLandscape();
-  aura::Window* left_or_top_window =
-      IsCurrentScreenOrientationPrimary() ? left_window_ : right_window_;
-  aura::Window* right_or_bottom_window =
-      IsCurrentScreenOrientationPrimary() ? right_window_ : left_window_;
+  aura::Window* left_or_top_window = GetPhysicalLeftOrTopWindow();
+  aura::Window* right_or_bottom_window = GetPhysicalRightOrBottomWindow();
 
   gfx::Rect left_or_top_rect, right_or_bottom_rect;
   GetSnappedWindowBoundsInScreenInternal(&left_or_top_rect,
diff --git a/ash/wm/splitview/split_view_controller.h b/ash/wm/splitview/split_view_controller.h
index da2c307..4e57b4f5 100644
--- a/ash/wm/splitview/split_view_controller.h
+++ b/ash/wm/splitview/split_view_controller.h
@@ -175,21 +175,21 @@
   void OnWindowDragEnded(aura::Window* dragged_window,
                          SnapPosition desired_snap_position,
                          const gfx::Point& last_location_in_screen);
-  void OnWindowBoundsChanged(aura::Window* window,
-                             const gfx::Rect& old_bounds,
-                             const gfx::Rect& new_bounds,
-                             ui::PropertyChangeReason reason) override;
-  void OnResizeLoopStarted(aura::Window* window) override;
-  void OnResizeLoopEnded(aura::Window* window) override;
 
   void AddObserver(SplitViewObserver* observer);
   void RemoveObserver(SplitViewObserver* observer);
 
   // aura::WindowObserver:
-  void OnWindowDestroyed(aura::Window* window) override;
   void OnWindowPropertyChanged(aura::Window* window,
                                const void* key,
                                intptr_t old) override;
+  void OnWindowBoundsChanged(aura::Window* window,
+                             const gfx::Rect& old_bounds,
+                             const gfx::Rect& new_bounds,
+                             ui::PropertyChangeReason reason) override;
+  void OnWindowDestroyed(aura::Window* window) override;
+  void OnResizeLoopStarted(aura::Window* window) override;
+  void OnResizeLoopEnded(aura::Window* window) override;
 
   // WindowStateObserver:
   void OnPostWindowStateTypeChange(ash::WindowState* window_state,
diff --git a/ash/wm/splitview/split_view_utils.cc b/ash/wm/splitview/split_view_utils.cc
index cf55059..f294c6cc 100644
--- a/ash/wm/splitview/split_view_utils.cc
+++ b/ash/wm/splitview/split_view_utils.cc
@@ -331,21 +331,17 @@
   if (!WindowState::Get(window)->CanSnap())
     return false;
 
-  if (window->delegate()) {
-    // If the window's minimum size is larger than half of the display's work
-    // area size, the window can't be snapped in this case.
-    const gfx::Size min_size = window->delegate()->GetMinimumSize();
-    const gfx::Rect display_area =
-        screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer(
-            window);
-    const bool is_landscape = (display_area.width() > display_area.height());
-    if ((is_landscape && min_size.width() > display_area.width() / 2) ||
-        (!is_landscape && min_size.height() > display_area.height() / 2)) {
-      return false;
-    }
-  }
-
-  return true;
+  // Return true if |window|'s minimum size, if any, fits into half the work
+  // area lengthwise.
+  if (!window->delegate())
+    return true;
+  const gfx::Size min_size = window->delegate()->GetMinimumSize();
+  const gfx::Rect work_area =
+      screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer(
+          window);
+  return IsCurrentScreenOrientationLandscape()
+             ? min_size.width() <= work_area.width() / 2
+             : min_size.height() <= work_area.height() / 2;
 }
 
 void ShowAppCannotSnapToast() {
diff --git a/ash/wm/splitview/split_view_utils.h b/ash/wm/splitview/split_view_utils.h
index f0cc61c9..a38dbf58 100644
--- a/ash/wm/splitview/split_view_utils.h
+++ b/ash/wm/splitview/split_view_utils.h
@@ -96,8 +96,7 @@
 // Returns true if split view mode is supported.
 ASH_EXPORT bool ShouldAllowSplitView();
 
-// Returns true if |window| can be activated and snapped in split screen in
-// tablet mode.
+// Returns true if |window| can be activated and snapped in split view.
 ASH_EXPORT bool CanSnapInSplitview(aura::Window* window);
 
 // Displays a toast notifying users the application selected for split view is
diff --git a/base/threading/thread_local_storage_perftest.cc b/base/threading/thread_local_storage_perftest.cc
index 198775c..b48e166 100644
--- a/base/threading/thread_local_storage_perftest.cc
+++ b/base/threading/thread_local_storage_perftest.cc
@@ -62,7 +62,6 @@
 };
 
 class ThreadLocalStoragePerfTest : public testing::Test {
- public:
  protected:
   ThreadLocalStoragePerfTest() = default;
   ~ThreadLocalStoragePerfTest() override = default;
@@ -124,11 +123,13 @@
     for (auto& thread : threads)
       thread->Join();
 
-    perf_test::PrintResult(
-        measurment, "", trace,
-        num_operation /
-            static_cast<double>(operation_duration.InMilliseconds()),
-        "operations/ms", true);
+    perf_test::PrintResult(measurment, "", trace,
+                           num_operation / operation_duration.InMillisecondsF(),
+                           "operations/ms", true);
+    size_t nanos_per_operation =
+        operation_duration.InNanoseconds() / num_operation;
+    perf_test::PrintResult(measurment, "", trace, nanos_per_operation,
+                           "ns/operation", true);
   }
 
  private:
@@ -196,5 +197,17 @@
 
 #endif
 
+TEST_F(ThreadLocalStoragePerfTest, Cpp11Tls) {
+  thread_local intptr_t thread_local_variable;
+
+  auto read = [&]() { return thread_local_variable; };
+  auto write = [&](intptr_t value) {
+    reinterpret_cast<volatile intptr_t*>(&thread_local_variable)[0] = value;
+  };
+
+  Benchmark("C++ thread_local TLS", read, write, 10000000, 1);
+  Benchmark("C++ thread_local TLS 4 threads", read, write, 10000000, 4);
+}
+
 }  // namespace internal
-}  // namespace base
\ No newline at end of file
+}  // namespace base
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index 6a95b7d3b..ae05436e 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-8898854827428753728
\ No newline at end of file
+8898829176655968080
\ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index b7269f5..23e44f66 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-8898859537332806640
\ No newline at end of file
+8898827944168201792
\ No newline at end of file
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java
index a49f4d8..3244c4b2 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java
@@ -8,6 +8,7 @@
 import android.text.TextUtils;
 import android.view.View;
 
+import org.chromium.base.task.PostTask;
 import org.chromium.chrome.browser.ChromeVersionInfo;
 import org.chromium.chrome.browser.autofill.PersonalDataManager;
 import org.chromium.chrome.browser.autofill_assistant.user_data.additional_sections.AssistantAdditionalSectionContainer;
@@ -19,6 +20,7 @@
 import org.chromium.chrome.browser.payments.ContactEditor;
 import org.chromium.chrome.browser.payments.PaymentInstrument;
 import org.chromium.chrome.browser.widget.prefeditor.EditorDialog;
+import org.chromium.content_public.browser.UiThreadTaskTraits;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.payments.mojom.PaymentMethodData;
 import org.chromium.ui.modelutil.PropertyKey;
@@ -184,6 +186,13 @@
 
                         @Override
                         public void onLinkClicked(int link) {
+                            // TODO(b/143128544) refactor to do this the right way.
+                            PostTask.postTask(UiThreadTaskTraits.DEFAULT, () -> {
+                                view.mTermsSection.setTermsStatus(
+                                        AssistantTermsAndConditionsState.NOT_SELECTED);
+                                view.mTermsAsCheckboxSection.setTermsStatus(
+                                        AssistantTermsAndConditionsState.NOT_SELECTED);
+                            });
                             collectUserDataDelegate.onTermsAndConditionsLinkClicked(link);
                         }
                     };
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMultiWindowTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMultiWindowTest.java
deleted file mode 100644
index 0877bca..0000000
--- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMultiWindowTest.java
+++ /dev/null
@@ -1,205 +0,0 @@
-// Copyright 2019 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.
-
-package org.chromium.chrome.browser.tasks.tab_management;
-
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.action.ViewActions.click;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import static org.chromium.chrome.browser.multiwindow.MultiWindowTestHelper.moveActivityToFront;
-import static org.chromium.chrome.browser.multiwindow.MultiWindowTestHelper.waitForSecondChromeTabbedActivity;
-
-import android.annotation.TargetApi;
-import android.os.Build;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.espresso.contrib.RecyclerViewActions;
-import android.support.test.filters.MediumTest;
-import android.support.v7.widget.RecyclerView;
-import android.view.ViewGroup;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TestRule;
-import org.junit.runner.RunWith;
-
-import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.MinAndroidSdkLevel;
-import org.chromium.base.test.util.Restriction;
-import org.chromium.chrome.browser.ChromeSwitches;
-import org.chromium.chrome.browser.ChromeTabbedActivity;
-import org.chromium.chrome.browser.compositor.layouts.Layout;
-import org.chromium.chrome.browser.toolbar.IncognitoToggleTabLayout;
-import org.chromium.chrome.browser.util.FeatureUtilities;
-import org.chromium.chrome.features.start_surface.StartSurfaceLayout;
-import org.chromium.chrome.tab_ui.R;
-import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
-import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
-import org.chromium.chrome.test.util.ChromeTabUtils;
-import org.chromium.chrome.test.util.MenuUtils;
-import org.chromium.chrome.test.util.browser.Features;
-import org.chromium.content_public.browser.test.util.Criteria;
-import org.chromium.content_public.browser.test.util.CriteriaHelper;
-import org.chromium.content_public.browser.test.util.TestThreadUtils;
-import org.chromium.ui.test.util.UiRestriction;
-
-/** Tests for Multi-window related behavior in grid tab switcher. */
-@RunWith(ChromeJUnit4ClassRunner.class)
-// clang-format off
-@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
-                ChromeSwitches.DISABLE_TAB_MERGING_FOR_TESTING})
-@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE)
-@MinAndroidSdkLevel(Build.VERSION_CODES.N)
-public class TabSwitcherMultiWindowTest {
-    // clang-format on
-    @Rule
-    public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule();
-
-    @Rule
-    public TestRule mProcessor = new Features.InstrumentationProcessor();
-
-    @Before
-    public void setUp() {
-        FeatureUtilities.setGridTabSwitcherEnabledForTesting(true);
-        mActivityTestRule.startMainActivityFromLauncher();
-        Layout layout = mActivityTestRule.getActivity().getLayoutManager().getOverviewLayout();
-        assertTrue(layout instanceof StartSurfaceLayout);
-        CriteriaHelper.pollUiThread(Criteria.equals(true,
-                mActivityTestRule.getActivity()
-                        .getTabModelSelector()
-                        .getTabModelFilterProvider()
-                        .getCurrentTabModelFilter()::isTabModelRestored));
-    }
-
-    @Test
-    @MediumTest
-    @TargetApi(Build.VERSION_CODES.N)
-    public void testMoveTabsAcrossWindow_GTS_WithoutGroup() throws InterruptedException {
-        final ChromeTabbedActivity cta1 = mActivityTestRule.getActivity();
-        // Initially, we have 4 normal tabs and 3 incognito tabs in cta1.
-        initializeTabModel(cta1, false, 4);
-        initializeTabModel(cta1, true, 3);
-        verifyTabModelTabCount(cta1, 4, 3);
-
-        // Enter tab switcher in cta1 in incognito mode.
-        enterTabSwitcher(cta1);
-        assertTrue(cta1.getTabModelSelector().getCurrentModel().isIncognito());
-
-        // Before move, there are 3 incognito tabs in cta1.
-        RecyclerView recyclerView1 = cta1.findViewById(R.id.tab_list_view);
-        CriteriaHelper.pollUiThread(Criteria.equals(3, recyclerView1::getChildCount));
-
-        // Move 2 incognito tabs to cta2.
-        enterFirstTabFromTabSwitcher(cta1);
-        moveTabsToOtherWindow(cta1, 2);
-
-        // After move, there are 1 incognito tab in cta1 and 2 incognito tabs in cta2.
-        final ChromeTabbedActivity cta2 = waitForSecondChromeTabbedActivity();
-        verifyTabModelTabCount(cta1, 4, 1);
-        verifyTabModelTabCount(cta2, 0, 2);
-        enterTabSwitcher(cta1);
-        CriteriaHelper.pollUiThread(Criteria.equals(1, recyclerView1::getChildCount));
-
-        // Enter tab switcher in cta2.
-        moveActivityToFront(cta2);
-        enterTabSwitcher(cta2);
-
-        // There should be two incognito tabs in tab switcher in cta2.
-        RecyclerView recyclerView2 = cta2.findViewById(R.id.tab_list_view);
-        CriteriaHelper.pollUiThread(Criteria.equals(2, recyclerView2::getChildCount));
-
-        // Move 1 incognito tab back to cta1.
-        enterFirstTabFromTabSwitcher(cta2);
-        moveTabsToOtherWindow(cta2, 1);
-
-        // After move, there are 2 incognito tabs in cta1 and 1 incognito tab in cta2.
-        verifyTabModelTabCount(cta1, 4, 2);
-        verifyTabModelTabCount(cta2, 0, 1);
-        enterTabSwitcher(cta2);
-        CriteriaHelper.pollUiThread(Criteria.equals(1, recyclerView2::getChildCount));
-
-        // Enter tab switcher in cta1.
-        moveActivityToFront(cta1);
-
-        // There should be two incognito tabs in tab switcher in cta1.
-        CriteriaHelper.pollUiThread(Criteria.equals(2, recyclerView1::getChildCount));
-
-        // Switch to normal tab list in cta1.
-        TestThreadUtils.runOnUiThreadBlocking(() -> {
-            IncognitoToggleTabLayout toggleTabLayout =
-                    cta1.findViewById(R.id.incognito_toggle_tabs);
-            ViewGroup toggleButtons = (ViewGroup) toggleTabLayout.getChildAt(0);
-            toggleButtons.getChildAt(0).performClick();
-        });
-        assertEquals(false, cta1.getTabModelSelector().getCurrentModel().isIncognito());
-
-        // Move 3 normal tabs to cta2.
-        enterFirstTabFromTabSwitcher(cta1);
-        moveTabsToOtherWindow(cta1, 3);
-
-        // After move, there are 1 normal tab in cta1 and 3 normal tabs in cta2.
-        verifyTabModelTabCount(cta1, 1, 2);
-        verifyTabModelTabCount(cta2, 3, 1);
-        enterTabSwitcher(cta1);
-        CriteriaHelper.pollUiThread(Criteria.equals(1, recyclerView1::getChildCount));
-
-        // Enter tab switcher in cta2.
-        moveActivityToFront(cta2);
-        enterTabSwitcher(cta2);
-
-        // There should be 3 normal tabs in tab switcher in cta2.
-        CriteriaHelper.pollUiThread(Criteria.equals(3, recyclerView2::getChildCount));
-
-        // Move 2 normal tabs back to cta1.
-        enterFirstTabFromTabSwitcher(cta2);
-        moveTabsToOtherWindow(cta2, 2);
-
-        // After move, there are 3 normal tabs in cta1 and 1 normal tab in cta2.
-        verifyTabModelTabCount(cta1, 3, 2);
-        verifyTabModelTabCount(cta2, 1, 1);
-        enterTabSwitcher(cta2);
-        CriteriaHelper.pollUiThread(Criteria.equals(1, recyclerView2::getChildCount));
-    }
-
-    private void initializeTabModel(ChromeTabbedActivity cta, boolean isIncognito, int tabsCount) {
-        for (int i = 0; i < (isIncognito ? tabsCount : tabsCount - 1); i++) {
-            ChromeTabUtils.newTabFromMenu(
-                    InstrumentationRegistry.getInstrumentation(), cta, isIncognito, true);
-        }
-    }
-
-    private void moveTabsToOtherWindow(ChromeTabbedActivity cta, int number) {
-        for (int i = 0; i < number; i++) {
-            MenuUtils.invokeCustomMenuActionSync(InstrumentationRegistry.getInstrumentation(), cta,
-                    org.chromium.chrome.R.id.move_to_other_window_menu_id);
-        }
-    }
-
-    private void enterTabSwitcher(ChromeTabbedActivity cta) {
-        assertFalse(cta.getLayoutManager().overviewVisible());
-        TestThreadUtils.runOnUiThreadBlocking(
-                () -> { cta.findViewById(R.id.tab_switcher_button).performClick(); });
-        CriteriaHelper.pollUiThread(
-                Criteria.equals(true, () -> cta.getLayoutManager().overviewVisible()));
-    }
-
-    private void enterFirstTabFromTabSwitcher(ChromeTabbedActivity cta) {
-        onView(withId(R.id.tab_list_view))
-                .perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
-        CriteriaHelper.pollInstrumentationThread(() -> !cta.getLayoutManager().overviewVisible());
-    }
-
-    private void verifyTabModelTabCount(
-            ChromeTabbedActivity cta, int normalTabs, int incognitoTabs) {
-        CriteriaHelper.pollUiThread(Criteria.equals(
-                normalTabs, () -> cta.getTabModelSelector().getModel(false).getCount()));
-        CriteriaHelper.pollUiThread(Criteria.equals(
-                incognitoTabs, () -> cta.getTabModelSelector().getModel(true).getCount()));
-    }
-}
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 32ca93c..ed30730 100644
--- a/chrome/android/features/tab_ui/tab_management_java_sources.gni
+++ b/chrome/android/features/tab_ui/tab_management_java_sources.gni
@@ -30,7 +30,6 @@
   "//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",
-  "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMultiWindowTest.java",
   "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TestRecyclerViewSimpleViewBinder.java",
 ]
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
index b2e4bda..a3d7ae4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
@@ -40,7 +40,6 @@
 import org.chromium.chrome.browser.externalnav.IntentWithGesturesHandler;
 import org.chromium.chrome.browser.offlinepages.OfflinePageUtils;
 import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinatorFactory;
-import org.chromium.chrome.browser.rappor.RapporServiceBridge;
 import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tabmodel.TabLaunchType;
@@ -411,12 +410,6 @@
         int externalId = determineExternalIntentSource(intent);
         RecordHistogram.recordEnumeratedHistogram(
                 "MobileIntent.PageLoadDueToExternalApp", externalId, ExternalAppId.NUM_ENTRIES);
-        if (externalId == ExternalAppId.OTHER) {
-            String appId = IntentUtils.safeGetStringExtra(intent, Browser.EXTRA_APPLICATION_ID);
-            if (!TextUtils.isEmpty(appId)) {
-                RapporServiceBridge.sampleString("Android.PageLoadDueToExternalApp", appId);
-            }
-        }
     }
 
     /**
@@ -429,9 +422,6 @@
                 IntentHandler.EXTRA_EXTERNAL_NAV_PACKAGES);
         if (packages != null && packages.size() > 0) {
             RecordUserAction.record("MobileExternalNavigationReceived");
-            for (String name : packages) {
-                RapporServiceBridge.sampleString("Android.ExternalNavigationNotChosen", name);
-            }
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/permissions/OWNERS b/chrome/android/java/src/org/chromium/chrome/browser/permissions/OWNERS
index 25e782b..cc44c2bb 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/permissions/OWNERS
+++ b/chrome/android/java/src/org/chromium/chrome/browser/permissions/OWNERS
@@ -1,4 +1,4 @@
+file://chrome/browser/permissions/PERMISSIONS_OWNERS
 dominickn@chromium.org
-engedy@chromium.org
 
 # COMPONENT: UI>Browser>Permissions>Prompts
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
index 5c8d40c..7980a6f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
@@ -467,7 +467,7 @@
      *
      * @param isShowingErrorPage Whether the tab shows an error page.
      */
-    void setIsShowingErrorPage(boolean isShowingErrorPage) {
+    public void setIsShowingErrorPage(boolean isShowingErrorPage) {
         mIsShowingErrorPage = isShowingErrorPage;
     }
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/TabTestUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/TabTestUtils.java
index 85f9f0f5ea..b8b3dd72 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/TabTestUtils.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/TabTestUtils.java
@@ -111,14 +111,4 @@
             Tab tab, WebContents webContents, boolean didStartLoad, boolean didFinishLoad) {
         tab.swapWebContents(webContents, didStartLoad, didFinishLoad);
     }
-
-    /**
-     * Sets whether the tab is showing an error page.  This is reset whenever the tab finishes a
-     * navigation.
-     * @param tab {@link Tab} object.
-     * @param isShowingErrorPage Whether the tab shows an error page.
-     */
-    public void setIsShowingErrorPage(Tab tab, boolean isShowingErrorPage) {
-        tab.setIsShowingErrorPage(isShowingErrorPage);
-    }
 }
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index cad48385..c018a6e 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -1635,10 +1635,10 @@
       Searching...
     </message>
     <message name="IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADDED_PRINTER_ERROR_MESSAGE" desc="The message shown when a new printer is not set up successfully.">
-      Can&#x2019;t add printer. Restart your computer and try again.
+      Unable to add printer. Please check your printer's configuration and try again.
     </message>
     <message name="IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADDED_PRINTER_FATAL_ERROR_MESSAGE" desc="The message shown when a fatal error occurs while trying to add a new printer.">
-      Can&#x2019;t add printer. Restart your computer and try again.
+      Unable to add printer. Please check your printer's configuration and try again.
     </message>
     <message name="IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADDED_PRINTER_PRINTER_UNREACHABLE_MESSAGE" desc="The message shown when the printer that is to be added is unreachable for configuration.">
       Can&#x2019;t connect to printer. Check that the printer is turned on and is connected to your Chromebook by Wi-Fi or USB.
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index cd24cb9..b730a66 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -1467,6 +1467,10 @@
     {"enable-webrtc-hybrid-agc", flag_descriptions::kWebrtcHybridAgcName,
      flag_descriptions::kWebrtcHybridAgcDescription, kOsAll,
      FEATURE_VALUE_TYPE(features::kWebRtcHybridAgc)},
+    {"enable-webrtc-multi-channel-audio-processing",
+     flag_descriptions::kWebrtcMultiChannelApmName,
+     flag_descriptions::kWebrtcMultiChannelApmDescription, kOsAll,
+     FEATURE_VALUE_TYPE(features::kWebRtcEnableMultiChannelApm)},
     {"enable-webrtc-new-encode-cpu-load-estimator",
      flag_descriptions::kWebrtcNewEncodeCpuLoadEstimatorName,
      flag_descriptions::kWebrtcNewEncodeCpuLoadEstimatorDescription, kOsAll,
@@ -1690,6 +1694,12 @@
      flag_descriptions::kDisableExplicitDmaFencesName,
      flag_descriptions::kDisableExplicitDmaFencesDescription, kOsCrOS,
      SINGLE_VALUE_TYPE(switches::kDisableExplicitDmaFences)},
+    // TODO(crbug.com/1012846): Remove this flag and provision when HDR is fully
+    //  supported on ChromeOS.
+    {"enable-use-hdr-transfer-function",
+     flag_descriptions::kEnableUseHDRTransferFunctionName,
+     flag_descriptions::kEnableUseHDRTransferFunctionDescription, kOsCrOS,
+     SINGLE_VALUE_TYPE(switches::kEnableUseHDRTransferFunction)},
 #endif  // OS_CHROMEOS
 #if defined(OS_CHROMEOS)
     {"ash-enable-unified-desktop",
@@ -1702,6 +1712,10 @@
      kOsCrOS,
      FEATURE_VALUE_TYPE(
          chromeos::features::kBluetoothAggressiveAppearanceFilter)},
+    {"cryptauth-v2-device-activity-status",
+     flag_descriptions::kCryptAuthV2DeviceActivityStatusName,
+     flag_descriptions::kCryptAuthV2DeviceActivityStatusDescription, kOsCrOS,
+     FEATURE_VALUE_TYPE(chromeos::features::kCryptAuthV2DeviceActivityStatus)},
     {"cryptauth-v2-devicesync", flag_descriptions::kCryptAuthV2DeviceSyncName,
      flag_descriptions::kCryptAuthV2DeviceSyncDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(chromeos::features::kCryptAuthV2DeviceSync)},
diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc
index 54fccef..a51c8efc 100644
--- a/chrome/browser/android/chrome_feature_list.cc
+++ b/chrome/browser/android/chrome_feature_list.cc
@@ -355,7 +355,7 @@
                                           base::FEATURE_ENABLED_BY_DEFAULT};
 
 const base::Feature kClickToCallOpenDialerDirectly{
-    "ClickToCallOpenDialerDirectly", base::FEATURE_DISABLED_BY_DEFAULT};
+    "ClickToCallOpenDialerDirectly", base::FEATURE_ENABLED_BY_DEFAULT};
 
 const base::Feature kCommandLineOnNonRooted{"CommandLineOnNonRooted",
                                             base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/browser/android/vr/arcore_device/arcore_device_unittest.cc b/chrome/browser/android/vr/arcore_device/arcore_device_unittest.cc
index 6afebfc..f09887a 100644
--- a/chrome/browser/android/vr/arcore_device/arcore_device_unittest.cc
+++ b/chrome/browser/android/vr/arcore_device/arcore_device_unittest.cc
@@ -8,7 +8,6 @@
 
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "chrome/browser/android/vr/arcore_device/ar_image_transport.h"
 #include "chrome/browser/android/vr/arcore_device/arcore_gl.h"
diff --git a/chrome/browser/android/vr/arcore_device/arcore_gl_thread.cc b/chrome/browser/android/vr/arcore_device/arcore_gl_thread.cc
index 6a7f419..0cd223b 100644
--- a/chrome/browser/android/vr/arcore_device/arcore_gl_thread.cc
+++ b/chrome/browser/android/vr/arcore_device/arcore_gl_thread.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/android/vr/arcore_device/arcore_gl_thread.h"
 
 #include <utility>
-#include "base/message_loop/message_loop.h"
 #include "base/version.h"
 #include "chrome/browser/android/vr/arcore_device/ar_image_transport.h"
 #include "chrome/browser/android/vr/arcore_device/arcore_gl.h"
diff --git a/chrome/browser/autofill/autofill_uitest.cc b/chrome/browser/autofill/autofill_uitest.cc
index 198135c..a91c248 100644
--- a/chrome/browser/autofill/autofill_uitest.cc
+++ b/chrome/browser/autofill/autofill_uitest.cc
@@ -6,7 +6,6 @@
 
 #include "base/bind.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "chrome/browser/autofill/autofill_uitest.h"
 #include "chrome/browser/autofill/personal_data_manager_factory.h"
diff --git a/chrome/browser/captive_portal/captive_portal_browsertest.cc b/chrome/browser/captive_portal/captive_portal_browsertest.cc
index 219a2ab..519ea8d 100644
--- a/chrome/browser/captive_portal/captive_portal_browsertest.cc
+++ b/chrome/browser/captive_portal/captive_portal_browsertest.cc
@@ -18,7 +18,6 @@
 #include "base/compiler_specific.h"
 #include "base/files/file_path.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/scoped_observer.h"
diff --git a/chrome/browser/chrome_browser_main_android.cc b/chrome/browser/chrome_browser_main_android.cc
index fb266d5a..7d7a05a8 100644
--- a/chrome/browser/chrome_browser_main_android.cc
+++ b/chrome/browser/chrome_browser_main_android.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/chrome_browser_main_android.h"
 
 #include "base/bind.h"
-#include "base/message_loop/message_loop.h"
 #include "base/message_loop/message_loop_current.h"
 #include "base/path_service.h"
 #include "base/task/post_task.h"
diff --git a/chrome/browser/chromeos/crostini/ansible/ansible_management_service.cc b/chrome/browser/chromeos/crostini/ansible/ansible_management_service.cc
index aaec0b3f..42f5ef6 100644
--- a/chrome/browser/chromeos/crostini/ansible/ansible_management_service.cc
+++ b/chrome/browser/chromeos/crostini/ansible/ansible_management_service.cc
@@ -69,6 +69,9 @@
     base::OnceCallback<void(bool success)> callback) {
   DCHECK(ansible_installation_finished_callback_.is_null());
   ansible_installation_finished_callback_ = std::move(callback);
+  for (auto& observer : observers_) {
+    observer.OnAnsibleSoftwareConfigurationStarted();
+  }
 
   // TODO(chrisgunadi): Show Ansible software config dialog.
 
@@ -86,7 +89,7 @@
     LOG(ERROR) << "Ansible installation failed";
     std::move(ansible_installation_finished_callback_).Run(/*success=*/false);
     for (auto& observer : observers_) {
-      observer.OnError();
+      observer.OnAnsibleSoftwareConfigurationFinished(false);
     }
     return;
   }
@@ -112,7 +115,7 @@
     case InstallLinuxPackageProgressStatus::FAILED:
       std::move(ansible_installation_finished_callback_).Run(/*success=*/false);
       for (auto& observer : observers_) {
-        observer.OnError();
+        observer.OnAnsibleSoftwareConfigurationFinished(false);
       }
       return;
     // TODO(okalitova): Report Ansible downloading/installation progress.
@@ -144,7 +147,7 @@
         << "Attempted to apply playbook when progress signal not connected.";
     std::move(callback).Run(/*success=*/false);
     for (auto& observer : observers_) {
-      observer.OnError();
+      observer.OnAnsibleSoftwareConfigurationFinished(false);
     }
     return;
   }
@@ -158,10 +161,6 @@
   request.set_container_name(std::move(kCrostiniDefaultContainerName));
   request.set_playbook(std::move(playbook));
 
-  for (auto& observer : observers_) {
-    observer.OnApplicationStarted();
-  }
-
   GetCiceroneClient()->ApplyAnsiblePlaybook(
       std::move(request),
       base::BindOnce(&AnsibleManagementService::OnApplyAnsiblePlaybook,
@@ -175,7 +174,7 @@
     std::move(ansible_playbook_application_finished_callback_)
         .Run(/*success=*/false);
     for (auto& observer : observers_) {
-      observer.OnError();
+      observer.OnAnsibleSoftwareConfigurationFinished(false);
     }
     return;
   }
@@ -187,7 +186,7 @@
     std::move(ansible_playbook_application_finished_callback_)
         .Run(/*success=*/false);
     for (auto& observer : observers_) {
-      observer.OnError();
+      observer.OnAnsibleSoftwareConfigurationFinished(false);
     }
     return;
   }
@@ -203,14 +202,14 @@
       std::move(ansible_playbook_application_finished_callback_)
           .Run(/*success=*/true);
       for (auto& observer : observers_) {
-        observer.OnApplicationFinished();
+        observer.OnAnsibleSoftwareConfigurationFinished(true);
       }
       break;
     case vm_tools::cicerone::ApplyAnsiblePlaybookProgressSignal::FAILED:
       std::move(ansible_playbook_application_finished_callback_)
           .Run(/*success=*/false);
       for (auto& observer : observers_) {
-        observer.OnError();
+        observer.OnAnsibleSoftwareConfigurationFinished(false);
       }
       break;
     case vm_tools::cicerone::ApplyAnsiblePlaybookProgressSignal::IN_PROGRESS:
diff --git a/chrome/browser/chromeos/crostini/ansible/ansible_management_service.h b/chrome/browser/chromeos/crostini/ansible/ansible_management_service.h
index 6d32c6b5..f7bc6b9 100644
--- a/chrome/browser/chromeos/crostini/ansible/ansible_management_service.h
+++ b/chrome/browser/chromeos/crostini/ansible/ansible_management_service.h
@@ -28,9 +28,8 @@
   class Observer : public base::CheckedObserver {
    public:
     ~Observer() override = default;
-    virtual void OnApplicationStarted() = 0;
-    virtual void OnApplicationFinished() = 0;
-    virtual void OnError() = 0;
+    virtual void OnAnsibleSoftwareConfigurationStarted() = 0;
+    virtual void OnAnsibleSoftwareConfigurationFinished(bool success) = 0;
   };
 
   static AnsibleManagementService* GetForProfile(Profile* profile);
diff --git a/chrome/browser/chromeos/login/chrome_restart_request.cc b/chrome/browser/chromeos/login/chrome_restart_request.cc
index 169f2c5..1b359eaf 100644
--- a/chrome/browser/chromeos/login/chrome_restart_request.cc
+++ b/chrome/browser/chromeos/login/chrome_restart_request.cc
@@ -116,6 +116,7 @@
     ::switches::kEnableRGBA4444Textures,
     ::switches::kEnableTouchDragDrop,
     ::switches::kEnableUnifiedDesktop,
+    ::switches::kEnableUseHDRTransferFunction,
     ::switches::kEnableUseZoomForDSF,
     ::switches::kEnableViewport,
     ::switches::kEnableZeroCopy,
diff --git a/chrome/browser/chromeos/login/test/wizard_in_process_browser_test.cc b/chrome/browser/chromeos/login/test/wizard_in_process_browser_test.cc
index 62f6945..db5555b3 100644
--- a/chrome/browser/chromeos/login/test/wizard_in_process_browser_test.cc
+++ b/chrome/browser/chromeos/login/test/wizard_in_process_browser_test.cc
@@ -6,7 +6,6 @@
 
 #include "base/command_line.h"
 #include "base/location.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
diff --git a/chrome/browser/chromeos/power/ml/smart_dim/ml_service_client.cc b/chrome/browser/chromeos/power/ml/smart_dim/ml_service_client.cc
index 4ca9bf1..e7d79dfb 100644
--- a/chrome/browser/chromeos/power/ml/smart_dim/ml_service_client.cc
+++ b/chrome/browser/chromeos/power/ml/smart_dim/ml_service_client.cc
@@ -17,6 +17,7 @@
 #include "chromeos/services/machine_learning/public/mojom/model.mojom.h"
 #include "chromeos/services/machine_learning/public/mojom/tensor.mojom.h"
 #include "mojo/public/cpp/bindings/map.h"
+#include "mojo/public/cpp/bindings/remote.h"
 
 using ::chromeos::machine_learning::mojom::BuiltinModelId;
 using ::chromeos::machine_learning::mojom::BuiltinModelSpec;
@@ -78,11 +79,11 @@
   // available.
   void InitMlServiceHandlesIfNeeded();
 
-  void OnConnectionError();
+  void OnMojoDisconnect();
 
   // Pointers used to execute functions in the ML service server end.
   ::chromeos::machine_learning::mojom::ModelPtr model_;
-  ::chromeos::machine_learning::mojom::GraphExecutorPtr executor_;
+  mojo::Remote<::chromeos::machine_learning::mojom::GraphExecutor> executor_;
 
   base::WeakPtrFactory<MlServiceClientImpl> weak_factory_{this};
 
@@ -145,15 +146,15 @@
   if (!executor_) {
     // Get the graph executor.
     model_->CreateGraphExecutor(
-        mojo::MakeRequest(&executor_),
+        executor_.BindNewPipeAndPassReceiver(),
         base::BindOnce(&MlServiceClientImpl::CreateGraphExecutorCallback,
                        weak_factory_.GetWeakPtr()));
-    executor_.set_connection_error_handler(base::BindOnce(
-        &MlServiceClientImpl::OnConnectionError, weak_factory_.GetWeakPtr()));
+    executor_.set_disconnect_handler(base::BindOnce(
+        &MlServiceClientImpl::OnMojoDisconnect, weak_factory_.GetWeakPtr()));
   }
 }
 
-void MlServiceClientImpl::OnConnectionError() {
+void MlServiceClientImpl::OnMojoDisconnect() {
   // TODO(crbug.com/893425): Log to UMA.
   LOG(WARNING) << "Mojo connection for ML service closed.";
   executor_.reset();
diff --git a/chrome/browser/chromeos/power/process_data_collector_unittest.cc b/chrome/browser/chromeos/power/process_data_collector_unittest.cc
index 9f83790..bf8d0a5 100644
--- a/chrome/browser/chromeos/power/process_data_collector_unittest.cc
+++ b/chrome/browser/chromeos/power/process_data_collector_unittest.cc
@@ -19,7 +19,6 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/format_macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
diff --git a/chrome/browser/component_updater/cros_component_installer_chromeos.cc b/chrome/browser/component_updater/cros_component_installer_chromeos.cc
index 6b87adb4..733d2e7 100644
--- a/chrome/browser/component_updater/cros_component_installer_chromeos.cc
+++ b/chrome/browser/component_updater/cros_component_installer_chromeos.cc
@@ -36,7 +36,7 @@
 const ComponentConfig kConfigs[] = {
     {"epson-inkjet-printer-escpr", "3.0",
      "1913a5e0a6cad30b6f03e176177e0d7ed62c5d6700a9c66da556d7c3f5d6a47e"},
-    {"cros-termina", "790.1",
+    {"cros-termina", "800.1",
      "e9d960f84f628e1f42d05de4046bb5b3154b6f1f65c08412c6af57a29aecaffb"},
     {"rtanalytics-light", "14.0",
      "69f09d33c439c2ab55bbbe24b47ab55cb3f6c0bd1f1ef46eefea3216ec925038"},
diff --git a/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_unittest.cc b/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_unittest.cc
index e87740d..4ffbe2bb 100644
--- a/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_unittest.cc
+++ b/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_unittest.cc
@@ -7,7 +7,6 @@
 #include <memory>
 #include <string>
 
-#include "base/message_loop/message_loop.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_config_test_utils.h"
diff --git a/chrome/browser/devtools/device/adb/mock_adb_server.cc b/chrome/browser/devtools/device/adb/mock_adb_server.cc
index 1a9f5bb..a7c675f 100644
--- a/chrome/browser/devtools/device/adb/mock_adb_server.cc
+++ b/chrome/browser/devtools/device/adb/mock_adb_server.cc
@@ -11,7 +11,6 @@
 #include "base/location.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/sequence_checker.h"
 #include "base/single_thread_task_runner.h"
diff --git a/chrome/browser/devtools/device/port_forwarding_browsertest.cc b/chrome/browser/devtools/device/port_forwarding_browsertest.cc
index 3c48120..8410df0e 100644
--- a/chrome/browser/devtools/device/port_forwarding_browsertest.cc
+++ b/chrome/browser/devtools/device/port_forwarding_browsertest.cc
@@ -6,7 +6,6 @@
 #include "base/bind_helpers.h"
 #include "base/command_line.h"
 #include "base/compiler_specific.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/threading/thread_task_runner_handle.h"
diff --git a/chrome/browser/dom_distiller/distillable_page_utils_browsertest.cc b/chrome/browser/dom_distiller/distillable_page_utils_browsertest.cc
index 0df4f312..b6ceed8 100644
--- a/chrome/browser/dom_distiller/distillable_page_utils_browsertest.cc
+++ b/chrome/browser/dom_distiller/distillable_page_utils_browsertest.cc
@@ -7,7 +7,6 @@
 
 #include "base/bind.h"
 #include "base/command_line.h"
-#include "base/message_loop/message_loop.h"
 #include "base/optional.h"
 #include "base/run_loop.h"
 #include "base/threading/thread_task_runner_handle.h"
diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc b/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc
index 8be2cd77..e2734050 100644
--- a/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc
+++ b/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc
@@ -5,7 +5,6 @@
 #include "base/command_line.h"
 #include "base/feature_list.h"
 #include "base/location.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/stringprintf.h"
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 94331b0c..96b866a 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -576,6 +576,11 @@
     "expiry_milestone": 82
   },
   {
+    "name": "cryptauth-v2-device-activity-status",
+    "owners": [ "khorimoto", "nohle", "themaxli" ],
+    "expiry_milestone": 85
+  },
+  {
     "name": "cryptauth-v2-devicesync",
     "owners": [ "khorimoto", "nohle" ],
     "expiry_milestone": 85
@@ -1889,6 +1894,11 @@
     "expiry_milestone": 80
   },
   {
+    "name": "enable-use-hdr-transfer-function",
+    "owners": [ "mcasas" ],
+    "expiry_milestone": 89
+  },
+  {
     "name": "enable-use-zoom-for-dsf",
     "owners": [ "ccameron" ],
     "expiry_milestone": 80
@@ -2026,6 +2036,11 @@
     "expiry_milestone": 83
   },
   {
+    "name": "enable-webrtc-multi-channel-audio-processing",
+    "owners": [ "saza" ],
+    "expiry_milestone": 85
+  },
+  {
     "name": "enable-webrtc-new-encode-cpu-load-estimator",
     "owners": [ "nisse" ],
     "expiry_milestone": 85
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index fa34a09..794bd76b 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -2250,6 +2250,12 @@
 const char kWebrtcHwEncodingDescription[] =
     "Support in WebRTC for encoding video streams using platform hardware.";
 
+const char kWebrtcMultiChannelApmName[] =
+    "WebRTC multi-channel audio processing.";
+const char kWebrtcMultiChannelApmDescription[] =
+    "Support in WebRTC for processing playout and capture audio in multi "
+    "channel without downmixing.";
+
 const char kWebrtcNewEncodeCpuLoadEstimatorName[] =
     "WebRTC new encode cpu load estimator";
 const char kWebrtcNewEncodeCpuLoadEstimatorDescription[] =
@@ -3298,6 +3304,11 @@
 const char kCrostiniWebUIInstallerDescription[] =
     "Enable the new WebUI Crostini Installer.";
 
+const char kCryptAuthV2DeviceActivityStatusName[] =
+    "CryptAuth Device Activity Status";
+const char kCryptAuthV2DeviceActivityStatusDescription[] =
+    "Use the CryptAuth GetDevicesActivityStatus API to sort devices.";
+
 const char kCryptAuthV2DeviceSyncName[] = "CryptAuth v2 DeviceSync";
 const char kCryptAuthV2DeviceSyncDescription[] =
     "Use the CryptAuth v2 DeviceSync protocol.";
@@ -3320,6 +3331,12 @@
     "Always rely on implicit syncrhonization between GPU and display "
     "controller instead of using dma-fences explcitily when available.";
 
+const char kEnableUseHDRTransferFunctionName[] =
+    "Enable using HDR transfer function";
+const char kEnableUseHDRTransferFunctionDescription[] =
+    "Allows using an HDR transfer functions if any connected monitor supports "
+    "it";
+
 const char kDisableOfficeEditingComponentAppName[] =
     "Disable Office Editing for Docs, Sheets & Slides";
 const char kDisableOfficeEditingComponentAppDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 6c6b688..94a7a3c6 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1318,6 +1318,9 @@
 extern const char kWebrtcHwEncodingName[];
 extern const char kWebrtcHwEncodingDescription[];
 
+extern const char kWebrtcMultiChannelApmName[];
+extern const char kWebrtcMultiChannelApmDescription[];
+
 extern const char kWebrtcNewEncodeCpuLoadEstimatorName[];
 extern const char kWebrtcNewEncodeCpuLoadEstimatorDescription[];
 
@@ -1956,6 +1959,9 @@
 extern const char kCrostiniWebUIInstallerName[];
 extern const char kCrostiniWebUIInstallerDescription[];
 
+extern const char kCryptAuthV2DeviceActivityStatusName[];
+extern const char kCryptAuthV2DeviceActivityStatusDescription[];
+
 extern const char kCryptAuthV2DeviceSyncName[];
 extern const char kCryptAuthV2DeviceSyncDescription[];
 
@@ -1971,6 +1977,9 @@
 extern const char kDisableExplicitDmaFencesName[];
 extern const char kDisableExplicitDmaFencesDescription[];
 
+extern const char kEnableUseHDRTransferFunctionName[];
+extern const char kEnableUseHDRTransferFunctionDescription[];
+
 extern const char kDisableOfficeEditingComponentAppName[];
 extern const char kDisableOfficeEditingComponentAppDescription[];
 
diff --git a/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_browsertest.cc b/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_browsertest.cc
index 99e2412..0a1f34fb 100644
--- a/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_browsertest.cc
+++ b/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_browsertest.cc
@@ -13,11 +13,13 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/browser/extensions/extension_apitest.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
 #include "chrome/browser/metrics/subprocess_metrics_provider.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/find_bar/find_tab_helper.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/pdf_util.h"
+#include "chrome/common/webui_url_constants.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/guest_view/browser/guest_view_manager.h"
 #include "components/guest_view/browser/guest_view_manager_delegate.h"
@@ -40,6 +42,7 @@
 #include "extensions/browser/guest_view/mime_handler_view/test_mime_handler_view_guest.h"
 #include "extensions/common/constants.h"
 #include "extensions/common/guest_view/mime_handler_view_uma_types.h"
+#include "extensions/common/manifest_handlers/options_page_info.h"
 #include "extensions/test/extension_test_message_listener.h"
 #include "extensions/test/result_catcher.h"
 #include "net/dns/mock_host_resolver.h"
@@ -54,8 +57,11 @@
 #include "ui/aura/window.h"
 #endif
 
+using extensions::Extension;
 using extensions::ExtensionsAPIClient;
+using extensions::ExtensionTabUtil;
 using extensions::MimeHandlerViewGuest;
+using extensions::OptionsPageInfo;
 using extensions::TestMimeHandlerViewGuest;
 using guest_view::GuestViewManager;
 using guest_view::TestGuestViewManager;
@@ -660,7 +666,7 @@
 }  // namespace
 
 IN_PROC_BROWSER_TEST_P(ChromeMimeHandlerViewCrossProcessTest,
-                       GuestDevToolsReloadsEmbedder) {
+                       GuestDevToolsReloadsEmbedderForPDFFiles) {
   GURL data_url("data:application/pdf,foo");
   ui_test_utils::NavigateToURL(browser(), data_url);
   auto* embedder_web_contents =
@@ -688,6 +694,51 @@
   devtools_agent_host->DetachClient(&devtools_agent_host_client);
 }
 
+IN_PROC_BROWSER_TEST_P(ChromeMimeHandlerViewCrossProcessTest,
+                       GuestDevToolsReloadsEmbedder) {
+  // Load an extension with an options view
+  const Extension* options_in_view =
+      LoadExtension(test_data_dir_.AppendASCII("../options_page_in_view"));
+
+  ASSERT_TRUE(options_in_view);
+  ASSERT_TRUE(OptionsPageInfo::HasOptionsPage(options_in_view));
+
+  GURL options_url = GURL(std::string(chrome::kChromeUIExtensionsURL) +
+                          "?options=" + options_in_view->id());
+  EXPECT_TRUE(ExtensionTabUtil::OpenOptionsPage(options_in_view, browser()));
+  EXPECT_TRUE(content::WaitForLoadStop(
+      browser()->tab_strip_model()->GetActiveWebContents()));
+  EXPECT_EQ(options_url, browser()
+                             ->tab_strip_model()
+                             ->GetActiveWebContents()
+                             ->GetLastCommittedURL());
+
+  auto* embedder_web_contents =
+      browser()->tab_strip_model()->GetWebContentsAt(0);
+  auto* guest_web_contents = GetGuestViewManager()->WaitForSingleGuestCreated();
+  EXPECT_NE(embedder_web_contents, guest_web_contents);
+
+  while (guest_web_contents->IsLoading()) {
+    base::RunLoop run_loop;
+    base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+        FROM_HERE, run_loop.QuitClosure(), TestTimeouts::tiny_timeout());
+    run_loop.Run();
+  }
+
+  // Load DevTools.
+  scoped_refptr<content::DevToolsAgentHost> devtools_agent_host =
+      content::DevToolsAgentHost::GetOrCreateFor(guest_web_contents);
+  StubDevToolsAgentHostClient devtools_agent_host_client;
+  devtools_agent_host->AttachClient(&devtools_agent_host_client);
+
+  // Reload via guest's DevTools, embedder should reload.
+  content::TestNavigationObserver reload_observer(guest_web_contents);
+  devtools_agent_host->DispatchProtocolMessage(
+      &devtools_agent_host_client, R"({"id":1,"method": "Page.reload"})");
+  reload_observer.Wait();
+  devtools_agent_host->DetachClient(&devtools_agent_host_client);
+}
+
 // This test verifies that a display:none frame loading a MimeHandlerView type
 // will end up creating a MimeHandlerview. NOTE: this is an exception to support
 // printing in Google docs (see https://crbug.com/978240).
diff --git a/chrome/browser/history/redirect_browsertest.cc b/chrome/browser/history/redirect_browsertest.cc
index b6331ad3..c92a49c 100644
--- a/chrome/browser/history/redirect_browsertest.cc
+++ b/chrome/browser/history/redirect_browsertest.cc
@@ -13,7 +13,6 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/location.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/string16.h"
diff --git a/chrome/browser/media/cast_mirroring_service_host.cc b/chrome/browser/media/cast_mirroring_service_host.cc
index 3b11601..3094ca16 100644
--- a/chrome/browser/media/cast_mirroring_service_host.cc
+++ b/chrome/browser/media/cast_mirroring_service_host.cc
@@ -34,6 +34,7 @@
 #include "content/public/browser/service_process_host.h"
 #include "content/public/browser/video_capture_device_launcher.h"
 #include "content/public/browser/web_contents.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "services/network/public/mojom/network_service.mojom.h"
 #include "services/viz/public/mojom/gpu.mojom.h"
@@ -294,7 +295,7 @@
       source_web_contents, params, total_segments,
       base::BindRepeating(
           [](mojo::PendingRemote<mojom::AudioStreamCreatorClient> client,
-             media::mojom::AudioInputStreamPtr stream,
+             mojo::PendingRemote<media::mojom::AudioInputStream> stream,
              media::mojom::AudioInputStreamClientRequest client_request,
              media::mojom::ReadOnlyAudioDataPipePtr data_pipe) {
             // TODO(crbug.com/1015488): Remove |initially_muted| argument from
diff --git a/chrome/browser/media/cast_mirroring_service_host_browsertest.cc b/chrome/browser/media/cast_mirroring_service_host_browsertest.cc
index 10e3ca85..3437846 100644
--- a/chrome/browser/media/cast_mirroring_service_host_browsertest.cc
+++ b/chrome/browser/media/cast_mirroring_service_host_browsertest.cc
@@ -219,7 +219,7 @@
 
   // mojom::AudioStreamCreatorClient mocks.
   MOCK_METHOD0(OnAudioStreamCreated, void());
-  void StreamCreated(media::mojom::AudioInputStreamPtr stream,
+  void StreamCreated(mojo::PendingRemote<media::mojom::AudioInputStream> stream,
                      media::mojom::AudioInputStreamClientRequest client_request,
                      media::mojom::ReadOnlyAudioDataPipePtr data_pipe,
                      bool initially_muted) override {
diff --git a/chrome/browser/media/webrtc/desktop_media_list_ash_unittest.cc b/chrome/browser/media/webrtc/desktop_media_list_ash_unittest.cc
index dfc973b..ef08f3a 100644
--- a/chrome/browser/media/webrtc/desktop_media_list_ash_unittest.cc
+++ b/chrome/browser/media/webrtc/desktop_media_list_ash_unittest.cc
@@ -6,7 +6,6 @@
 
 #include "base/location.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
diff --git a/chrome/browser/media/webrtc/tab_desktop_media_list_unittest.cc b/chrome/browser/media/webrtc/tab_desktop_media_list_unittest.cc
index b2d850b..fc988bcd 100644
--- a/chrome/browser/media/webrtc/tab_desktop_media_list_unittest.cc
+++ b/chrome/browser/media/webrtc/tab_desktop_media_list_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/command_line.h"
 #include "base/files/file_util.h"
 #include "base/location.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/browser/metrics/thread_watcher_unittest.cc b/chrome/browser/metrics/thread_watcher_unittest.cc
index 26bf371..a83be432 100644
--- a/chrome/browser/metrics/thread_watcher_unittest.cc
+++ b/chrome/browser/metrics/thread_watcher_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/cancelable_callback.h"
 #include "base/location.h"
 #include "base/logging.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/stl_util.h"
diff --git a/chrome/browser/net/cookie_policy_browsertest.cc b/chrome/browser/net/cookie_policy_browsertest.cc
index 3729415..5dbbc16 100644
--- a/chrome/browser/net/cookie_policy_browsertest.cc
+++ b/chrome/browser/net/cookie_policy_browsertest.cc
@@ -179,6 +179,8 @@
       content::GetCookies(browser()->profile(), redirected_url);
   ASSERT_EQ("", cookie);
 
+  // This cookie can be set even if it is Lax-by-default because the redirect
+  // counts as a top-level navigation and therefore the context is lax.
   ui_test_utils::NavigateToURL(browser(),
                                GURL(url.spec() + redirected_url.spec()));
 
@@ -197,24 +199,32 @@
 
   // Navigate iframe to a cross-site, cookie-setting endpoint, and verify that
   // the cookie is set:
-  NavigateFrameTo("b.com", "/set-cookie?thirdparty");
-  ExpectCookiesOnHost("b.com", "thirdparty");
+  NavigateFrameTo("b.com", "/set-cookie?thirdparty=1;SameSite=None;Secure");
+  ExpectCookiesOnHost("b.com", "thirdparty=1");
 
   // Navigate iframe to a cross-site frame with a frame, and navigate _that_
   // frame to a cross-site, cookie-setting endpoint, and verify that the cookie
   // is set:
   NavigateFrameTo("b.com", "/iframe.html");
-  NavigateNestedFrameTo("b.com", "/set-cookie?thirdparty");
-  ExpectCookiesOnHost("b.com", "thirdparty");
+  // Still need SameSite=None and Secure because the top-level is a.com so this
+  // is still cross-site.
+  NavigateNestedFrameTo("b.com",
+                        "/set-cookie?thirdparty=2;SameSite=None;Secure");
+  ExpectCookiesOnHost("b.com", "thirdparty=2");
 
   // Navigate iframe to a cross-site frame with a frame, and navigate _that_
   // frame to a cross-site, cookie-setting endpoint, and verify that the cookie
   // is set:
   NavigateFrameTo("c.com", "/iframe.html");
-  NavigateNestedFrameTo("b.com", "/set-cookie?thirdparty");
-  ExpectCookiesOnHost("b.com", "thirdparty");
+  NavigateNestedFrameTo("b.com",
+                        "/set-cookie?thirdparty=3;SameSite=None;Secure");
+  ExpectCookiesOnHost("b.com", "thirdparty=3");
 }
 
+// This test does the same navigations as the test above, so we can be assured
+// that the cookies are actually blocked because of the
+// block-third-party-cookies setting, and not just because of SameSite or
+// whatever.
 IN_PROC_BROWSER_TEST_F(CookiePolicyBrowserTest,
                        ThirdPartyCookiesIFrameBlockSetting) {
   SetBlockThirdPartyCookies(true);
@@ -223,21 +233,23 @@
 
   // Navigate iframe to a cross-site, cookie-setting endpoint, and verify that
   // the cookie is not set:
-  NavigateFrameTo("b.com", "/set-cookie?thirdparty");
+  NavigateFrameTo("b.com", "/set-cookie?thirdparty=1;SameSite=None;Secure");
   ExpectCookiesOnHost("b.com", "");
 
   // Navigate iframe to a cross-site frame with a frame, and navigate _that_
   // frame to a cross-site, cookie-setting endpoint, and verify that the cookie
   // is not set:
   NavigateFrameTo("b.com", "/iframe.html");
-  NavigateNestedFrameTo("b.com", "/set-cookie?thirdparty");
+  NavigateNestedFrameTo("b.com",
+                        "/set-cookie?thirdparty=2;SameSite=None;Secure");
   ExpectCookiesOnHost("b.com", "");
 
   // Navigate iframe to a cross-site frame with a frame, and navigate _that_
   // frame to a cross-site, cookie-setting endpoint, and verify that the cookie
   // is not set:
   NavigateFrameTo("c.com", "/iframe.html");
-  NavigateNestedFrameTo("b.com", "/set-cookie?thirdparty");
+  NavigateNestedFrameTo("b.com",
+                        "/set-cookie?thirdparty=3;SameSite=None;Secure");
   ExpectCookiesOnHost("b.com", "");
 }
 
@@ -247,39 +259,43 @@
 
   // Set a cookie on `b.com`.
   content::SetCookie(browser()->profile(), https_server_.GetURL("b.com", "/"),
-                     "thirdparty");
-  ExpectCookiesOnHost("b.com", "thirdparty");
+                     "thirdparty=1;SameSite=None;Secure");
+  ExpectCookiesOnHost("b.com", "thirdparty=1");
 
   NavigateToPageWithFrame("a.com");
 
   // Navigate iframe to a cross-site, cookie-reading endpoint, and verify that
   // the cookie is sent:
   NavigateFrameTo("b.com", "/echoheader?cookie");
-  ExpectFrameContent("thirdparty");
+  ExpectFrameContent("thirdparty=1");
 
   // Navigate iframe to a cross-site frame with a frame, and navigate _that_
   // frame to a cross-site page that echos the cookie header, and verify that
   // the cookie is sent:
   NavigateFrameTo("b.com", "/iframe.html");
   NavigateNestedFrameTo("b.com", "/echoheader?cookie");
-  ExpectNestedFrameContent("thirdparty");
+  ExpectNestedFrameContent("thirdparty=1");
 
   // Navigate iframe to a cross-site frame with a frame, and navigate _that_
   // frame to a distinct cross-site page that echos the cookie header, and
   // verify that the cookie is not sent:
   NavigateFrameTo("c.com", "/iframe.html");
   NavigateNestedFrameTo("b.com", "/echoheader?cookie");
-  ExpectNestedFrameContent("thirdparty");
+  ExpectNestedFrameContent("thirdparty=1");
 }
 
+// This test does the same navigations as the test above, so we can be assured
+// that the cookies are actually blocked because of the
+// block-third-party-cookies setting, and not just because of SameSite or
+// whatever.
 IN_PROC_BROWSER_TEST_F(CookiePolicyBrowserTest,
                        ThirdPartyCookiesIFrameBlockReading) {
   SetBlockThirdPartyCookies(true);
 
   // Set a cookie on `b.com`.
   content::SetCookie(browser()->profile(), https_server_.GetURL("b.com", "/"),
-                     "thirdparty");
-  ExpectCookiesOnHost("b.com", "thirdparty");
+                     "thirdparty=1;SameSite=None;Secure");
+  ExpectCookiesOnHost("b.com", "thirdparty=1");
 
   NavigateToPageWithFrame("a.com");
 
@@ -309,10 +325,17 @@
 
   // Set a cookie on `b.com`.
   content::SetCookie(browser()->profile(), https_server_.GetURL("b.com", "/"),
-                     "thirdparty");
-  ExpectCookiesOnHost("b.com", "thirdparty");
+                     "thirdparty=1;SameSite=None;Secure");
+  ExpectCookiesOnHost("b.com", "thirdparty=1");
+
+  // Set a cookie on othersite.com.
+  content::SetCookie(browser()->profile(),
+                     https_server_.GetURL("othersite.com", "/"),
+                     "thirdparty=other;SameSite=None;Secure");
+  ExpectCookiesOnHost("othersite.com", "thirdparty=other");
 
   // Allow all requests to b.com to have cookies.
+  // On the other hand, othersite.com does not have an exception set for it.
   auto cookie_settings =
       CookieSettingsFactory::GetForProfile(browser()->profile());
   GURL url = https_server_.GetURL("b.com", "/");
@@ -323,21 +346,32 @@
   // Navigate iframe to a cross-site, cookie-reading endpoint, and verify that
   // the cookie is sent:
   NavigateFrameTo("b.com", "/echoheader?cookie");
-  ExpectFrameContent("thirdparty");
+  ExpectFrameContent("thirdparty=1");
+  // Navigate iframe to othersite.com and verify that the cookie is not sent.
+  NavigateFrameTo("othersite.com", "/echoheader?cookie");
+  ExpectFrameContent("None");
 
   // Navigate iframe to a cross-site frame with a frame, and navigate _that_
   // frame to a cross-site page that echos the cookie header, and verify that
   // the cookie is sent:
   NavigateFrameTo("b.com", "/iframe.html");
   NavigateNestedFrameTo("b.com", "/echoheader?cookie");
-  ExpectNestedFrameContent("thirdparty");
+  ExpectNestedFrameContent("thirdparty=1");
+  // Navigate nested iframe to othersite.com and verify that the cookie is not
+  // sent.
+  NavigateNestedFrameTo("othersite.com", "/echoheader?cookie");
+  ExpectNestedFrameContent("None");
 
   // Navigate iframe to a cross-site frame with a frame, and navigate _that_
   // frame to a distinct cross-site page that echos the cookie header, and
   // verify that the cookie is sent:
   NavigateFrameTo("c.com", "/iframe.html");
   NavigateNestedFrameTo("b.com", "/echoheader?cookie");
-  ExpectNestedFrameContent("thirdparty");
+  ExpectNestedFrameContent("thirdparty=1");
+  // Navigate nested iframe to othersite.com and verify that the cookie is not
+  // sent.
+  NavigateNestedFrameTo("othersite.com", "/echoheader?cookie");
+  ExpectNestedFrameContent("None");
 }
 
 IN_PROC_BROWSER_TEST_F(CookiePolicyBrowserTest,
@@ -346,8 +380,8 @@
 
   // Set a cookie on `b.com`.
   content::SetCookie(browser()->profile(), https_server_.GetURL("b.com", "/"),
-                     "thirdparty");
-  ExpectCookiesOnHost("b.com", "thirdparty");
+                     "thirdparty=1;SameSite=None;Secure");
+  ExpectCookiesOnHost("b.com", "thirdparty=1");
 
   // Allow all requests on the top frame domain a.com to have cookies.
   auto cookie_settings =
@@ -361,21 +395,44 @@
   // Navigate iframe to a cross-site, cookie-reading endpoint, and verify that
   // the cookie is sent:
   NavigateFrameTo("b.com", "/echoheader?cookie");
-  ExpectFrameContent("thirdparty");
+  ExpectFrameContent("thirdparty=1");
 
   // Navigate iframe to a cross-site frame with a frame, and navigate _that_
   // frame to a cross-site page that echos the cookie header, and verify that
   // the cookie is sent:
   NavigateFrameTo("b.com", "/iframe.html");
   NavigateNestedFrameTo("b.com", "/echoheader?cookie");
-  ExpectNestedFrameContent("thirdparty");
+  ExpectNestedFrameContent("thirdparty=1");
 
   // Navigate iframe to a cross-site frame with a frame, and navigate _that_
   // frame to a distinct cross-site page that echos the cookie header, and
   // verify that the cookie is sent:
   NavigateFrameTo("c.com", "/iframe.html");
   NavigateNestedFrameTo("b.com", "/echoheader?cookie");
-  ExpectNestedFrameContent("thirdparty");
+  ExpectNestedFrameContent("thirdparty=1");
+
+  // Now repeat the above with a dfiferent top frame site, which does not have
+  // an exception set for it.
+  NavigateToPageWithFrame("othersite.com");
+
+  // Navigate iframe to a cross-site, cookie-reading endpoint, and verify that
+  // the cookie is not sent:
+  NavigateFrameTo("b.com", "/echoheader?cookie");
+  ExpectFrameContent("None");
+
+  // Navigate iframe to a cross-site frame with a frame, and navigate _that_
+  // frame to a cross-site page that echos the cookie header, and verify that
+  // the cookie is not sent:
+  NavigateFrameTo("b.com", "/iframe.html");
+  NavigateNestedFrameTo("b.com", "/echoheader?cookie");
+  ExpectNestedFrameContent("None");
+
+  // Navigate iframe to a cross-site frame with a frame, and navigate _that_
+  // frame to a distinct cross-site page that echos the cookie header, and
+  // verify that the cookie is not sent:
+  NavigateFrameTo("c.com", "/iframe.html");
+  NavigateNestedFrameTo("b.com", "/echoheader?cookie");
+  ExpectNestedFrameContent("None");
 }
 
 IN_PROC_BROWSER_TEST_F(CookiePolicyBrowserTest, ThirdPartyIFrameStorage) {
diff --git a/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc b/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc
index 18b467f..34130c74 100644
--- a/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc
@@ -231,14 +231,14 @@
     return;
   }
 
-  std::unique_ptr<optimization_guide::HintUpdateData> update_data =
+  std::unique_ptr<optimization_guide::StoreUpdateData> update_data =
       hint_cache_->MaybeCreateUpdateDataForComponentHints(info.version);
 
   // Processes the hints from the newly available component on a background
-  // thread, providing a HintUpdateData for component update from the hint
+  // thread, providing a StoreUpdateData for component update from the hint
   // cache, so that each hint within the component can be moved into it. In the
   // case where the component's version is not newer than the hint cache store's
-  // component version, HintUpdateData will be a nullptr and hint
+  // component version, StoreUpdateData will be a nullptr and hint
   // processing will be skipped. After PreviewsHints::Create() returns the newly
   // created PreviewsHints, it is initialized in UpdateHints() on the UI thread.
   base::PostTaskAndReplyWithResult(
@@ -258,12 +258,12 @@
   }
 }
 
-std::unique_ptr<optimization_guide::HintUpdateData>
+std::unique_ptr<optimization_guide::StoreUpdateData>
 OptimizationGuideHintsManager::ProcessHintsComponent(
     const optimization_guide::HintsComponentInfo& info,
     const base::flat_set<optimization_guide::proto::OptimizationType>&
         registered_optimization_types,
-    std::unique_ptr<optimization_guide::HintUpdateData> update_data) {
+    std::unique_ptr<optimization_guide::StoreUpdateData> update_data) {
   DCHECK(background_task_runner_->RunsTasksInCurrentSequence());
 
   optimization_guide::ProcessHintsComponentResult out_result;
@@ -355,14 +355,14 @@
   std::unique_ptr<optimization_guide::proto::Configuration> manual_config =
       optimization_guide::switches::ParseComponentConfigFromCommandLine();
   if (manual_config) {
-    std::unique_ptr<optimization_guide::HintUpdateData> hint_update_data =
+    std::unique_ptr<optimization_guide::StoreUpdateData> update_data =
         hint_cache_->MaybeCreateUpdateDataForComponentHints(
             base::Version(kManualConfigComponentVersion));
     optimization_guide::ProcessHints(manual_config->mutable_hints(),
-                                     hint_update_data.get());
+                                     update_data.get());
     // Allow |UpdateComponentHints| to block startup so that the first
     // navigation gets the hints when a command line hint proto is provided.
-    UpdateComponentHints(base::DoNothing(), std::move(hint_update_data));
+    UpdateComponentHints(base::DoNothing(), std::move(update_data));
   }
 
   // Register as an observer regardless of hint proto override usage. This is
@@ -372,16 +372,16 @@
 
 void OptimizationGuideHintsManager::UpdateComponentHints(
     base::OnceClosure update_closure,
-    std::unique_ptr<optimization_guide::HintUpdateData> hint_update_data) {
+    std::unique_ptr<optimization_guide::StoreUpdateData> update_data) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
   // If we get here, the hints have been processed correctly.
   pref_service_->ClearPref(
       optimization_guide::prefs::kPendingHintsProcessingVersion);
 
-  if (hint_update_data) {
+  if (update_data) {
     hint_cache_->UpdateComponentHints(
-        std::move(hint_update_data),
+        std::move(update_data),
         base::BindOnce(&OptimizationGuideHintsManager::OnComponentHintsUpdated,
                        ui_weak_ptr_factory_.GetWeakPtr(),
                        std::move(update_closure),
@@ -744,20 +744,22 @@
   *optimization_type_decision =
       optimization_guide::OptimizationTypeDecision::kUnknown;
 
-  // We only support the optimization target
-  // |OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD|, so just return that we don't know
-  // if the target doesn't match that.
+  bool should_update_optimization_target_decision = true;
   if (optimization_target !=
       optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD) {
-    return;
+    *optimization_target_decision = optimization_guide::
+        OptimizationTargetDecision::kModelNotAvailableOnClient;
+    should_update_optimization_target_decision = false;
   }
 
   const auto& url = navigation_handle->GetURL();
   // If the URL doesn't have a host, we cannot query the hint for it, so just
   // return early.
   if (!url.has_host()) {
-    *optimization_target_decision =
-        optimization_guide::OptimizationTargetDecision::kPageLoadDoesNotMatch;
+    if (should_update_optimization_target_decision) {
+      *optimization_target_decision =
+          optimization_guide::OptimizationTargetDecision::kPageLoadDoesNotMatch;
+    }
     *optimization_type_decision =
         optimization_guide::OptimizationTypeDecision::kNoHintAvailable;
     return;
@@ -794,16 +796,18 @@
         matched_page_hint->max_ect_trigger());
   }
 
-  if (current_effective_connection_type_ ==
-          net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_UNKNOWN ||
-      current_effective_connection_type_ > max_ect_trigger) {
-    // The current network is not slow enough, so this navigation is likely not
-    // going to be painful.
-    *optimization_target_decision =
-        optimization_guide::OptimizationTargetDecision::kPageLoadDoesNotMatch;
-  } else {
-    *optimization_target_decision =
-        optimization_guide::OptimizationTargetDecision::kPageLoadMatches;
+  if (should_update_optimization_target_decision) {
+    if (current_effective_connection_type_ ==
+            net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_UNKNOWN ||
+        current_effective_connection_type_ > max_ect_trigger) {
+      // The current network is not slow enough, so this navigation is likely
+      // not going to be painful.
+      *optimization_target_decision =
+          optimization_guide::OptimizationTargetDecision::kPageLoadDoesNotMatch;
+    } else {
+      *optimization_target_decision =
+          optimization_guide::OptimizationTargetDecision::kPageLoadMatches;
+    }
   }
 
   // Check if the URL should be filtered out if we have an optimization filter
diff --git a/chrome/browser/optimization_guide/optimization_guide_hints_manager.h b/chrome/browser/optimization_guide/optimization_guide_hints_manager.h
index fa7b9b4..1d2623def 100644
--- a/chrome/browser/optimization_guide/optimization_guide_hints_manager.h
+++ b/chrome/browser/optimization_guide/optimization_guide_hints_manager.h
@@ -44,7 +44,6 @@
 
 namespace optimization_guide {
 class HintCache;
-class HintUpdateData;
 class HintsFetcher;
 enum class OptimizationGuideDecision;
 class OptimizationFilter;
@@ -53,6 +52,7 @@
 enum class OptimizationTarget;
 enum class OptimizationTargetDecision;
 enum class OptimizationTypeDecision;
+class StoreUpdateData;
 class TopHostProvider;
 }  // namespace optimization_guide
 
@@ -156,11 +156,11 @@
   //
   // Should always be called on the thread that belongs to
   // |background_task_runner_|.
-  std::unique_ptr<optimization_guide::HintUpdateData> ProcessHintsComponent(
+  std::unique_ptr<optimization_guide::StoreUpdateData> ProcessHintsComponent(
       const optimization_guide::HintsComponentInfo& info,
       const base::flat_set<optimization_guide::proto::OptimizationType>&
           registered_optimization_types,
-      std::unique_ptr<optimization_guide::HintUpdateData> update_data);
+      std::unique_ptr<optimization_guide::StoreUpdateData> update_data);
 
   // Processes the optimization filters contained in the hints component.
   //
@@ -180,7 +180,7 @@
   // Updates the cache with the latest hints sent by the Component Updater.
   void UpdateComponentHints(
       base::OnceClosure update_closure,
-      std::unique_ptr<optimization_guide::HintUpdateData> hint_update_data);
+      std::unique_ptr<optimization_guide::StoreUpdateData> update_data);
 
   // Called when the hints have been fully updated with the latest hints from
   // the Component Updater. This is used as a signal during tests.
diff --git a/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc b/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc
index 3ad9eb93..e46854f 100644
--- a/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc
@@ -1592,21 +1592,22 @@
       optimization_guide::proto::OPTIMIZATION_TARGET_UNKNOWN,
       optimization_guide::proto::NOSCRIPT, &optimization_target_decision,
       &optimization_type_decision, &optimization_metadata);
-  // Make sure metadata is cleared.
-  EXPECT_EQ(0, optimization_metadata.previews_metadata.inflation_percent());
+  // Make sure metadata is populated.
+  EXPECT_EQ(1234, optimization_metadata.previews_metadata.inflation_percent());
 
   // Make sure decisions are logged correctly.
-  EXPECT_EQ(optimization_guide::OptimizationTargetDecision::kUnknown,
+  EXPECT_EQ(optimization_guide::OptimizationTargetDecision::
+                kModelNotAvailableOnClient,
             optimization_target_decision);
-  EXPECT_EQ(optimization_guide::OptimizationTypeDecision::kUnknown,
+  EXPECT_EQ(optimization_guide::OptimizationTypeDecision::kAllowedByHint,
             optimization_type_decision);
   // Make sure navigation data is populated correctly.
   OptimizationGuideNavigationData* navigation_data =
       GetOptimizationGuideNavigationData(navigation_handle.get());
   EXPECT_TRUE(navigation_data->has_hint_before_commit().value());
-  EXPECT_EQ(base::nullopt, navigation_data->has_hint_after_commit());
-  EXPECT_EQ(base::nullopt, navigation_data->serialized_hint_version_string());
-  EXPECT_FALSE(navigation_data->has_page_hint_value());
+  EXPECT_TRUE(navigation_data->has_hint_after_commit().value());
+  EXPECT_EQ("someversion", navigation_data->serialized_hint_version_string());
+  EXPECT_TRUE(navigation_data->has_page_hint_value());
 }
 
 TEST_F(OptimizationGuideHintsManagerTest,
diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
index 61620adc..736be03 100644
--- a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
@@ -99,20 +99,21 @@
     optimization_guide::OptimizationTypeDecision optimization_type_decision) {
   switch (optimization_target_decision) {
     case optimization_guide::OptimizationTargetDecision::kPageLoadDoesNotMatch:
+    case optimization_guide::OptimizationTargetDecision::
+        kModelNotAvailableOnClient:
+    case optimization_guide::OptimizationTargetDecision::
+        kModelPredictionHoldback:
       return optimization_guide::OptimizationGuideDecision::kFalse;
     case optimization_guide::OptimizationTargetDecision::kPageLoadMatches:
       return GetOptimizationGuideDecisionFromOptimizationTypeDecision(
           optimization_type_decision);
-    case optimization_guide::OptimizationTargetDecision::
-        kModelNotAvailableOnClient:
-      return optimization_guide::OptimizationGuideDecision::kFalse;
     default:
       return optimization_guide::OptimizationGuideDecision::kUnknown;
   }
   static_assert(
       optimization_guide::OptimizationTargetDecision::kMaxValue ==
           optimization_guide::OptimizationTargetDecision::
-              kModelNotAvailableOnClient,
+              kModelPredictionHoldback,
       "This function should be updated when a new OptimizationTargetDecision "
       "is added");
 }
@@ -190,8 +191,12 @@
   if (prediction_manager_) {
     optimization_target_decision = prediction_manager_->ShouldTargetNavigation(
         navigation_handle, optimization_target);
-    // TODO(crbug/1001194): Add feature param for propagating decision that
-    // allows for us to collect metrics without tainting the data.
+    if (optimization_guide::features::
+            ShouldOverrideOptimizationTargetDecisionForMetricsPurposes(
+                optimization_target)) {
+      optimization_target_decision = optimization_guide::
+          OptimizationTargetDecision::kModelPredictionHoldback;
+    }
   }
 
   LogDecisions(navigation_handle, optimization_target,
diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc b/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc
index c121243..b42911a 100644
--- a/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc
@@ -730,3 +730,44 @@
                            kModelNotAvailableOnClient),
       1);
 }
+
+class OptimizationGuideKeyedServiceModelPredictionHoldbackBrowserTest
+    : public OptimizationGuideKeyedServiceBrowserTest {
+ public:
+  OptimizationGuideKeyedServiceModelPredictionHoldbackBrowserTest() {
+    scoped_feature_list_.InitAndEnableFeatureWithParameters(
+        optimization_guide::features::kOptimizationTargetPrediction,
+        {{"painful_page_load_metrics_only", "true"}});
+  }
+  ~OptimizationGuideKeyedServiceModelPredictionHoldbackBrowserTest() override =
+      default;
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_F(
+    OptimizationGuideKeyedServiceModelPredictionHoldbackBrowserTest,
+    ModelPredictionHoldbackOverridesActualTargetDecision) {
+  PushHintsComponentAndWaitForCompletion();
+  RegisterWithKeyedService();
+
+  ukm::TestAutoSetUkmRecorder ukm_recorder;
+  base::HistogramTester histogram_tester;
+
+  ui_test_utils::NavigateToURL(browser(), url_with_hints());
+
+  EXPECT_EQ(RetryForHistogramUntilCountReached(
+                histogram_tester, "OptimizationGuide.LoadedHint.Result", 1),
+            1);
+  // There should be a hint that matches this URL.
+  histogram_tester.ExpectUniqueSample("OptimizationGuide.LoadedHint.Result",
+                                      true, 1);
+  EXPECT_EQ(optimization_guide::OptimizationGuideDecision::kFalse,
+            last_consumer_decision());
+  histogram_tester.ExpectUniqueSample(
+      "OptimizationGuide.TargetDecision.PainfulPageLoad",
+      static_cast<int>(optimization_guide::OptimizationTargetDecision::
+                           kModelPredictionHoldback),
+      1);
+}
diff --git a/chrome/browser/permissions/OWNERS b/chrome/browser/permissions/OWNERS
index 2dacbfde..693bef2 100644
--- a/chrome/browser/permissions/OWNERS
+++ b/chrome/browser/permissions/OWNERS
@@ -1,10 +1,6 @@
-benwells@chromium.org
-dominickn@chromium.org
-engedy@chromium.org
+file://chrome/browser/permissions/PERMISSIONS_OWNERS
 felt@chromium.org
 mlamouri@chromium.org
-raymes@chromium.org
-timloh@chromium.org
 
 # COMPONENT: Internals>Permissions
 # TEAM: permissions-dev@chromium.org
diff --git a/chrome/browser/permissions/PERMISSIONS_OWNERS b/chrome/browser/permissions/PERMISSIONS_OWNERS
index 695d59f..0d113fd0 100644
--- a/chrome/browser/permissions/PERMISSIONS_OWNERS
+++ b/chrome/browser/permissions/PERMISSIONS_OWNERS
@@ -3,3 +3,5 @@
 engedy@chromium.org
 raymes@chromium.org
 timloh@chromium.org
+hkamila@chromium.org
+andypaicu@chromium.org
diff --git a/chrome/browser/permissions/permission_request_manager_browsertest.cc b/chrome/browser/permissions/permission_request_manager_browsertest.cc
index b555578f8..c9be4717 100644
--- a/chrome/browser/permissions/permission_request_manager_browsertest.cc
+++ b/chrome/browser/permissions/permission_request_manager_browsertest.cc
@@ -16,7 +16,9 @@
 #include "chrome/browser/custom_handlers/register_protocol_handler_permission_request.h"
 #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h"
 #include "chrome/browser/media/webrtc/media_stream_devices_controller.h"
+#include "chrome/browser/permissions/mock_permission_request.h"
 #include "chrome/browser/permissions/permission_context_base.h"
+#include "chrome/browser/permissions/permission_features.h"
 #include "chrome/browser/permissions/permission_request_impl.h"
 #include "chrome/browser/permissions/permission_request_manager_test_api.h"
 #include "chrome/browser/permissions/permission_util.h"
@@ -689,6 +691,133 @@
       "PermissionRequestManager"));
 }
 
+// For browser tests feature overrides need to be enabled during SetUp.
+// Have a separate fixture based on which UI flavor needs to be enabled.
+class PermissionRequestManagerBrowserTest_StaticIcon
+    : public PermissionRequestManagerBrowserTest {
+ public:
+  void SetUp() override {
+    base::FieldTrialParams params;
+    params[kQuietNotificationPromptsUIFlavourParameterName] =
+        kQuietNotificationPromptsStaticIcon;
+    base::test::ScopedFeatureList scoped_feature_list;
+    scoped_feature_list.InitAndEnableFeatureWithParameters(
+        features::kQuietNotificationPrompts, params);
+
+    PermissionRequestManagerBrowserTest::SetUp();
+  }
+};
+
+class PermissionRequestManagerBrowserTest_AnimatedIcon
+    : public PermissionRequestManagerBrowserTest {
+ public:
+  void SetUp() override {
+    base::FieldTrialParams params;
+    params[kQuietNotificationPromptsUIFlavourParameterName] =
+        kQuietNotificationPromptsAnimatedIcon;
+    base::test::ScopedFeatureList scoped_feature_list;
+    scoped_feature_list.InitAndEnableFeatureWithParameters(
+        features::kQuietNotificationPrompts, params);
+
+    PermissionRequestManagerBrowserTest::SetUp();
+  }
+};
+
+// Quiet permission requests are cancelled when a new request is made.
+IN_PROC_BROWSER_TEST_F(PermissionRequestManagerBrowserTest_StaticIcon,
+                       QuietPendingRequestsKilledOnNewRequest) {
+  // First add a quiet permission request. Ensure that this request is decided
+  // by the end of this test.
+  MockPermissionRequest request_quiet(
+      "quiet", PermissionRequestType::PERMISSION_NOTIFICATIONS,
+      PermissionRequestGestureType::UNKNOWN);
+  GetPermissionRequestManager()->AddRequest(&request_quiet);
+  base::RunLoop().RunUntilIdle();
+
+  // Add a second permission request. This ones should cause the initial
+  // request to be cancelled.
+  MockPermissionRequest request_loud(
+      "loud", PermissionRequestType::PERMISSION_GEOLOCATION,
+      PermissionRequestGestureType::UNKNOWN);
+  GetPermissionRequestManager()->AddRequest(&request_loud);
+  base::RunLoop().RunUntilIdle();
+
+  // The first dialog should now have been decided.
+  EXPECT_TRUE(request_quiet.finished());
+  EXPECT_EQ(1u, GetPermissionRequestManager()->Requests().size());
+
+  // Cleanup remaining request. And check that this was the last request.
+  GetPermissionRequestManager()->Closing();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(0u, GetPermissionRequestManager()->Requests().size());
+}
+
+// Quiet permission requests are cancelled when a new request is made.
+IN_PROC_BROWSER_TEST_F(PermissionRequestManagerBrowserTest_AnimatedIcon,
+                       QuietPendingRequestsKilledOnNewRequest) {
+  // First add a quiet permission request. Ensure that this request is decided
+  // by the end of this test.
+  MockPermissionRequest request_quiet(
+      "quiet", PermissionRequestType::PERMISSION_NOTIFICATIONS,
+      PermissionRequestGestureType::UNKNOWN);
+  GetPermissionRequestManager()->AddRequest(&request_quiet);
+  base::RunLoop().RunUntilIdle();
+
+  // Add a second permission request. This ones should cause the initial
+  // request to be cancelled.
+  MockPermissionRequest request_loud(
+      "loud", PermissionRequestType::PERMISSION_GEOLOCATION,
+      PermissionRequestGestureType::UNKNOWN);
+  GetPermissionRequestManager()->AddRequest(&request_loud);
+  base::RunLoop().RunUntilIdle();
+
+  // The first dialog should now have been decided.
+  EXPECT_TRUE(request_quiet.finished());
+  EXPECT_EQ(1u, GetPermissionRequestManager()->Requests().size());
+
+  // Cleanup remaining request. And check that this was the last request.
+  GetPermissionRequestManager()->Closing();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(0u, GetPermissionRequestManager()->Requests().size());
+}
+
+// Two loud requests are simply queued one after another.
+IN_PROC_BROWSER_TEST_F(PermissionRequestManagerBrowserTest,
+                       LoudPendingRequestsQueued) {
+  MockPermissionRequest request1(
+      "request1", PermissionRequestType::PERMISSION_CLIPBOARD_READ,
+      PermissionRequestGestureType::UNKNOWN);
+  GetPermissionRequestManager()->AddRequest(&request1);
+  base::RunLoop().RunUntilIdle();
+
+  MockPermissionRequest request2("request2",
+                                 PermissionRequestType::PERMISSION_GEOLOCATION,
+                                 PermissionRequestGestureType::UNKNOWN);
+  GetPermissionRequestManager()->AddRequest(&request2);
+  base::RunLoop().RunUntilIdle();
+
+  // Both requests are still pending (though only one is active).
+  EXPECT_FALSE(request1.finished());
+  EXPECT_FALSE(request2.finished());
+  EXPECT_EQ(1u, GetPermissionRequestManager()->Requests().size());
+
+  // Close first request.
+  GetPermissionRequestManager()->Closing();
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_TRUE(request1.finished());
+  EXPECT_FALSE(request2.finished());
+  EXPECT_EQ(1u, GetPermissionRequestManager()->Requests().size());
+
+  // Close second request. No more requests pending
+  GetPermissionRequestManager()->Closing();
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_TRUE(request1.finished());
+  EXPECT_TRUE(request2.finished());
+  EXPECT_EQ(0u, GetPermissionRequestManager()->Requests().size());
+}
+
 // Test bubbles showing when tabs move between windows. Simulates a situation
 // that could result in permission bubbles not being dismissed, and a problem
 // referencing a temporary drag window. See http://crbug.com/754552.
diff --git a/chrome/browser/plugins/plugin_power_saver_browsertest.cc b/chrome/browser/plugins/plugin_power_saver_browsertest.cc
index c7e4f18..49c1078 100644
--- a/chrome/browser/plugins/plugin_power_saver_browsertest.cc
+++ b/chrome/browser/plugins/plugin_power_saver_browsertest.cc
@@ -8,7 +8,6 @@
 
 #include "base/bind.h"
 #include "base/command_line.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/stl_util.h"
 #include "base/strings/string_piece.h"
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc
index c4c3c7f..ab80848 100644
--- a/chrome/browser/policy/policy_browsertest.cc
+++ b/chrome/browser/policy/policy_browsertest.cc
@@ -25,7 +25,6 @@
 #include "base/json/json_reader.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
-#include "base/message_loop/message_loop.h"
 #include "base/message_loop/message_loop_current.h"
 #include "base/metrics/histogram_base.h"
 #include "base/metrics/histogram_samples.h"
diff --git a/chrome/browser/printing/cloud_print/privet_notifications_unittest.cc b/chrome/browser/printing/cloud_print/privet_notifications_unittest.cc
index d73190d..7086c4b 100644
--- a/chrome/browser/printing/cloud_print/privet_notifications_unittest.cc
+++ b/chrome/browser/printing/cloud_print/privet_notifications_unittest.cc
@@ -7,7 +7,6 @@
 #include <memory>
 #include <utility>
 
-#include "base/message_loop/message_loop.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/notifications/notification_display_service_tester.h"
 #include "chrome/browser/notifications/notification_test_util.h"
diff --git a/chrome/browser/printing/printing_layout_browsertest.cc b/chrome/browser/printing/printing_layout_browsertest.cc
index d218821..dd4e37df 100644
--- a/chrome/browser/printing/printing_layout_browsertest.cc
+++ b/chrome/browser/printing/printing_layout_browsertest.cc
@@ -7,7 +7,6 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/location.h"
-#include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
 #include "base/process/process_handle.h"
 #include "base/run_loop.h"
diff --git a/chrome/browser/profiles/gaia_info_update_service.cc b/chrome/browser/profiles/gaia_info_update_service.cc
index 7f4a2a8..1695558 100644
--- a/chrome/browser/profiles/gaia_info_update_service.cc
+++ b/chrome/browser/profiles/gaia_info_update_service.cc
@@ -132,8 +132,8 @@
     return;
   }
 
-  entry->SetGAIAName(full_name);
   entry->SetGAIAGivenName(given_name);
+  entry->SetGAIAName(full_name);
 
   if (picture_status == ProfileDownloader::PICTURE_SUCCESS) {
     profile_->GetPrefs()->SetString(prefs::kProfileGAIAInfoPictureURL,
diff --git a/chrome/browser/profiles/profile_attributes_entry.cc b/chrome/browser/profiles/profile_attributes_entry.cc
index 1b4bf8d..a41d558 100644
--- a/chrome/browser/profiles/profile_attributes_entry.cc
+++ b/chrome/browser/profiles/profile_attributes_entry.cc
@@ -108,32 +108,84 @@
     SetIsSigninRequired(false);
 #endif
   }
+
+  DCHECK(last_name_to_display_.empty());
+  last_name_to_display_ = GetName();
 }
 
 base::string16 ProfileAttributesEntry::GetLocalProfileName() const {
   return GetString16(ProfileInfoCache::kNameKey);
 }
 
+base::string16 ProfileAttributesEntry::GetGAIANameToDisplay() const {
+  base::string16 gaia_given_name =
+      GetString16(ProfileInfoCache::kGAIAGivenNameKey);
+  return gaia_given_name.empty() ? GetString16(ProfileInfoCache::kGAIANameKey)
+                                 : gaia_given_name;
+}
+
+bool ProfileAttributesEntry::ShouldShowProfileLocalName(
+    const base::string16& gaia_name_to_display) const {
+  bool is_using_default_name = IsUsingDefaultName();
+
+  // Customized profile name that is not equal to Gaia name.
+  if (!is_using_default_name &&
+      !base::EqualsCaseInsensitiveASCII(gaia_name_to_display,
+                                        GetLocalProfileName())) {
+    return true;
+  }
+
+  std::vector<ProfileAttributesEntry*> entries =
+      profile_info_cache_->GetAllProfilesAttributes();
+
+  for (ProfileAttributesEntry* entry : entries) {
+    if (entry == this) {
+      continue;
+    }
+
+    base::string16 other_gaia_name_to_display = entry->GetGAIANameToDisplay();
+    if (other_gaia_name_to_display.empty() ||
+        other_gaia_name_to_display != gaia_name_to_display)
+      continue;
+
+    bool other_is_using_default_name = entry->IsUsingDefaultName();
+    if (is_using_default_name) {
+      // Both profiles have a default profile name.
+      if (other_is_using_default_name) {
+        return true;
+      }
+      // The other profile name will be shown, no need to show |Person %n|.
+      continue;
+    }
+
+    // Current profile has a custom profile name that is equal to GAIA name.
+    if (other_is_using_default_name) {
+      // The other profile has a default profile name (Person %n) that will not
+      // be shown. Show the profile name for this profile to clear ambiguity.
+      return true;
+    }
+
+    // The other profile has a custom name. If for both profiles, the profile
+    // name is equal to Gaia name, then the profile name must be shown for both
+    // of them.
+    base::string16 other_local_profile_name = entry->GetLocalProfileName();
+    if (base::EqualsCaseInsensitiveASCII(other_gaia_name_to_display,
+                                         other_local_profile_name)) {
+      return true;
+    }
+  }
+  return false;
+}
+
 base::string16 ProfileAttributesEntry::GetNameToDisplay() const {
   DCHECK(base::FeatureList::IsEnabled(kConcatenateGaiaAndProfileName));
-  base::string16 name_to_display =
-      GetString16(ProfileInfoCache::kGAIAGivenNameKey);
-  if (name_to_display.empty())
-    name_to_display = GetString16(ProfileInfoCache::kGAIANameKey);
+  base::string16 name_to_display = GetGAIANameToDisplay();
 
   base::string16 local_profile_name = GetLocalProfileName();
   if (name_to_display.empty())
     return local_profile_name;
 
-  size_t number_of_profiles = profile_info_cache_->GetNumberOfProfiles();
-  if (number_of_profiles == 1)
-    return name_to_display;
-
-  auto it = std::search(name_to_display.begin(), name_to_display.end(),
-                        local_profile_name.begin(), local_profile_name.end(),
-                        base::CaseInsensitiveCompareASCII<char>());
-
-  if (it != name_to_display.end())
+  if (!ShouldShowProfileLocalName(name_to_display))
     return name_to_display;
 
   name_to_display.append(base::UTF8ToUTF16(" ("));
@@ -142,6 +194,19 @@
   return name_to_display;
 }
 
+base::string16 ProfileAttributesEntry::GetLastNameToDisplay() const {
+  return last_name_to_display_;
+}
+
+bool ProfileAttributesEntry::HasProfileNameChanged() {
+  base::string16 name = GetName();
+  if (last_name_to_display_ == name)
+    return false;
+
+  last_name_to_display_ = name;
+  return true;
+}
+
 base::string16 ProfileAttributesEntry::GetName() const {
   if (base::FeatureList::IsEnabled(kConcatenateGaiaAndProfileName))
     return GetNameToDisplay();
diff --git a/chrome/browser/profiles/profile_attributes_entry.h b/chrome/browser/profiles/profile_attributes_entry.h
index dac9bca5..6eb36bc 100644
--- a/chrome/browser/profiles/profile_attributes_entry.h
+++ b/chrome/browser/profiles/profile_attributes_entry.h
@@ -45,6 +45,9 @@
   // Gets the name of the profile to be displayed in the User Menu. The name can
   // be the GAIA name, local profile name or a combination of them.
   base::string16 GetName() const;
+  // Returns true if the profile name has changed.
+  bool HasProfileNameChanged();
+
   // Gets the local profile name.
   base::string16 GetLocalProfileName() const;
 
@@ -160,9 +163,24 @@
                   const base::FilePath& path,
                   PrefService* prefs);
 
-  // Gets the name of the profile as the concatenation of the Gaia name and the
-  // profile name, which is the one displayed in the User Menu.
+  // Gets the name of the profile which is the one displayed in the User Menu,
+  // which could be:
+  // - Profile name (The profile is not signed in).
+  // - Gaia name if the profile name is empty or |ShouldShowProfileLocalName()|
+  //   return false.
+  // - Otherwise the concatenation of GAIA name and local profile name.
   base::string16 GetNameToDisplay() const;
+  base::string16 GetGAIANameToDisplay() const;
+  base::string16 GetLastNameToDisplay() const;
+
+  // Returns true if:
+  // - The user has chosen a local profile name on purpose. One exception where
+  //   we don't show the local profile name, is when it is equal to the
+  //   GAIA name.
+  // - If two profiles have the same GAIA name and we need to show the local
+  //   profile name to clear ambiguity.
+  bool ShouldShowProfileLocalName(
+      const base::string16& gaia_name_to_display) const;
 
   // Loads or uses an already loaded high resolution image of the generic
   // profile avatar.
@@ -210,6 +228,7 @@
   PrefService* prefs_;
   base::FilePath profile_path_;
   std::string storage_key_;
+  base::string16 last_name_to_display_;
 
   // A separate boolean flag indicates whether the signin is required when force
   // signin is enabled. So that the profile locked status will be stored in
diff --git a/chrome/browser/profiles/profile_attributes_storage_unittest.cc b/chrome/browser/profiles/profile_attributes_storage_unittest.cc
index 230a8cf..2e1c1b8 100644
--- a/chrome/browser/profiles/profile_attributes_storage_unittest.cc
+++ b/chrome/browser/profiles/profile_attributes_storage_unittest.cc
@@ -322,6 +322,7 @@
 
   TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsEphemeral);
 
+  EXPECT_CALL(observer(), OnProfileNameChanged(path, _)).Times(2);
   TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsUsingDefaultName);
   VerifyAndResetCallExpectations();
 
diff --git a/chrome/browser/profiles/profile_info_cache.cc b/chrome/browser/profiles/profile_info_cache.cc
index 75cd830..9abc67b 100644
--- a/chrome/browser/profiles/profile_info_cache.cc
+++ b/chrome/browser/profiles/profile_info_cache.cc
@@ -154,33 +154,25 @@
   if (account_id.HasAccountIdKey())
     info->SetString(kAccountIdKey, account_id.GetAccountIdKey());
   cache->SetWithoutPathExpansion(key, std::move(info));
-
-  // Switching from single profile to multi-profile might change the existing
-  // profile display name. We append the profile name to GAIA name only in case
-  // of multi-profile.
-  ProfileAttributesEntry* entry = nullptr;
-  base::string16 old_single_profile_name;
-  if (GetNumberOfProfiles() == 1 &&
-      base::FeatureList::IsEnabled(kConcatenateGaiaAndProfileName)) {
-    std::vector<ProfileAttributesEntry*> entries = GetAllProfilesAttributes();
-    entry = entries[0];
-    old_single_profile_name = entry->GetName();
-  }
-
   keys_.push_back(key);
   profile_attributes_entries_[user_data_dir_.AppendASCII(key).value()] =
       std::unique_ptr<ProfileAttributesEntry>();
 
-  bool single_profile_name_changed =
-      entry && (entry->GetName() != old_single_profile_name);
-
   if (!disable_avatar_download_for_testing_)
     DownloadHighResAvatarIfNeeded(icon_index, profile_path);
 
-  for (auto& observer : observer_list_) {
+  NotifyIfProfileNamesHaveChanged();
+  for (auto& observer : observer_list_)
     observer.OnProfileAdded(profile_path);
-    if (single_profile_name_changed) {
-      observer.OnProfileNameChanged(entry->GetPath(), old_single_profile_name);
+}
+
+void ProfileInfoCache::NotifyIfProfileNamesHaveChanged() {
+  std::vector<ProfileAttributesEntry*> entries = GetAllProfilesAttributes();
+  for (ProfileAttributesEntry* entry : entries) {
+    base::string16 old_display_name = entry->GetLastNameToDisplay();
+    if (entry->HasProfileNameChanged()) {
+      for (auto& observer : observer_list_)
+        observer.OnProfileNameChanged(entry->GetPath(), old_display_name);
     }
   }
 }
@@ -192,23 +184,6 @@
     NOTREACHED();
     return;
   }
-  // Switching from multi-profile to single profile might change the profile
-  // display name for the single profile left after deletion of the profile with
-  // |profile_path|. We append the profile name to GAIA name only in case of
-  // multi-profile.
-  size_t number_of_profiles = GetNumberOfProfiles();
-  ProfileAttributesEntry* single_profile_entry = nullptr;
-  base::string16 old_single_profile_name;
-  if (number_of_profiles == 2 &&
-      base::FeatureList::IsEnabled(kConcatenateGaiaAndProfileName)) {
-    for (auto& it : profile_attributes_entries_) {
-      base::FilePath path(it.first);
-      if (it.first != profile_path.value()) {
-        GetProfileAttributesWithPath(path, &single_profile_entry);
-        old_single_profile_name = single_profile_entry->GetName();
-      }
-    }
-  }
 
   base::string16 name = entry->GetName();
 
@@ -222,16 +197,9 @@
   keys_.erase(std::find(keys_.begin(), keys_.end(), key));
   profile_attributes_entries_.erase(profile_path.value());
 
-  bool single_profile_name_changed =
-      single_profile_entry &&
-      single_profile_entry->GetName() != old_single_profile_name;
-
+  NotifyIfProfileNamesHaveChanged();
   for (auto& observer : observer_list_) {
     observer.OnProfileWasRemoved(profile_path, name);
-    if (single_profile_name_changed) {
-      observer.OnProfileNameChanged(single_profile_entry->GetPath(),
-                                    old_single_profile_name);
-    }
   }
 }
 
@@ -448,18 +416,9 @@
   if (name == current_name)
     return;
 
-  base::string16 old_display_name = GetNameToDisplayOfProfileAtIndex(index);
   info->SetString(kNameKey, name);
-
   SetInfoForProfileAtIndex(index, std::move(info));
-
-  base::string16 new_display_name = GetNameToDisplayOfProfileAtIndex(index);
-  base::FilePath profile_path = GetPathOfProfileAtIndex(index);
-
-  if (old_display_name != new_display_name) {
-    for (auto& observer : observer_list_)
-      observer.OnProfileNameChanged(profile_path, old_display_name);
-  }
+  NotifyIfProfileNamesHaveChanged();
 }
 
 void ProfileInfoCache::SetAuthInfoOfProfileAtIndex(
@@ -564,18 +523,11 @@
   if (name == GetGAIANameOfProfileAtIndex(index))
     return;
 
-  base::string16 old_display_name = GetNameToDisplayOfProfileAtIndex(index);
   std::unique_ptr<base::DictionaryValue> info(
       GetInfoForProfileAtIndex(index)->DeepCopy());
   info->SetString(kGAIANameKey, name);
   SetInfoForProfileAtIndex(index, std::move(info));
-  base::string16 new_display_name = GetNameToDisplayOfProfileAtIndex(index);
-  base::FilePath profile_path = GetPathOfProfileAtIndex(index);
-
-  if (old_display_name != new_display_name) {
-    for (auto& observer : observer_list_)
-      observer.OnProfileNameChanged(profile_path, old_display_name);
-  }
+  NotifyIfProfileNamesHaveChanged();
 }
 
 void ProfileInfoCache::SetGAIAGivenNameOfProfileAtIndex(
@@ -584,18 +536,11 @@
   if (name == GetGAIAGivenNameOfProfileAtIndex(index))
     return;
 
-  base::string16 old_display_name = GetNameToDisplayOfProfileAtIndex(index);
   std::unique_ptr<base::DictionaryValue> info(
       GetInfoForProfileAtIndex(index)->DeepCopy());
   info->SetString(kGAIAGivenNameKey, name);
   SetInfoForProfileAtIndex(index, std::move(info));
-  base::string16 new_display_name = GetNameToDisplayOfProfileAtIndex(index);
-  base::FilePath profile_path = GetPathOfProfileAtIndex(index);
-
-  if (old_display_name != new_display_name) {
-    for (auto& observer : observer_list_)
-      observer.OnProfileNameChanged(profile_path, old_display_name);
-  }
+  NotifyIfProfileNamesHaveChanged();
 }
 
 void ProfileInfoCache::SetGAIAPictureOfProfileAtIndex(size_t index,
@@ -672,20 +617,12 @@
   if (value == ProfileIsUsingDefaultNameAtIndex(index))
     return;
 
-  base::string16 old_display_name = GetNameToDisplayOfProfileAtIndex(index);
-
   std::unique_ptr<base::DictionaryValue> info(
       GetInfoForProfileAtIndex(index)->DeepCopy());
   info->SetBoolean(kIsUsingDefaultNameKey, value);
   SetInfoForProfileAtIndex(index, std::move(info));
 
-  base::string16 new_display_name = GetNameToDisplayOfProfileAtIndex(index);
-  const base::FilePath profile_path = GetPathOfProfileAtIndex(index);
-
-  if (old_display_name != new_display_name) {
-    for (auto& observer : observer_list_)
-      observer.OnProfileNameChanged(profile_path, old_display_name);
-  }
+  NotifyIfProfileNamesHaveChanged();
 }
 
 void ProfileInfoCache::SetProfileIsUsingDefaultAvatarAtIndex(
diff --git a/chrome/browser/profiles/profile_info_cache.h b/chrome/browser/profiles/profile_info_cache.h
index 3e5ed91..8b0d9ba0 100644
--- a/chrome/browser/profiles/profile_info_cache.h
+++ b/chrome/browser/profiles/profile_info_cache.h
@@ -197,6 +197,8 @@
   // recomputed to "Person 1" and "Person 2".
   void RecomputeProfileNamesIfNeeded();
 
+  void NotifyIfProfileNamesHaveChanged();
+
   std::vector<std::string> keys_;
   const base::FilePath user_data_dir_;
 
diff --git a/chrome/browser/profiles/profile_info_cache_unittest.cc b/chrome/browser/profiles/profile_info_cache_unittest.cc
index 7d99272..fd41a23 100644
--- a/chrome/browser/profiles/profile_info_cache_unittest.cc
+++ b/chrome/browser/profiles/profile_info_cache_unittest.cc
@@ -58,22 +58,21 @@
     const base::FilePath& profile_path) {
   base::string16 profile_name = GetCache()->GetNameToDisplayOfProfileAtIndex(
       GetCache()->GetIndexOfProfileWithPath(profile_path));
-  EXPECT_TRUE(profile_names_.find(profile_name) == profile_names_.end());
-  profile_names_.insert(profile_name);
+  EXPECT_TRUE(profile_names_.find(profile_path) == profile_names_.end());
+  profile_names_.insert({profile_path, profile_name});
 }
 
 void ProfileNameVerifierObserver::OnProfileWillBeRemoved(
     const base::FilePath& profile_path) {
-  base::string16 profile_name = GetCache()->GetNameToDisplayOfProfileAtIndex(
-      GetCache()->GetIndexOfProfileWithPath(profile_path));
-  EXPECT_TRUE(profile_names_.find(profile_name) != profile_names_.end());
-  profile_names_.erase(profile_name);
+  auto it = profile_names_.find(profile_path);
+  EXPECT_TRUE(it != profile_names_.end());
+  profile_names_.erase(it);
 }
 
 void ProfileNameVerifierObserver::OnProfileWasRemoved(
     const base::FilePath& profile_path,
     const base::string16& profile_name) {
-  EXPECT_TRUE(profile_names_.find(profile_name) == profile_names_.end());
+  EXPECT_TRUE(profile_names_.find(profile_path) == profile_names_.end());
 }
 
 void ProfileNameVerifierObserver::OnProfileNameChanged(
@@ -82,17 +81,13 @@
   base::string16 new_profile_name =
       GetCache()->GetNameToDisplayOfProfileAtIndex(
           GetCache()->GetIndexOfProfileWithPath(profile_path));
-  EXPECT_TRUE(profile_names_.find(old_profile_name) != profile_names_.end());
-  EXPECT_TRUE(profile_names_.find(new_profile_name) == profile_names_.end());
-  profile_names_.erase(old_profile_name);
-  profile_names_.insert(new_profile_name);
+  EXPECT_TRUE(profile_names_[profile_path] == old_profile_name);
+  profile_names_[profile_path] = new_profile_name;
 }
 
 void ProfileNameVerifierObserver::OnProfileAvatarChanged(
     const base::FilePath& profile_path) {
-  base::string16 profile_name = GetCache()->GetNameToDisplayOfProfileAtIndex(
-      GetCache()->GetIndexOfProfileWithPath(profile_path));
-  EXPECT_TRUE(profile_names_.find(profile_name) != profile_names_.end());
+  EXPECT_TRUE(profile_names_.find(profile_path) != profile_names_.end());
 }
 
 ProfileInfoCache* ProfileNameVerifierObserver::GetCache() {
@@ -111,11 +106,6 @@
   testing_profile_manager_.profile_info_cache()->AddObserver(&name_observer_);
 }
 
-void ProfileInfoCacheTest::RemoveObserver() {
-  testing_profile_manager_.profile_info_cache()->RemoveObserver(
-      &name_observer_);
-}
-
 void ProfileInfoCacheTest::TearDown() {
   // Drain remaining tasks to make sure all tasks are completed. This prevents
   // memory leaks.
@@ -150,27 +140,8 @@
     }
   }
 
-  base::string16 GetExpectedNameToDisplay(const base::string16& gaia_name,
-                                          const base::string16 profile_name,
-                                          bool is_using_default,
-                                          bool concatenate_enabled,
-                                          bool single_profile) {
-    if (gaia_name.empty() || profile_name.empty())
-      return gaia_name.empty() ? profile_name : gaia_name;
-
-    if (!concatenate_enabled)
-      return is_using_default ? gaia_name : profile_name;
-
-    if (single_profile)
-      return gaia_name;
-
-    auto it = std::search(gaia_name.begin(), gaia_name.end(),
-                          profile_name.begin(), profile_name.end(),
-                          base::CaseInsensitiveCompareASCII<char>());
-
-    if (it != gaia_name.end())
-      return gaia_name;
-
+  base::string16 GetConcatenation(const base::string16& gaia_name,
+                                  const base::string16 profile_name) {
     base::string16 name_to_display(gaia_name);
     name_to_display.append(base::UTF8ToUTF16(" ("));
     name_to_display.append(profile_name);
@@ -221,10 +192,13 @@
     GetCache()->SetGAIANameOfProfileAtIndex(i, gaia_name);
 
     EXPECT_EQ(i + 1, GetCache()->GetNumberOfProfiles());
-    EXPECT_EQ(GetExpectedNameToDisplay(gaia_name, profile_name, false,
-                                       concatenate_enabled_,
-                                       GetCache()->GetNumberOfProfiles() == 1),
+    base::string16 expected_profile_name =
+        concatenate_enabled_ ? GetConcatenation(gaia_name, profile_name)
+                             : profile_name;
+
+    EXPECT_EQ(expected_profile_name,
               GetCache()->GetNameToDisplayOfProfileAtIndex(i));
+
     EXPECT_EQ(profile_path, GetCache()->GetPathOfProfileAtIndex(i));
 #if !defined(OS_ANDROID)
     const SkBitmap* actual_icon =
@@ -254,8 +228,10 @@
     base::string16 profile_name =
         ASCIIToUTF16(base::StringPrintf("name_%ud", i));
     base::string16 gaia_name = ASCIIToUTF16(base::StringPrintf("gaia_%ud", i));
-    EXPECT_EQ(GetExpectedNameToDisplay(gaia_name, profile_name, false,
-                                       concatenate_enabled_, false),
+    base::string16 expected_profile_name =
+        concatenate_enabled_ ? GetConcatenation(gaia_name, profile_name)
+                             : profile_name;
+    EXPECT_EQ(expected_profile_name,
               GetCache()->GetNameToDisplayOfProfileAtIndex(i));
 #if !defined(OS_ANDROID)
     EXPECT_EQ(i, GetCache()->GetAvatarIconIndexOfProfileAtIndex(i));
@@ -287,25 +263,30 @@
   // Since there is a GAIA name, we use that as a display name.
   EXPECT_TRUE(GetCache()->GetGAIANameOfProfileAtIndex(index1).empty());
   EXPECT_EQ(gaia_name, GetCache()->GetGAIANameOfProfileAtIndex(index2));
-  EXPECT_EQ(GetExpectedNameToDisplay(gaia_name, profile_name, true,
-                                     concatenate_enabled_, false),
-            GetCache()->GetNameToDisplayOfProfileAtIndex(index2));
+  EXPECT_EQ(gaia_name, GetCache()->GetNameToDisplayOfProfileAtIndex(index2));
 
   base::string16 custom_name(ASCIIToUTF16("Custom name"));
   GetCache()->SetLocalProfileNameOfProfileAtIndex(index2, custom_name);
   GetCache()->SetProfileIsUsingDefaultNameAtIndex(index2, false);
 
-  EXPECT_EQ(GetExpectedNameToDisplay(gaia_name, custom_name, false,
-                                     concatenate_enabled_, false),
+  base::string16 expected_profile_name =
+      concatenate_enabled_ ? GetConcatenation(gaia_name, custom_name)
+                           : custom_name;
+  EXPECT_EQ(expected_profile_name,
             GetCache()->GetNameToDisplayOfProfileAtIndex(index2));
   EXPECT_EQ(gaia_name, GetCache()->GetGAIANameOfProfileAtIndex(index2));
 }
 
 TEST_F(ProfileInfoCacheTest, ConcatenateGaiaNameAndProfileName) {
+  // We should only append the profile name to the GAIA name if:
+  // - The user has chosen a profile name on purpose.
+  // - Two profiles has the sama GAIA name and we need to show it to
+  //   clear ambiguity.
+  // If one of the two conditions hold, we will show the profile name in this
+  // format |GAIA name (Profile local name)|
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndEnableFeature(kConcatenateGaiaAndProfileName);
-
-  // Single profile should not append the profile name to Gaia name.
+  // Single profile.
   GetCache()->AddProfileToCache(
       GetProfilePath("path_1"), ASCIIToUTF16("Person 1"), std::string(),
       base::string16(), false, 0, std::string(), EmptyAccountId());
@@ -319,51 +300,109 @@
   EXPECT_EQ(ASCIIToUTF16("Patt"),
             GetCache()->GetNameToDisplayOfProfileAtIndex(index1));
 
+  // Set a custom profile name.
+  GetCache()->SetProfileIsUsingDefaultNameAtIndex(index1, false);
+  GetCache()->SetLocalProfileNameOfProfileAtIndex(index1, ASCIIToUTF16("Work"));
+  EXPECT_EQ(ASCIIToUTF16("Patt (Work)"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index1));
+
+  // Set the profile name to be equal to GAIA name.
+  GetCache()->SetLocalProfileNameOfProfileAtIndex(index1, ASCIIToUTF16("patt"));
+  EXPECT_EQ(ASCIIToUTF16("Patt"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index1));
   // Multiple profiles.
+  // Add another profile with the same GAIA name and a default profile name.
   GetCache()->AddProfileToCache(
       GetProfilePath("path_2"), ASCIIToUTF16("Person 2"), std::string(),
       base::string16(), false, 0, std::string(), EmptyAccountId());
-
-  EXPECT_EQ(ASCIIToUTF16("Patt (Person 1)"),
-            GetCache()->GetNameToDisplayOfProfileAtIndex(index1));
-
   int index2 = GetCache()->GetIndexOfProfileWithPath(GetProfilePath("path_2"));
+  EXPECT_EQ(ASCIIToUTF16("Patt"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index1));
   EXPECT_EQ(ASCIIToUTF16("Person 2"),
             GetCache()->GetNameToDisplayOfProfileAtIndex(index2));
-  // Set Gaia name.
-  GetCache()->SetGAIANameOfProfileAtIndex(index2, ASCIIToUTF16("Patti Smith"));
-  // Profile name is a substring of Gaia name.
-  GetCache()->SetLocalProfileNameOfProfileAtIndex(index2,
-                                                  ASCIIToUTF16("patti"));
-  EXPECT_EQ(ASCIIToUTF16("Patti Smith"),
-            GetCache()->GetNameToDisplayOfProfileAtIndex(index2));
-  // Profile name equals Gaia given name.
-  GetCache()->SetGAIAGivenNameOfProfileAtIndex(index2, ASCIIToUTF16("Patti"));
-  EXPECT_EQ(ASCIIToUTF16("Patti"),
-            GetCache()->GetNameToDisplayOfProfileAtIndex(index2));
-  GetCache()->SetLocalProfileNameOfProfileAtIndex(index2, ASCIIToUTF16("Work"));
-  EXPECT_EQ(ASCIIToUTF16("Patti (Work)"),
+
+  GetCache()->SetLocalProfileNameOfProfileAtIndex(index1, ASCIIToUTF16("Work"));
+  EXPECT_EQ(ASCIIToUTF16("Patt (Work)"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index1));
+  EXPECT_EQ(ASCIIToUTF16("Person 2"),
             GetCache()->GetNameToDisplayOfProfileAtIndex(index2));
 
-  // Empty profile name.
-  GetCache()->AddProfileToCache(GetProfilePath("path_3"), base::string16(),
-                                std::string(), base::string16(), false, 0,
-                                std::string(), EmptyAccountId());
+  // A second profile with a different GAIA name should not affect the first
+  // profile.
+  GetCache()->SetGAIAGivenNameOfProfileAtIndex(index2, ASCIIToUTF16("Olly"));
+  EXPECT_EQ(ASCIIToUTF16("Patt (Work)"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index1));
+  EXPECT_EQ(ASCIIToUTF16("Olly"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index2));
+
+  // Mark profile name as default.
+  GetCache()->SetProfileIsUsingDefaultNameAtIndex(index1, true);
+  GetCache()->SetLocalProfileNameOfProfileAtIndex(index1,
+                                                  ASCIIToUTF16("Person 1"));
+  EXPECT_EQ(ASCIIToUTF16("Patt"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index1));
+  EXPECT_EQ(ASCIIToUTF16("Olly"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index2));
+
+  // Add a third profile with the same GAIA name as the first.
+  // The two profiles are marked as using default profile names.
+  GetCache()->AddProfileToCache(
+      GetProfilePath("path_3"), ASCIIToUTF16("Person 3"), std::string(),
+      base::string16(), false, 0, std::string(), EmptyAccountId());
   int index3 = GetCache()->GetIndexOfProfileWithPath(GetProfilePath("path_3"));
-  GetCache()->SetGAIAGivenNameOfProfileAtIndex(index3, ASCIIToUTF16("Pat"));
-  EXPECT_EQ(ASCIIToUTF16("Pat"),
-            GetCache()->GetNameToDisplayOfProfileAtIndex(index3));
-  GetCache()->SetGAIANameOfProfileAtIndex(index3, ASCIIToUTF16("Pat Smith"));
-  GetCache()->SetGAIAGivenNameOfProfileAtIndex(index3, ASCIIToUTF16(""));
-  EXPECT_EQ(ASCIIToUTF16("Pat Smith"),
+  GetCache()->SetGAIANameOfProfileAtIndex(index3, ASCIIToUTF16("Patt Smith"));
+  EXPECT_EQ(ASCIIToUTF16("Patt"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index1));
+  EXPECT_EQ(ASCIIToUTF16("Patt Smith"),
             GetCache()->GetNameToDisplayOfProfileAtIndex(index3));
 
-  // Single profile.
-  GetCache()->DeleteProfileFromCache(GetProfilePath("path_1"));
-  GetCache()->DeleteProfileFromCache(GetProfilePath("path_3"));
-  index2 = GetCache()->GetIndexOfProfileWithPath(GetProfilePath("path_2"));
-  EXPECT_EQ(ASCIIToUTF16("Patti"),
-            GetCache()->GetNameToDisplayOfProfileAtIndex(index2));
+  // Two profiles with same GAIA name and default profile name.
+  // Empty GAIA given name.
+  GetCache()->SetGAIANameOfProfileAtIndex(index3, ASCIIToUTF16("Patt"));
+  EXPECT_EQ(ASCIIToUTF16("Patt (Person 1)"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index1));
+  EXPECT_EQ(ASCIIToUTF16("Patt (Person 3)"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index3));
+  // Set GAIA given name.
+  GetCache()->SetGAIAGivenNameOfProfileAtIndex(index3, ASCIIToUTF16("Patt"));
+  EXPECT_EQ(ASCIIToUTF16("Patt (Person 1)"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index1));
+  EXPECT_EQ(ASCIIToUTF16("Patt (Person 3)"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index3));
+
+  // Customize the profile name for one of the two profiles.
+  GetCache()->SetProfileIsUsingDefaultNameAtIndex(index3, false);
+  GetCache()->SetLocalProfileNameOfProfileAtIndex(index3,
+                                                  ASCIIToUTF16("Personal"));
+  EXPECT_EQ(ASCIIToUTF16("Patt"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index1));
+  EXPECT_EQ(ASCIIToUTF16("Patt (Personal)"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index3));
+
+  // Set one of the profile names to be equal to GAIA name, we should still show
+  // the profile name to clear ambiguity.
+  GetCache()->SetLocalProfileNameOfProfileAtIndex(index3, ASCIIToUTF16("patt"));
+  EXPECT_EQ(ASCIIToUTF16("Patt"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index1));
+  EXPECT_EQ(ASCIIToUTF16("Patt (patt)"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index3));
+
+  // One profile with a custom name and another profile with a custom name equal
+  // to GAIA name.
+  GetCache()->SetProfileIsUsingDefaultNameAtIndex(index1, false);
+  GetCache()->SetLocalProfileNameOfProfileAtIndex(index1, ASCIIToUTF16("Work"));
+  EXPECT_EQ(ASCIIToUTF16("Patt (Work)"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index1));
+  EXPECT_EQ(ASCIIToUTF16("Patt"),
+            GetCache()->GetNameToDisplayOfProfileAtIndex(index3));
+
+  GetCache()->SetLocalProfileNameOfProfileAtIndex(index1, ASCIIToUTF16("Patt"));
+  // EXPECT_EQ(ASCIIToUTF16("Patt (Patt)"),
+  //           GetCache()->GetNameToDisplayOfProfileAtIndex(index1));
+  // EXPECT_EQ(ASCIIToUTF16("Patt (patt)"),
+  //           GetCache()->GetNameToDisplayOfProfileAtIndex(index3));
+  // EXPECT_EQ(ASCIIToUTF16("Olly"),
+  //           GetCache()->GetNameToDisplayOfProfileAtIndex(index2));
 }
 
 TEST_F(ProfileInfoCacheTest, DeleteProfile) {
@@ -750,7 +789,6 @@
 #if !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
 TEST_F(ProfileInfoCacheTest, RecomputeProfileNamesIfNeeded) {
   // Duplicate profile names causes the observer to crash.
-  RemoveObserver();
   EXPECT_EQ(0U, GetCache()->GetNumberOfProfiles());
 
   base::FilePath path_1 = GetProfilePath("path_1");
diff --git a/chrome/browser/profiles/profile_info_cache_unittest.h b/chrome/browser/profiles/profile_info_cache_unittest.h
index c2da1a6e..655d266 100644
--- a/chrome/browser/profiles/profile_info_cache_unittest.h
+++ b/chrome/browser/profiles/profile_info_cache_unittest.h
@@ -38,7 +38,7 @@
 
  private:
   ProfileInfoCache* GetCache();
-  std::set<base::string16> profile_names_;
+  std::map<base::FilePath, base::string16> profile_names_;
   TestingProfileManager* testing_profile_manager_;
   DISALLOW_COPY_AND_ASSIGN(ProfileNameVerifierObserver);
 };
diff --git a/chrome/browser/profiles/profile_manager_unittest.cc b/chrome/browser/profiles/profile_manager_unittest.cc
index 047a0cef..aebf8f8 100644
--- a/chrome/browser/profiles/profile_manager_unittest.cc
+++ b/chrome/browser/profiles/profile_manager_unittest.cc
@@ -1507,11 +1507,7 @@
   const base::string16 profile_name2 = storage.ChooseNameForNewProfile(1u);
   Profile* profile2 = AddProfileToStorage(profile_manager,
                                           "path_2", profile_name2);
-  base::string16 expected_profile_name(gaia_given_name);
-  expected_profile_name.append(ASCIIToUTF16(" ("));
-  expected_profile_name.append(profile_name1);
-  expected_profile_name.append(ASCIIToUTF16(")"));
-  EXPECT_EQ(expected_profile_name,
+  EXPECT_EQ(gaia_given_name,
             profiles::GetAvatarNameForProfile(profile1->GetPath()));
   EXPECT_EQ(profile_name2,
             profiles::GetAvatarNameForProfile(profile2->GetPath()));
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html
index 54b34cb..f714c72 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_page.html
+++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html
@@ -117,13 +117,15 @@
         <settings-toggle-button id="canMakePaymentToggle"
             aria-label="$i18n{canMakePaymentToggleLabel}"
             label="$i18n{canMakePaymentToggleLabel}"
-            pref="{{prefs.payments.can_make_payment_enabled}}">
+            pref="{{prefs.payments.can_make_payment_enabled}}"
+            on-settings-boolean-control-change="onCanMakePaymentChange_">
         </settings-toggle-button>
         <settings-toggle-button hidden="[[!pageVisibility.networkPrediction]]"
             pref="{{prefs.net.network_prediction_options}}"
             label="$i18n{networkPredictionEnabled}"
             sub-label="$i18n{networkPredictionEnabledDesc}"
-            numeric-unchecked-value="[[networkPredictionUncheckedValue_]]">
+            numeric-unchecked-value="[[networkPredictionUncheckedValue_]]"
+            on-settings-boolean-control-change="onNetworkPredictionChange_">
         </settings-toggle-button>
 <if expr="chromeos">
         <settings-toggle-button
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.js b/chrome/browser/resources/settings/privacy_page/privacy_page.js
index a7b63fd..d41bcf8 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_page.js
+++ b/chrome/browser/resources/settings/privacy_page/privacy_page.js
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+cr.exportPath('settings');
+
 /**
  * @typedef {{
  *   enabled: boolean,
@@ -28,6 +30,29 @@
   DEFAULT: 1,
 };
 
+/**
+ * These values are persisted to logs. Entries should not be renumbered and
+ * numeric values should never be reused.
+ *
+ * Must be kept in sync with enum of the same name in
+ * histograms/enums.xml
+ *
+ * Interactions across all settings pages should be added here.
+ */
+settings.SettingsPageInteractions = {
+  PRIVACY_SYNC_AND_GOOGLE_SERVICES: 0,
+  PRIVACY_CHROME_SIGN_IN: 1,
+  PRIVACY_DO_NOT_TRACK: 2,
+  PRIVACY_PAYMENT_METHOD: 3,
+  PRIVACY_NETWORK_PREDICTION: 4,
+  PRIVACY_MANAGE_CERTIFICATES: 5,
+  PRIVACY_SECURITY_KEYS: 6,
+  PRIVACY_SITE_SETTINGS: 7,
+  PRIVACY_CLEAR_BROWSING_DATA: 8,
+  // Leave this at the end.
+  SETTINGS_MAX_VALUE: 8,
+};
+
 Polymer({
   is: 'settings-privacy-page',
 
@@ -276,12 +301,25 @@
   },
 
   /**
+   * Records changes made to the "can a website check if you have saved payment
+   * methods" setting for logging, the logic of actually changing the setting
+   * is taken care of by the webUI pref.
+   * @private
+   */
+  onCanMakePaymentChange_: function() {
+    this.browserProxy_.recordSettingsPageHistogram(
+        settings.SettingsPageInteractions.PRIVACY_PAYMENT_METHOD);
+  },
+
+  /**
    * Handles the change event for the do-not-track toggle. Shows a
    * confirmation dialog when enabling the setting.
    * @param {!Event} event
    * @private
    */
   onDoNotTrackChange_: function(event) {
+    this.browserProxy_.recordSettingsPageHistogram(
+        settings.SettingsPageInteractions.PRIVACY_DO_NOT_TRACK);
     const target = /** @type {!SettingsToggleButtonElement} */ (event.target);
     if (!target.checked) {
       // Always allow disabling the pref.
@@ -342,6 +380,18 @@
     // <if expr="is_win or is_macosx">
     this.browserProxy_.showManageSSLCertificates();
     // </if>
+    this.browserProxy_.recordSettingsPageHistogram(
+        settings.SettingsPageInteractions.PRIVACY_MANAGE_CERTIFICATES);
+  },
+
+  /**
+   * Records changes made to the network prediction setting for logging, the
+   * logic of actually changing the setting is taken care of by the webUI pref.
+   * @private
+   */
+  onNetworkPredictionChange_: function() {
+    this.browserProxy_.recordSettingsPageHistogram(
+        settings.SettingsPageInteractions.PRIVACY_NETWORK_PREDICTION);
   },
 
   /** @private */
@@ -349,6 +399,8 @@
     // Navigate to sync page, and remove (privacy related) search text to
     // avoid the sync page from being hidden.
     settings.navigateTo(settings.routes.SYNC, null, true);
+    this.browserProxy_.recordSettingsPageHistogram(
+        settings.SettingsPageInteractions.PRIVACY_SYNC_AND_GOOGLE_SERVICES);
   },
 
   /**
@@ -371,11 +423,15 @@
   /** @private */
   onSiteSettingsTap_: function() {
     settings.navigateTo(settings.routes.SITE_SETTINGS);
+    this.browserProxy_.recordSettingsPageHistogram(
+        settings.SettingsPageInteractions.PRIVACY_SITE_SETTINGS);
   },
 
   /** @private */
   onClearBrowsingDataTap_: function() {
     settings.navigateTo(settings.routes.CLEAR_BROWSER_DATA);
+    this.browserProxy_.recordSettingsPageHistogram(
+        settings.SettingsPageInteractions.PRIVACY_CLEAR_BROWSING_DATA);
   },
 
   /** @private */
@@ -387,6 +443,8 @@
   /** @private */
   onSecurityKeysTap_: function() {
     settings.navigateTo(settings.routes.SECURITY_KEYS);
+    this.browserProxy_.recordSettingsPageHistogram(
+        settings.SettingsPageInteractions.PRIVACY_SECURITY_KEYS);
   },
 
   /** @private */
@@ -412,6 +470,8 @@
           .sendPrefChange();
       this.showRestart_ = true;
     }
+    this.browserProxy_.recordSettingsPageHistogram(
+        settings.SettingsPageInteractions.PRIVACY_CHROME_SIGN_IN);
   },
 
   /** @private */
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page_browser_proxy.js b/chrome/browser/resources/settings/privacy_page/privacy_page_browser_proxy.js
index 0cfa4c5..b1442c7 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_page_browser_proxy.js
+++ b/chrome/browser/resources/settings/privacy_page/privacy_page_browser_proxy.js
@@ -25,6 +25,12 @@
 
     // </if>
 
+    /**
+     * Helper function that calls recordHistogram for the
+     * SettingsPage.SettingsPageInteractions histogram
+     */
+    recordSettingsPageHistogram(value) {}
+
     /** @param {boolean} enabled */
     setBlockAutoplayEnabled(enabled) {}
   }
@@ -46,6 +52,14 @@
 
     // </if>
 
+    /** @override*/
+    recordSettingsPageHistogram(value) {
+      chrome.send('metricsHandler:recordInHistogram', [
+        'SettingsPage.SettingsPageInteractions', value,
+        settings.SettingsPageInteractions.SETTINGS_MAX_VALUE
+      ]);
+    }
+
     /** @override */
     setBlockAutoplayEnabled(enabled) {
       chrome.send('setBlockAutoplayEnabled', [enabled]);
diff --git a/chrome/browser/safe_browsing/certificate_reporting_service_unittest.cc b/chrome/browser/safe_browsing/certificate_reporting_service_unittest.cc
index 7154215..1d22188 100644
--- a/chrome/browser/safe_browsing/certificate_reporting_service_unittest.cc
+++ b/chrome/browser/safe_browsing/certificate_reporting_service_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/atomic_sequence_num.h"
 #include "base/bind.h"
 #include "base/bind_helpers.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/task/post_task.h"
diff --git a/chrome/browser/service_process/service_process_control_browsertest.cc b/chrome/browser/service_process/service_process_control_browsertest.cc
index 0ea2f64..b4a80e3 100644
--- a/chrome/browser/service_process/service_process_control_browsertest.cc
+++ b/chrome/browser/service_process/service_process_control_browsertest.cc
@@ -9,7 +9,6 @@
 #include "base/bind_helpers.h"
 #include "base/command_line.h"
 #include "base/location.h"
-#include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
 #include "base/process/kill.h"
 #include "base/process/process.h"
@@ -208,8 +207,8 @@
   EXPECT_TRUE(ServiceProcessControl::GetInstance()->Shutdown());
 }
 
-// Flaky on macOS: https://crbug.com/978948
-#if defined(OS_MACOSX)
+// Flaky on macOS, linux and windows: https://crbug.com/978948
+#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
 #define MAYBE_LaunchAndReconnect DISABLED_LaunchAndReconnect
 #else
 #define MAYBE_LaunchAndReconnect LaunchAndReconnect
diff --git a/chrome/browser/sessions/session_restore_browsertest.cc b/chrome/browser/sessions/session_restore_browsertest.cc
index 1328428..ddfe0a0 100644
--- a/chrome/browser/sessions/session_restore_browsertest.cc
+++ b/chrome/browser/sessions/session_restore_browsertest.cc
@@ -21,11 +21,13 @@
 #include "base/time/time.h"
 #include "base/util/memory_pressure/fake_memory_pressure_monitor.h"
 #include "build/build_config.h"
+#include "chrome/browser/browser_process.h"
 #include "chrome/browser/defaults.h"
 #include "chrome/browser/first_run/first_run.h"
 #include "chrome/browser/prefs/session_startup_pref.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_window.h"
 #include "chrome/browser/resource_coordinator/session_restore_policy.h"
 #include "chrome/browser/resource_coordinator/tab_manager_features.h"
 #include "chrome/browser/sessions/session_restore_test_helper.h"
@@ -42,6 +44,7 @@
 #include "chrome/browser/ui/browser_navigator_params.h"
 #include "chrome/browser/ui/browser_tabstrip.h"
 #include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/startup/startup_types.h"
 #include "chrome/browser/ui/tabs/tab_group_id.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/ui_features.h"
@@ -227,6 +230,20 @@
     }
   }
 
+#if !defined(OS_CHROMEOS)
+  Profile* CreateSecondaryProfile(int profile_num) {
+    base::ScopedAllowBlockingForTesting allow_blocking;
+    ProfileManager* profile_manager = g_browser_process->profile_manager();
+    base::FilePath profile_path = profile_manager->user_data_dir();
+    profile_path = profile_path.AppendASCII(
+        base::StringPrintf("New Profile %d", profile_num));
+    Profile* profile = profile_manager->GetProfile(profile_path);
+    SessionStartupPref pref(SessionStartupPref::LAST);
+    SessionStartupPref::SetStartupPref(profile, pref);
+    return profile;
+  }
+#endif  // !defined(OS_CHROMEOS)
+
   GURL url1_;
   GURL url2_;
   GURL url3_;
@@ -1738,6 +1755,131 @@
   }
 }
 
+#if !defined(OS_CHROMEOS)
+namespace {
+
+class MultiBrowserObserver : public BrowserListObserver {
+ public:
+  enum class Event {
+    kAdded,
+    kRemoved,
+  };
+  MultiBrowserObserver(size_t num_expected, Event event)
+      : num_expected_(num_expected), event_(event) {
+    BrowserList::AddObserver(this);
+  }
+  ~MultiBrowserObserver() override { BrowserList::RemoveObserver(this); }
+
+  // Note that the returned pointers might no longer be valid (because the
+  // Browser objects were closed).
+  std::vector<Browser*> Wait() {
+    run_loop_.Run();
+    return browsers_;
+  }
+
+  // BrowserListObserver implementation.
+  void OnBrowserAdded(Browser* browser) override {
+    if (event_ == Event::kAdded) {
+      browsers_.push_back(browser);
+      if (--num_expected_ == 0)
+        run_loop_.Quit();
+    }
+  }
+  void OnBrowserRemoved(Browser* browser) override {
+    if (event_ == Event::kRemoved) {
+      browsers_.push_back(browser);
+      if (--num_expected_ == 0)
+        run_loop_.Quit();
+    }
+  }
+
+ private:
+  size_t num_expected_;
+  Event event_;
+  std::vector<Browser*> browsers_;
+  base::RunLoop run_loop_;
+
+  DISALLOW_COPY_AND_ASSIGN(MultiBrowserObserver);
+};
+
+}  // namespace
+
+// Test that when closing a profile with multiple browsers, all browsers are
+// restored when the profile is reopened.
+IN_PROC_BROWSER_TEST_F(SessionRestoreTest, RestoreAllBrowsers) {
+  // Create two profiles with two browsers each.
+  Browser* first_profile_browser_one = browser();
+  chrome::NewWindow(first_profile_browser_one);
+  Browser* first_profile_browser_two =
+      BrowserList::GetInstance()->GetLastActive();
+  EXPECT_NE(first_profile_browser_one, first_profile_browser_two);
+
+  Profile* second_profile = CreateSecondaryProfile(1);
+  profiles::FindOrCreateNewWindowForProfile(
+      second_profile, chrome::startup::IS_NOT_PROCESS_STARTUP,
+      chrome::startup::IS_NOT_FIRST_RUN, false);
+  Browser* second_profile_browser_one = ui_test_utils::WaitForBrowserToOpen();
+  chrome::NewWindow(second_profile_browser_one);
+  Browser* second_profile_browser_two =
+      BrowserList::GetInstance()->GetLastActive();
+  EXPECT_NE(second_profile_browser_one, second_profile_browser_two);
+
+  // Navigate the tab in each browser to a unique URL we can later reidentify.
+  ui_test_utils::NavigateToURL(first_profile_browser_one,
+                               GURL("data:,profile 1 browser 1"));
+  ui_test_utils::NavigateToURL(first_profile_browser_two,
+                               GURL("data:,profile 1 browser 2"));
+  ui_test_utils::NavigateToURL(second_profile_browser_one,
+                               GURL("data:,profile 2 browser 1"));
+  ui_test_utils::NavigateToURL(second_profile_browser_two,
+                               GURL("data:,profile 2 browser 2"));
+
+  // Double-check preconditions.
+  ProfileManager* profile_manager = g_browser_process->profile_manager();
+  ASSERT_EQ(profile_manager->GetNumberOfProfiles(), 2u);
+  ASSERT_EQ(chrome::GetTotalBrowserCount(), 4u);
+
+  // Close all profiles associated with the second profile.
+  MultiBrowserObserver removed_observer(2,
+                                        MultiBrowserObserver::Event::kRemoved);
+  BrowserList::GetInstance()->CloseAllBrowsersWithProfile(
+      second_profile, BrowserList::CloseCallback(),
+      BrowserList::CloseCallback(), false);
+  removed_observer.Wait();
+
+  // The second profile should have no browsers anymore at this point.
+  ASSERT_EQ(chrome::FindBrowserWithProfile(second_profile), nullptr);
+  ASSERT_EQ(chrome::GetTotalBrowserCount(), 2u);
+
+  // Clean up now stale pointers.
+  second_profile_browser_one = nullptr;
+  second_profile_browser_two = nullptr;
+
+  // Reopen the second profile and trigger session restore.
+  MultiBrowserObserver added_observer(2, MultiBrowserObserver::Event::kAdded);
+  chrome::NewEmptyWindow(second_profile);
+  std::vector<Browser*> browsers = added_observer.Wait();
+
+  // Verify that the correct URLs where restored.
+  std::set<GURL> expected_urls;
+  expected_urls.insert(GURL("data:,profile 2 browser 1"));
+  expected_urls.insert(GURL("data:,profile 2 browser 2"));
+  for (Browser* browser : browsers) {
+    WaitForTabsToLoad(browser);
+    TabStripModel* tab_strip_model = browser->tab_strip_model();
+    EXPECT_EQ(tab_strip_model->count(), 1);
+    EXPECT_EQ(tab_strip_model->active_index(), 0);
+    EXPECT_EQ(
+        expected_urls.erase(tab_strip_model->GetActiveWebContents()->GetURL()),
+        1u)
+        << "Browser with unexpected URL "
+        << tab_strip_model->GetActiveWebContents()
+               ->GetURL()
+               .possibly_invalid_spec();
+  }
+}
+#endif  // !defined(OS_CHROMEOS)
+
 // PRE_CorrectLoadingOrder is flaky on ChromeOS MSAN and Mac.
 // See http://crbug.com/493167.
 #if (defined(OS_CHROMEOS) && defined(MEMORY_SANITIZER)) || defined(OS_MACOSX)
diff --git a/chrome/browser/sharing/click_to_call/feature.cc b/chrome/browser/sharing/click_to_call/feature.cc
index 33759a69..7dddca3 100644
--- a/chrome/browser/sharing/click_to_call/feature.cc
+++ b/chrome/browser/sharing/click_to_call/feature.cc
@@ -12,9 +12,9 @@
 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
     defined(OS_CHROMEOS)
 const base::Feature kClickToCallContextMenuForSelectedText{
-    "ClickToCallContextMenuForSelectedText", base::FEATURE_DISABLED_BY_DEFAULT};
+    "ClickToCallContextMenuForSelectedText", base::FEATURE_ENABLED_BY_DEFAULT};
 
 const base::Feature kClickToCallUI{"ClickToCallUI",
-                                   base::FEATURE_DISABLED_BY_DEFAULT};
+                                   base::FEATURE_ENABLED_BY_DEFAULT};
 #endif  // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
         // defined(OS_CHROMEOS)
diff --git a/chrome/browser/ssl/certificate_error_report_unittest.cc b/chrome/browser/ssl/certificate_error_report_unittest.cc
index 211f5f5..a74be7d 100644
--- a/chrome/browser/ssl/certificate_error_report_unittest.cc
+++ b/chrome/browser/ssl/certificate_error_report_unittest.cc
@@ -11,7 +11,6 @@
 
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
-#include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread.h"
diff --git a/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc b/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc
index eef3088..0b8e358 100644
--- a/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc
@@ -15,6 +15,7 @@
 #include "chrome/browser/sync/test/integration/encryption_helper.h"
 #include "chrome/browser/sync/test/integration/passwords_helper.h"
 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
+#include "chrome/browser/sync/test/integration/single_client_status_change_checker.h"
 #include "chrome/browser/sync/test/integration/status_change_checker.h"
 #include "chrome/browser/sync/test/integration/sync_test.h"
 #include "chrome/browser/ui/browser.h"
@@ -164,6 +165,25 @@
   DISALLOW_COPY_AND_ASSIGN(PageTitleChecker);
 };
 
+class PasswordsDataTypeActiveChecker : public SingleClientStatusChangeChecker {
+ public:
+  explicit PasswordsDataTypeActiveChecker(syncer::ProfileSyncService* service)
+      : SingleClientStatusChangeChecker(service) {}
+  ~PasswordsDataTypeActiveChecker() override {}
+
+  // StatusChangeChecker implementation.
+  bool IsExitConditionSatisfied() override {
+    return service()->GetActiveDataTypes().Has(syncer::PASSWORDS);
+  }
+
+  std::string GetDebugMessage() const override {
+    return "Waiting for PASSWORDS to become active";
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(PasswordsDataTypeActiveChecker);
+};
+
 class SingleClientNigoriSyncTestWithUssTests
     : public SyncTest,
       public testing::WithParamInterface<bool> {
@@ -379,6 +399,7 @@
   ASSERT_TRUE(TrustedVaultKeyRequiredStateChecker(GetSyncService(0),
                                                   /*desired_state=*/true)
                   .Wait());
+  ASSERT_FALSE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::PASSWORDS));
 
   // Mimic opening a web page where the user can interact with the retrieval
   // flow.
@@ -393,9 +414,10 @@
       GetBrowser(0)->tab_strip_model()->GetActiveWebContents());
   EXPECT_TRUE(title_checker.Wait());
 
-  ASSERT_TRUE(TrustedVaultKeyRequiredStateChecker(GetSyncService(0),
+  EXPECT_TRUE(TrustedVaultKeyRequiredStateChecker(GetSyncService(0),
                                                   /*desired_state=*/false)
                   .Wait());
+  EXPECT_TRUE(PasswordsDataTypeActiveChecker(GetSyncService(0)).Wait());
 }
 
 IN_PROC_BROWSER_TEST_F(SingleClientNigoriWithWebApiTest,
@@ -436,6 +458,7 @@
   EXPECT_FALSE(GetSyncService(0)
                    ->GetUserSettings()
                    ->IsTrustedVaultKeyRequiredForPreferredDataTypes());
+  EXPECT_TRUE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::PASSWORDS));
 }
 
 // Same as SingleClientNigoriWithWebApiTest but does NOT override
diff --git a/chrome/browser/task_manager/task_manager_browsertest.cc b/chrome/browser/task_manager/task_manager_browsertest.cc
index bae72c0..273b0fd3 100644
--- a/chrome/browser/task_manager/task_manager_browsertest.cc
+++ b/chrome/browser/task_manager/task_manager_browsertest.cc
@@ -462,7 +462,14 @@
   ASSERT_TRUE(model()->GetTabId(app_tab).is_valid());
 }
 
-IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeHostedAppTabChanges) {
+#if defined(OS_LINUX)
+// Flaky on Linux https://crbug.com/1017110
+#define MAYBE_NoticeHostedAppTabChanges DISABLED_NoticeHostedAppTabChanges
+#else
+#define MAYBE_NoticeHostedAppTabChanges NoticeHostedAppTabChanges
+#endif
+IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest,
+                       MAYBE_NoticeHostedAppTabChanges) {
   ShowTaskManager();
 
   // The app under test acts on URLs whose host is "localhost",
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 23a188b..e169ed2a 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -1921,6 +1921,7 @@
       "//chromeos/assistant:buildflags",
       "//chromeos/audio",
       "//chromeos/components/account_manager",
+      "//chromeos/components/help_app_ui",
       "//chromeos/components/media_app_ui",
       "//chromeos/components/multidevice",
       "//chromeos/components/multidevice/debug_webui",
diff --git a/chrome/browser/ui/app_list/app_list_controller_delegate.cc b/chrome/browser/ui/app_list/app_list_controller_delegate.cc
index fa9b2f4..5058b21 100644
--- a/chrome/browser/ui/app_list/app_list_controller_delegate.cc
+++ b/chrome/browser/ui/app_list/app_list_controller_delegate.cc
@@ -11,8 +11,6 @@
 #include "base/feature_list.h"
 #include "base/metrics/histogram_macros.h"
 #include "build/build_config.h"
-#include "chrome/browser/apps/app_service/app_service_proxy.h"
-#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/extensions/extension_util.h"
 #include "chrome/browser/extensions/install_tracker_factory.h"
 #include "chrome/browser/extensions/launch_util.h"
@@ -129,10 +127,10 @@
 
 void AppListControllerDelegate::UninstallApp(Profile* profile,
                                              const std::string& app_id) {
-  apps::AppServiceProxy* proxy =
-      apps::AppServiceProxyFactory::GetForProfile(profile);
-  DCHECK(proxy);
-  proxy->Uninstall(app_id, GetAppListWindow());
+  // ExtensionUninstall deletes itself when done or aborted.
+  ExtensionUninstaller* uninstaller =
+      new ExtensionUninstaller(profile, app_id, GetAppListWindow());
+  uninstaller->Run();
 }
 
 bool AppListControllerDelegate::IsAppFromWebStore(Profile* profile,
diff --git a/chrome/browser/ui/app_list/arc/arc_app_context_menu.cc b/chrome/browser/ui/app_list/arc/arc_app_context_menu.cc
index abeacbb..b2135a1b 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_context_menu.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_context_menu.cc
@@ -9,8 +9,6 @@
 #include "ash/public/cpp/tablet_mode.h"
 #include "base/bind.h"
 #include "base/feature_list.h"
-#include "chrome/browser/apps/app_service/app_service_proxy.h"
-#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/chromeos/arc/app_shortcuts/arc_app_shortcuts_menu_builder.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/app_list/app_context_menu_delegate.h"
@@ -91,11 +89,7 @@
   if (command_id == ash::LAUNCH_NEW) {
     delegate()->ExecuteLaunchCommand(event_flags);
   } else if (command_id == ash::UNINSTALL) {
-    apps::AppServiceProxy* proxy =
-        apps::AppServiceProxyFactory::GetForProfile(profile());
-    DCHECK(proxy);
-    proxy->Uninstall(app_id(),
-                     controller() ? controller()->GetAppListWindow() : nullptr);
+    arc::ShowArcAppUninstallDialog(profile(), controller(), app_id());
   } else if (command_id == ash::SHOW_APP_INFO) {
     ShowPackageInfo();
   } else if (command_id >= ash::LAUNCH_APP_SHORTCUT_FIRST &&
diff --git a/chrome/browser/ui/app_list/crostini/crostini_app_context_menu.cc b/chrome/browser/ui/app_list/crostini/crostini_app_context_menu.cc
index e6e698f..022f0f3 100644
--- a/chrome/browser/ui/app_list/crostini/crostini_app_context_menu.cc
+++ b/chrome/browser/ui/app_list/crostini/crostini_app_context_menu.cc
@@ -6,8 +6,6 @@
 
 #include "ash/public/cpp/app_menu_constants.h"
 #include "base/bind_helpers.h"
-#include "chrome/browser/apps/app_service/app_service_proxy.h"
-#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/chromeos/crostini/crostini_manager.h"
 #include "chrome/browser/chromeos/crostini/crostini_util.h"
 #include "chrome/grit/generated_resources.h"
@@ -33,14 +31,11 @@
 
 void CrostiniAppContextMenu::ExecuteCommand(int command_id, int event_flags) {
   switch (command_id) {
-    case ash::UNINSTALL: {
+    case ash::UNINSTALL:
       DCHECK_NE(app_id(), crostini::kCrostiniTerminalId);
-      apps::AppServiceProxy* proxy =
-          apps::AppServiceProxyFactory::GetForProfile(profile());
-      DCHECK(proxy);
-      proxy->Uninstall(app_id(), nullptr /* parent_window */);
+      crostini::ShowCrostiniAppUninstallerView(profile(), app_id());
       return;
-    }
+
     case ash::STOP_APP:
       if (app_id() == crostini::kCrostiniTerminalId) {
         crostini::CrostiniManager::GetForProfile(profile())->StopVm(
diff --git a/chrome/browser/ui/ash/launcher/arc_launcher_context_menu.cc b/chrome/browser/ui/ash/launcher/arc_launcher_context_menu.cc
index aed82ec8..a991e39d0 100644
--- a/chrome/browser/ui/ash/launcher/arc_launcher_context_menu.cc
+++ b/chrome/browser/ui/ash/launcher/arc_launcher_context_menu.cc
@@ -67,10 +67,16 @@
     return;
   }
   if (command_id == ash::UNINSTALL) {
-    apps::AppServiceProxy* proxy =
-        apps::AppServiceProxyFactory::GetForProfile(controller()->profile());
-    DCHECK(proxy);
-    proxy->Uninstall(item().id.app_id, nullptr /* parent_window */);
+    if (base::FeatureList::IsEnabled(features::kAppServiceShelf)) {
+      apps::AppServiceProxy* proxy =
+          apps::AppServiceProxyFactory::GetForProfile(controller()->profile());
+      DCHECK(proxy);
+      proxy->Uninstall(item().id.app_id, nullptr /* parent_window */);
+      return;
+    }
+
+    arc::ShowArcAppUninstallDialog(controller()->profile(),
+                                   nullptr /* controller */, item().id.app_id);
     return;
   }
 
diff --git a/chrome/browser/ui/ash/launcher/crostini_shelf_context_menu.cc b/chrome/browser/ui/ash/launcher/crostini_shelf_context_menu.cc
index 3b4209e..80bbe7fa 100644
--- a/chrome/browser/ui/ash/launcher/crostini_shelf_context_menu.cc
+++ b/chrome/browser/ui/ash/launcher/crostini_shelf_context_menu.cc
@@ -10,8 +10,6 @@
 #include "ash/public/cpp/app_menu_constants.h"
 #include "ash/public/cpp/shelf_item.h"
 #include "base/bind_helpers.h"
-#include "chrome/browser/apps/app_service/app_service_proxy.h"
-#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/chromeos/crostini/crostini_manager.h"
 #include "chrome/browser/chromeos/crostini/crostini_registry_service.h"
 #include "chrome/browser/chromeos/crostini/crostini_registry_service_factory.h"
@@ -70,14 +68,11 @@
 
 void CrostiniShelfContextMenu::ExecuteCommand(int command_id, int event_flags) {
   switch (command_id) {
-    case ash::UNINSTALL: {
+    case ash::UNINSTALL:
       DCHECK_NE(item().id.app_id, crostini::kCrostiniTerminalId);
-      apps::AppServiceProxy* proxy =
-          apps::AppServiceProxyFactory::GetForProfile(controller()->profile());
-      DCHECK(proxy);
-      proxy->Uninstall(item().id.app_id, nullptr /* parent_window */);
+      crostini::ShowCrostiniAppUninstallerView(controller()->profile(),
+                                               item().id.app_id);
       return;
-    }
     case ash::STOP_APP:
       if (item().id.app_id == crostini::kCrostiniTerminalId) {
         crostini::CrostiniManager::GetForProfile(controller()->profile())
diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc
index fc690798..f6f1ee3 100644
--- a/chrome/browser/ui/browser_browsertest.cc
+++ b/chrome/browser/ui/browser_browsertest.cc
@@ -17,7 +17,6 @@
 #include "base/files/file_path.h"
 #include "base/location.h"
 #include "base/memory/ref_counted.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/stl_util.h"
diff --git a/chrome/browser/ui/browser_focus_uitest.cc b/chrome/browser/ui/browser_focus_uitest.cc
index 29b155f..52b84e0f 100644
--- a/chrome/browser/ui/browser_focus_uitest.cc
+++ b/chrome/browser/ui/browser_focus_uitest.cc
@@ -8,7 +8,6 @@
 #include "base/files/file_util.h"
 #include "base/format_macros.h"
 #include "base/location.h"
-#include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
diff --git a/chrome/browser/ui/browser_list.cc b/chrome/browser/ui/browser_list.cc
index 7c2d82f..78160711 100644
--- a/chrome/browser/ui/browser_list.cc
+++ b/chrome/browser/ui/browser_list.cc
@@ -17,6 +17,7 @@
 #include "chrome/browser/lifetime/browser_shutdown.h"
 #include "chrome/browser/lifetime/termination_notification.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/sessions/session_service_factory.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/browser_list_observer.h"
@@ -163,6 +164,10 @@
     const CloseCallback& on_close_success,
     const CloseCallback& on_close_aborted,
     bool skip_beforeunload) {
+#if BUILDFLAG(ENABLE_SESSION_SERVICE)
+  SessionServiceFactory::ShutdownForProfile(profile);
+#endif
+
   TryToCloseBrowserList(GetBrowsersToClose(profile), on_close_success,
                         on_close_aborted, profile->GetPath(),
                         skip_beforeunload);
diff --git a/chrome/browser/ui/exclusive_access/flash_fullscreen_interactive_browsertest.cc b/chrome/browser/ui/exclusive_access/flash_fullscreen_interactive_browsertest.cc
index 5f97e92..0c6a4505 100644
--- a/chrome/browser/ui/exclusive_access/flash_fullscreen_interactive_browsertest.cc
+++ b/chrome/browser/ui/exclusive_access/flash_fullscreen_interactive_browsertest.cc
@@ -6,7 +6,6 @@
 #include "base/bind_helpers.h"
 #include "base/location.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
diff --git a/chrome/browser/ui/startup/startup_browser_creator.cc b/chrome/browser/ui/startup/startup_browser_creator.cc
index f118e6d..2bb0ffc7 100644
--- a/chrome/browser/ui/startup/startup_browser_creator.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator.cc
@@ -23,6 +23,7 @@
 #include "base/metrics/histogram_base.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/statistics_recorder.h"
+#include "base/scoped_observer.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_tokenizer.h"
 #include "base/task/post_task.h"
@@ -33,7 +34,6 @@
 #include "chrome/browser/app_mode/app_mode_utils.h"
 #include "chrome/browser/apps/platform_apps/app_load_service.h"
 #include "chrome/browser/browser_process.h"
-#include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/extensions/startup_helper.h"
 #include "chrome/browser/first_run/first_run.h"
 #include "chrome/browser/prefs/incognito_mode_prefs.h"
@@ -42,6 +42,7 @@
 #include "chrome/browser/profiles/profile_attributes_entry.h"
 #include "chrome/browser/profiles/profile_attributes_storage.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile_observer.h"
 #include "chrome/browser/profiles/profiles_state.h"
 #include "chrome/browser/search_engines/template_url_service_factory.h"
 #include "chrome/browser/ui/browser.h"
@@ -65,10 +66,6 @@
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/child_process_security_policy.h"
 #include "content/public/browser/navigation_controller.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
 #include "content/public/common/content_switches.h"
 #include "extensions/common/switches.h"
 #include "printing/buildflags/buildflags.h"
@@ -111,12 +108,10 @@
 namespace {
 
 // Keeps track on which profiles have been launched.
-class ProfileLaunchObserver : public content::NotificationObserver,
+class ProfileLaunchObserver : public ProfileObserver,
                               public BrowserListObserver {
  public:
   ProfileLaunchObserver() {
-    registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED,
-                   content::NotificationService::AllSources());
     BrowserList::AddObserver(this);
   }
 
@@ -128,12 +123,9 @@
     MaybeActivateProfile();
   }
 
-  // content::NotificationObserver:
-  void Observe(int type,
-               const content::NotificationSource& source,
-               const content::NotificationDetails& details) override {
-    DCHECK_EQ(type, chrome::NOTIFICATION_PROFILE_DESTROYED);
-    Profile* profile = content::Source<Profile>(source).ptr();
+  // ProfileObserver:
+  void OnProfileWillBeDestroyed(Profile* profile) override {
+    observed_profiles_.Remove(profile);
     launched_profiles_.erase(profile);
     opened_profiles_.erase(profile);
     if (profile == profile_to_activate_)
@@ -148,6 +140,8 @@
   }
 
   void AddLaunched(Profile* profile) {
+    if (!observed_profiles_.IsObserving(profile))
+      observed_profiles_.Add(profile);
     launched_profiles_.insert(profile);
     if (chrome::FindBrowserWithProfile(profile)) {
       // A browser may get opened before we get initialized (e.g., in tests),
@@ -164,6 +158,8 @@
   bool activated_profile() { return activated_profile_; }
 
   void set_profile_to_activate(Profile* profile) {
+    if (!observed_profiles_.IsObserving(profile))
+      observed_profiles_.Add(profile);
     profile_to_activate_ = profile;
     MaybeActivateProfile();
   }
@@ -186,7 +182,7 @@
                    base::BindOnce(&ProfileLaunchObserver::ActivateProfile,
                                   base::Unretained(this)));
     // Avoid posting more than once before ActivateProfile gets called.
-    registrar_.RemoveAll();
+    observed_profiles_.RemoveAll();
     BrowserList::RemoveObserver(this);
   }
 
@@ -215,13 +211,13 @@
   // |profile_to_activate_|, otherwise, new browser windows being opened will
   // be activated on top of it.
   std::set<const Profile*> opened_profiles_;
-  content::NotificationRegistrar registrar_;
   // This is null until the profile to activate has been chosen. This value
   // should only be set once all profiles have been launched, otherwise,
   // activation may not happen after the launch of newer profiles.
   Profile* profile_to_activate_ = nullptr;
   // Set once we attempted to activate a profile. We only get one shot at this.
   bool activated_profile_ = false;
+  ScopedObserver<Profile, ProfileObserver> observed_profiles_{this};
 
   DISALLOW_COPY_AND_ASSIGN(ProfileLaunchObserver);
 };
diff --git a/chrome/browser/ui/views/crostini/crostini_ansible_software_config_view.cc b/chrome/browser/ui/views/crostini/crostini_ansible_software_config_view.cc
index 55d199a..662b35c 100644
--- a/chrome/browser/ui/views/crostini/crostini_ansible_software_config_view.cc
+++ b/chrome/browser/ui/views/crostini/crostini_ansible_software_config_view.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/ui/views/crostini/crostini_ansible_software_config_view.h"
 
+#include "base/logging.h"
 #include "chrome/browser/chromeos/crostini/crostini_util.h"
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
@@ -53,10 +54,6 @@
   return l10n_util::GetStringUTF16(IDS_CROSTINI_ANSIBLE_SOFTWARE_CONFIG_LABEL);
 }
 
-bool CrostiniAnsibleSoftwareConfigView::ShouldShowCloseButton() const {
-  return false;
-}
-
 gfx::Size CrostiniAnsibleSoftwareConfigView::CalculatePreferredSize() const {
   const int dialog_width = ChromeLayoutProvider::Get()->GetDistanceMetric(
                                DISTANCE_STANDALONE_BUBBLE_PREFERRED_WIDTH) -
@@ -64,39 +61,36 @@
   return gfx::Size(dialog_width, GetHeightForWidth(dialog_width));
 }
 
-void CrostiniAnsibleSoftwareConfigView::OnApplicationStarted() {
-  DCHECK_EQ(state_, State::INSTALLING);
-
-  state_ = State::APPLYING;
+void CrostiniAnsibleSoftwareConfigView::
+    OnAnsibleSoftwareConfigurationStarted() {
+  NOTIMPLEMENTED();
 }
 
-void CrostiniAnsibleSoftwareConfigView::OnApplicationFinished() {
-  DCHECK_EQ(state_, State::APPLYING);
-
+void CrostiniAnsibleSoftwareConfigView::OnAnsibleSoftwareConfigurationFinished(
+    bool success) {
+  DCHECK_EQ(state_, State::CONFIGURING);
   ansible_management_service_->RemoveObserver(this);
+
+  if (!success) {
+    state_ = State::ERROR;
+
+    // Bring dialog to front.
+    GetWidget()->Show();
+
+    GetWidget()->UpdateWindowTitle();
+    subtext_label_->SetText(l10n_util::GetStringUTF16(
+        IDS_CROSTINI_ANSIBLE_SOFTWARE_CONFIG_ERROR_SUBTEXT));
+
+    progress_bar_->SetVisible(false);
+
+    DialogModelChanged();
+    return;
+  }
   // TODO(crbug.com/1005774): We should preferably add another ClosedReason
   // instead of passing kUnspecified.
   GetWidget()->CloseWithReason(views::Widget::ClosedReason::kUnspecified);
 }
 
-void CrostiniAnsibleSoftwareConfigView::OnError() {
-  DCHECK(state_ == State::APPLYING || state_ == State::INSTALLING);
-  state_ = State::ERROR;
-
-  ansible_management_service_->RemoveObserver(this);
-
-  // Bring dialog to front.
-  GetWidget()->Show();
-
-  GetWidget()->UpdateWindowTitle();
-  subtext_label_->SetText(l10n_util::GetStringUTF16(
-      IDS_CROSTINI_ANSIBLE_SOFTWARE_CONFIG_ERROR_SUBTEXT));
-
-  progress_bar_->SetVisible(false);
-
-  DialogModelChanged();
-}
-
 base::string16
 CrostiniAnsibleSoftwareConfigView::GetSubtextLabelStringForTesting() {
   return subtext_label_->GetText();
diff --git a/chrome/browser/ui/views/crostini/crostini_ansible_software_config_view.h b/chrome/browser/ui/views/crostini/crostini_ansible_software_config_view.h
index 6ccc611f..894f3fc 100644
--- a/chrome/browser/ui/views/crostini/crostini_ansible_software_config_view.h
+++ b/chrome/browser/ui/views/crostini/crostini_ansible_software_config_view.h
@@ -22,13 +22,11 @@
   // views::DialogDelegateView:
   int GetDialogButtons() const override;
   base::string16 GetWindowTitle() const override;
-  bool ShouldShowCloseButton() const override;
   gfx::Size CalculatePreferredSize() const override;
 
   // crostini::AnsibleManagementService::Observer:
-  void OnApplicationStarted() override;
-  void OnApplicationFinished() override;
-  void OnError() override;
+  void OnAnsibleSoftwareConfigurationStarted() override;
+  void OnAnsibleSoftwareConfigurationFinished(bool success) override;
 
   base::string16 GetSubtextLabelStringForTesting();
 
@@ -38,12 +36,11 @@
 
  private:
   enum class State {
-    INSTALLING,
-    APPLYING,
+    CONFIGURING,
     ERROR,
   };
 
-  State state_ = State::INSTALLING;
+  State state_ = State::CONFIGURING;
   crostini::AnsibleManagementService* ansible_management_service_ = nullptr;
 
   views::Label* subtext_label_ = nullptr;
diff --git a/chrome/browser/ui/views/crostini/crostini_ansible_software_config_view_browsertest.cc b/chrome/browser/ui/views/crostini/crostini_ansible_software_config_view_browsertest.cc
index 70aa653..5c2c49b 100644
--- a/chrome/browser/ui/views/crostini/crostini_ansible_software_config_view_browsertest.cc
+++ b/chrome/browser/ui/views/crostini/crostini_ansible_software_config_view_browsertest.cc
@@ -77,8 +77,7 @@
   EXPECT_TRUE(HasView());
   EXPECT_TRUE(IsDefaultDialog());
 
-  ActiveView()->OnApplicationStarted();
-  ActiveView()->OnApplicationFinished();
+  ActiveView()->OnAnsibleSoftwareConfigurationFinished(true);
 
   EXPECT_TRUE(HasNoView());
 }
@@ -91,7 +90,7 @@
   EXPECT_TRUE(HasView());
   EXPECT_TRUE(IsDefaultDialog());
 
-  ActiveView()->OnError();
+  ActiveView()->OnAnsibleSoftwareConfigurationFinished(false);
 
   EXPECT_NE(nullptr, ActiveView());
   EXPECT_TRUE(IsErrorDialog());
diff --git a/chrome/browser/ui/views/keyboard_access_browsertest.cc b/chrome/browser/ui/views/keyboard_access_browsertest.cc
index 651d79f7..647daae 100644
--- a/chrome/browser/ui/views/keyboard_access_browsertest.cc
+++ b/chrome/browser/ui/views/keyboard_access_browsertest.cc
@@ -8,7 +8,6 @@
 
 #include "base/location.h"
 #include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/stl_util.h"
diff --git a/chrome/browser/ui/views/permission_bubble/OWNERS b/chrome/browser/ui/views/permission_bubble/OWNERS
index 1d841042..483a671 100644
--- a/chrome/browser/ui/views/permission_bubble/OWNERS
+++ b/chrome/browser/ui/views/permission_bubble/OWNERS
@@ -1,6 +1,5 @@
-engedy@chromium.org
+file://chrome/browser/permissions/PERMISSIONS_OWNERS
 felt@chromium.org
-hkamila@chromium.org
 
 # COMPONENT: UI>Browser>Permissions>Prompts
 # TEAM: permissions-dev@chromium.org
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view.cc b/chrome/browser/ui/views/profiles/profile_menu_view.cc
index 7e6c4151..36f741cb 100644
--- a/chrome/browser/ui/views/profiles/profile_menu_view.cc
+++ b/chrome/browser/ui/views/profiles/profile_menu_view.cc
@@ -143,6 +143,16 @@
   return browser_count;
 }
 
+SkColor GetSyncErrorBackgroundColor(bool sync_paused) {
+  constexpr int kAlpha = 16;
+  ui::NativeTheme::ColorId base_color_id =
+      sync_paused ? ui::NativeTheme::kColorId_ProminentButtonColor
+                  : ui::NativeTheme::kColorId_AlertSeverityHigh;
+  SkColor base_color =
+      ui::NativeTheme::GetInstanceForNativeUi()->GetSystemColor(base_color_id);
+  return SkColorSetA(base_color, kAlpha);
+}
+
 }  // namespace
 
 // ProfileMenuView ---------------------------------------------------------
@@ -526,16 +536,17 @@
           base::BindRepeating(&ProfileMenuView::OnSyncSettingsButtonClicked,
                               base::Unretained(this)));
     } else {
+      bool sync_paused = (error == sync_ui_util::AUTH_ERROR);
       // Overwrite error description with short version for the menu.
-      description_string_id = (error == sync_ui_util::AUTH_ERROR)
-                                  ? IDS_PROFILES_DICE_SYNC_PAUSED_TITLE
-                                  : IDS_SYNC_ERROR_USER_MENU_TITLE;
+      description_string_id = sync_paused ? IDS_PROFILES_DICE_SYNC_PAUSED_TITLE
+                                          : IDS_SYNC_ERROR_USER_MENU_TITLE;
 
       SetSyncInfo(
           GetSyncIcon(), l10n_util::GetStringUTF16(description_string_id),
           l10n_util::GetStringUTF16(button_string_id),
           base::BindRepeating(&ProfileMenuView::OnSyncErrorButtonClicked,
                               base::Unretained(this), error));
+      SetSyncInfoBackgroundColor(GetSyncErrorBackgroundColor(sync_paused));
     }
     return;
   }
@@ -561,6 +572,10 @@
                 base::BindRepeating(&ProfileMenuView::OnSigninButtonClicked,
                                     base::Unretained(this)));
   }
+
+  SetSyncInfoBackgroundColor(
+      ui::NativeTheme::GetInstanceForNativeUi()->GetSystemColor(
+          ui::NativeTheme::kColorId_HighlightedMenuItemBackgroundColor));
 }
 
 void ProfileMenuView::BuildFeatureButtons() {
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
index 034765b..533ab80 100644
--- a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
+++ b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
@@ -383,6 +383,12 @@
   RegisterClickAction(button, std::move(action));
 }
 
+void ProfileMenuViewBase::SetSyncInfoBackgroundColor(SkColor bg_color) {
+  sync_info_container_->SetBackground(views::CreateRoundedRectBackground(
+      bg_color, views::LayoutProvider::Get()->GetCornerRadiusMetric(
+                    views::EMPHASIS_HIGH)));
+}
+
 void ProfileMenuViewBase::AddShortcutFeatureButton(
     const gfx::ImageSkia& icon,
     const base::string16& text,
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_base.h b/chrome/browser/ui/views/profiles/profile_menu_view_base.h
index 97a37677..5143a14 100644
--- a/chrome/browser/ui/views/profiles/profile_menu_view_base.h
+++ b/chrome/browser/ui/views/profiles/profile_menu_view_base.h
@@ -131,6 +131,7 @@
                    const base::string16& description,
                    const base::string16& clickable_text,
                    base::RepeatingClosure action);
+  void SetSyncInfoBackgroundColor(SkColor bg_color);
   void AddShortcutFeatureButton(const gfx::ImageSkia& icon,
                                 const base::string16& text,
                                 base::RepeatingClosure action);
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
index 49a65a4..37fba32 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -173,6 +173,8 @@
 #include "chrome/browser/ui/webui/chromeos/terminal/terminal_ui.h"
 #include "chrome/browser/ui/webui/settings/chromeos/os_settings_ui.h"
 #include "chrome/browser/ui/webui/signin/inline_login_ui.h"
+#include "chromeos/components/help_app_ui/help_app_ui.h"
+#include "chromeos/components/help_app_ui/url_constants.h"
 #include "chromeos/components/media_app_ui/media_app_guest_ui.h"
 #include "chromeos/components/media_app_ui/media_app_ui.h"
 #include "chromeos/components/media_app_ui/url_constants.h"
@@ -507,6 +509,10 @@
     return &NewWebUI<chromeos::DriveInternalsUI>;
   if (url.host_piece() == chrome::kChromeUIFirstRunHost)
     return &NewWebUI<chromeos::FirstRunUI>;
+  if (base::FeatureList::IsEnabled(chromeos::features::kHelpAppV2)) {
+    if (url.host_piece() == chromeos::kChromeUIHelpAppHost)
+      return &NewWebUI<chromeos::HelpAppUI>;
+  }
   if (url.host_piece() == chrome::kChromeUIMachineLearningInternalsHost)
     return &NewWebUI<chromeos::machine_learning::MachineLearningInternalsUI>;
   if (url.host_piece() == chrome::kChromeUIMobileSetupHost)
diff --git a/chrome/browser/ui/webui/constrained_web_dialog_ui_browsertest.cc b/chrome/browser/ui/webui/constrained_web_dialog_ui_browsertest.cc
index 9ee1634..164d305 100644
--- a/chrome/browser/ui/webui/constrained_web_dialog_ui_browsertest.cc
+++ b/chrome/browser/ui/webui/constrained_web_dialog_ui_browsertest.cc
@@ -5,7 +5,6 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/location.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/stringprintf.h"
diff --git a/chrome/chrome_cleaner/engines/controllers/main_controller.h b/chrome/chrome_cleaner/engines/controllers/main_controller.h
index ed5b3fd7..ec2d1b88 100644
--- a/chrome/chrome_cleaner/engines/controllers/main_controller.h
+++ b/chrome/chrome_cleaner/engines/controllers/main_controller.h
@@ -16,7 +16,6 @@
 #include "base/callback_forward.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop.h"
 #include "base/sequence_checker.h"
 #include "base/strings/string16.h"
 #include "base/synchronization/lock.h"
diff --git a/chrome/chrome_cleaner/ipc/mojo_chrome_prompt_ipc.cc b/chrome/chrome_cleaner/ipc/mojo_chrome_prompt_ipc.cc
index 16f5f9b..c5bd0422 100644
--- a/chrome/chrome_cleaner/ipc/mojo_chrome_prompt_ipc.cc
+++ b/chrome/chrome_cleaner/ipc/mojo_chrome_prompt_ipc.cc
@@ -11,7 +11,6 @@
 #include "base/callback_helpers.h"
 #include "base/location.h"
 #include "base/logging.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/sequenced_task_runner.h"
 #include "base/threading/sequenced_task_runner_handle.h"
diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni
index f4faf8c2..9eee65d 100644
--- a/chrome/chrome_paks.gni
+++ b/chrome/chrome_paks.gni
@@ -158,6 +158,7 @@
         "$root_gen_dir/chrome/cellular_setup_resources.pak",
         "$root_gen_dir/chrome/multidevice_setup_resources.pak",
         "$root_gen_dir/chrome/os_settings_resources.pak",
+        "$root_gen_dir/chromeos/chromeos_help_app_resources.pak",
         "$root_gen_dir/chromeos/chromeos_resources.pak",
         "$root_gen_dir/third_party/ink/ink_resources.pak",
         "$root_gen_dir/ui/file_manager/file_manager_resources.pak",
@@ -169,6 +170,7 @@
         "//chrome/browser/resources/chromeos:cellular_setup_resources",
         "//chrome/browser/resources/chromeos:multidevice_setup_resources",
         "//chromeos/resources",
+        "//chromeos/resources:help_app_resources",
         "//third_party/ink:ink_resources",
         "//ui/file_manager:resources",
       ]
diff --git a/chrome/installer/util/install_util_unittest.cc b/chrome/installer/util/install_util_unittest.cc
index eaa87e6..732e680 100644
--- a/chrome/installer/util/install_util_unittest.cc
+++ b/chrome/installer/util/install_util_unittest.cc
@@ -32,6 +32,7 @@
 
 using base::win::RegKey;
 using ::testing::_;
+using ::testing::Not;
 using ::testing::Return;
 using ::testing::StrEq;
 
@@ -378,6 +379,12 @@
   EXPECT_TRUE(pred.Evaluate(L"howdy"));
 }
 
+// A matcher that returns true if its argument (a string) matches a given
+// base::FilePath.
+MATCHER_P(EqPathIgnoreCase, value, "") {
+  return base::FilePath::CompareEqualIgnoreCase(arg, value.value());
+}
+
 TEST_F(InstallUtilTest, ProgramCompare) {
   base::ScopedTempDir test_dir;
   ASSERT_TRUE(test_dir.CreateUniqueTempDir());
@@ -421,8 +428,7 @@
   ASSERT_NE(static_cast<DWORD>(0), short_len);
   ASSERT_GT(static_cast<DWORD>(MAX_PATH), short_len);
   short_expect.resize(short_len);
-  ASSERT_FALSE(base::FilePath::CompareEqualIgnoreCase(expect.value(),
-                                                      short_expect));
+  ASSERT_THAT(short_expect, Not(EqPathIgnoreCase(expect)));
   EXPECT_TRUE(InstallUtil::ProgramCompare(expect).Evaluate(
       L"\"" + short_expect + L"\""));
 }
diff --git a/chrome/renderer/media/webrtc_logging_agent_impl_unittest.cc b/chrome/renderer/media/webrtc_logging_agent_impl_unittest.cc
index 72f8b2410a..f3c9b0a1 100644
--- a/chrome/renderer/media/webrtc_logging_agent_impl_unittest.cc
+++ b/chrome/renderer/media/webrtc_logging_agent_impl_unittest.cc
@@ -8,7 +8,6 @@
 
 #include "base/bind.h"
 #include "base/location.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 4937a72..1df437e1 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -1454,7 +1454,10 @@
         "//chrome/test/data/webui:browser_tests_js_webui",
       ]
       if (is_chromeos) {
-        deps += [ "//chromeos/components/media_app_ui:browser_tests_js" ]
+        deps += [
+          "//chromeos/components/help_app_ui:browser_tests_js",
+          "//chromeos/components/media_app_ui:browser_tests_js",
+        ]
       }
     }
 
diff --git a/chrome/test/android/browsertests_apk/android_browsertests_jni_onload.cc b/chrome/test/android/browsertests_apk/android_browsertests_jni_onload.cc
index 9eacaa8..e38f917 100644
--- a/chrome/test/android/browsertests_apk/android_browsertests_jni_onload.cc
+++ b/chrome/test/android/browsertests_apk/android_browsertests_jni_onload.cc
@@ -6,7 +6,6 @@
 
 #include "base/android/jni_android.h"
 #include "base/android/library_loader/library_loader_hooks.h"
-#include "base/message_loop/message_loop.h"
 #include "chrome/app/android/chrome_jni_onload.h"
 #include "content/public/test/nested_message_pump_android.h"
 
diff --git a/chrome/test/base/interactive_test_utils_views.cc b/chrome/test/base/interactive_test_utils_views.cc
index 680e864..8cd2b0a 100644
--- a/chrome/test/base/interactive_test_utils_views.cc
+++ b/chrome/test/base/interactive_test_utils_views.cc
@@ -4,7 +4,6 @@
 
 #include "base/bind.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "build/buildflag.h"
 #include "chrome/browser/ui/browser.h"
diff --git a/chrome/test/data/webui/settings/privacy_page_test.js b/chrome/test/data/webui/settings/privacy_page_test.js
index 26bad30..3d3f345 100644
--- a/chrome/test/data/webui/settings/privacy_page_test.js
+++ b/chrome/test/data/webui/settings/privacy_page_test.js
@@ -91,6 +91,78 @@
     };
   }
 
+  function registerUMALoggingTests() {
+    suite('PrivacyPageUMACheck', function() {
+      /** @type {settings.TestPrivacyPageBrowserProxy} */
+      let testBrowserProxy;
+
+      /** @type {SettingsPrivacyPageElement} */
+      let page;
+
+      setup(function() {
+        testBrowserProxy = new TestPrivacyPageBrowserProxy();
+        settings.PrivacyPageBrowserProxyImpl.instance_ = testBrowserProxy;
+        PolymerTest.clearBody();
+        page = document.createElement('settings-privacy-page');
+        document.body.appendChild(page);
+      });
+
+      teardown(function() {
+        page.remove();
+      });
+
+      test('LogMangeCerfificatesClick', function() {
+        page.$$('#manageCertificates').click();
+        return testBrowserProxy.whenCalled('recordSettingsPageHistogram')
+            .then(result => {
+              assertEquals(
+                  settings.SettingsPageInteractions.PRIVACY_MANAGE_CERTIFICATES,
+                  result);
+            });
+      });
+
+      test('LogClearBrowsingClick', function() {
+        page.$$('#clearBrowsingData').click();
+        return testBrowserProxy.whenCalled('recordSettingsPageHistogram')
+            .then(result => {
+              assertEquals(
+                  settings.SettingsPageInteractions.PRIVACY_CLEAR_BROWSING_DATA,
+                  result);
+            });
+      });
+
+      test('LogDoNotTrackClick', function() {
+        page.$$('#doNotTrack').click();
+        return testBrowserProxy.whenCalled('recordSettingsPageHistogram')
+            .then(result => {
+              assertEquals(
+                  settings.SettingsPageInteractions.PRIVACY_DO_NOT_TRACK,
+                  result);
+            });
+      });
+
+      test('LogCanMakePaymentToggleClick', function() {
+        page.$$('#canMakePaymentToggle').click();
+        return testBrowserProxy.whenCalled('recordSettingsPageHistogram')
+            .then(result => {
+              assertEquals(
+                  settings.SettingsPageInteractions.PRIVACY_PAYMENT_METHOD,
+                  result);
+            });
+      });
+
+      test('LogSiteSettingsSubpageClick', function() {
+        page.$$('#site-settings-subpage-trigger').click();
+        return testBrowserProxy.whenCalled('recordSettingsPageHistogram')
+            .then(result => {
+              assertEquals(
+                  settings.SettingsPageInteractions.PRIVACY_SITE_SETTINGS,
+                  result);
+            });
+      });
+    });
+  }
+
   function registerNativeCertificateManagerTests() {
     suite('NativeCertificateManager', function() {
       /** @type {settings.TestPrivacyPageBrowserProxy} */
@@ -748,4 +820,5 @@
   registerClearBrowsingDataTests();
   registerPrivacyPageTests();
   registerPrivacyPageSoundTests();
+  registerUMALoggingTests();
 });
diff --git a/chrome/test/data/webui/settings/test_privacy_page_browser_proxy.js b/chrome/test/data/webui/settings/test_privacy_page_browser_proxy.js
index 800a801..85867574 100644
--- a/chrome/test/data/webui/settings/test_privacy_page_browser_proxy.js
+++ b/chrome/test/data/webui/settings/test_privacy_page_browser_proxy.js
@@ -7,6 +7,7 @@
   constructor() {
     super([
       'getMetricsReporting',
+      'recordSettingsPageHistogram',
       'setMetricsReportingEnabled',
       'showManageSSLCertificates',
       'setBlockAutoplayEnabled',
@@ -25,6 +26,11 @@
     return Promise.resolve(this.metricsReporting);
   }
 
+  /** @override*/
+  recordSettingsPageHistogram(value) {
+    this.methodCalled('recordSettingsPageHistogram', value);
+  }
+
   /** @override */
   setMetricsReportingEnabled(enabled) {
     this.methodCalled('setMetricsReportingEnabled', enabled);
diff --git a/chromecast/BUILD.gn b/chromecast/BUILD.gn
index 0602875..5d8eea9 100644
--- a/chromecast/BUILD.gn
+++ b/chromecast/BUILD.gn
@@ -269,7 +269,7 @@
     if (is_android_things) {
       gtest_excludes += [
         "FontUniqueNameLookupTest.TestMatchPostScriptNameTtc",
-        "SiteInstanceTest.HasWrongProcessForURL",
+        "SiteInstanceTest.IsSuitableForURL",
       ]
     }
     if (target_os == "linux" && !is_cast_desktop_build) {
diff --git a/chromecast/media/cma/backend/multizone_backend_unittest.cc b/chromecast/media/cma/backend/multizone_backend_unittest.cc
index 53fc090a..220bc4d 100644
--- a/chromecast/media/cma/backend/multizone_backend_unittest.cc
+++ b/chromecast/media/cma/backend/multizone_backend_unittest.cc
@@ -152,7 +152,7 @@
   void OnEndOfStream();
 
  private:
-  base::test::SingleThreadTaskEnvironment task_environment_;
+  base::test::TaskEnvironment task_environment_;
   std::vector<std::unique_ptr<BufferFeeder>> effects_feeders_;
   std::unique_ptr<BufferFeeder> audio_feeder_;
 
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index 526c374..ab79098 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-12617.0.0
\ No newline at end of file
+12618.0.0
\ No newline at end of file
diff --git a/chromeos/components/help_app_ui/BUILD.gn b/chromeos/components/help_app_ui/BUILD.gn
new file mode 100644
index 0000000..ab74c689
--- /dev/null
+++ b/chromeos/components/help_app_ui/BUILD.gn
@@ -0,0 +1,37 @@
+# Copyright 2019 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("//chrome/test/base/js2gtest.gni")
+
+assert(is_chromeos, "Help App is Chrome OS only")
+
+static_library("help_app_ui") {
+  sources = [
+    "help_app_ui.cc",
+    "help_app_ui.h",
+    "url_constants.cc",
+    "url_constants.h",
+  ]
+
+  deps = [
+    "//chromeos/constants",
+    "//chromeos/resources:help_app_resources",
+    "//content/public/browser",
+    "//ui/webui",
+  ]
+}
+
+js2gtest("browser_tests_js") {
+  test_type = "mojo_lite_webui"
+
+  sources = [
+    "test/help_app_ui_browsertest.js",
+  ]
+
+  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
+
+  deps = [
+    "//chromeos/constants",
+  ]
+}
diff --git a/chromeos/components/help_app_ui/DEPS b/chromeos/components/help_app_ui/DEPS
new file mode 100644
index 0000000..5ecfaaea
--- /dev/null
+++ b/chromeos/components/help_app_ui/DEPS
@@ -0,0 +1,6 @@
+include_rules = [
+  # Do not add chrome here (use a delegate instead).
+  "+chromeos/grit/chromeos_help_app_resources.h",
+  "+content/public/browser",
+  "+ui/webui",
+]
diff --git a/chromeos/components/help_app_ui/OWNERS b/chromeos/components/help_app_ui/OWNERS
new file mode 100644
index 0000000..830d07f
--- /dev/null
+++ b/chromeos/components/help_app_ui/OWNERS
@@ -0,0 +1,8 @@
+carpenterr@chromium.org
+dstockwell@chromium.org
+tapted@chromium.org
+patricialor@chromium.org
+
+# TEAM: cros-essential-apps-dev@chromium.org
+# COMPONENT: Platform>Apps>GetHelp
+# Internal Component: b/components/690873
diff --git a/chromeos/components/help_app_ui/README b/chromeos/components/help_app_ui/README
new file mode 100644
index 0000000..1e799e8
--- /dev/null
+++ b/chromeos/components/help_app_ui/README
@@ -0,0 +1,2 @@
+Provides the chrome://help-app WebUI and supporting interfaces that allow the
+Help App to integrate with ChromeOS.
diff --git a/chromeos/components/help_app_ui/help_app_ui.cc b/chromeos/components/help_app_ui/help_app_ui.cc
new file mode 100644
index 0000000..2bafcde
--- /dev/null
+++ b/chromeos/components/help_app_ui/help_app_ui.cc
@@ -0,0 +1,33 @@
+// Copyright 2019 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 "chromeos/components/help_app_ui/help_app_ui.h"
+
+#include "chromeos/components/help_app_ui/url_constants.h"
+#include "chromeos/grit/chromeos_help_app_resources.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_ui.h"
+#include "content/public/browser/web_ui_data_source.h"
+
+namespace chromeos {
+
+namespace {
+content::WebUIDataSource* CreateDataSource() {
+  auto* source = content::WebUIDataSource::Create(kChromeUIHelpAppHost);
+
+  // TODO(crbug.com/1012578): This is a placeholder only, update with the
+  // actual app content.
+  source->SetDefaultResource(IDR_HELP_APP_INDEX_HTML);
+  return source;
+}
+}  // namespace
+
+HelpAppUI::HelpAppUI(content::WebUI* web_ui) : MojoWebUIController(web_ui) {
+  content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
+                                CreateDataSource());
+}
+
+HelpAppUI::~HelpAppUI() = default;
+
+}  // namespace chromeos
diff --git a/chromeos/components/help_app_ui/help_app_ui.h b/chromeos/components/help_app_ui/help_app_ui.h
new file mode 100644
index 0000000..2eca10f
--- /dev/null
+++ b/chromeos/components/help_app_ui/help_app_ui.h
@@ -0,0 +1,25 @@
+// Copyright 2019 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 CHROMEOS_COMPONENTS_HELP_APP_UI_HELP_APP_UI_H_
+#define CHROMEOS_COMPONENTS_HELP_APP_UI_HELP_APP_UI_H_
+
+#include "base/macros.h"
+#include "ui/webui/mojo_web_ui_controller.h"
+
+namespace chromeos {
+
+// The WebUI controller for chrome://help-app.
+class HelpAppUI : public ui::MojoWebUIController {
+ public:
+  explicit HelpAppUI(content::WebUI* web_ui);
+  ~HelpAppUI() override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(HelpAppUI);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROMEOS_COMPONENTS_HELP_APP_UI_HELP_APP_UI_H_
diff --git a/chromeos/components/help_app_ui/resources/help_app_resources.grd b/chromeos/components/help_app_ui/resources/help_app_resources.grd
new file mode 100644
index 0000000..bee07b6
--- /dev/null
+++ b/chromeos/components/help_app_ui/resources/help_app_resources.grd
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit latest_public_release="0" current_release="1" output_all_resource_defines="false">
+  <outputs>
+    <output filename="grit/chromeos_help_app_resources.h" type="rc_header">
+      <emit emit_type="prepend"></emit>
+    </output>
+    <output filename="grit/chromeos_help_app_resources_map.cc"
+        type="resource_file_map_source" />
+    <output filename="grit/chromeos_help_app_resources_map.h"
+        type="resource_map_header" />
+    <output filename="chromeos_help_app_resources.pak" type="data_package" />
+  </outputs>
+
+  <release seq="1">
+    <includes>
+      <!-- TODO(crbug.com/1012578): Add the run time resources .grdp here. -->
+      <include name="IDR_HELP_APP_INDEX_HTML" file="index.html"
+          type="BINDATA" />
+    </includes>
+  </release>
+</grit>
diff --git a/chromeos/components/help_app_ui/resources/index.html b/chromeos/components/help_app_ui/resources/index.html
new file mode 100644
index 0000000..0f8ed768
--- /dev/null
+++ b/chromeos/components/help_app_ui/resources/index.html
@@ -0,0 +1,8 @@
+<!-- Copyright 2019 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. -->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Help App</title>
+<script src="chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js"></script>
+<!-- TODO(crbug/1012578): Add sandboxed guest with content in an iframe. -->
diff --git a/chromeos/components/help_app_ui/test/DEPS b/chromeos/components/help_app_ui/test/DEPS
new file mode 100644
index 0000000..ac5677f9
--- /dev/null
+++ b/chromeos/components/help_app_ui/test/DEPS
@@ -0,0 +1,4 @@
+include_rules = [
+  # Tests run in browser_tests, so can access things under chrome/test/base*.
+  "+chrome/test/base",
+]
diff --git a/chromeos/components/help_app_ui/test/help_app_ui_browsertest.js b/chromeos/components/help_app_ui/test/help_app_ui_browsertest.js
new file mode 100644
index 0000000..8626882f
--- /dev/null
+++ b/chromeos/components/help_app_ui/test/help_app_ui_browsertest.js
@@ -0,0 +1,33 @@
+// Copyright 2019 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 Test suite for chrome://help-app.
+ */
+
+GEN('#include "chromeos/constants/chromeos_features.h"');
+
+const HOST_ORIGIN = 'chrome://help-app';
+
+var HelpAppUIBrowserTest = class extends testing.Test {
+  /** @override */
+  get browsePreload() {
+    return HOST_ORIGIN;
+  }
+
+  /** @override */
+  get featureList() {
+    return {enabled: ['chromeos::features::kHelpAppV2']};
+  }
+
+  /** @override */
+  get runAccessibilityChecks() {
+    return false;
+  }
+};
+
+// Tests that chrome://help-app goes somewhere instead of 404ing or crashing.
+TEST_F('HelpAppUIBrowserTest', 'HasChromeSchemeURL', () => {
+  assertEquals(document.location.origin, HOST_ORIGIN);
+});
diff --git a/chromeos/components/help_app_ui/url_constants.cc b/chromeos/components/help_app_ui/url_constants.cc
new file mode 100644
index 0000000..1b100a3
--- /dev/null
+++ b/chromeos/components/help_app_ui/url_constants.cc
@@ -0,0 +1,12 @@
+// Copyright 2019 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 "chromeos/components/help_app_ui/url_constants.h"
+
+namespace chromeos {
+
+const char kChromeUIHelpAppHost[] = "help-app";
+const char kChromeUIHelpAppURL[] = "chrome://help-app/";
+
+}  // namespace chromeos
diff --git a/chromeos/components/help_app_ui/url_constants.h b/chromeos/components/help_app_ui/url_constants.h
new file mode 100644
index 0000000..8124c09
--- /dev/null
+++ b/chromeos/components/help_app_ui/url_constants.h
@@ -0,0 +1,15 @@
+// Copyright 2019 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 CHROMEOS_COMPONENTS_HELP_APP_UI_URL_CONSTANTS_H_
+#define CHROMEOS_COMPONENTS_HELP_APP_UI_URL_CONSTANTS_H_
+
+namespace chromeos {
+
+extern const char kChromeUIHelpAppHost[];
+extern const char kChromeUIHelpAppURL[];
+
+}  // namespace chromeos
+
+#endif  // CHROMEOS_COMPONENTS_HELP_APP_UI_URL_CONSTANTS_H_
diff --git a/chromeos/constants/chromeos_features.cc b/chromeos/constants/chromeos_features.cc
index 6d69cf46..96abff40 100644
--- a/chromeos/constants/chromeos_features.cc
+++ b/chromeos/constants/chromeos_features.cc
@@ -63,6 +63,10 @@
 const base::Feature kCrostiniWebUIInstaller{"CrostiniWebUIInstaller",
                                             base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Enables or disables using Cryptauth's GetDevicesActivityStatus API.
+const base::Feature kCryptAuthV2DeviceActivityStatus{
+    "CryptAuthV2DeviceActivityStatus", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Enables or disables the CryptAuth v2 DeviceSync flow.
 const base::Feature kCryptAuthV2DeviceSync{"CryptAuthV2DeviceSync",
                                            base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chromeos/constants/chromeos_features.h b/chromeos/constants/chromeos_features.h
index c29589918..7a550b3 100644
--- a/chromeos/constants/chromeos_features.h
+++ b/chromeos/constants/chromeos_features.h
@@ -39,6 +39,8 @@
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kCrostiniWebUIInstaller;
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
+extern const base::Feature kCryptAuthV2DeviceActivityStatus;
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kCryptAuthV2DeviceSync;
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kCryptAuthV2Enrollment;
diff --git a/chromeos/dbus/power/native_timer.cc b/chromeos/dbus/power/native_timer.cc
index 38b03838..a0515a3 100644
--- a/chromeos/dbus/power/native_timer.cc
+++ b/chromeos/dbus/power/native_timer.cc
@@ -13,7 +13,6 @@
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop.h"
 #include "base/posix/unix_domain_socket.h"
 #include "base/rand_util.h"
 #include "base/task_runner_util.h"
diff --git a/chromeos/resources/BUILD.gn b/chromeos/resources/BUILD.gn
index 4dff9811..c178aec 100644
--- a/chromeos/resources/BUILD.gn
+++ b/chromeos/resources/BUILD.gn
@@ -40,3 +40,17 @@
     "//chromeos/services/network_config/public/mojom:mojom_js",
   ]
 }
+
+grit("help_app_resources") {
+  source = "../components/help_app_ui/resources/help_app_resources.grd"
+
+  source_is_generated = true
+
+  outputs = [
+    "grit/chromeos_help_app_resources.h",
+    "grit/chromeos_help_app_resources_map.cc",
+    "grit/chromeos_help_app_resources_map.h",
+    "chromeos_help_app_resources.pak",
+  ]
+  output_dir = "$root_gen_dir/chromeos"
+}
diff --git a/chromeos/services/device_sync/cryptauth_device_activity_getter_impl.cc b/chromeos/services/device_sync/cryptauth_device_activity_getter_impl.cc
index 369c852..ee1a962 100644
--- a/chromeos/services/device_sync/cryptauth_device_activity_getter_impl.cc
+++ b/chromeos/services/device_sync/cryptauth_device_activity_getter_impl.cc
@@ -142,10 +142,6 @@
           CryptAuthKeyBundle::Name::kDeviceSyncBetterTogether));
   request.mutable_context()->set_device_id(
       client_app_metadata.value().instance_id());
-
-  // TODO(https://crbug.com/990430): This is the IID token for the v2 Enrollment
-  // service. A different IID token for the v2 DeviceSync service will be
-  // necessary.
   request.mutable_context()->set_device_id_token(
       client_app_metadata.value().instance_id_token());
 
diff --git a/chromeos/services/device_sync/cryptauth_device_syncer_impl.cc b/chromeos/services/device_sync/cryptauth_device_syncer_impl.cc
index 9eb14d2..07a9b0b 100644
--- a/chromeos/services/device_sync/cryptauth_device_syncer_impl.cc
+++ b/chromeos/services/device_sync/cryptauth_device_syncer_impl.cc
@@ -146,10 +146,6 @@
       CryptAuthKeyBundle::Name::kDeviceSyncBetterTogether));
   request_context_.mutable_client_metadata()->CopyFrom(client_metadata);
   request_context_.set_device_id(client_app_metadata.instance_id());
-
-  // TODO(https://crbug.com/990430): This is the IID token for the v2 Enrollment
-  // service. A different IID token for the v2 DeviceSync service will be
-  // necessary.
   request_context_.set_device_id_token(client_app_metadata.instance_id_token());
 
   const CryptAuthKey* user_key_pair =
diff --git a/chromeos/services/device_sync/cryptauth_feature_status_setter_impl.cc b/chromeos/services/device_sync/cryptauth_feature_status_setter_impl.cc
index 26709e4..77887f7 100644
--- a/chromeos/services/device_sync/cryptauth_feature_status_setter_impl.cc
+++ b/chromeos/services/device_sync/cryptauth_feature_status_setter_impl.cc
@@ -203,10 +203,6 @@
   request.mutable_context()->mutable_client_metadata()->set_invocation_reason(
       cryptauthv2::ClientMetadata::FEATURE_TOGGLED);
   request.mutable_context()->set_device_id(client_app_metadata_->instance_id());
-
-  // TODO(https://crbug.com/990430): This is the IID token for the v2 Enrollment
-  // service. A different IID token for the v2 DeviceSync service might be
-  // necessary.
   request.mutable_context()->set_device_id_token(
       client_app_metadata_->instance_id_token());
 
diff --git a/chromeos/services/device_sync/public/cpp/gcm_constants.cc b/chromeos/services/device_sync/public/cpp/gcm_constants.cc
index 5b805144f..a80af17 100644
--- a/chromeos/services/device_sync/public/cpp/gcm_constants.cc
+++ b/chromeos/services/device_sync/public/cpp/gcm_constants.cc
@@ -11,7 +11,6 @@
 const char kCryptAuthGcmAppId[] = "com.google.chrome.cryptauth";
 const char kCryptAuthGcmSenderId[] = "381449029288";
 const char kCryptAuthV2EnrollmentAuthorizedEntity[] = "16502139086";
-const char kCryptAuthV2DeviceSyncAuthorizedEntity[] = "302798585788";
 
 }  // namespace device_sync
 
diff --git a/chromeos/services/device_sync/public/cpp/gcm_constants.h b/chromeos/services/device_sync/public/cpp/gcm_constants.h
index 85ac4234..7b177def 100644
--- a/chromeos/services/device_sync/public/cpp/gcm_constants.h
+++ b/chromeos/services/device_sync/public/cpp/gcm_constants.h
@@ -13,7 +13,6 @@
 extern const char kCryptAuthGcmAppId[];
 extern const char kCryptAuthGcmSenderId[];
 extern const char kCryptAuthV2EnrollmentAuthorizedEntity[];
-extern const char kCryptAuthV2DeviceSyncAuthorizedEntity[];
 
 }  // namespace device_sync
 
diff --git a/chromeos/services/machine_learning/public/cpp/fake_service_connection.cc b/chromeos/services/machine_learning/public/cpp/fake_service_connection.cc
index 16d5c6d7..db8b87df 100644
--- a/chromeos/services/machine_learning/public/cpp/fake_service_connection.cc
+++ b/chromeos/services/machine_learning/public/cpp/fake_service_connection.cc
@@ -31,9 +31,9 @@
 }
 
 void FakeServiceConnectionImpl::CreateGraphExecutor(
-    mojom::GraphExecutorRequest request,
+    mojo::PendingReceiver<mojom::GraphExecutor> receiver,
     mojom::Model::CreateGraphExecutorCallback callback) {
-  graph_bindings_.AddBinding(this, std::move(request));
+  graph_receivers_.Add(this, std::move(receiver));
   std::move(callback).Run(mojom::CreateGraphExecutorResult::OK);
 }
 
diff --git a/chromeos/services/machine_learning/public/cpp/fake_service_connection.h b/chromeos/services/machine_learning/public/cpp/fake_service_connection.h
index 9c49768..c8005bd1 100644
--- a/chromeos/services/machine_learning/public/cpp/fake_service_connection.h
+++ b/chromeos/services/machine_learning/public/cpp/fake_service_connection.h
@@ -13,7 +13,6 @@
 #include "chromeos/services/machine_learning/public/mojom/graph_executor.mojom.h"
 #include "chromeos/services/machine_learning/public/mojom/model.mojom.h"
 #include "chromeos/services/machine_learning/public/mojom/tensor.mojom.h"
-#include "mojo/public/cpp/bindings/binding_set.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
 
@@ -46,7 +45,7 @@
 
   // mojom::Model:
   void CreateGraphExecutor(
-      mojom::GraphExecutorRequest request,
+      mojo::PendingReceiver<mojom::GraphExecutor> receiver,
       mojom::Model::CreateGraphExecutorCallback callback) override;
 
   // mojom::GraphExecutor:
@@ -61,7 +60,7 @@
 
  private:
   mojo::ReceiverSet<mojom::Model> model_receivers_;
-  mojo::BindingSet<mojom::GraphExecutor> graph_bindings_;
+  mojo::ReceiverSet<mojom::GraphExecutor> graph_receivers_;
   mojom::TensorPtr execute_result_;
 
   DISALLOW_COPY_AND_ASSIGN(FakeServiceConnectionImpl);
diff --git a/chromeos/services/machine_learning/public/cpp/service_connection_unittest.cc b/chromeos/services/machine_learning/public/cpp/service_connection_unittest.cc
index a6ddfbc..292ea61 100644
--- a/chromeos/services/machine_learning/public/cpp/service_connection_unittest.cc
+++ b/chromeos/services/machine_learning/public/cpp/service_connection_unittest.cc
@@ -99,9 +99,9 @@
   ASSERT_TRUE(model.is_bound());
 
   callback_done = false;
-  mojom::GraphExecutorPtr graph;
+  mojo::Remote<mojom::GraphExecutor> graph;
   model->CreateGraphExecutor(
-      mojo::MakeRequest(&graph),
+      graph.BindNewPipeAndPassReceiver(),
       base::BindOnce(
           [](bool* callback_done, mojom::CreateGraphExecutorResult result) {
             EXPECT_EQ(result, mojom::CreateGraphExecutorResult::OK);
@@ -160,9 +160,9 @@
   ASSERT_TRUE(model.is_bound());
 
   callback_done = false;
-  mojom::GraphExecutorPtr graph;
+  mojo::Remote<mojom::GraphExecutor> graph;
   model->CreateGraphExecutor(
-      mojo::MakeRequest(&graph),
+      graph.BindNewPipeAndPassReceiver(),
       base::BindOnce(
           [](bool* callback_done, mojom::CreateGraphExecutorResult result) {
             EXPECT_EQ(result, mojom::CreateGraphExecutorResult::OK);
diff --git a/chromeos/services/machine_learning/public/mojom/model.mojom b/chromeos/services/machine_learning/public/mojom/model.mojom
index 236dffe..2b48d7a 100644
--- a/chromeos/services/machine_learning/public/mojom/model.mojom
+++ b/chromeos/services/machine_learning/public/mojom/model.mojom
@@ -78,6 +78,6 @@
 // interface pipe. The Model interface pipe can be used to acquire multiple
 // separate GraphExecutor instances.
 interface Model {
-  CreateGraphExecutor(GraphExecutor& request) =>
+  CreateGraphExecutor(pending_receiver<GraphExecutor> receiver) =>
       (CreateGraphExecutorResult result);
 };
diff --git a/components/autofill/content/browser/risk/fingerprint_browsertest.cc b/components/autofill/content/browser/risk/fingerprint_browsertest.cc
index 5ce5460..73ca2253 100644
--- a/components/autofill/content/browser/risk/fingerprint_browsertest.cc
+++ b/components/autofill/content/browser/risk/fingerprint_browsertest.cc
@@ -9,7 +9,6 @@
 #include <memory>
 
 #include "base/bind.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "build/build_config.h"
 #include "components/autofill/content/browser/risk/proto/fingerprint.pb.h"
diff --git a/components/autofill_assistant/browser/website_login_fetcher.h b/components/autofill_assistant/browser/website_login_fetcher.h
index fe8c36df..41e11fa 100644
--- a/components/autofill_assistant/browser/website_login_fetcher.h
+++ b/components/autofill_assistant/browser/website_login_fetcher.h
@@ -23,7 +23,7 @@
     Login(const Login& other);
     ~Login();
 
-    // The scheme, host, port and path of the login website.
+    // The origin of the login website.
     GURL origin;
     std::string username;
   };
diff --git a/components/autofill_assistant/browser/website_login_fetcher_impl.cc b/components/autofill_assistant/browser/website_login_fetcher_impl.cc
index 84d2fc0e..4f8d624a 100644
--- a/components/autofill_assistant/browser/website_login_fetcher_impl.cc
+++ b/components/autofill_assistant/browser/website_login_fetcher_impl.cc
@@ -86,7 +86,7 @@
   void OnFetchCompleted() override {
     std::vector<Login> logins;
     for (const auto* match : form_fetcher_->GetBestMatches()) {
-      logins.emplace_back(match->origin,
+      logins.emplace_back(match->origin.GetOrigin(),
                           base::UTF16ToUTF8(match->username_value));
     }
     std::move(callback_).Run(logins);
diff --git a/components/cronet/android/cronet_url_request_context_adapter.cc b/components/cronet/android/cronet_url_request_context_adapter.cc
index 9c48aa9..b44eedc 100644
--- a/components/cronet/android/cronet_url_request_context_adapter.cc
+++ b/components/cronet/android/cronet_url_request_context_adapter.cc
@@ -26,7 +26,6 @@
 #include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread_restrictions.h"
diff --git a/components/cronet/native/test/engine_test.cc b/components/cronet/native/test/engine_test.cc
index 8fcee30e..70e1fb4 100644
--- a/components/cronet/native/test/engine_test.cc
+++ b/components/cronet/native/test/engine_test.cc
@@ -8,7 +8,6 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/logging.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "components/cronet/native/test/test_util.h"
 #include "net/cert/mock_cert_verifier.h"
diff --git a/components/invalidation/impl/per_user_topic_registration_request_unittest.cc b/components/invalidation/impl/per_user_topic_registration_request_unittest.cc
index 9982d09..d241390 100644
--- a/components/invalidation/impl/per_user_topic_registration_request_unittest.cc
+++ b/components/invalidation/impl/per_user_topic_registration_request_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/bind.h"
 #include "base/json/json_reader.h"
 #include "base/memory/ptr_util.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/gtest_util.h"
diff --git a/components/leveldb_proto/internal/shared_proto_database_client_unittest.cc b/components/leveldb_proto/internal/shared_proto_database_client_unittest.cc
index 5c52721..539f657 100644
--- a/components/leveldb_proto/internal/shared_proto_database_client_unittest.cc
+++ b/components/leveldb_proto/internal/shared_proto_database_client_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/files/scoped_temp_dir.h"
-#include "base/message_loop/message_loop.h"
 #include "base/strings/string_util.h"
 #include "base/test/task_environment.h"
 #include "components/leveldb_proto/internal/proto_leveldb_wrapper.h"
diff --git a/components/leveldb_proto/internal/shared_proto_database_unittest.cc b/components/leveldb_proto/internal/shared_proto_database_unittest.cc
index 416f186b..d6047d3 100644
--- a/components/leveldb_proto/internal/shared_proto_database_unittest.cc
+++ b/components/leveldb_proto/internal/shared_proto_database_unittest.cc
@@ -6,7 +6,6 @@
 
 #include "base/bind.h"
 #include "base/files/scoped_temp_dir.h"
-#include "base/message_loop/message_loop.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread.h"
 #include "build/build_config.h"
diff --git a/components/mirroring/mojom/resource_provider.mojom b/components/mirroring/mojom/resource_provider.mojom
index 2bfb17f6..a31ef5be 100644
--- a/components/mirroring/mojom/resource_provider.mojom
+++ b/components/mirroring/mojom/resource_provider.mojom
@@ -17,7 +17,7 @@
 // lifetime of this client.
 interface AudioStreamCreatorClient {
   StreamCreated(
-      media.mojom.AudioInputStream stream,
+      pending_remote<media.mojom.AudioInputStream> stream,
       media.mojom.AudioInputStreamClient& client_request,
       media.mojom.ReadOnlyAudioDataPipe data_pipe,
       bool initially_muted);
diff --git a/components/mirroring/service/captured_audio_input.cc b/components/mirroring/service/captured_audio_input.cc
index a8be7a4..3489bbf 100644
--- a/components/mirroring/service/captured_audio_input.cc
+++ b/components/mirroring/service/captured_audio_input.cc
@@ -59,7 +59,7 @@
 }
 
 void CapturedAudioInput::StreamCreated(
-    media::mojom::AudioInputStreamPtr stream,
+    mojo::PendingRemote<media::mojom::AudioInputStream> stream,
     media::mojom::AudioInputStreamClientRequest client_request,
     media::mojom::ReadOnlyAudioDataPipePtr data_pipe,
     bool initially_muted) {
@@ -68,7 +68,7 @@
   DCHECK(!stream_);
   DCHECK(!stream_client_binding_.is_bound());
 
-  stream_ = std::move(stream);
+  stream_.Bind(std::move(stream));
   stream_client_binding_.Bind(std::move(client_request));
 
   base::PlatformFile socket_handle;
diff --git a/components/mirroring/service/captured_audio_input.h b/components/mirroring/service/captured_audio_input.h
index 11fe9e7..11cd7a5 100644
--- a/components/mirroring/service/captured_audio_input.h
+++ b/components/mirroring/service/captured_audio_input.h
@@ -13,7 +13,9 @@
 #include "media/audio/audio_input_ipc.h"
 #include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
+#include "mojo/public/cpp/bindings/remote.h"
 
 namespace mirroring {
 
@@ -43,7 +45,7 @@
   void SetOutputDeviceForAec(const std::string& output_device_id) override;
 
   // mojom::AudioStreamCreatorClient implementation
-  void StreamCreated(media::mojom::AudioInputStreamPtr stream,
+  void StreamCreated(mojo::PendingRemote<media::mojom::AudioInputStream> stream,
                      media::mojom::AudioInputStreamClientRequest client_request,
                      media::mojom::ReadOnlyAudioDataPipePtr data_pipe,
                      bool initially_muted) override;
@@ -59,7 +61,7 @@
   mojo::Receiver<mojom::AudioStreamCreatorClient>
       stream_creator_client_receiver_{this};
   media::AudioInputIPCDelegate* delegate_ = nullptr;
-  media::mojom::AudioInputStreamPtr stream_;
+  mojo::Remote<media::mojom::AudioInputStream> stream_;
 
   DISALLOW_COPY_AND_ASSIGN(CapturedAudioInput);
 };
diff --git a/components/mirroring/service/captured_audio_input_unittest.cc b/components/mirroring/service/captured_audio_input_unittest.cc
index 1b4bb30..424c375 100644
--- a/components/mirroring/service/captured_audio_input_unittest.cc
+++ b/components/mirroring/service/captured_audio_input_unittest.cc
@@ -10,8 +10,9 @@
 #include "base/test/task_environment.h"
 #include "media/base/audio_parameters.h"
 #include "media/mojo/mojom/audio_data_pipe.mojom.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
+#include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "mojo/public/cpp/system/buffer.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -61,18 +62,19 @@
       uint32_t total_segments) {
     EXPECT_EQ(base::SyncSocket::kInvalidHandle, socket_.handle());
     EXPECT_FALSE(stream_);
-    media::mojom::AudioInputStreamPtr stream_ptr;
+    mojo::PendingRemote<media::mojom::AudioInputStream> pending_stream;
     auto input_stream = std::make_unique<MockStream>();
     stream_ = input_stream.get();
-    mojo::MakeStrongBinding(std::move(input_stream),
-                            mojo::MakeRequest(&stream_ptr));
+    mojo::MakeSelfOwnedReceiver(
+        std::move(input_stream),
+        pending_stream.InitWithNewPipeAndPassReceiver());
     base::CancelableSyncSocket foreign_socket;
     EXPECT_TRUE(
         base::CancelableSyncSocket::CreatePair(&socket_, &foreign_socket));
     mojo::Remote<mojom::AudioStreamCreatorClient> audio_client(
         std::move(client));
     audio_client->StreamCreated(
-        std::move(stream_ptr), mojo::MakeRequest(&stream_client_),
+        std::move(pending_stream), mojo::MakeRequest(&stream_client_),
         {base::in_place, base::ReadOnlySharedMemoryRegion::Create(1024).region,
          mojo::WrapPlatformFile(foreign_socket.Release())},
         initially_muted);
diff --git a/components/optimization_guide/BUILD.gn b/components/optimization_guide/BUILD.gn
index 972ec5d..fcf2efb 100644
--- a/components/optimization_guide/BUILD.gn
+++ b/components/optimization_guide/BUILD.gn
@@ -14,8 +14,6 @@
     "hint_cache.h",
     "hint_cache_store.cc",
     "hint_cache_store.h",
-    "hint_update_data.cc",
-    "hint_update_data.h",
     "hints_component_info.h",
     "hints_component_util.cc",
     "hints_component_util.h",
@@ -38,6 +36,8 @@
     "optimization_guide_service_observer.h",
     "optimization_guide_switches.cc",
     "optimization_guide_switches.h",
+    "store_update_data.cc",
+    "store_update_data.h",
     "top_host_provider.h",
     "url_pattern_with_wildcards.cc",
     "url_pattern_with_wildcards.h",
@@ -85,7 +85,6 @@
     "command_line_top_host_provider_unittest.cc",
     "hint_cache_store_unittest.cc",
     "hint_cache_unittest.cc",
-    "hint_update_data_unittest.cc",
     "hints_component_util_unittest.cc",
     "hints_fetcher_unittest.cc",
     "hints_processing_util_unittest.cc",
@@ -93,6 +92,7 @@
     "optimization_guide_features_unittest.cc",
     "optimization_guide_service_unittest.cc",
     "optimization_guide_switches_unittest.cc",
+    "store_update_data_unittest.cc",
     "url_pattern_with_wildcards_unittest.cc",
   ]
 
diff --git a/components/optimization_guide/hint_cache.cc b/components/optimization_guide/hint_cache.cc
index cb65e15..71a0035 100644
--- a/components/optimization_guide/hint_cache.cc
+++ b/components/optimization_guide/hint_cache.cc
@@ -7,9 +7,9 @@
 #include <algorithm>
 
 #include "base/bind.h"
-#include "components/optimization_guide/hint_update_data.h"
 #include "components/optimization_guide/hints_processing_util.h"
 #include "components/optimization_guide/optimization_guide_features.h"
+#include "components/optimization_guide/store_update_data.h"
 #include "url/gurl.h"
 
 namespace optimization_guide {
@@ -43,14 +43,14 @@
                      std::move(callback)));
 }
 
-std::unique_ptr<HintUpdateData>
+std::unique_ptr<StoreUpdateData>
 HintCache::MaybeCreateUpdateDataForComponentHints(
     const base::Version& version) const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return hint_store_->MaybeCreateUpdateDataForComponentHints(version);
 }
 
-std::unique_ptr<HintUpdateData> HintCache::CreateUpdateDataForFetchedHints(
+std::unique_ptr<StoreUpdateData> HintCache::CreateUpdateDataForFetchedHints(
     base::Time update_time,
     base::Time expiry_time) const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
@@ -58,7 +58,7 @@
 }
 
 void HintCache::UpdateComponentHints(
-    std::unique_ptr<HintUpdateData> component_data,
+    std::unique_ptr<StoreUpdateData> component_data,
     base::OnceClosure callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(component_data);
@@ -82,7 +82,7 @@
   } else {
     expiry_time += features::StoredFetchedHintsFreshnessDuration();
   }
-  std::unique_ptr<HintUpdateData> fetched_hints_update_data =
+  std::unique_ptr<StoreUpdateData> fetched_hints_update_data =
       CreateUpdateDataForFetchedHints(update_time, expiry_time);
   ProcessHints(get_hints_response.get()->mutable_hints(),
                fetched_hints_update_data.get());
diff --git a/components/optimization_guide/hint_cache.h b/components/optimization_guide/hint_cache.h
index d9e03f3..15b6a359 100644
--- a/components/optimization_guide/hint_cache.h
+++ b/components/optimization_guide/hint_cache.h
@@ -16,7 +16,7 @@
 #include "components/optimization_guide/proto/hints.pb.h"
 
 namespace optimization_guide {
-class HintUpdateData;
+class StoreUpdateData;
 
 using HintLoadedCallback = base::OnceCallback<void(const proto::Hint*)>;
 
@@ -42,13 +42,13 @@
   // pre-existing data and begin in a clean state.
   void Initialize(bool purge_existing_data, base::OnceClosure callback);
 
-  // Returns a HintUpdateData. During component processing, hints from the
-  // component are moved into the HintUpdateData. After component
+  // Returns a StoreUpdateData. During component processing, hints from the
+  // component are moved into the StoreUpdateData. After component
   // processing completes, the component update data is provided to the backing
   // store in UpdateComponentHints() and used to update its component hints. In
   // the case the provided component version is not newer than the store's
   // version, nullptr will be returned by the call.
-  std::unique_ptr<HintUpdateData> MaybeCreateUpdateDataForComponentHints(
+  std::unique_ptr<StoreUpdateData> MaybeCreateUpdateDataForComponentHints(
       const base::Version& version) const;
 
   // Returns an UpdateData created by the store to hold updates for fetched
@@ -59,13 +59,13 @@
   // created update data will be scheduled to be updated. |expiry_time|
   // specifies when the hints within the created update data will be expired
   // from the store.
-  std::unique_ptr<HintUpdateData> CreateUpdateDataForFetchedHints(
+  std::unique_ptr<StoreUpdateData> CreateUpdateDataForFetchedHints(
       base::Time update_time,
       base::Time expiry_time) const;
 
-  // Updates the store's component data using the provided HintUpdateData
+  // Updates the store's component data using the provided StoreUpdateData
   // and asynchronously runs the provided callback after the update finishes.
-  void UpdateComponentHints(std::unique_ptr<HintUpdateData> component_data,
+  void UpdateComponentHints(std::unique_ptr<StoreUpdateData> component_data,
                             base::OnceClosure callback);
 
   // Process |get_hints_response| to be stored in the hint cache store.
diff --git a/components/optimization_guide/hint_cache_store.cc b/components/optimization_guide/hint_cache_store.cc
index 3b1a007..6236eb7 100644
--- a/components/optimization_guide/hint_cache_store.cc
+++ b/components/optimization_guide/hint_cache_store.cc
@@ -138,7 +138,7 @@
                                  purge_existing_data, std::move(callback)));
 }
 
-std::unique_ptr<HintUpdateData>
+std::unique_ptr<StoreUpdateData>
 HintCacheStore::MaybeCreateUpdateDataForComponentHints(
     const base::Version& version) const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
@@ -154,24 +154,25 @@
     return nullptr;
   }
 
-  // Create and return a HintUpdateData object. This object has
+  // Create and return a StoreUpdateData object. This object has
   // hints from the component moved into it and organizes them in a format
   // usable by the store; the object will returned to the store in
   // StoreComponentHints().
-  return HintUpdateData::CreateComponentHintUpdateData(version);
+  return StoreUpdateData::CreateComponentStoreUpdateData(version);
 }
 
-std::unique_ptr<HintUpdateData> HintCacheStore::CreateUpdateDataForFetchedHints(
-    base::Time update_time,
-    base::Time expiry_time) const {
-  // Create and returns a HintUpdateData object. This object has has hints
+std::unique_ptr<StoreUpdateData>
+HintCacheStore::CreateUpdateDataForFetchedHints(base::Time update_time,
+                                                base::Time expiry_time) const {
+  // Create and returns a StoreUpdateData object. This object has has hints
   // from the GetHintsResponse moved into and organizes them in a format
   // usable by the store. The object will be store with UpdateFetchedData().
-  return HintUpdateData::CreateFetchedHintUpdateData(update_time, expiry_time);
+  return StoreUpdateData::CreateFetchedStoreUpdateData(update_time,
+                                                       expiry_time);
 }
 
 void HintCacheStore::UpdateComponentHints(
-    std::unique_ptr<HintUpdateData> component_data,
+    std::unique_ptr<StoreUpdateData> component_data,
     base::OnceClosure callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(component_data);
@@ -229,7 +230,7 @@
 }
 
 void HintCacheStore::UpdateFetchedHints(
-    std::unique_ptr<HintUpdateData> fetched_hints_data,
+    std::unique_ptr<StoreUpdateData> fetched_hints_data,
     base::OnceClosure callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(fetched_hints_data);
diff --git a/components/optimization_guide/hint_cache_store.h b/components/optimization_guide/hint_cache_store.h
index 9470a21..e5763125 100644
--- a/components/optimization_guide/hint_cache_store.h
+++ b/components/optimization_guide/hint_cache_store.h
@@ -18,7 +18,7 @@
 #include "base/version.h"
 #include "components/leveldb_proto/public/proto_database.h"
 #include "components/leveldb_proto/public/proto_database_provider.h"
-#include "components/optimization_guide/hint_update_data.h"
+#include "components/optimization_guide/store_update_data.h"
 
 namespace base {
 class SequencedTaskRunner;
@@ -97,15 +97,15 @@
   // When initialization completes, the provided callback is run asynchronously.
   void Initialize(bool purge_existing_data, base::OnceClosure callback);
 
-  // Creates and returns a HintUpdateData object for component hints. This
+  // Creates and returns a StoreUpdateData object for component hints. This
   // object is used to collect hints within a component in a format usable on a
   // background thread and is later returned to the store in
-  // UpdateComponentHints(). The HintUpdateData object is only created when the
+  // UpdateComponentHints(). The StoreUpdateData object is only created when the
   // provided component version is newer than the store's version, indicating
   // fresh hints. If the component's version is not newer than the store's
-  // version, then no HintUpdateData is created and nullptr is returned. This
+  // version, then no StoreUpdateData is created and nullptr is returned. This
   // prevents unnecessary processing of the component's hints by the caller.
-  std::unique_ptr<HintUpdateData> MaybeCreateUpdateDataForComponentHints(
+  std::unique_ptr<StoreUpdateData> MaybeCreateUpdateDataForComponentHints(
       const base::Version& version) const;
 
   // Creates and returns a HintsUpdateData object for Fetched Hints.
@@ -114,7 +114,7 @@
   // hints have been successfully fetched from the remote Optimization Guide
   // Service so the store can expire old hints, remove hints specified by the
   // server, and store the fresh hints.
-  std::unique_ptr<HintUpdateData> CreateUpdateDataForFetchedHints(
+  std::unique_ptr<StoreUpdateData> CreateUpdateDataForFetchedHints(
       base::Time update_time,
       base::Time expiry_time) const;
 
@@ -122,13 +122,13 @@
   // this is called, all pre-existing component hints within the store is purged
   // and only the new hints are retained. After the store is fully updated with
   // the new component hints, the callback is run asynchronously.
-  void UpdateComponentHints(std::unique_ptr<HintUpdateData> component_data,
+  void UpdateComponentHints(std::unique_ptr<StoreUpdateData> component_data,
                             base::OnceClosure callback);
 
   // Updates the fetched hints contained in the store, including the
   // metadata entry. The callback is run asynchronously after the database
   // stores the hints.
-  void UpdateFetchedHints(std::unique_ptr<HintUpdateData> fetched_hints_data,
+  void UpdateFetchedHints(std::unique_ptr<StoreUpdateData> fetched_hints_data,
                           base::OnceClosure callback);
 
   // Removes fetched hint store entries from |this|. |hint_entry_keys_| is
@@ -160,7 +160,7 @@
 
  private:
   friend class HintCacheStoreTest;
-  friend class HintUpdateData;
+  friend class StoreUpdateData;
 
   using EntryKeyPrefix = std::string;
   using EntryKeySet = base::flat_set<EntryKey>;
diff --git a/components/optimization_guide/hint_cache_store_unittest.cc b/components/optimization_guide/hint_cache_store_unittest.cc
index 2af289e..b45afbb 100644
--- a/components/optimization_guide/hint_cache_store_unittest.cc
+++ b/components/optimization_guide/hint_cache_store_unittest.cc
@@ -13,9 +13,9 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "components/leveldb_proto/testing/fake_db.h"
-#include "components/optimization_guide/hint_update_data.h"
 #include "components/optimization_guide/optimization_guide_features.h"
 #include "components/optimization_guide/proto/hint_cache.pb.h"
+#include "components/optimization_guide/store_update_data.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
@@ -111,7 +111,7 @@
   }
 
   // Moves the specified number of component hints into the update data.
-  void SeedComponentUpdateData(HintUpdateData* update_data,
+  void SeedComponentUpdateData(StoreUpdateData* update_data,
                                size_t component_hint_count) {
     for (size_t i = 0; i < component_hint_count; ++i) {
       std::string host_suffix = GetHostSuffix(i);
@@ -124,7 +124,7 @@
     }
   }
   // Moves the specified number of component hints into the update data.
-  void SeedFetchedUpdateData(HintUpdateData* update_data,
+  void SeedFetchedUpdateData(StoreUpdateData* update_data,
                              size_t fetched_hint_count) {
     for (size_t i = 0; i < fetched_hint_count; ++i) {
       std::string host_suffix = GetHostSuffix(i);
@@ -180,7 +180,7 @@
     }
   }
 
-  void UpdateComponentHints(std::unique_ptr<HintUpdateData> component_data,
+  void UpdateComponentHints(std::unique_ptr<StoreUpdateData> component_data,
                             bool update_success = true,
                             bool load_hint_entry_keys_success = true) {
     EXPECT_CALL(*this, OnUpdateHints());
@@ -196,7 +196,7 @@
     }
   }
 
-  void UpdateFetchedHints(std::unique_ptr<HintUpdateData> fetched_data,
+  void UpdateFetchedHints(std::unique_ptr<StoreUpdateData> fetched_data,
                           bool update_success = true,
                           bool load_hint_entry_keys_success = true) {
     EXPECT_CALL(*this, OnUpdateHints());
@@ -828,7 +828,7 @@
   SeedInitialData(schema_state, 10);
   CreateDatabase();
 
-  // HintUpdateData for a component update should only be created if the store
+  // StoreUpdateData for a component update should only be created if the store
   // is initialized.
   EXPECT_FALSE(hint_store()->MaybeCreateUpdateDataForComponentHints(
       base::Version(kUpdateComponentVersion)));
@@ -840,7 +840,7 @@
   CreateDatabase();
   InitializeStore(schema_state);
 
-  // No HintUpdateData for a component update should be created when the
+  // No StoreUpdateData for a component update should be created when the
   // component version of the update is older than the store's component
   // version.
   EXPECT_FALSE(hint_store()->MaybeCreateUpdateDataForComponentHints(
@@ -853,7 +853,7 @@
   CreateDatabase();
   InitializeStore(schema_state);
 
-  // No HintUpdateData should be created when the component version of the
+  // No StoreUpdateData should be created when the component version of the
   // update is the same as the store's component version.
   EXPECT_FALSE(hint_store()->MaybeCreateUpdateDataForComponentHints(
       base::Version(kDefaultComponentVersion)));
@@ -866,7 +866,7 @@
   CreateDatabase();
   InitializeStore(schema_state);
 
-  // HintUpdateData for a component update should be created when there is no
+  // StoreUpdateData for a component update should be created when there is no
   // pre-existing component in the store.
   EXPECT_TRUE(hint_store()->MaybeCreateUpdateDataForComponentHints(
       base::Version(kDefaultComponentVersion)));
@@ -878,7 +878,7 @@
   CreateDatabase();
   InitializeStore(schema_state);
 
-  // HintUpdateData for a component update should be created when the component
+  // StoreUpdateData for a component update should be created when the component
   // version of the update is newer than the store's component version.
   EXPECT_TRUE(hint_store()->MaybeCreateUpdateDataForComponentHints(
       base::Version(kUpdateComponentVersion)));
@@ -890,7 +890,7 @@
   CreateDatabase();
   InitializeStore(schema_state);
 
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_store()->MaybeCreateUpdateDataForComponentHints(
           base::Version(kUpdateComponentVersion));
   ASSERT_TRUE(update_data);
@@ -909,7 +909,7 @@
   CreateDatabase();
   InitializeStore(schema_state);
 
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_store()->MaybeCreateUpdateDataForComponentHints(
           base::Version(kUpdateComponentVersion));
   ASSERT_TRUE(update_data);
@@ -932,7 +932,7 @@
   CreateDatabase();
   InitializeStore(schema_state);
 
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_store()->MaybeCreateUpdateDataForComponentHints(
           base::Version(kUpdateComponentVersion));
   ASSERT_TRUE(update_data);
@@ -955,7 +955,7 @@
   CreateDatabase();
   InitializeStore(schema_state, true /*=purge_existing_data*/);
 
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_store()->MaybeCreateUpdateDataForComponentHints(
           base::Version(kUpdateComponentVersion));
   ASSERT_TRUE(update_data);
@@ -978,14 +978,14 @@
   CreateDatabase();
   InitializeStore(schema_state);
 
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_store()->MaybeCreateUpdateDataForComponentHints(
           base::Version(kUpdateComponentVersion));
   ASSERT_TRUE(update_data);
   SeedComponentUpdateData(update_data.get(), update_hint_count);
   UpdateComponentHints(std::move(update_data));
 
-  // HintUpdateData for the component update should not be created for a second
+  // StoreUpdateData for the component update should not be created for a second
   // component update with the same version as the first component update.
   EXPECT_FALSE(hint_store()->MaybeCreateUpdateDataForComponentHints(
       base::Version(kUpdateComponentVersion)));
@@ -1001,10 +1001,10 @@
   InitializeStore(schema_state);
 
   // Create two updates for the same component version with different counts.
-  std::unique_ptr<HintUpdateData> update_data_1 =
+  std::unique_ptr<StoreUpdateData> update_data_1 =
       hint_store()->MaybeCreateUpdateDataForComponentHints(
           base::Version(kUpdateComponentVersion));
-  std::unique_ptr<HintUpdateData> update_data_2 =
+  std::unique_ptr<StoreUpdateData> update_data_2 =
       hint_store()->MaybeCreateUpdateDataForComponentHints(
           base::Version(kUpdateComponentVersion));
   ASSERT_TRUE(update_data_1);
@@ -1108,7 +1108,7 @@
   CreateDatabase();
   InitializeStore(schema_state);
 
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_store()->MaybeCreateUpdateDataForComponentHints(
           base::Version(kUpdateComponentVersion));
   ASSERT_TRUE(update_data);
@@ -1180,7 +1180,7 @@
   CreateDatabase();
   InitializeStore(schema_state);
 
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_store()->MaybeCreateUpdateDataForComponentHints(
           base::Version(kUpdateComponentVersion));
   ASSERT_TRUE(update_data);
@@ -1216,7 +1216,7 @@
   CreateDatabase();
   InitializeStore(schema_state);
 
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_store()->CreateUpdateDataForFetchedHints(
           update_time, update_time + optimization_guide::features::
                                          StoredFetchedHintsFreshnessDuration());
@@ -1242,7 +1242,7 @@
   InitializeStore(schema_state);
 
   base::Version version("2.0.0");
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_store()->MaybeCreateUpdateDataForComponentHints(
           base::Version(kUpdateComponentVersion));
   ASSERT_TRUE(update_data);
@@ -1301,7 +1301,7 @@
   InitializeStore(schema_state);
 
   base::Version version("2.0.0");
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_store()->MaybeCreateUpdateDataForComponentHints(
           base::Version(kUpdateComponentVersion));
   ASSERT_TRUE(update_data);
@@ -1364,7 +1364,7 @@
 
   // Add Components back - newer version.
   base::Version version3("3.0.0");
-  std::unique_ptr<HintUpdateData> update_data2 =
+  std::unique_ptr<StoreUpdateData> update_data2 =
       hint_store()->MaybeCreateUpdateDataForComponentHints(version3);
 
   ASSERT_TRUE(update_data2);
@@ -1411,7 +1411,7 @@
   InitializeStore(schema_state);
 
   base::Version version("2.0.0");
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_store()->MaybeCreateUpdateDataForComponentHints(
           base::Version(kUpdateComponentVersion));
   ASSERT_TRUE(update_data);
@@ -1477,7 +1477,7 @@
   InitializeStore(schema_state);
 
   base::Version version("2.0.0");
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_store()->MaybeCreateUpdateDataForComponentHints(
           base::Version(kUpdateComponentVersion));
   ASSERT_TRUE(update_data);
diff --git a/components/optimization_guide/hint_cache_unittest.cc b/components/optimization_guide/hint_cache_unittest.cc
index 6dd078d..4413a99 100644
--- a/components/optimization_guide/hint_cache_unittest.cc
+++ b/components/optimization_guide/hint_cache_unittest.cc
@@ -77,7 +77,7 @@
 
   // Updates the cache with |component_data| and waits for callback indicating
   // that the update is complete.
-  void UpdateComponentHints(std::unique_ptr<HintUpdateData> component_data) {
+  void UpdateComponentHints(std::unique_ptr<StoreUpdateData> component_data) {
     are_component_hints_updated_ = false;
     hint_cache_->UpdateComponentHints(
         std::move(component_data),
@@ -147,7 +147,7 @@
   CreateAndInitializeHintCache(kMemoryCacheSize);
 
   base::Version version("2.0.0");
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_cache()->MaybeCreateUpdateDataForComponentHints(version);
   ASSERT_TRUE(update_data);
 
@@ -182,7 +182,7 @@
   CreateAndInitializeHintCache(kMemoryCacheSize);
 
   base::Version version("2.0.0");
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_cache()->MaybeCreateUpdateDataForComponentHints(version);
   ASSERT_TRUE(update_data);
 
@@ -198,7 +198,7 @@
   base::Version version_1("1.0.0");
   base::Version version_2("2.0.0");
 
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_cache()->MaybeCreateUpdateDataForComponentHints(version_2);
   ASSERT_TRUE(update_data);
 
@@ -214,7 +214,7 @@
   base::Version version_1("1.0.0");
   base::Version version_2("2.0.0");
 
-  std::unique_ptr<HintUpdateData> update_data_1 =
+  std::unique_ptr<StoreUpdateData> update_data_1 =
       hint_cache()->MaybeCreateUpdateDataForComponentHints(version_1);
   ASSERT_TRUE(update_data_1);
 
@@ -243,7 +243,7 @@
   EXPECT_TRUE(hint_cache()->HasHint("host.subdomain.domain.org"));
   EXPECT_TRUE(hint_cache()->HasHint("subhost.host.subdomain.domain.org"));
 
-  std::unique_ptr<HintUpdateData> update_data_2 =
+  std::unique_ptr<StoreUpdateData> update_data_2 =
       hint_cache()->MaybeCreateUpdateDataForComponentHints(version_2);
   ASSERT_TRUE(update_data_2);
 
@@ -284,7 +284,7 @@
 
     base::Version version("2.0.0");
 
-    std::unique_ptr<HintUpdateData> update_data =
+    std::unique_ptr<StoreUpdateData> update_data =
         hint_cache()->MaybeCreateUpdateDataForComponentHints(version);
     if (i == 0) {
       ASSERT_TRUE(update_data);
@@ -329,7 +329,7 @@
 
     base::Version version("2.0.0");
 
-    std::unique_ptr<HintUpdateData> update_data =
+    std::unique_ptr<StoreUpdateData> update_data =
         hint_cache()->MaybeCreateUpdateDataForComponentHints(version);
     ASSERT_TRUE(update_data);
 
@@ -370,7 +370,7 @@
 
     base::Version version("2.0.0");
 
-    std::unique_ptr<HintUpdateData> update_data =
+    std::unique_ptr<StoreUpdateData> update_data =
         hint_cache()->MaybeCreateUpdateDataForComponentHints(version);
     if (i == 0) {
       ASSERT_TRUE(update_data);
@@ -416,7 +416,7 @@
   CreateAndInitializeHintCache(kMemoryCacheSize);
 
   base::Version version("1.0.0");
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_cache()->MaybeCreateUpdateDataForComponentHints(version);
   ASSERT_TRUE(update_data);
 
@@ -456,7 +456,7 @@
   CreateAndInitializeHintCache(kMemoryCacheSize);
 
   base::Version version("1.0.0");
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_cache()->MaybeCreateUpdateDataForComponentHints(version);
   ASSERT_TRUE(update_data);
 
@@ -477,7 +477,7 @@
   CreateAndInitializeHintCache(kMemoryCacheSize);
 
   base::Version version("1.0.0");
-  std::unique_ptr<HintUpdateData> update_data =
+  std::unique_ptr<StoreUpdateData> update_data =
       hint_cache()->MaybeCreateUpdateDataForComponentHints(version);
   ASSERT_TRUE(update_data);
 
diff --git a/components/optimization_guide/hints_processing_util.cc b/components/optimization_guide/hints_processing_util.cc
index 2d5f690..ef4969d 100644
--- a/components/optimization_guide/hints_processing_util.cc
+++ b/components/optimization_guide/hints_processing_util.cc
@@ -9,8 +9,8 @@
 #include "base/containers/flat_set.h"
 #include "base/metrics/field_trial_params.h"
 #include "base/strings/stringprintf.h"
-#include "components/optimization_guide/hint_update_data.h"
 #include "components/optimization_guide/optimization_guide_features.h"
+#include "components/optimization_guide/store_update_data.h"
 #include "components/optimization_guide/url_pattern_with_wildcards.h"
 #include "url/gurl.h"
 
@@ -86,9 +86,9 @@
 }
 
 bool ProcessHints(google::protobuf::RepeatedPtrField<proto::Hint>* hints,
-                  optimization_guide::HintUpdateData* hint_update_data) {
+                  optimization_guide::StoreUpdateData* update_data) {
   // If there's no update data, then there's nothing to do.
-  if (!hint_update_data)
+  if (!update_data)
     return false;
 
   base::flat_set<std::string> seen_host_suffixes;
@@ -126,7 +126,7 @@
       // data.
       // WARNING: Do not use |hint| after this call. Its contents will no
       // longer be valid.
-      hint_update_data->MoveHintIntoUpdateData(std::move(hint));
+      update_data->MoveHintIntoUpdateData(std::move(hint));
       did_process_hints = true;
     }
   }
diff --git a/components/optimization_guide/hints_processing_util.h b/components/optimization_guide/hints_processing_util.h
index f8aadc70..cea8bb6 100644
--- a/components/optimization_guide/hints_processing_util.h
+++ b/components/optimization_guide/hints_processing_util.h
@@ -13,7 +13,7 @@
 class GURL;
 
 namespace optimization_guide {
-class HintUpdateData;
+class StoreUpdateData;
 
 // Returns the string representation of the optimization type.
 std::string GetStringNameForOptimizationType(
@@ -42,11 +42,11 @@
 std::string HashHostForDictionary(const std::string& host);
 
 // Verifies and processes |hints| and places the ones it supports into
-// |hint_update_data|.
+// |update_data|.
 //
-// Returns true if there was at least one hint moved into |hint_update_data|.
+// Returns true if there was at least one hint moved into |update_data|.
 bool ProcessHints(google::protobuf::RepeatedPtrField<proto::Hint>* hints,
-                  HintUpdateData* hint_update_data);
+                  StoreUpdateData* update_data);
 
 // Converts |proto_ect| into a net::EffectiveConnectionType.
 net::EffectiveConnectionType ConvertProtoEffectiveConnectionType(
diff --git a/components/optimization_guide/hints_processing_util_unittest.cc b/components/optimization_guide/hints_processing_util_unittest.cc
index a1a258a..f83aad8c 100644
--- a/components/optimization_guide/hints_processing_util_unittest.cc
+++ b/components/optimization_guide/hints_processing_util_unittest.cc
@@ -4,9 +4,9 @@
 
 #include "components/optimization_guide/hints_processing_util.h"
 
-#include "components/optimization_guide/hint_update_data.h"
 #include "components/optimization_guide/proto/hint_cache.pb.h"
 #include "components/optimization_guide/proto/hints.pb.h"
+#include "components/optimization_guide/store_update_data.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
@@ -79,8 +79,8 @@
   google::protobuf::RepeatedPtrField<proto::Hint> hints;
   *(hints.Add()) = hint;
 
-  std::unique_ptr<HintUpdateData> update_data =
-      HintUpdateData::CreateComponentHintUpdateData(base::Version("1.0.0"));
+  std::unique_ptr<StoreUpdateData> update_data =
+      StoreUpdateData::CreateComponentStoreUpdateData(base::Version("1.0.0"));
   EXPECT_FALSE(ProcessHints(&hints, update_data.get()));
   // Verify there is 1 store entries: 1 for the metadata entry.
   EXPECT_EQ(1ul, update_data->TakeUpdateEntries()->size());
@@ -107,8 +107,8 @@
   no_page_hints_hint.set_key_representation(proto::HOST_SUFFIX);
   *(hints.Add()) = no_page_hints_hint;
 
-  std::unique_ptr<HintUpdateData> update_data =
-      HintUpdateData::CreateComponentHintUpdateData(base::Version("1.0.0"));
+  std::unique_ptr<StoreUpdateData> update_data =
+      StoreUpdateData::CreateComponentStoreUpdateData(base::Version("1.0.0"));
   EXPECT_TRUE(ProcessHints(&hints, update_data.get()));
   // Verify there are 2 store entries: 1 for the metadata entry plus
   // the 1 added hint entries.
diff --git a/components/optimization_guide/optimization_guide_enums.h b/components/optimization_guide/optimization_guide_enums.h
index 9423c6c..f8c8682c 100644
--- a/components/optimization_guide/optimization_guide_enums.h
+++ b/components/optimization_guide/optimization_guide_enums.h
@@ -55,8 +55,12 @@
   // The model needed to make the target decision was not available on the
   // client.
   kModelNotAvailableOnClient,
+  // The page load is part of a model prediction holdback where all decisions
+  // will return |OptimizationGuideDecision::kFalse| in an attempt to not taint
+  // the data for understanding the production recall of the model.
+  kModelPredictionHoldback,
   // Add new values above this line.
-  kMaxValue = kModelNotAvailableOnClient,
+  kMaxValue = kModelPredictionHoldback,
 };
 
 }  // namespace optimization_guide
diff --git a/components/optimization_guide/optimization_guide_features.cc b/components/optimization_guide/optimization_guide_features.cc
index 0f13743..078ede3 100644
--- a/components/optimization_guide/optimization_guide_features.cc
+++ b/components/optimization_guide/optimization_guide_features.cc
@@ -169,5 +169,14 @@
   return base::FeatureList::IsEnabled(kOptimizationTargetPrediction);
 }
 
+bool ShouldOverrideOptimizationTargetDecisionForMetricsPurposes(
+    proto::OptimizationTarget optimization_target) {
+  if (optimization_target != proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD)
+    return false;
+
+  return base::GetFieldTrialParamByFeatureAsBool(
+      kOptimizationTargetPrediction, "painful_page_load_metrics_only", false);
+}
+
 }  // namespace features
 }  // namespace optimization_guide
diff --git a/components/optimization_guide/optimization_guide_features.h b/components/optimization_guide/optimization_guide_features.h
index b367fd03..7ca80fc8 100644
--- a/components/optimization_guide/optimization_guide_features.h
+++ b/components/optimization_guide/optimization_guide_features.h
@@ -11,6 +11,7 @@
 #include "base/feature_list.h"
 #include "base/optional.h"
 #include "base/time/time.h"
+#include "components/optimization_guide/proto/models.pb.h"
 #include "net/nqe/effective_connection_type.h"
 #include "url/gurl.h"
 
@@ -90,6 +91,12 @@
 // Returns true if optimization target prediction is enabled.
 bool IsOptimizationTargetPredictionEnabled();
 
+// Returns true if the optimization target decision for |optimization_target|
+// should not be propagated to the caller in an effort to fully understand the
+// statistics for the served model and not taint the resulting data.
+bool ShouldOverrideOptimizationTargetDecisionForMetricsPurposes(
+    proto::OptimizationTarget optimization_target);
+
 }  // namespace features
 }  // namespace optimization_guide
 
diff --git a/components/optimization_guide/hint_update_data.cc b/components/optimization_guide/store_update_data.cc
similarity index 80%
rename from components/optimization_guide/hint_update_data.cc
rename to components/optimization_guide/store_update_data.cc
index fac8de3..776ceec5 100644
--- a/components/optimization_guide/hint_update_data.cc
+++ b/components/optimization_guide/store_update_data.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/optimization_guide/hint_update_data.h"
+#include "components/optimization_guide/store_update_data.h"
 
 #include "components/optimization_guide/hint_cache_store.h"
 #include "components/optimization_guide/proto/hint_cache.pb.h"
@@ -11,28 +11,30 @@
 namespace optimization_guide {
 
 // static
-std::unique_ptr<HintUpdateData> HintUpdateData::CreateComponentHintUpdateData(
+std::unique_ptr<StoreUpdateData>
+StoreUpdateData::CreateComponentStoreUpdateData(
     const base::Version& component_version) {
-  std::unique_ptr<HintUpdateData> update_data(new HintUpdateData(
+  std::unique_ptr<StoreUpdateData> update_data(new StoreUpdateData(
       base::Optional<base::Version>(component_version),
       base::Optional<base::Time>(), base::Optional<base::Time>()));
   return update_data;
 }
 
 // static
-std::unique_ptr<HintUpdateData> HintUpdateData::CreateFetchedHintUpdateData(
+std::unique_ptr<StoreUpdateData> StoreUpdateData::CreateFetchedStoreUpdateData(
     base::Time fetch_update_time,
     base::Time expiry_time) {
-  std::unique_ptr<HintUpdateData> update_data(
-      new HintUpdateData(base::Optional<base::Version>(),
-                         base::Optional<base::Time>(fetch_update_time),
-                         base::Optional<base::Time>(expiry_time)));
+  std::unique_ptr<StoreUpdateData> update_data(
+      new StoreUpdateData(base::Optional<base::Version>(),
+                          base::Optional<base::Time>(fetch_update_time),
+                          base::Optional<base::Time>(expiry_time)));
   return update_data;
 }
 
-HintUpdateData::HintUpdateData(base::Optional<base::Version> component_version,
-                               base::Optional<base::Time> fetch_update_time,
-                               base::Optional<base::Time> expiry_time)
+StoreUpdateData::StoreUpdateData(
+    base::Optional<base::Version> component_version,
+    base::Optional<base::Time> fetch_update_time,
+    base::Optional<base::Time> expiry_time)
     : component_version_(component_version),
       fetch_update_time_(fetch_update_time),
       expiry_time_(expiry_time),
@@ -72,9 +74,9 @@
   DETACH_FROM_SEQUENCE(sequence_checker_);
 }
 
-HintUpdateData::~HintUpdateData() {}
+StoreUpdateData::~StoreUpdateData() {}
 
-void HintUpdateData::MoveHintIntoUpdateData(proto::Hint&& hint) {
+void StoreUpdateData::MoveHintIntoUpdateData(proto::Hint&& hint) {
   // All future modifications must be made by the same thread. Note, |this| may
   // have been constructed on another thread.
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
@@ -98,7 +100,7 @@
                                  std::move(entry_proto));
 }
 
-std::unique_ptr<EntryVector> HintUpdateData::TakeUpdateEntries() {
+std::unique_ptr<EntryVector> StoreUpdateData::TakeUpdateEntries() {
   // TakeUpdateEntries is not be sequence checked as it only gives up ownership
   // of the entries_to_save_ and does not modify any state.
   DCHECK(entries_to_save_);
diff --git a/components/optimization_guide/hint_update_data.h b/components/optimization_guide/store_update_data.h
similarity index 79%
rename from components/optimization_guide/hint_update_data.h
rename to components/optimization_guide/store_update_data.h
index efe1750..cabb322 100644
--- a/components/optimization_guide/hint_update_data.h
+++ b/components/optimization_guide/store_update_data.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_OPTIMIZATION_GUIDE_HINT_UPDATE_DATA_H_
-#define COMPONENTS_OPTIMIZATION_GUIDE_HINT_UPDATE_DATA_H_
+#ifndef COMPONENTS_OPTIMIZATION_GUIDE_STORE_UPDATE_DATA_H_
+#define COMPONENTS_OPTIMIZATION_GUIDE_STORE_UPDATE_DATA_H_
 
 #include <string>
 
@@ -24,16 +24,16 @@
     leveldb_proto::ProtoDatabase<proto::StoreEntry>::KeyEntryVector;
 
 // Holds hint data for updating the HintCacheStore.
-class HintUpdateData {
+class StoreUpdateData {
  public:
-  ~HintUpdateData();
+  ~StoreUpdateData();
 
   // Creates an update data object for a component hint update.
-  static std::unique_ptr<HintUpdateData> CreateComponentHintUpdateData(
+  static std::unique_ptr<StoreUpdateData> CreateComponentStoreUpdateData(
       const base::Version& component_version);
 
   // Creates an update data object for a fetched hint update.
-  static std::unique_ptr<HintUpdateData> CreateFetchedHintUpdateData(
+  static std::unique_ptr<StoreUpdateData> CreateFetchedStoreUpdateData(
       base::Time fetch_update_time,
       base::Time expiry_time);
 
@@ -58,9 +58,9 @@
   std::unique_ptr<EntryVector> TakeUpdateEntries();
 
  private:
-  HintUpdateData(base::Optional<base::Version> component_version,
-                 base::Optional<base::Time> fetch_update_time,
-                 base::Optional<base::Time> expiry_time);
+  StoreUpdateData(base::Optional<base::Version> component_version,
+                  base::Optional<base::Time> fetch_update_time,
+                  base::Optional<base::Time> expiry_time);
 
   // The component version of the update data for a component update.
   base::Optional<base::Version> component_version_;
@@ -80,9 +80,9 @@
 
   SEQUENCE_CHECKER(sequence_checker_);
 
-  DISALLOW_COPY_AND_ASSIGN(HintUpdateData);
+  DISALLOW_COPY_AND_ASSIGN(StoreUpdateData);
 };
 
 }  // namespace optimization_guide
 
-#endif  // COMPONENTS_OPTIMIZATION_GUIDE_HINT_UPDATE_DATA_H_
+#endif  // COMPONENTS_OPTIMIZATION_GUIDE_STORE_UPDATE_DATA_H_
diff --git a/components/optimization_guide/hint_update_data_unittest.cc b/components/optimization_guide/store_update_data_unittest.cc
similarity index 86%
rename from components/optimization_guide/hint_update_data_unittest.cc
rename to components/optimization_guide/store_update_data_unittest.cc
index 4ab091a2..6e3e37a 100644
--- a/components/optimization_guide/hint_update_data_unittest.cc
+++ b/components/optimization_guide/store_update_data_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/optimization_guide/hint_update_data.h"
+#include "components/optimization_guide/store_update_data.h"
 
 #include <string>
 #include <vector>
@@ -19,7 +19,7 @@
 
 namespace {
 
-TEST(HintUpdateDataTest, BuildComponentHintUpdateData) {
+TEST(StoreUpdateDataTest, BuildComponentStoreUpdateData) {
   // Verify creating a Component Hint update package.
   base::Version v1("1.2.3.4");
   proto::Hint hint1;
@@ -33,8 +33,8 @@
   proto::PageHint* page_hint2 = hint2.add_page_hints();
   page_hint2->set_page_pattern("slowpagealso");
 
-  std::unique_ptr<HintUpdateData> component_update =
-      HintUpdateData::CreateComponentHintUpdateData(v1);
+  std::unique_ptr<StoreUpdateData> component_update =
+      StoreUpdateData::CreateComponentStoreUpdateData(v1);
   component_update->MoveHintIntoUpdateData(std::move(hint1));
   component_update->MoveHintIntoUpdateData(std::move(hint2));
   EXPECT_TRUE(component_update->component_version().has_value());
@@ -45,7 +45,7 @@
   EXPECT_EQ(3ul, component_update->TakeUpdateEntries()->size());
 }
 
-TEST(HintUpdateDataTest, BuildFetchUpdateData) {
+TEST(StoreUpdateDataTest, BuildFetchUpdateData) {
   // Verify creating a Fetched Hint update package.
   base::Time update_time = base::Time::Now();
   proto::Hint hint1;
@@ -54,8 +54,8 @@
   proto::PageHint* page_hint1 = hint1.add_page_hints();
   page_hint1->set_page_pattern("slowpage");
 
-  std::unique_ptr<HintUpdateData> fetch_update =
-      HintUpdateData::CreateFetchedHintUpdateData(
+  std::unique_ptr<StoreUpdateData> fetch_update =
+      StoreUpdateData::CreateFetchedStoreUpdateData(
           update_time, update_time + optimization_guide::features::
                                          StoredFetchedHintsFreshnessDuration());
   fetch_update->MoveHintIntoUpdateData(std::move(hint1));
diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc
index 0d226a6..2d7bc0f 100644
--- a/components/password_manager/core/browser/password_manager.cc
+++ b/components/password_manager/core/browser/password_manager.cc
@@ -409,8 +409,7 @@
   if (!client_->GetProfilePasswordStore()->IsAbleToSavePasswords() ||
       !client_->IsSavingAndFillingEnabled(password_form.origin) ||
       ShouldBlockPasswordForSameOriginButDifferentScheme(
-          password_form.origin) ||
-      !client_->GetStoreResultFilter()->ShouldSave(password_form)) {
+          password_form.origin)) {
     return;
   }
 
@@ -423,6 +422,11 @@
   if (!manager)
     return;
 
+  if (!client_->GetStoreResultFilter()->ShouldSave(
+          *manager->GetSubmittedForm())) {
+    return;
+  }
+
   // Show the fallback if a prompt or a confirmation bubble should be available.
   bool has_generated_password = manager->HasGeneratedPassword();
   if (ShouldPromptUserToSavePassword(*manager) || has_generated_password) {
diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
index 2c38420..16f9f5fb 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -92,6 +92,10 @@
   return arg == expected_with_date;
 }
 
+MATCHER_P(HasUsernameValue, expected_username, "") {
+  return arg.username_value == expected_username;
+}
+
 class MockLeakDetectionCheck : public LeakDetectionCheck {
  public:
   MOCK_METHOD3(Start, void(const GURL&, base::string16, base::string16));
@@ -181,6 +185,8 @@
     EXPECT_CALL(filter_, ShouldSave(_)).WillRepeatedly(Return(false));
   }
 
+  testing::NiceMock<MockStoreResultFilter>* filter() { return &filter_; }
+
  private:
   testing::NiceMock<MockStoreResultFilter> filter_;
 };
@@ -3375,4 +3381,25 @@
                                      true /* did stop loading */);
 }
 
+TEST_F(PasswordManagerTest, ShowManualFallbackParsedFormIsUsed) {
+  EXPECT_CALL(client_, IsSavingAndFillingEnabled(_))
+      .WillRepeatedly(Return(true));
+  EXPECT_CALL(*store_, GetLogins(_, _))
+      .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms()));
+
+  // Create a PasswordForm, with only form_data set.
+  PasswordForm form;
+  form.form_data = MakeSimpleForm().form_data;
+
+  manager()->OnPasswordFormsParsed(&driver_, {form} /*observed*/);
+
+  // Check that the parsed form from |form.form_data| rather than |form| is used
+  // for checking whether the form should be saved.
+  EXPECT_CALL(*client_.filter(),
+              ShouldSave(HasUsernameValue(ASCIIToUTF16("googleuser"))))
+      .WillOnce(Return(true));
+
+  manager()->ShowManualFallbackForSaving(&driver_, form);
+}
+
 }  // namespace password_manager
diff --git a/components/previews/content/previews_hints.cc b/components/previews/content/previews_hints.cc
index 21612a21..11570c0 100644
--- a/components/previews/content/previews_hints.cc
+++ b/components/previews/content/previews_hints.cc
@@ -14,10 +14,10 @@
 #include "base/optional.h"
 #include "base/strings/stringprintf.h"
 #include "components/optimization_guide/bloom_filter.h"
-#include "components/optimization_guide/hint_update_data.h"
 #include "components/optimization_guide/hints_component_info.h"
 #include "components/optimization_guide/hints_component_util.h"
 #include "components/optimization_guide/hints_processing_util.h"
+#include "components/optimization_guide/store_update_data.h"
 #include "components/previews/core/previews_features.h"
 #include "url/gurl.h"
 
@@ -126,7 +126,7 @@
 }  // namespace
 
 PreviewsHints::PreviewsHints(
-    std::unique_ptr<optimization_guide::HintUpdateData> component_update_data)
+    std::unique_ptr<optimization_guide::StoreUpdateData> component_update_data)
     : hint_cache_(nullptr),
       component_update_data_(std::move(component_update_data)) {
   DETACH_FROM_SEQUENCE(sequence_checker_);
@@ -139,7 +139,8 @@
 // static
 std::unique_ptr<PreviewsHints> PreviewsHints::CreateFromHintsComponent(
     const optimization_guide::HintsComponentInfo& info,
-    std::unique_ptr<optimization_guide::HintUpdateData> component_update_data) {
+    std::unique_ptr<optimization_guide::StoreUpdateData>
+        component_update_data) {
   optimization_guide::ProcessHintsComponentResult result;
   std::unique_ptr<optimization_guide::proto::Configuration> config =
       ProcessHintsComponent(info, &result);
@@ -167,7 +168,8 @@
 // static
 std::unique_ptr<PreviewsHints> PreviewsHints::CreateFromHintsConfiguration(
     std::unique_ptr<optimization_guide::proto::Configuration> config,
-    std::unique_ptr<optimization_guide::HintUpdateData> component_update_data) {
+    std::unique_ptr<optimization_guide::StoreUpdateData>
+        component_update_data) {
   optimization_guide::ProcessHintsComponentResult process_hints_result =
       optimization_guide::ProcessHintsComponentResult::kSkippedProcessingHints;
   if (component_update_data) {
diff --git a/components/previews/content/previews_hints.h b/components/previews/content/previews_hints.h
index 997a407..90d1b98d 100644
--- a/components/previews/content/previews_hints.h
+++ b/components/previews/content/previews_hints.h
@@ -39,7 +39,7 @@
   // processing.
   static std::unique_ptr<PreviewsHints> CreateFromHintsComponent(
       const optimization_guide::HintsComponentInfo& info,
-      std::unique_ptr<optimization_guide::HintUpdateData>
+      std::unique_ptr<optimization_guide::StoreUpdateData>
           component_update_data);
 
   // Creates a Hints instance from the provided hints configuration. This must
@@ -47,7 +47,7 @@
   // amount of processing.
   static std::unique_ptr<PreviewsHints> CreateFromHintsConfiguration(
       std::unique_ptr<optimization_guide::proto::Configuration> config,
-      std::unique_ptr<optimization_guide::HintUpdateData>
+      std::unique_ptr<optimization_guide::StoreUpdateData>
           component_update_data);
 
   // Set |hint_cache_| and updates the hint cache's component data if
@@ -93,8 +93,8 @@
   friend class PreviewsHintsTest;
 
   // Constructs PreviewsHints with |component_update_data|. This
-  // HintUpdateData is later moved into the HintCache during Initialize().
-  PreviewsHints(std::unique_ptr<optimization_guide::HintUpdateData>
+  // StoreUpdateData is later moved into the HintCache during Initialize().
+  PreviewsHints(std::unique_ptr<optimization_guide::StoreUpdateData>
                     component_update_data);
 
   // Parses optimization filters from |config| and populates corresponding
@@ -106,10 +106,10 @@
   // guide, which is guaranteed to outlive PreviewsHints.
   optimization_guide::HintCache* hint_cache_;
 
-  // HintUpdateData provided by the HintCache and populated during
+  // StoreUpdateData provided by the HintCache and populated during
   // PreviewsHints::Create(). |component_update_data_| is set during
   // construction and moved into the HintCache during Initialize().
-  std::unique_ptr<optimization_guide::HintUpdateData> component_update_data_;
+  std::unique_ptr<optimization_guide::StoreUpdateData> component_update_data_;
 
   // Blacklist of host suffixes for LITE_PAGE_REDIRECT Previews.
   std::unique_ptr<optimization_guide::OptimizationFilter>
diff --git a/components/previews/content/previews_hints_unittest.cc b/components/previews/content/previews_hints_unittest.cc
index 91fecdf..1247fb4 100644
--- a/components/previews/content/previews_hints_unittest.cc
+++ b/components/previews/content/previews_hints_unittest.cc
@@ -18,12 +18,12 @@
 #include "components/optimization_guide/bloom_filter.h"
 #include "components/optimization_guide/hint_cache.h"
 #include "components/optimization_guide/hint_cache_store.h"
-#include "components/optimization_guide/hint_update_data.h"
 #include "components/optimization_guide/hints_component_info.h"
 #include "components/optimization_guide/hints_component_util.h"
 #include "components/optimization_guide/optimization_guide_features.h"
 #include "components/optimization_guide/proto/hints.pb.h"
 #include "components/optimization_guide/proto_database_provider_test_base.h"
+#include "components/optimization_guide/store_update_data.h"
 #include "components/previews/core/previews_features.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
diff --git a/components/previews/content/previews_optimization_guide_impl.cc b/components/previews/content/previews_optimization_guide_impl.cc
index 5c2095d..ae6a32c 100644
--- a/components/previews/content/previews_optimization_guide_impl.cc
+++ b/components/previews/content/previews_optimization_guide_impl.cc
@@ -243,10 +243,10 @@
   }
 
   // Create PreviewsHints from the newly available component on a background
-  // thread, providing a HintUpdateData for component update from the hint
+  // thread, providing a StoreUpdateData for component update from the hint
   // cache, so that each hint within the component can be moved into it. In the
   // case where the component's version is not newer than the hint cache store's
-  // component version, HintUpdateData will be a nullptr and hint
+  // component version, StoreUpdateData will be a nullptr and hint
   // processing will be skipped. After PreviewsHints::Create() returns the newly
   // created PreviewsHints, it is initialized in UpdateHints() on the UI thread.
   base::PostTaskAndReplyWithResult(
diff --git a/components/sync/driver/data_type_encryption_handler.h b/components/sync/driver/data_type_encryption_handler.h
index 7c424d53..1ab4a89d 100644
--- a/components/sync/driver/data_type_encryption_handler.h
+++ b/components/sync/driver/data_type_encryption_handler.h
@@ -15,9 +15,11 @@
   DataTypeEncryptionHandler();
   virtual ~DataTypeEncryptionHandler();
 
-  // Returns whether a passphrase is required for encryption or decryption to
-  // proceed.
-  virtual bool IsPassphraseRequired() const = 0;
+  // Returns whether there is an error that prevents encryption or decryption
+  // from proceeding. This does not necessarily mean that the UI will display an
+  // error state, for example if there's a user-transparent attempt to resolve
+  // the crypto error.
+  virtual bool HasCryptoError() const = 0;
 
   // Returns the current set of encrypted data types.
   virtual ModelTypeSet GetEncryptedDataTypes() const = 0;
diff --git a/components/sync/driver/data_type_manager_impl.cc b/components/sync/driver/data_type_manager_impl.cc
index 0f18f383..e25205ea 100644
--- a/components/sync/driver/data_type_manager_impl.cc
+++ b/components/sync/driver/data_type_manager_impl.cc
@@ -302,7 +302,7 @@
   }
 
   // Check for new or resolved data type crypto errors.
-  if (encryption_handler_->IsPassphraseRequired()) {
+  if (encryption_handler_->HasCryptoError()) {
     ModelTypeSet encrypted_types = encryption_handler_->GetEncryptedDataTypes();
     encrypted_types.RetainAll(last_requested_types_);
     encrypted_types.RemoveAll(data_type_status_table_.GetCryptoErrorTypes());
diff --git a/components/sync/driver/data_type_manager_impl_unittest.cc b/components/sync/driver/data_type_manager_impl_unittest.cc
index 9985f112..ee4ad3f 100644
--- a/components/sync/driver/data_type_manager_impl_unittest.cc
+++ b/components/sync/driver/data_type_manager_impl_unittest.cc
@@ -180,27 +180,25 @@
   FakeDataTypeEncryptionHandler();
   ~FakeDataTypeEncryptionHandler() override;
 
-  bool IsPassphraseRequired() const override;
+  bool HasCryptoError() const override;
   ModelTypeSet GetEncryptedDataTypes() const override;
 
-  void set_passphrase_required(bool passphrase_required) {
-    passphrase_required_ = passphrase_required;
-  }
+  void set_crypto_error(bool crypto_error) { crypto_error_ = crypto_error; }
   void set_encrypted_types(ModelTypeSet encrypted_types) {
     encrypted_types_ = encrypted_types;
   }
 
  private:
-  bool passphrase_required_;
+  bool crypto_error_;
   ModelTypeSet encrypted_types_;
 };
 
 FakeDataTypeEncryptionHandler::FakeDataTypeEncryptionHandler()
-    : passphrase_required_(false) {}
+    : crypto_error_(false) {}
 FakeDataTypeEncryptionHandler::~FakeDataTypeEncryptionHandler() {}
 
-bool FakeDataTypeEncryptionHandler::IsPassphraseRequired() const {
-  return passphrase_required_;
+bool FakeDataTypeEncryptionHandler::HasCryptoError() const {
+  return crypto_error_;
 }
 
 ModelTypeSet FakeDataTypeEncryptionHandler::GetEncryptedDataTypes() const {
@@ -321,7 +319,7 @@
   }
 
   void FailEncryptionFor(ModelTypeSet encrypted_types) {
-    encryption_handler_.set_passphrase_required(true);
+    encryption_handler_.set_crypto_error(true);
     encryption_handler_.set_encrypted_types(encrypted_types);
   }
 
diff --git a/components/sync/driver/profile_sync_service.cc b/components/sync/driver/profile_sync_service.cc
index 6fde79dea..a241e32 100644
--- a/components/sync/driver/profile_sync_service.cc
+++ b/components/sync/driver/profile_sync_service.cc
@@ -864,8 +864,8 @@
 
   data_type_manager_ =
       sync_client_->GetSyncApiComponentFactory()->CreateDataTypeManager(
-          initial_types, debug_info_listener, &data_type_controllers_,
-          user_settings_.get(), engine_.get(), this);
+          initial_types, debug_info_listener, &data_type_controllers_, &crypto_,
+          engine_.get(), this);
 
   crypto_.SetSyncEngine(GetAuthenticatedAccountInfo(), engine_.get());
 
diff --git a/components/sync/driver/sync_service_crypto.cc b/components/sync/driver/sync_service_crypto.cc
index 96879888..e0462da8 100644
--- a/components/sync/driver/sync_service_crypto.cc
+++ b/components/sync/driver/sync_service_crypto.cc
@@ -340,6 +340,27 @@
   return state_.encrypted_types;
 }
 
+bool SyncServiceCrypto::HasCryptoError() const {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  // This determines whether DataTypeManager should issue crypto errors for
+  // encrypted datatypes. This may differ from whether the UI represents the
+  // error state or not.
+
+  switch (state_.required_user_action) {
+    case RequiredUserAction::kNone:
+      return false;
+    case RequiredUserAction::kFetchingTrustedVaultKeys:
+    case RequiredUserAction::kTrustedVaultKeyRequired:
+    case RequiredUserAction::kPassphraseRequiredForDecryption:
+    case RequiredUserAction::kPassphraseRequiredForEncryption:
+      return true;
+  }
+
+  NOTREACHED();
+  return false;
+}
+
 void SyncServiceCrypto::OnPassphraseRequired(
     PassphraseRequiredReason reason,
     const KeyDerivationParams& key_derivation_params,
diff --git a/components/sync/driver/sync_service_crypto.h b/components/sync/driver/sync_service_crypto.h
index 4986bb35..1af4d2ee 100644
--- a/components/sync/driver/sync_service_crypto.h
+++ b/components/sync/driver/sync_service_crypto.h
@@ -14,6 +14,7 @@
 #include "base/sequence_checker.h"
 #include "components/signin/public/identity_manager/account_info.h"
 #include "components/sync/base/model_type.h"
+#include "components/sync/driver/data_type_encryption_handler.h"
 #include "components/sync/engine/configure_reason.h"
 #include "components/sync/engine/sync_encryption_handler.h"
 #include "components/sync/engine/sync_engine.h"
@@ -26,7 +27,8 @@
 // This class functions as mostly independent component of SyncService that
 // handles things related to encryption, including holding lots of state and
 // encryption communications with the sync thread.
-class SyncServiceCrypto : public SyncEncryptionHandler::Observer {
+class SyncServiceCrypto : public SyncEncryptionHandler::Observer,
+                          public DataTypeEncryptionHandler {
  public:
   // |sync_prefs| must not be null and must outlive this object.
   // |trusted_vault_client| may be null, but if non-null, the pointee must
@@ -55,9 +57,6 @@
   // Returns the actual passphrase type being used for encryption.
   PassphraseType GetPassphraseType() const;
 
-  // Returns the current set of encrypted data types.
-  ModelTypeSet GetEncryptedDataTypes() const;
-
   // SyncEncryptionHandler::Observer implementation.
   void OnPassphraseRequired(
       PassphraseRequiredReason reason,
@@ -76,6 +75,10 @@
   void OnPassphraseTypeChanged(PassphraseType type,
                                base::Time passphrase_time) override;
 
+  // DataTypeEncryptionHandler implementation.
+  bool HasCryptoError() const override;
+  ModelTypeSet GetEncryptedDataTypes() const override;
+
   // Used to provide the engine when it is initialized.
   void SetSyncEngine(const CoreAccountInfo& account_info, SyncEngine* engine);
 
diff --git a/components/sync/driver/sync_user_settings.h b/components/sync/driver/sync_user_settings.h
index 7edebb1..d746a827 100644
--- a/components/sync/driver/sync_user_settings.h
+++ b/components/sync/driver/sync_user_settings.h
@@ -13,7 +13,6 @@
 #include "components/sync/base/model_type.h"
 #include "components/sync/base/passphrase_enums.h"
 #include "components/sync/base/user_selectable_type.h"
-#include "components/sync/driver/data_type_encryption_handler.h"
 
 namespace syncer {
 
@@ -30,9 +29,9 @@
 };
 
 // This class encapsulates all the user-configurable bits of Sync.
-class SyncUserSettings : public syncer::DataTypeEncryptionHandler {
+class SyncUserSettings {
  public:
-  ~SyncUserSettings() override = default;
+  virtual ~SyncUserSettings() = default;
 
   // Whether the user wants Sync to run. This is false by default, but gets set
   // to true early in the Sync setup flow, after the user has pressed "turn on
@@ -87,11 +86,11 @@
   virtual void EnableEncryptEverything() = 0;
 
   // The current set of encrypted data types.
-  ModelTypeSet GetEncryptedDataTypes() const override = 0;
+  virtual ModelTypeSet GetEncryptedDataTypes() const = 0;
   // Whether a passphrase is required for encryption or decryption to proceed.
   // Note that Sync might still be working fine if the user has disabled all
   // encrypted data types.
-  bool IsPassphraseRequired() const override = 0;
+  virtual bool IsPassphraseRequired() const = 0;
   // Whether a passphrase is required to decrypt the data for any currently
   // enabled data type.
   virtual bool IsPassphraseRequiredForPreferredDataTypes() const = 0;
diff --git a/components/ui_devtools/devtools_server.cc b/components/ui_devtools/devtools_server.cc
index b8007be..2ded5e4 100644
--- a/components/ui_devtools/devtools_server.cc
+++ b/components/ui_devtools/devtools_server.cc
@@ -10,7 +10,6 @@
 #include "base/bind_helpers.h"
 #include "base/command_line.h"
 #include "base/format_macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/metrics/user_metrics.h"
 #include "base/metrics/user_metrics_action.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/components/variations/seed_response.h b/components/variations/seed_response.h
index 3901fc9..058bb11 100644
--- a/components/variations/seed_response.h
+++ b/components/variations/seed_response.h
@@ -19,7 +19,7 @@
   std::string data;  // "data" is binary, for which protobuf uses strings.
   std::string signature;
   std::string country;
-  long date;
+  int64_t date;
   bool is_gzip_compressed = false;
 };
 
diff --git a/components/viz/service/main/viz_compositor_thread_runner_impl.h b/components/viz/service/main/viz_compositor_thread_runner_impl.h
index 2cbcce4..400ca2a 100644
--- a/components/viz/service/main/viz_compositor_thread_runner_impl.h
+++ b/components/viz/service/main/viz_compositor_thread_runner_impl.h
@@ -9,7 +9,6 @@
 
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
-#include "base/message_loop/message_loop.h"
 #include "build/build_config.h"
 #include "components/ui_devtools/buildflags.h"
 #include "components/viz/service/main/viz_compositor_thread_runner.h"
diff --git a/content/browser/accessibility/accessibility_event_recorder_auralinux.cc b/content/browser/accessibility/accessibility_event_recorder_auralinux.cc
index 2062bd20..76678e7 100644
--- a/content/browser/accessibility/accessibility_event_recorder_auralinux.cc
+++ b/content/browser/accessibility/accessibility_event_recorder_auralinux.cc
@@ -192,7 +192,7 @@
 std::string AccessibilityEventRecorderAuraLinux::AtkObjectToString(
     AtkObject* obj,
     bool include_name) {
-  std::string role = atk_role_get_name(atk_object_get_role(obj));
+  std::string role = AtkRoleToString(atk_object_get_role(obj));
   base::ReplaceChars(role, " ", "_", &role);
   std::string str =
       base::StringPrintf("role=ROLE_%s", base::ToUpperASCII(role).c_str());
diff --git a/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc b/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc
index 6cc514dd..0705416 100644
--- a/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc
+++ b/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc
@@ -198,136 +198,6 @@
   dict->Set(kChildrenDictAttr, std::move(children));
 }
 
-// TODO(aleventhal) Remove this and use atk_role_get_name() once the following
-// GNOME bug is fixed: https://bugzilla.gnome.org/show_bug.cgi?id=795983
-const char* const kRoleNames[] = {
-    "invalid",  // ATK_ROLE_INVALID.
-    "accelerator label",
-    "alert",
-    "animation",
-    "arrow",
-    "calendar",
-    "canvas",
-    "check box",
-    "check menu item",
-    "color chooser",
-    "column header",
-    "combo box",
-    "dateeditor",
-    "desktop icon",
-    "desktop frame",
-    "dial",
-    "dialog",
-    "directory pane",
-    "drawing area",
-    "file chooser",
-    "filler",
-    "fontchooser",
-    "frame",
-    "glass pane",
-    "html container",
-    "icon",
-    "image",
-    "internal frame",
-    "label",
-    "layered pane",
-    "list",
-    "list item",
-    "menu",
-    "menu bar",
-    "menu item",
-    "option pane",
-    "page tab",
-    "page tab list",
-    "panel",
-    "password text",
-    "popup menu",
-    "progress bar",
-    "push button",
-    "radio button",
-    "radio menu item",
-    "root pane",
-    "row header",
-    "scroll bar",
-    "scroll pane",
-    "separator",
-    "slider",
-    "split pane",
-    "spin button",
-    "statusbar",
-    "table",
-    "table cell",
-    "table column header",
-    "table row header",
-    "tear off menu item",
-    "terminal",
-    "text",
-    "toggle button",
-    "tool bar",
-    "tool tip",
-    "tree",
-    "tree table",
-    "unknown",
-    "viewport",
-    "window",
-    "header",
-    "footer",
-    "paragraph",
-    "ruler",
-    "application",
-    "autocomplete",
-    "edit bar",
-    "embedded component",
-    "entry",
-    "chart",
-    "caption",
-    "document frame",
-    "heading",
-    "page",
-    "section",
-    "redundant object",
-    "form",
-    "link",
-    "input method window",
-    "table row",
-    "tree item",
-    "document spreadsheet",
-    "document presentation",
-    "document text",
-    "document web",
-    "document email",
-    "comment",
-    "list box",
-    "grouping",
-    "image map",
-    "notification",
-    "info bar",
-    "level bar",
-    "title bar",
-    "block quote",
-    "audio",
-    "video",
-    "definition",
-    "article",
-    "landmark",
-    "log",
-    "marquee",
-    "math",
-    "rating",
-    "timer",
-    "description list",
-    "description term",
-    "description value",
-    "static",
-    "math fraction",
-    "math root",
-    "subscript",
-    "superscript",
-    "footnote",           // ATK_ROLE_FOOTNOTE = 122.
-    "content deletion",   // ATK_ROLE_CONTENT_DELETION = 123.
-    "content insertion",  // ATK_ROLE_CONTENT_DELETION = 124.
-};
-
 void AccessibilityTreeFormatterAuraLinux::AddTextProperties(
     AtkText* atk_text,
     base::DictionaryValue* dict) {
@@ -540,8 +410,7 @@
 
   AtkRole role = atk_object_get_role(atk_object);
   if (role != ATK_ROLE_UNKNOWN) {
-    int role_index = static_cast<int>(role);
-    dict->SetString("role", kRoleNames[role_index]);
+    dict->SetString("role", AtkRoleToString(role));
   }
 
   const gchar* name = atk_object_get_name(atk_object);
diff --git a/content/browser/accessibility/accessibility_tree_formatter_utils_auralinux.cc b/content/browser/accessibility/accessibility_tree_formatter_utils_auralinux.cc
index 976c1f8..397f626 100644
--- a/content/browser/accessibility/accessibility_tree_formatter_utils_auralinux.cc
+++ b/content/browser/accessibility/accessibility_tree_formatter_utils_auralinux.cc
@@ -235,4 +235,143 @@
   return GetNameForPlatformConstant(role_table, base::size(role_table), role);
 }
 
+// This is used to ensure a standard set of AtkRole name conversions between
+// different versions of ATK. Older versions may not have an implementation of
+// a new role and newer versions may have changed the name returned by
+// atk_role_get_name. This table should be kept up to date with newer ATK
+// releases.
+const char* const kRoleNames[] = {
+    "invalid",  // ATK_ROLE_INVALID.
+    "accelerator label",
+    "alert",
+    "animation",
+    "arrow",
+    "calendar",
+    "canvas",
+    "check box",
+    "check menu item",
+    "color chooser",
+    "column header",
+    "combo box",
+    "dateeditor",
+    "desktop icon",
+    "desktop frame",
+    "dial",
+    "dialog",
+    "directory pane",
+    "drawing area",
+    "file chooser",
+    "filler",
+    "fontchooser",
+    "frame",
+    "glass pane",
+    "html container",
+    "icon",
+    "image",
+    "internal frame",
+    "label",
+    "layered pane",
+    "list",
+    "list item",
+    "menu",
+    "menu bar",
+    "menu item",
+    "option pane",
+    "page tab",
+    "page tab list",
+    "panel",
+    "password text",
+    "popup menu",
+    "progress bar",
+    "push button",
+    "radio button",
+    "radio menu item",
+    "root pane",
+    "row header",
+    "scroll bar",
+    "scroll pane",
+    "separator",
+    "slider",
+    "split pane",
+    "spin button",
+    "statusbar",
+    "table",
+    "table cell",
+    "table column header",
+    "table row header",
+    "tear off menu item",
+    "terminal",
+    "text",
+    "toggle button",
+    "tool bar",
+    "tool tip",
+    "tree",
+    "tree table",
+    "unknown",
+    "viewport",
+    "window",
+    "header",
+    "footer",
+    "paragraph",
+    "ruler",
+    "application",
+    "autocomplete",
+    "edit bar",
+    "embedded component",
+    "entry",
+    "chart",
+    "caption",
+    "document frame",
+    "heading",
+    "page",
+    "section",
+    "redundant object",
+    "form",
+    "link",
+    "input method window",
+    "table row",
+    "tree item",
+    "document spreadsheet",
+    "document presentation",
+    "document text",
+    "document web",
+    "document email",
+    "comment",
+    "list box",
+    "grouping",
+    "image map",
+    "notification",
+    "info bar",
+    "level bar",
+    "title bar",
+    "block quote",
+    "audio",
+    "video",
+    "definition",
+    "article",
+    "landmark",
+    "log",
+    "marquee",
+    "math",
+    "rating",
+    "timer",
+    "description list",
+    "description term",
+    "description value",
+    "static",
+    "math fraction",
+    "math root",
+    "subscript",
+    "superscript",
+    "footnote",           // ATK_ROLE_FOOTNOTE = 122.
+    "content deletion",   // ATK_ROLE_CONTENT_DELETION = 123.
+    "content insertion",  // ATK_ROLE_CONTENT_DELETION = 124.
+};
+
+const char* AtkRoleToString(AtkRole role) {
+  if (role < G_N_ELEMENTS(kRoleNames))
+    return kRoleNames[role];
+  return "<unknown AtkRole>";
+}
+
 }  // namespace content
diff --git a/content/browser/accessibility/accessibility_tree_formatter_utils_auralinux.h b/content/browser/accessibility/accessibility_tree_formatter_utils_auralinux.h
index 29dad1d..308d89cd 100644
--- a/content/browser/accessibility/accessibility_tree_formatter_utils_auralinux.h
+++ b/content/browser/accessibility/accessibility_tree_formatter_utils_auralinux.h
@@ -5,6 +5,7 @@
 #ifndef CONTENT_BROWSER_ACCESSIBILITY_ACCESSIBILITY_TREE_FORMATTER_UTILS_AURALINUX_H_
 #define CONTENT_BROWSER_ACCESSIBILITY_ACCESSIBILITY_TREE_FORMATTER_UTILS_AURALINUX_H_
 
+#include <atk/atk.h>
 #include <atspi/atspi.h>
 
 #include "content/common/content_export.h"
@@ -13,6 +14,7 @@
 
 CONTENT_EXPORT const char* ATSPIStateToString(AtspiStateType state);
 CONTENT_EXPORT const char* ATSPIRoleToString(AtspiRole role);
+CONTENT_EXPORT const char* AtkRoleToString(AtkRole role);
 
 }  // namespace content
 
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
index 7cc2d01d..7503c72 100644
--- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -627,6 +627,10 @@
   RunAriaTest(FILE_PATH_LITERAL("aria-form.html"));
 }
 
+IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, AccessibilityAriaGeneric) {
+  RunAriaTest(FILE_PATH_LITERAL("aria-generic.html"));
+}
+
 IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, AccessibilityAriaGrabbed) {
   RunAriaTest(FILE_PATH_LITERAL("aria-grabbed.html"));
 }
diff --git a/content/browser/appcache/appcache_request_handler_unittest.cc b/content/browser/appcache/appcache_request_handler_unittest.cc
index 5caf1ee..f41cb44 100644
--- a/content/browser/appcache/appcache_request_handler_unittest.cc
+++ b/content/browser/appcache/appcache_request_handler_unittest.cc
@@ -17,7 +17,6 @@
 #include "base/location.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/stl_util.h"
 #include "base/strings/stringprintf.h"
diff --git a/content/browser/appcache/appcache_update_job_unittest.cc b/content/browser/appcache/appcache_update_job_unittest.cc
index a4a1fde..bf93744 100644
--- a/content/browser/appcache/appcache_update_job_unittest.cc
+++ b/content/browser/appcache/appcache_update_job_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/bind_helpers.h"
 #include "base/location.h"
 #include "base/memory/ptr_util.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/stl_util.h"
diff --git a/content/browser/back_forward_cache_browsertest.cc b/content/browser/back_forward_cache_browsertest.cc
index 8f0757b..61e251a8 100644
--- a/content/browser/back_forward_cache_browsertest.cc
+++ b/content/browser/back_forward_cache_browsertest.cc
@@ -3072,14 +3072,14 @@
 
     EXPECT_TRUE(NavigateToURL(shell(), url));
 
-    EXPECT_FALSE(current_frame_host()->is_back_forward_cache_disallowed());
+    EXPECT_FALSE(current_frame_host()->is_back_forward_cache_disabled());
     EXPECT_EQ("Found 0 devices", content::EvalJs(current_frame_host(), R"(
         new Promise(async resolve => {
           let devices = await navigator.usb.getDevices();
           resolve("Found " + devices.length + " devices");
         });
     )"));
-    EXPECT_TRUE(current_frame_host()->is_back_forward_cache_disallowed());
+    EXPECT_TRUE(current_frame_host()->is_back_forward_cache_disabled());
     EXPECT_TRUE(tester.IsDisabledForFrameWithReason(
         current_frame_host()->GetProcess()->GetID(),
         current_frame_host()->GetRoutingID(), "WebUSB"));
@@ -3094,16 +3094,16 @@
     RenderFrameHostImpl* rfh_c = current_frame_host();
     RenderFrameHostImpl* rfh_d = rfh_c->child_at(0)->current_frame_host();
 
-    EXPECT_FALSE(rfh_c->is_back_forward_cache_disallowed());
-    EXPECT_FALSE(rfh_d->is_back_forward_cache_disallowed());
+    EXPECT_FALSE(rfh_c->is_back_forward_cache_disabled());
+    EXPECT_FALSE(rfh_d->is_back_forward_cache_disabled());
     EXPECT_EQ("Found 0 devices", content::EvalJs(rfh_c, R"(
         new Promise(async resolve => {
           let devices = await navigator.usb.getDevices();
           resolve("Found " + devices.length + " devices");
         });
     )"));
-    EXPECT_TRUE(rfh_c->is_back_forward_cache_disallowed());
-    EXPECT_FALSE(rfh_d->is_back_forward_cache_disallowed());
+    EXPECT_TRUE(rfh_c->is_back_forward_cache_disabled());
+    EXPECT_FALSE(rfh_d->is_back_forward_cache_disabled());
     EXPECT_TRUE(tester.IsDisabledForFrameWithReason(
         rfh_c->GetProcess()->GetID(), rfh_c->GetRoutingID(), "WebUSB"));
   }
@@ -3113,7 +3113,7 @@
     content::BackForwardCacheDisabledTester tester;
     GURL url(https_server.GetURL("e.com", "/title1.html"));
     EXPECT_TRUE(NavigateToURL(shell(), url));
-    EXPECT_FALSE(current_frame_host()->is_back_forward_cache_disallowed());
+    EXPECT_FALSE(current_frame_host()->is_back_forward_cache_disabled());
     EXPECT_EQ("Found 0 devices", content::EvalJs(current_frame_host(), R"(
         new Promise(async resolve => {
           const worker = new Worker("/back_forward_cache/webusb/worker.js");
@@ -3121,7 +3121,7 @@
           worker.postMessage("Run");
         });
     )"));
-    EXPECT_TRUE(current_frame_host()->is_back_forward_cache_disallowed());
+    EXPECT_TRUE(current_frame_host()->is_back_forward_cache_disabled());
     EXPECT_TRUE(tester.IsDisabledForFrameWithReason(
         current_frame_host()->GetProcess()->GetID(),
         current_frame_host()->GetRoutingID(), "WebUSB"));
@@ -3132,7 +3132,7 @@
     content::BackForwardCacheDisabledTester tester;
     GURL url(https_server.GetURL("f.com", "/title1.html"));
     EXPECT_TRUE(NavigateToURL(shell(), url));
-    EXPECT_FALSE(current_frame_host()->is_back_forward_cache_disallowed());
+    EXPECT_FALSE(current_frame_host()->is_back_forward_cache_disabled());
     EXPECT_EQ("Found 0 devices", content::EvalJs(current_frame_host(), R"(
         new Promise(async resolve => {
           const worker = new Worker(
@@ -3141,7 +3141,7 @@
           worker.postMessage("Run");
         });
     )"));
-    EXPECT_TRUE(current_frame_host()->is_back_forward_cache_disallowed());
+    EXPECT_TRUE(current_frame_host()->is_back_forward_cache_disabled());
     EXPECT_TRUE(tester.IsDisabledForFrameWithReason(
         current_frame_host()->GetProcess()->GetID(),
         current_frame_host()->GetRoutingID(), "WebUSB"));
@@ -3164,14 +3164,14 @@
 
     EXPECT_TRUE(NavigateToURL(shell(), url));
 
-    EXPECT_FALSE(current_frame_host()->is_back_forward_cache_disallowed());
+    EXPECT_FALSE(current_frame_host()->is_back_forward_cache_disabled());
     EXPECT_EQ("Found 0 ports", content::EvalJs(current_frame_host(), R"(
         new Promise(async resolve => {
           let ports = await navigator.serial.getPorts();
           resolve("Found " + ports.length + " ports");
         });
     )"));
-    EXPECT_TRUE(current_frame_host()->is_back_forward_cache_disallowed());
+    EXPECT_TRUE(current_frame_host()->is_back_forward_cache_disabled());
     EXPECT_TRUE(tester.IsDisabledForFrameWithReason(
         current_frame_host()->GetProcess()->GetID(),
         current_frame_host()->GetRoutingID(), "Serial"));
@@ -3186,16 +3186,16 @@
     RenderFrameHostImpl* rfh_c = current_frame_host();
     RenderFrameHostImpl* rfh_d = rfh_c->child_at(0)->current_frame_host();
 
-    EXPECT_FALSE(rfh_c->is_back_forward_cache_disallowed());
-    EXPECT_FALSE(rfh_d->is_back_forward_cache_disallowed());
+    EXPECT_FALSE(rfh_c->is_back_forward_cache_disabled());
+    EXPECT_FALSE(rfh_d->is_back_forward_cache_disabled());
     EXPECT_EQ("Found 0 ports", content::EvalJs(rfh_c, R"(
         new Promise(async resolve => {
           let ports = await navigator.serial.getPorts();
           resolve("Found " + ports.length + " ports");
         });
     )"));
-    EXPECT_TRUE(rfh_c->is_back_forward_cache_disallowed());
-    EXPECT_FALSE(rfh_d->is_back_forward_cache_disallowed());
+    EXPECT_TRUE(rfh_c->is_back_forward_cache_disabled());
+    EXPECT_FALSE(rfh_d->is_back_forward_cache_disabled());
     EXPECT_TRUE(tester.IsDisabledForFrameWithReason(
         rfh_c->GetProcess()->GetID(), rfh_c->GetRoutingID(), "Serial"));
   }
@@ -3205,7 +3205,7 @@
     content::BackForwardCacheDisabledTester tester;
     GURL url(https_server.GetURL("e.com", "/title1.html"));
     EXPECT_TRUE(NavigateToURL(shell(), url));
-    EXPECT_FALSE(current_frame_host()->is_back_forward_cache_disallowed());
+    EXPECT_FALSE(current_frame_host()->is_back_forward_cache_disabled());
     EXPECT_EQ("Found 0 ports", content::EvalJs(current_frame_host(), R"(
         new Promise(async resolve => {
           const worker = new Worker("/back_forward_cache/serial/worker.js");
@@ -3213,7 +3213,7 @@
           worker.postMessage("Run");
         });
     )"));
-    EXPECT_TRUE(current_frame_host()->is_back_forward_cache_disallowed());
+    EXPECT_TRUE(current_frame_host()->is_back_forward_cache_disabled());
     EXPECT_TRUE(tester.IsDisabledForFrameWithReason(
         current_frame_host()->GetProcess()->GetID(),
         current_frame_host()->GetRoutingID(), "Serial"));
@@ -3224,7 +3224,7 @@
     content::BackForwardCacheDisabledTester tester;
     GURL url(https_server.GetURL("f.com", "/title1.html"));
     EXPECT_TRUE(NavigateToURL(shell(), url));
-    EXPECT_FALSE(current_frame_host()->is_back_forward_cache_disallowed());
+    EXPECT_FALSE(current_frame_host()->is_back_forward_cache_disabled());
     EXPECT_EQ("Found 0 ports", content::EvalJs(current_frame_host(), R"(
         new Promise(async resolve => {
           const worker = new Worker(
@@ -3233,7 +3233,7 @@
           worker.postMessage("Run");
         });
     )"));
-    EXPECT_TRUE(current_frame_host()->is_back_forward_cache_disallowed());
+    EXPECT_TRUE(current_frame_host()->is_back_forward_cache_disabled());
     EXPECT_TRUE(tester.IsDisabledForFrameWithReason(
         current_frame_host()->GetProcess()->GetID(),
         current_frame_host()->GetRoutingID(), "Serial"));
diff --git a/content/browser/bad_message.h b/content/browser/bad_message.h
index e89257a..a34f5b1 100644
--- a/content/browser/bad_message.h
+++ b/content/browser/bad_message.h
@@ -144,7 +144,7 @@
   BDH_INVALID_REFCOUNT_OPERATION = 117,
   BDH_INVALID_URL_OPERATION = 118,
   OBSOLETE_IDBDH_INVALID_ORIGIN = 119,
-  RFH_FAIL_PROVISIONAL_LOAD_NO_HANDLE = 120,
+  OBSOLETE_RFH_FAIL_PROVISIONAL_LOAD_NO_HANDLE = 120,
   OBSOLETE_RFH_FAIL_PROVISIONAL_LOAD_NO_ERROR = 121,
   NI_IN_PAGE_NAVIGATION = 122,
   RPH_MOJO_PROCESS_ERROR = 123,
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc
index 3ccddc6..fbb9132e 100644
--- a/content/browser/browser_main_loop.cc
+++ b/content/browser/browser_main_loop.cc
@@ -22,7 +22,6 @@
 #include "base/logging.h"
 #include "base/memory/memory_pressure_monitor.h"
 #include "base/memory/ptr_util.h"
-#include "base/message_loop/message_loop.h"
 #include "base/message_loop/message_loop_current.h"
 #include "base/metrics/field_trial.h"
 #include "base/metrics/histogram_macros.h"
diff --git a/content/browser/browser_main_loop_unittest.cc b/content/browser/browser_main_loop_unittest.cc
index b7a7960..d000e8d 100644
--- a/content/browser/browser_main_loop_unittest.cc
+++ b/content/browser/browser_main_loop_unittest.cc
@@ -5,7 +5,6 @@
 #include "content/browser/browser_main_loop.h"
 
 #include "base/command_line.h"
-#include "base/message_loop/message_loop.h"
 #include "base/system/sys_info.h"
 #include "base/task/post_task.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
diff --git a/content/browser/browser_main_runner_impl.cc b/content/browser/browser_main_runner_impl.cc
index b9b3107..df7938bb 100644
--- a/content/browser/browser_main_runner_impl.cc
+++ b/content/browser/browser_main_runner_impl.cc
@@ -10,7 +10,6 @@
 #include "base/debug/leak_annotations.h"
 #include "base/lazy_instance.h"
 #include "base/logging.h"
-#include "base/message_loop/message_loop.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/run_loop.h"
 #include "base/synchronization/atomic_flag.h"
diff --git a/content/browser/devtools/protocol/page_handler.cc b/content/browser/devtools/protocol/page_handler.cc
index 975f5f7..db35821 100644
--- a/content/browser/devtools/protocol/page_handler.cc
+++ b/content/browser/devtools/protocol/page_handler.cc
@@ -404,11 +404,14 @@
     return;
   }
 
-  // In the case of inspecting a GuestView (e.g. a PDF), we should reload
+  // In the case of inspecting a PDF GuestView, we should reload
   // the outer web contents (embedder), since otherwise reloading the guest by
   // itself will fail.
-  if (web_contents->GetOuterWebContents())
-    web_contents = web_contents->GetOuterWebContents();
+  auto* outer_web_contents = web_contents->GetOuterWebContents();
+  if (outer_web_contents &&
+      outer_web_contents->GetContentsMimeType() == "application/pdf") {
+    web_contents = outer_web_contents;
+  }
 
   // It is important to fallback before triggering reload, so that
   // renderer could prepare beforehand.
diff --git a/content/browser/frame_host/back_forward_cache_impl.cc b/content/browser/frame_host/back_forward_cache_impl.cc
index f91a907..2e239ca 100644
--- a/content/browser/frame_host/back_forward_cache_impl.cc
+++ b/content/browser/frame_host/back_forward_cache_impl.cc
@@ -374,7 +374,7 @@
         BackForwardCacheMetrics::NotRestoredReason::kWasGrantedMediaAccess);
   }
 
-  if (rfh->is_back_forward_cache_disallowed()) {
+  if (rfh->is_back_forward_cache_disabled()) {
     return CanStoreDocumentResult::No(
         BackForwardCacheMetrics::NotRestoredReason::
             kDisableForRenderFrameHostCalled);
@@ -516,7 +516,7 @@
     g_bfcache_disabled_test_observer->OnDisabledForFrameWithReason(id, reason);
 
   if (auto* rfh = RenderFrameHostImpl::FromID(id)) {
-    rfh->DisallowBackForwardCache();
+    rfh->DisableBackForwardCache();
 
     RenderFrameHostImpl* frame = rfh;
     while (frame->GetParent())
diff --git a/content/browser/frame_host/interstitial_page_impl.cc b/content/browser/frame_host/interstitial_page_impl.cc
index 7bb71f9..545fefd 100644
--- a/content/browser/frame_host/interstitial_page_impl.cc
+++ b/content/browser/frame_host/interstitial_page_impl.cc
@@ -542,11 +542,6 @@
   return false;
 }
 
-bool InterstitialPageImpl::ShowingInterstitialPage() {
-  // An interstitial page never shows a second interstitial.
-  return false;
-}
-
 blink::mojom::RendererPreferences InterstitialPageImpl::GetRendererPrefs(
     BrowserContext* browser_context) const {
   delegate_->OverrideRendererPrefs(&renderer_preferences_);
diff --git a/content/browser/frame_host/interstitial_page_impl.h b/content/browser/frame_host/interstitial_page_impl.h
index 1e9fd510..a59c7ad 100644
--- a/content/browser/frame_host/interstitial_page_impl.h
+++ b/content/browser/frame_host/interstitial_page_impl.h
@@ -98,7 +98,6 @@
   WebContents* OpenURL(const OpenURLParams& params) override;
   const std::string& GetUserAgentOverride() override;
   bool ShouldOverrideUserAgentInNewTabs() override;
-  bool ShowingInterstitialPage() override;
 
   // RenderViewHostDelegate implementation:
   FrameTree* GetFrameTree() override;
diff --git a/content/browser/frame_host/navigation_controller_impl_unittest.cc b/content/browser/frame_host/navigation_controller_impl_unittest.cc
index d23cd2e..f46ca17a 100644
--- a/content/browser/frame_host/navigation_controller_impl_unittest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_unittest.cc
@@ -383,44 +383,6 @@
   }
 }
 
-// Tests that receiving a DidFailProvisionalLoad from the renderer that is
-// trying to commit an error page won't reset the pending entry of a navigation
-// that just started.
-TEST_F(NavigationControllerTestWithBrowserSideNavigation,
-       DontDiscardWrongPendingEntry) {
-  NavigationControllerImpl& controller = controller_impl();
-  GURL initial_url("http://www.google.com");
-  GURL url_1("http://google.com/foo");
-  GURL url_2("http://foo2.com");
-
-  // Navigate inititally. This is the url that could erroneously be the visible
-  // entry when url_1 fails.
-  NavigateAndCommit(initial_url);
-
-  // Set the pending entry as url_1 and create the NavigationHandle.
-  auto navigation =
-      NavigationSimulator::CreateBrowserInitiated(url_1, contents());
-  navigation->Start();
-  EXPECT_EQ(url_1, controller.GetVisibleEntry()->GetURL());
-
-  // The navigation fails and needs to show an error page. This resets the
-  // pending entry.
-  navigation->Fail(net::ERR_TIMED_OUT);
-  EXPECT_EQ(initial_url, controller.GetVisibleEntry()->GetURL());
-
-  // A navigation to url_2 starts, creating a pending navigation entry.
-  controller.LoadURL(url_2, Referrer(), ui::PAGE_TRANSITION_TYPED,
-                     std::string());
-  EXPECT_EQ(url_2, controller.GetVisibleEntry()->GetURL());
-
-  // The DidFailProvsionalLoad mojo call is received from the current RFH that
-  // is committing an error page. This should not reset the pending entry for
-  // the new ongoing navigation.
-  main_test_rfh()->DidFailProvisionalLoadWithError(url_1, net::ERR_TIMED_OUT,
-                                                   base::string16(), false);
-  EXPECT_EQ(url_2, controller.GetVisibleEntry()->GetURL());
-}
-
 TEST_F(NavigationControllerTest, LoadURL) {
   NavigationControllerImpl& controller = controller_impl();
 
@@ -1093,33 +1055,35 @@
 
   // Start with a pending new navigation.
   const GURL kNewURL("http://eh");
-  controller.LoadURL(kNewURL, Referrer(), ui::PAGE_TRANSITION_TYPED,
-                     std::string());
-  main_test_rfh()->PrepareForCommit();
+  auto navigation =
+      NavigationSimulator::CreateBrowserInitiated(kNewURL, contents());
+  navigation->Start();
   EXPECT_EQ(0U, navigation_entry_changed_counter_);
   EXPECT_EQ(0U, navigation_list_pruned_counter_);
   EXPECT_EQ(-1, controller.GetPendingEntryIndex());
   EXPECT_TRUE(controller.GetPendingEntry());
+  EXPECT_EQ(kNewURL, controller.GetPendingEntry()->GetURL());
   EXPECT_EQ(-1, controller.GetLastCommittedEntryIndex());
   EXPECT_EQ(1, delegate->navigation_state_change_count());
 
   // It may abort before committing, if it's a download or due to a stop or
   // a new navigation from the user.
-  main_test_rfh()->DidFailProvisionalLoadWithError(kNewURL, net::ERR_ABORTED,
-                                                   base::string16(), false);
+  navigation->AbortCommit();
 
-  // This should not clear the pending entry or notify of a navigation state
-  // change, so that we keep displaying kNewURL (until the user clears it).
+  // This should not clear the pending entry, so that we keep displaying
+  // kNewURL (until the user clears it).
   EXPECT_EQ(-1, controller.GetPendingEntryIndex());
   EXPECT_TRUE(controller.GetPendingEntry());
+  EXPECT_EQ(kNewURL, controller.GetPendingEntry()->GetURL());
   EXPECT_EQ(-1, controller.GetLastCommittedEntryIndex());
-  EXPECT_EQ(1, delegate->navigation_state_change_count());
+  EXPECT_EQ(2, delegate->navigation_state_change_count());
   NavigationEntry* pending_entry = controller.GetPendingEntry();
 
   // Ensure that a reload keeps the same pending entry.
   controller.Reload(ReloadType::NORMAL, true);
   EXPECT_EQ(-1, controller.GetPendingEntryIndex());
   EXPECT_TRUE(controller.GetPendingEntry());
+  EXPECT_EQ(kNewURL, controller.GetPendingEntry()->GetURL());
   EXPECT_EQ(pending_entry, controller.GetPendingEntry());
   EXPECT_EQ(-1, controller.GetLastCommittedEntryIndex());
 
@@ -3109,12 +3073,7 @@
   // we show the pending entry's URL as long as the about:blank page is not
   // modified.
   auto navigation =
-      NavigationSimulatorImpl::CreateBrowserInitiated(url, contents());
-  NavigationController::LoadURLParams load_url_params(url);
-  load_url_params.initiator_origin = url::Origin();
-  load_url_params.transition_type = ui::PAGE_TRANSITION_LINK;
-  load_url_params.is_renderer_initiated = true;
-  navigation->SetLoadURLParams(&load_url_params);
+      NavigationSimulator::CreateRendererInitiated(url, main_test_rfh());
   navigation->Start();
 
   EXPECT_EQ(url, controller.GetVisibleEntry()->GetURL());
@@ -3128,8 +3087,7 @@
 
   // Suppose it aborts before committing, if it's a 204 or download or due to a
   // stop or a new navigation from the user.  The URL should remain visible.
-  main_test_rfh()->DidFailProvisionalLoadWithError(url, net::ERR_ABORTED,
-                                                   base::string16(), false);
+  navigation->Fail(net::ERR_FAILED);
   EXPECT_EQ(url, controller.GetVisibleEntry()->GetURL());
 
   // If something else later modifies the contents of the about:blank page, then
@@ -3140,6 +3098,46 @@
   EXPECT_EQ(url, controller.GetPendingEntry()->GetURL());
 }
 
+// Tests that the URLs for renderer-initiated navigations in new tabs are
+// displayed to the user after they got canceled, as long as the initial
+// about:blank page has not been modified. If so, we must revert to showing
+// about:blank. See http://crbug.com/355537.
+TEST_F(NavigationControllerTest, ShowRendererURLAfterCancelUntilModified) {
+  NavigationControllerImpl& controller = controller_impl();
+
+  const GURL url("http://foo");
+
+  // For renderer-initiated navigations in new tabs (with no committed entries),
+  // we show the pending entry's URL as long as the about:blank page is not
+  // modified.
+  auto navigation =
+      NavigationSimulator::CreateRendererInitiated(url, main_test_rfh());
+  navigation->Start();
+
+  EXPECT_EQ(url, controller.GetVisibleEntry()->GetURL());
+  EXPECT_EQ(url, controller.GetPendingEntry()->GetURL());
+  EXPECT_TRUE(controller.GetPendingEntry()->is_renderer_initiated());
+  EXPECT_TRUE(controller.IsInitialNavigation());
+  EXPECT_FALSE(contents()->HasAccessedInitialDocument());
+
+  // There should be no title yet.
+  EXPECT_TRUE(contents()->GetTitle().empty());
+
+  // Suppose it aborts before committing, e.g. due to a new renderer-initiated
+  // navigation. The URL should remain visible.
+  navigation->AbortFromRenderer();
+  EXPECT_EQ(url, controller.GetVisibleEntry()->GetURL());
+
+  // If something else later modifies the contents of the about:blank page, then
+  // we must revert to showing about:blank to avoid a URL spoof.
+  // Pending entry should also be discarded, because renderer doesn't want to
+  // show this page anymore.
+  main_test_rfh()->OnMessageReceived(FrameHostMsg_DidAccessInitialDocument(0));
+  EXPECT_TRUE(contents()->HasAccessedInitialDocument());
+  EXPECT_FALSE(controller.GetVisibleEntry());
+  EXPECT_FALSE(controller.GetPendingEntry());
+}
+
 TEST_F(NavigationControllerTest, DontShowRendererURLInNewTabAfterCommit) {
   NavigationControllerImpl& controller = controller_impl();
 
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc
index 2453575..886b7096 100644
--- a/content/browser/frame_host/navigation_request.cc
+++ b/content/browser/frame_host/navigation_request.cc
@@ -2768,6 +2768,10 @@
       navigation_controller->GetEntryCount();
 }
 
+void NavigationRequest::RendererAbortedNavigationForTesting() {
+  OnRendererAbortedNavigation();
+}
+
 void NavigationRequest::OnRendererAbortedNavigation() {
   if (IsWaitingToCommit()) {
     render_frame_host_->NavigationRequestCancelled(this);
@@ -3793,8 +3797,4 @@
   return handle_state_ >= INITIAL;
 }
 
-void NavigationRequest::DropPendingEntryRef() {
-  pending_entry_ref_.reset();
-}
-
 }  // namespace content
diff --git a/content/browser/frame_host/navigation_request.h b/content/browser/frame_host/navigation_request.h
index 3a19e57..9ec38a7 100644
--- a/content/browser/frame_host/navigation_request.h
+++ b/content/browser/frame_host/navigation_request.h
@@ -388,6 +388,9 @@
   // deferring NavigationThrottle do the resuming.
   void CallResumeForTesting();
 
+  // Simulates renderer aborting navigation.
+  void RendererAbortedNavigationForTesting();
+
   typedef base::OnceCallback<void(NavigationThrottle::ThrottleCheckResult)>
       ThrottleChecksFinishedCallback;
 
@@ -500,11 +503,6 @@
   // CreateForCommit().
   bool IsNavigationStarted() const;
 
-  // Stop referencing the pending NavigationEntry.
-  //
-  // Note: To be removed after removing DidFailProvisionalLoadWithError().
-  void DropPendingEntryRef();
-
  private:
   friend class NavigationRequestTest;
 
diff --git a/content/browser/frame_host/navigator.h b/content/browser/frame_host/navigator.h
index 194aa85..7ff6e91 100644
--- a/content/browser/frame_host/navigator.h
+++ b/content/browser/frame_host/navigator.h
@@ -54,14 +54,6 @@
 
   // Notifications coming from the RenderFrameHosts ----------------------------
 
-  // The RenderFrameHostImpl has failed a provisional load.
-  virtual void DidFailProvisionalLoadWithError(
-      RenderFrameHostImpl* render_frame_host,
-      const GURL& url,
-      int error_code,
-      const base::string16& error_description,
-      bool showing_repost_interstitial) {}
-
   // The RenderFrameHostImpl has failed to load the document.
   virtual void DidFailLoadWithError(RenderFrameHostImpl* render_frame_host,
                                     const GURL& url,
diff --git a/content/browser/frame_host/navigator_delegate.h b/content/browser/frame_host/navigator_delegate.h
index f0bafe8..ba677c45 100644
--- a/content/browser/frame_host/navigator_delegate.h
+++ b/content/browser/frame_host/navigator_delegate.h
@@ -124,10 +124,6 @@
   // embedder and |nullptr| is returned.
   virtual std::unique_ptr<NavigationUIData> GetNavigationUIData(
       NavigationHandle* navigation_handle);
-
-  // Whether the delegate is displaying an interstitial page over the current
-  // page.
-  virtual bool ShowingInterstitialPage() = 0;
 };
 
 }  // namespace content
diff --git a/content/browser/frame_host/navigator_impl.cc b/content/browser/frame_host/navigator_impl.cc
index 0fa600da..e070d3e 100644
--- a/content/browser/frame_host/navigator_impl.cc
+++ b/content/browser/frame_host/navigator_impl.cc
@@ -131,56 +131,6 @@
   return controller_;
 }
 
-void NavigatorImpl::DidFailProvisionalLoadWithError(
-    RenderFrameHostImpl* render_frame_host,
-    const GURL& url,
-    int error_code,
-    const base::string16& error_description,
-    bool showing_repost_interstitial) {
-  VLOG(1) << "Failed Provisional Load: " << url.possibly_invalid_spec()
-          << ", error_code: " << error_code
-          << ", error_description: " << error_description
-          << ", showing_repost_interstitial: " << showing_repost_interstitial
-          << ", frame_id: " << render_frame_host->GetRoutingID();
-  GURL validated_url(url);
-  RenderProcessHost* render_process_host = render_frame_host->GetProcess();
-  render_process_host->FilterURL(false, &validated_url);
-
-  if (net::ERR_ABORTED == error_code) {
-    // EVIL HACK ALERT! Ignore failed loads when we're showing interstitials.
-    // This means that the interstitial won't be torn down properly, which is
-    // bad. But if we have an interstitial, go back to another tab type, and
-    // then load the same interstitial again, we could end up getting the first
-    // interstitial's "failed" message (as a result of the cancel) when we're on
-    // the second one. We can't tell this apart, so we think we're tearing down
-    // the current page which will cause a crash later on.
-    //
-    // http://code.google.com/p/chromium/issues/detail?id=2855
-    // Because this will not tear down the interstitial properly, if "back" is
-    // back to another tab type, the interstitial will still be somewhat alive
-    // in the previous tab type. If you navigate somewhere that activates the
-    // tab with the interstitial again, you'll see a flash before the new load
-    // commits of the interstitial page.
-    if (delegate_ && delegate_->ShowingInterstitialPage()) {
-      LOG(WARNING) << "Discarding message during interstitial.";
-      return;
-    }
-
-    // We used to cancel the pending renderer here for cross-site downloads.
-    // However, it's not safe to do that because the download logic repeatedly
-    // looks for this WebContents based on a render ID. Instead, we just
-    // leave the pending renderer around until the next navigation event
-    // (Navigate, DidNavigate, etc), which will clean it up properly.
-    //
-    // TODO(creis): Find a way to cancel any pending RFH here.
-  }
-
-  // Discard the pending navigation entry if needed.
-  NavigationRequest* request = render_frame_host->navigation_request();
-  if (request)
-    request->DropPendingEntryRef();
-}
-
 void NavigatorImpl::DidFailLoadWithError(
     RenderFrameHostImpl* render_frame_host,
     const GURL& url,
diff --git a/content/browser/frame_host/navigator_impl.h b/content/browser/frame_host/navigator_impl.h
index c3a53d4..b3f06bb8 100644
--- a/content/browser/frame_host/navigator_impl.h
+++ b/content/browser/frame_host/navigator_impl.h
@@ -41,12 +41,6 @@
   // Navigator implementation.
   NavigatorDelegate* GetDelegate() override;
   NavigationController* GetController() override;
-  void DidFailProvisionalLoadWithError(
-      RenderFrameHostImpl* render_frame_host,
-      const GURL& url,
-      int error_code,
-      const base::string16& error_description,
-      bool showing_repost_interstitial) override;
   void DidFailLoadWithError(RenderFrameHostImpl* render_frame_host,
                             const GURL& url,
                             int error_code,
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 1b60ff7..19c4b11 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -447,18 +447,13 @@
   base::debug::SetCrashKeyString(site_url_key, site_url.spec());
 }
 
-base::Optional<url::Origin> GetOriginForURLLoaderFactoryUnchecked(
+url::Origin GetOriginForURLLoaderFactoryUnchecked(
     NavigationRequest* navigation_request) {
   // Return a safe opaque origin when there is no |navigation_request| (e.g.
   // when RFHI::CommitNavigation is called via RFHI::NavigateToInterstitialURL).
   if (!navigation_request)
     return url::Origin();
 
-  // GetOriginForURLLoaderFactory should only be called at the ready-to-commit
-  // time, when the RFHI and process to commit the navigation are already known.
-  DCHECK_LE(NavigationRequest::RESPONSE_STARTED, navigation_request->state());
-  RenderFrameHostImpl* target_frame = navigation_request->GetRenderFrameHost();
-
   // Check if this is loadDataWithBaseUrl (which needs special treatment).
   auto& common_params = navigation_request->common_params();
   if (IsLoadDataWithBaseURL(common_params)) {
@@ -487,43 +482,25 @@
   if (navigation_request->IsForMhtmlSubframe())
     return url::Origin();
 
-  // TODO(lukasza, nasko): https://crbug.com/888079: Use exact origin, instead
-  // of falling back to site URL for about:blank and about:srcdoc.
-  if (common_params.url.SchemeIs(url::kAboutScheme)) {
-    // |site_instance|'s site URL cannot be used as
-    // |request_initiator_site_lock| unless the site requires a dedicated
-    // process.  Otherwise b.com may share a process associated with a.com, in
-    // a SiteInstance with |site_url| set to "http://a.com" (and/or
-    // "http://nonisolated.invalid" in the future) and in that scenario
-    // |request_initiator| for requests from b.com should NOT be locked to
-    // a.com.
-    SiteInstanceImpl* site_instance = target_frame->GetSiteInstance();
-    if (!SiteInstanceImpl::ShouldLockToOrigin(
-            site_instance->GetIsolationContext(), site_instance->GetSiteURL()))
-      return base::nullopt;
-    return SiteInstanceImpl::GetRequestInitiatorSiteLock(
-        site_instance->GetSiteURL());
-  }
-
   // In cases not covered above, URLLoaderFactory should be associated with the
-  // origin of |common_params.url|.  This works fine for all URLs, including
-  // data: URLs (which should use an opaque origin for their subresource
-  // requests) and blob: URLs (which embed their origin inside the URL).
-  return url::Origin::Create(common_params.url);
+  // origin of |common_params.url| and/or |common_params.initiator_origin|.
+  return url::Origin::Resolve(
+      common_params.url,
+      common_params.initiator_origin.value_or(url::Origin()));
 }
 
-base::Optional<url::Origin> GetOriginForURLLoaderFactory(
+url::Origin GetOriginForURLLoaderFactory(
     NavigationRequest* navigation_request) {
-  base::Optional<url::Origin> result =
+  url::Origin result =
       GetOriginForURLLoaderFactoryUnchecked(navigation_request);
 
   // Any non-opaque |result| must be an origin that is allowed to be accessed
   // from the process that is the target of this navigation.
-  if (result.has_value() && !result->opaque()) {
+  if (!result.opaque()) {
     auto* policy = ChildProcessSecurityPolicyImpl::GetInstance();
     CHECK(policy->CanAccessDataForOrigin(
         navigation_request->GetRenderFrameHost()->GetProcess()->GetID(),
-        *result));
+        result));
   }
 
   return result;
@@ -1272,8 +1249,8 @@
                      BackForwardCacheMetrics::NotRestoredReason::kTimeout));
 }
 
-void RenderFrameHostImpl::DisallowBackForwardCache() {
-  is_back_forward_cache_disallowed_ = true;
+void RenderFrameHostImpl::DisableBackForwardCache() {
+  is_back_forward_cache_disabled_ = true;
   if (is_in_back_forward_cache())
     EvictFromBackForwardCacheWithReason(base::nullopt);
 }
@@ -2573,28 +2550,6 @@
   return frame_lifecycle_state_ != blink::mojom::FrameLifecycleState::kRunning;
 }
 
-void RenderFrameHostImpl::DidFailProvisionalLoadWithError(
-    const GURL& url,
-    int error_code,
-    const base::string16& error_description,
-    bool showing_repost_interstitial) {
-  TRACE_EVENT2("navigation",
-               "RenderFrameHostImpl::DidFailProvisionalLoadWithError",
-               "frame_tree_node", frame_tree_node_->frame_tree_node_id(),
-               "error", error_code);
-  // TODO(clamy): Kill the renderer with RFH_FAIL_PROVISIONAL_LOAD_NO_HANDLE and
-  // return early if navigation_handle_ is null, once we prevent that case from
-  // happening in practice. See https://crbug.com/605289.
-
-  // Update the error code in the NavigationRequest.
-  if (navigation_request()) {
-    navigation_request()->set_net_error(static_cast<net::Error>(error_code));
-  }
-
-  frame_tree_node_->navigator()->DidFailProvisionalLoadWithError(
-      this, url, error_code, error_description, showing_repost_interstitial);
-}
-
 void RenderFrameHostImpl::DidFailLoadWithError(
     const GURL& url,
     int error_code,
@@ -5425,10 +5380,8 @@
       GetContentClient()->browser()->WillCreateURLLoaderFactory(
           browser_context, this, GetProcess()->GetID(),
           ContentBrowserClient::URLLoaderFactoryType::kDocumentSubResource,
-          GetOriginForURLLoaderFactory(navigation_request)
-              .value_or(url::Origin()),
-          &factory_receiver, nullptr /* header_client */,
-          nullptr /* bypass_redirect_checks */);
+          GetOriginForURLLoaderFactory(navigation_request), &factory_receiver,
+          nullptr /* header_client */, nullptr /* bypass_redirect_checks */);
       CreateWebUIURLLoaderBinding(this, scheme, std::move(factory_receiver));
       // If the renderer has webui bindings, then don't give it access to
       // network loader for security reasons.
@@ -5547,10 +5500,8 @@
       GetContentClient()->browser()->WillCreateURLLoaderFactory(
           browser_context, this, GetProcess()->GetID(),
           ContentBrowserClient::URLLoaderFactoryType::kDocumentSubResource,
-          GetOriginForURLLoaderFactory(navigation_request)
-              .value_or(url::Origin()),
-          &factory_receiver, nullptr /* header_client */,
-          nullptr /* bypass_redirect_checks */);
+          GetOriginForURLLoaderFactory(navigation_request), &factory_receiver,
+          nullptr /* header_client */, nullptr /* bypass_redirect_checks */);
       // Keep DevTools proxy last, i.e. closest to the network.
       devtools_instrumentation::WillCreateURLLoaderFactory(
           this, false /* is_navigation */, false /* is_download */,
@@ -6235,7 +6186,7 @@
 }
 
 bool RenderFrameHostImpl::CreateNetworkServiceDefaultFactoryAndObserve(
-    const base::Optional<url::Origin>& origin,
+    const url::Origin& origin,
     base::Optional<net::NetworkIsolationKey> network_isolation_key,
     mojo::PendingReceiver<network::mojom::URLLoaderFactory>
         default_factory_receiver) {
@@ -6264,7 +6215,7 @@
 }
 
 bool RenderFrameHostImpl::CreateNetworkServiceDefaultFactoryInternal(
-    const base::Optional<url::Origin>& origin,
+    const url::Origin& origin,
     base::Optional<net::NetworkIsolationKey> network_isolation_key,
     mojo::PendingReceiver<network::mojom::URLLoaderFactory>
         default_factory_receiver) {
@@ -6275,9 +6226,8 @@
       header_client;
   GetContentClient()->browser()->WillCreateURLLoaderFactory(
       context, this, GetProcess()->GetID(),
-      ContentBrowserClient::URLLoaderFactoryType::kDocumentSubResource,
-      origin.value_or(url::Origin()), &default_factory_receiver, &header_client,
-      &bypass_redirect_checks);
+      ContentBrowserClient::URLLoaderFactoryType::kDocumentSubResource, origin,
+      &default_factory_receiver, &header_client, &bypass_redirect_checks);
 
   // Keep DevTools proxy last, i.e. closest to the network.
   devtools_instrumentation::WillCreateURLLoaderFactory(
@@ -6557,7 +6507,8 @@
     mojo::PendingReceiver<blink::mojom::WebSocketConnector> receiver) {
   mojo::MakeSelfOwnedReceiver(
       std::make_unique<WebSocketConnectorImpl>(
-          GetProcess()->GetID(), routing_id_, last_committed_origin_),
+          GetProcess()->GetID(), routing_id_, last_committed_origin_,
+          network_isolation_key_),
       std::move(receiver));
 }
 
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index e8b6b30..9bc3bbc4 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -972,14 +972,14 @@
 
   bool is_in_back_forward_cache() { return is_in_back_forward_cache_; }
 
-  bool is_back_forward_cache_disallowed() const {
-    return is_back_forward_cache_disallowed_;
+  bool is_back_forward_cache_disabled() const {
+    return is_back_forward_cache_disabled_;
   }
 
   // Prevents this frame (along with its parents/children) from being added to
   // the BackForwardCache. If the frame is already in the cache an eviction is
   // triggered.
-  void DisallowBackForwardCache();
+  void DisableBackForwardCache();
 
   bool is_evicted_from_back_forward_cache() {
     return is_evicted_from_back_forward_cache_;
@@ -1520,11 +1520,6 @@
                               const base::string16& message,
                               int32_t line_no,
                               const base::string16& source_id) override;
-  void DidFailProvisionalLoadWithError(
-      const GURL& url,
-      int error_code,
-      const base::string16& error_description,
-      bool showing_repost_interstitial) override;
   void DidFailLoadWithError(const GURL& url,
                             int error_code,
                             const base::string16& error_description) override;
@@ -1594,7 +1589,7 @@
   // should not be initialized with a NetworkIsolationKey, and will be trusted
   // so it can consume requests with a TrustedParams::network_isolation_key.
   bool CreateNetworkServiceDefaultFactoryAndObserve(
-      const base::Optional<url::Origin>& origin,
+      const url::Origin& origin,
       base::Optional<net::NetworkIsolationKey> network_isolation_key,
       mojo::PendingReceiver<network::mojom::URLLoaderFactory>
           default_factory_receiver);
@@ -1606,7 +1601,7 @@
   // For |network_isolation_key|, see the comment for |network_isolation_key|
   // above CreateNetworkServiceDefaultFactoryAndObserve().
   bool CreateNetworkServiceDefaultFactoryInternal(
-      const base::Optional<url::Origin>& origin,
+      const url::Origin& origin,
       base::Optional<net::NetworkIsolationKey> network_isolation_key,
       mojo::PendingReceiver<network::mojom::URLLoaderFactory>
           default_factory_receiver);
@@ -2462,7 +2457,7 @@
   // BackForwardCache:
   bool is_in_back_forward_cache_ = false;
   bool is_evicted_from_back_forward_cache_ = false;
-  bool is_back_forward_cache_disallowed_ = false;
+  bool is_back_forward_cache_disabled_ = false;
   base::OneShotTimer back_forward_cache_eviction_timer_;
 
   // This used to re-commit when restoring from the BackForwardCache, with the
diff --git a/content/browser/frame_host/render_frame_host_impl_browsertest.cc b/content/browser/frame_host/render_frame_host_impl_browsertest.cc
index d8144c6..5264125 100644
--- a/content/browser/frame_host/render_frame_host_impl_browsertest.cc
+++ b/content/browser/frame_host/render_frame_host_impl_browsertest.cc
@@ -2117,8 +2117,8 @@
   EXPECT_EQ(0, process->get_media_stream_count_for_testing());
 }
 
-#if defined(OS_CHROMEOS)
-// ChromeOS failures are tracked in https://crbug.com/954217
+#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+// ChromeOS and Linux failures are tracked in https://crbug.com/954217
 #define MAYBE_VisibilityScrolledOutOfView DISABLED_VisibilityScrolledOutOfView
 #else
 #define MAYBE_VisibilityScrolledOutOfView VisibilityScrolledOutOfView
@@ -2126,7 +2126,7 @@
 // Test that a frame is visible/hidden depending on its WebContents visibility
 // state.
 IN_PROC_BROWSER_TEST_F(RenderFrameHostImplBrowserTest,
-                       VisibilityScrolledOutOfView) {
+                       MAYBE_VisibilityScrolledOutOfView) {
   WebContentsImpl* web_contents =
       static_cast<WebContentsImpl*>(shell()->web_contents());
 
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc
index 8f409051..9c42df7 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -1396,7 +1396,7 @@
     // Similarly, don't reuse |dest_instance| if it's not an error page
     // SiteInstance but the navigation will fail and actually need an error page
     // SiteInstance.
-    // Note: The later call to HasWrongProcessForURL does not have context about
+    // Note: The later call to IsSuitableForURL does not have context about
     // error page navigaions, so we cannot rely on it to return correct value
     // when error pages are involved.
     if (!SiteIsolationPolicy::IsErrorPageIsolationEnabled(
@@ -1404,14 +1404,14 @@
         ((dest_instance->GetSiteURL() == GURL(kUnreachableWebDataURL)) ==
          is_failure)) {
       // TODO(nasko,creis): The check whether data: or about: URLs are allowed
-      // to commit in the current process should be in HasWrongProcessForURL.
+      // to commit in the current process should be in IsSuitableForURL.
       // However, making this change has further implications and needs more
       // investigation of what behavior changes. For now, use a conservative
-      // approach and explicitly check before calling HasWrongProcessForURL.
+      // approach and explicitly check before calling IsSuitableForURL.
       SiteInstanceImpl* dest_instance_impl =
           static_cast<SiteInstanceImpl*>(dest_instance);
       if (IsDataOrAbout(dest_url) ||
-          !dest_instance_impl->HasWrongProcessForURL(dest_url)) {
+          dest_instance_impl->IsSuitableForURL(dest_url)) {
         // If we are forcing a swap, this should be in a different
         // BrowsingInstance.
         if (force_browsing_instance_swap) {
@@ -1485,7 +1485,7 @@
     // not want to use the |current_instance_impl| if it has no site, since it
     // will have a non-privileged RenderProcessHost. Create a new SiteInstance
     // for this URL instead (with the correct process type).
-    if (current_instance_impl->HasWrongProcessForURL(dest_url)) {
+    if (!current_instance_impl->IsSuitableForURL(dest_url)) {
       return SiteInstanceDescriptor(browser_context, dest_url,
                                     SiteInstanceRelation::RELATED);
     }
@@ -1694,7 +1694,7 @@
   // could share that process when over process limit and lock it to a
   // different site before this SiteInstance sets its site.  See
   // https://crbug.com/773809.
-  if (rfh->GetSiteInstance()->HasWrongProcessForURL(dest_url))
+  if (!rfh->GetSiteInstance()->IsSuitableForURL(dest_url))
     return true;
 
   // A transfer is not needed if the current SiteInstance doesn't yet have a
@@ -1815,9 +1815,9 @@
   bool dest_has_effective_url =
       SiteInstanceImpl::HasEffectiveURL(browser_context, dest_url);
 
-  // If the process type is incorrect, reject the candidate even if |dest_url|
-  // is same-site.  (The URL may have been installed as an app since
-  // the last time we visited it.)
+  // If IsSuitableForURL finds a process type mismatch, reject the candidate
+  // even if |dest_url| is same-site.  (The URL may have been installed as an
+  // app since the last time we visited it.)
   //
   // This check must be skipped to keep same-site subframe navigations from a
   // hosted app to non-hosted app, and vice versa, in the same process.
@@ -1827,7 +1827,7 @@
       should_compare_effective_urls ||
       (!src_has_effective_url && !dest_has_effective_url);
   if (should_check_for_wrong_process &&
-      candidate->GetSiteInstance()->HasWrongProcessForURL(dest_url)) {
+      !candidate->GetSiteInstance()->IsSuitableForURL(dest_url)) {
     return false;
   }
 
diff --git a/content/browser/frame_host/render_frame_host_manager_browsertest.cc b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
index c6d139a..8240925 100644
--- a/content/browser/frame_host/render_frame_host_manager_browsertest.cc
+++ b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
@@ -1932,6 +1932,13 @@
   EXPECT_FALSE(speculative_rfh);
 }
 
+#if defined(OS_LINUX) || defined(OS_CHROMEOS)
+#define MAYBE_DeleteSpeculativeRFHPendingCommitOfPendingEntryOnInterrupted2 \
+  DISABLED_DeleteSpeculativeRFHPendingCommitOfPendingEntryOnInterrupted2
+#else
+#define MAYBE_DeleteSpeculativeRFHPendingCommitOfPendingEntryOnInterrupted2 \
+  DeleteSpeculativeRFHPendingCommitOfPendingEntryOnInterrupted2
+#endif
 // Ensures that deleting a speculative RenderFrameHost trying to commit a
 // navigation to the pending NavigationEntry will not crash if it happens
 // because a new navigation to the same pending NavigationEntry started.  This
@@ -1940,7 +1947,7 @@
 // regression test for crbug.com/796135.
 IN_PROC_BROWSER_TEST_F(
     RenderFrameHostManagerTest,
-    DeleteSpeculativeRFHPendingCommitOfPendingEntryOnInterrupted2) {
+    MAYBE_DeleteSpeculativeRFHPendingCommitOfPendingEntryOnInterrupted2) {
   const std::string kOriginalPath = "/original.html";
   const std::string kRedirectPath = "/redirect.html";
   net::test_server::ControllableHttpResponse original_response1(
@@ -6052,17 +6059,17 @@
   EXPECT_FALSE(instance1->HasProcess());
   if (AreAllSitesIsolatedForTesting()) {
     // In site-per-process, we cannot use foo.com's SiteInstance for a.com.
-    EXPECT_TRUE(instance1->HasWrongProcessForURL(url1));
+    EXPECT_FALSE(instance1->IsSuitableForURL(url1));
   } else if (AreDefaultSiteInstancesEnabled()) {
     // Since |instance1| is a default SiteInstance AND this test explicitly
     // ensures that ShouldAssignSiteForURL(url1) will return false, |url1|
     // cannot be placed in the default SiteInstance. This also means that |url1|
     // cannot be placed in the same process as the default SiteInstance.
-    EXPECT_TRUE(instance1->HasWrongProcessForURL(url1));
+    EXPECT_FALSE(instance1->IsSuitableForURL(url1));
   } else {
     // If neither foo.com nor a.com require dedicated processes, then we can use
     // the same process.
-    EXPECT_FALSE(instance1->HasWrongProcessForURL(url1));
+    EXPECT_TRUE(instance1->IsSuitableForURL(url1));
   }
 
   // Go back to url1's entry, which should swap to a new SiteInstance with an
diff --git a/content/browser/media/audio_input_stream_broker.cc b/content/browser/media/audio_input_stream_broker.cc
index 54124a13..3ec84fa 100644
--- a/content/browser/media/audio_input_stream_broker.cc
+++ b/content/browser/media/audio_input_stream_broker.cc
@@ -206,8 +206,7 @@
   DCHECK(stream_id.has_value());
   DCHECK(renderer_factory_client_);
   renderer_factory_client_->StreamCreated(
-      media::mojom::AudioInputStreamPtr(media::mojom::AudioInputStreamPtrInfo(
-          stream.PassPipe(), stream.version())),
+      std::move(stream),
       media::mojom::AudioInputStreamClientRequest(
           pending_client_receiver_.PassPipe()),
       std::move(data_pipe), initially_muted, stream_id);
diff --git a/content/browser/media/audio_input_stream_broker_unittest.cc b/content/browser/media/audio_input_stream_broker_unittest.cc
index b85bb27..ce5cd4e 100644
--- a/content/browser/media/audio_input_stream_broker_unittest.cc
+++ b/content/browser/media/audio_input_stream_broker_unittest.cc
@@ -11,6 +11,8 @@
 #include "base/test/mock_callback.h"
 #include "content/public/test/browser_task_environment.h"
 #include "media/mojo/mojom/audio_input_stream.mojom.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/system/platform_handle.h"
@@ -55,13 +57,13 @@
   MOCK_METHOD0(OnStreamCreated, void());
 
   void StreamCreated(
-      media::mojom::AudioInputStreamPtr input_stream,
+      mojo::PendingRemote<media::mojom::AudioInputStream> input_stream,
       media::mojom::AudioInputStreamClientRequest client_request,
       media::mojom::ReadOnlyAudioDataPipePtr data_pipe,
       bool initially_muted,
       const base::Optional<base::UnguessableToken>& stream_id) override {
     EXPECT_TRUE(stream_id.has_value());
-    input_stream_ = std::move(input_stream);
+    input_stream_.Bind(std::move(input_stream));
     client_request_ = std::move(client_request);
     OnStreamCreated();
   }
@@ -70,7 +72,7 @@
 
  private:
   mojo::Receiver<mojom::RendererAudioInputStreamFactoryClient> receiver_{this};
-  media::mojom::AudioInputStreamPtr input_stream_;
+  mojo::Remote<media::mojom::AudioInputStream> input_stream_;
   media::mojom::AudioInputStreamClientRequest client_request_;
   DISALLOW_COPY_AND_ASSIGN(MockRendererAudioInputStreamFactoryClient);
 };
@@ -89,7 +91,7 @@
         : device_id(device_id), params(params) {}
 
     bool requested = false;
-    media::mojom::AudioInputStreamRequest stream_request;
+    mojo::PendingReceiver<media::mojom::AudioInputStream> stream_receiver;
     media::mojom::AudioInputStreamClientPtr client;
     media::mojom::AudioInputStreamObserverPtr observer;
     media::mojom::AudioLogPtr log;
@@ -123,7 +125,7 @@
     EXPECT_EQ(stream_request_data_->device_id, device_id);
     EXPECT_TRUE(stream_request_data_->params.Equals(params));
     stream_request_data_->requested = true;
-    stream_request_data_->stream_request = std::move(stream_receiver);
+    stream_request_data_->stream_receiver = std::move(stream_receiver);
     stream_request_data_->client.Bind(std::move(client));
     stream_request_data_->observer.Bind(std::move(observer));
     stream_request_data_->log.Bind(std::move(log));
diff --git a/content/browser/media/audio_loopback_stream_broker.cc b/content/browser/media/audio_loopback_stream_broker.cc
index 72a0838..181c783e 100644
--- a/content/browser/media/audio_loopback_stream_broker.cc
+++ b/content/browser/media/audio_loopback_stream_broker.cc
@@ -75,9 +75,9 @@
   media::mojom::AudioInputStreamClientPtr client;
   client_request_ = mojo::MakeRequest(&client);
 
-  media::mojom::AudioInputStreamPtr stream;
-  media::mojom::AudioInputStreamRequest stream_request =
-      mojo::MakeRequest(&stream);
+  mojo::PendingRemote<media::mojom::AudioInputStream> stream;
+  mojo::PendingReceiver<media::mojom::AudioInputStream> stream_receiver =
+      stream.InitWithNewPipeAndPassReceiver();
 
   media::mojom::AudioInputStreamObserverPtr observer_ptr;
   observer_binding_.Bind(mojo::MakeRequest(&observer_ptr));
@@ -87,7 +87,7 @@
       &AudioLoopbackStreamBroker::Cleanup, base::Unretained(this)));
 
   factory->CreateLoopbackStream(
-      std::move(stream_request), client.PassInterface(),
+      std::move(stream_receiver), client.PassInterface(),
       observer_ptr.PassInterface(), params_, shared_memory_count_,
       source_->GetGroupID(),
       base::BindOnce(&AudioLoopbackStreamBroker::StreamCreated,
@@ -106,7 +106,7 @@
 }
 
 void AudioLoopbackStreamBroker::StreamCreated(
-    media::mojom::AudioInputStreamPtr stream,
+    mojo::PendingRemote<media::mojom::AudioInputStream> stream,
     media::mojom::ReadOnlyAudioDataPipePtr data_pipe) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
 
diff --git a/content/browser/media/audio_loopback_stream_broker.h b/content/browser/media/audio_loopback_stream_broker.h
index e6da91661..cd62dec 100644
--- a/content/browser/media/audio_loopback_stream_broker.h
+++ b/content/browser/media/audio_loopback_stream_broker.h
@@ -59,7 +59,7 @@
   void OnSourceGone() final;
 
  private:
-  void StreamCreated(media::mojom::AudioInputStreamPtr stream,
+  void StreamCreated(mojo::PendingRemote<media::mojom::AudioInputStream> stream,
                      media::mojom::ReadOnlyAudioDataPipePtr data_pipe);
   void Cleanup();
 
diff --git a/content/browser/media/audio_loopback_stream_broker_unittest.cc b/content/browser/media/audio_loopback_stream_broker_unittest.cc
index 05fe53d..8b274fa 100644
--- a/content/browser/media/audio_loopback_stream_broker_unittest.cc
+++ b/content/browser/media/audio_loopback_stream_broker_unittest.cc
@@ -12,6 +12,8 @@
 #include "content/public/test/browser_task_environment.h"
 #include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/system/platform_handle.h"
@@ -70,14 +72,14 @@
   MOCK_METHOD0(OnStreamCreated, void());
 
   void StreamCreated(
-      media::mojom::AudioInputStreamPtr input_stream,
+      mojo::PendingRemote<media::mojom::AudioInputStream> input_stream,
       media::mojom::AudioInputStreamClientRequest client_request,
       media::mojom::ReadOnlyAudioDataPipePtr data_pipe,
       bool initially_muted,
       const base::Optional<base::UnguessableToken>& stream_id) override {
     // Loopback streams have no stream ids.
     EXPECT_FALSE(stream_id.has_value());
-    input_stream_ = std::move(input_stream);
+    input_stream_.Bind(std::move(input_stream));
     client_request_ = std::move(client_request);
     OnStreamCreated();
   }
@@ -86,7 +88,7 @@
 
  private:
   mojo::Receiver<mojom::RendererAudioInputStreamFactoryClient> receiver_{this};
-  media::mojom::AudioInputStreamPtr input_stream_;
+  mojo::Remote<media::mojom::AudioInputStream> input_stream_;
   media::mojom::AudioInputStreamClientRequest client_request_;
 };
 
@@ -104,7 +106,7 @@
         : params(params), group_id(group_id) {}
 
     bool requested = false;
-    media::mojom::AudioInputStreamRequest stream_request;
+    mojo::PendingReceiver<media::mojom::AudioInputStream> stream_receiver;
     media::mojom::AudioInputStreamClientPtr client;
     media::mojom::AudioInputStreamObserverPtr observer;
     const media::AudioParameters params;
@@ -135,7 +137,7 @@
     EXPECT_EQ(stream_request_data_->group_id, group_id);
     EXPECT_TRUE(stream_request_data_->params.Equals(params));
     stream_request_data_->requested = true;
-    stream_request_data_->stream_request = std::move(receiver);
+    stream_request_data_->stream_receiver = std::move(receiver);
     stream_request_data_->client.Bind(std::move(client));
     stream_request_data_->observer.Bind(std::move(observer));
     stream_request_data_->shared_memory_count = shared_memory_count;
diff --git a/content/browser/media/in_process_audio_loopback_stream_creator.cc b/content/browser/media/in_process_audio_loopback_stream_creator.cc
index 86d2149..aec4f941 100644
--- a/content/browser/media/in_process_audio_loopback_stream_creator.cc
+++ b/content/browser/media/in_process_audio_loopback_stream_creator.cc
@@ -44,7 +44,7 @@
 
   // mojom::RendererAudioInputStreamFactoryClient implementation.
   void StreamCreated(
-      media::mojom::AudioInputStreamPtr stream,
+      mojo::PendingRemote<media::mojom::AudioInputStream> stream,
       media::mojom::AudioInputStreamClientRequest client_request,
       media::mojom::ReadOnlyAudioDataPipePtr data_pipe,
       bool initially_muted,
diff --git a/content/browser/oop_browsertest.cc b/content/browser/oop_browsertest.cc
index 0b7c5bf..f6509b4f 100644
--- a/content/browser/oop_browsertest.cc
+++ b/content/browser/oop_browsertest.cc
@@ -5,7 +5,6 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/command_line.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "build/build_config.h"
 #include "content/browser/renderer_host/render_widget_host_impl.h"
diff --git a/content/browser/renderer_host/input/mouse_latency_browsertest.cc b/content/browser/renderer_host/input/mouse_latency_browsertest.cc
index 4501a44e..df5613a 100644
--- a/content/browser/renderer_host/input/mouse_latency_browsertest.cc
+++ b/content/browser/renderer_host/input/mouse_latency_browsertest.cc
@@ -9,7 +9,6 @@
 
 #include "base/bind.h"
 #include "base/json/json_reader.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/test/test_timeouts.h"
 #include "build/build_config.h"
diff --git a/content/browser/renderer_host/input/scroll_latency_browsertest.cc b/content/browser/renderer_host/input/scroll_latency_browsertest.cc
index cbe4dc8..c48b80fb 100644
--- a/content/browser/renderer_host/input/scroll_latency_browsertest.cc
+++ b/content/browser/renderer_host/input/scroll_latency_browsertest.cc
@@ -5,7 +5,6 @@
 #include <memory>
 
 #include "base/bind.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/content/browser/renderer_host/media/audio_input_stream_handle.cc b/content/browser/renderer_host/media/audio_input_stream_handle.cc
index b0bb233..b7dd9b0 100644
--- a/content/browser/renderer_host/media/audio_input_stream_handle.cc
+++ b/content/browser/renderer_host/media/audio_input_stream_handle.cc
@@ -32,9 +32,8 @@
     : stream_id_(base::UnguessableToken::Create()),
       deleter_callback_(std::move(deleter_callback)),
       client_remote_(std::move(client_pending_remote)),
-      stream_ptr_(),
       stream_client_request_(),
-      stream_(mojo::MakeRequest(&stream_ptr_),
+      stream_(pending_stream_.InitWithNewPipeAndPassReceiver(),
               CreatePtrAndStoreRequest(&stream_client_request_),
               std::move(create_delegate_callback),
               base::BindOnce(&AudioInputStreamHandle::OnCreated,
@@ -66,7 +65,7 @@
   DCHECK(deleter_callback_)
       << "|deleter_callback_| was called, but |this| hasn't been destructed!";
   client_remote_->StreamCreated(
-      std::move(stream_ptr_), std::move(stream_client_request_),
+      std::move(pending_stream_), std::move(stream_client_request_),
       std::move(data_pipe), initially_muted, stream_id_);
 }
 
diff --git a/content/browser/renderer_host/media/audio_input_stream_handle.h b/content/browser/renderer_host/media/audio_input_stream_handle.h
index 728113b..3105e5e9 100644
--- a/content/browser/renderer_host/media/audio_input_stream_handle.h
+++ b/content/browser/renderer_host/media/audio_input_stream_handle.h
@@ -49,7 +49,7 @@
   const base::UnguessableToken stream_id_;
   DeleterCallback deleter_callback_;
   mojo::Remote<mojom::RendererAudioInputStreamFactoryClient> client_remote_;
-  media::mojom::AudioInputStreamPtr stream_ptr_;
+  mojo::PendingRemote<media::mojom::AudioInputStream> pending_stream_;
   media::mojom::AudioInputStreamClientRequest stream_client_request_;
   media::MojoAudioInputStream stream_;
 
diff --git a/content/browser/renderer_host/media/audio_input_stream_handle_unittest.cc b/content/browser/renderer_host/media/audio_input_stream_handle_unittest.cc
index a83a0fd..da4b545 100644
--- a/content/browser/renderer_host/media/audio_input_stream_handle_unittest.cc
+++ b/content/browser/renderer_host/media/audio_input_stream_handle_unittest.cc
@@ -16,6 +16,7 @@
 #include "media/audio/audio_input_delegate.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -48,19 +49,19 @@
   MOCK_METHOD0(Created, void());
 
   void StreamCreated(
-      media::mojom::AudioInputStreamPtr input_stream,
+      mojo::PendingRemote<media::mojom::AudioInputStream> input_stream,
       media::mojom::AudioInputStreamClientRequest client_request,
       media::mojom::ReadOnlyAudioDataPipePtr data_pipe,
       bool initially_muted,
       const base::Optional<base::UnguessableToken>& stream_id) override {
     EXPECT_TRUE(stream_id.has_value());
-    input_stream_ = std::move(input_stream);
+    input_stream_.Bind(std::move(input_stream));
     client_request_ = std::move(client_request);
     Created();
   }
 
  private:
-  media::mojom::AudioInputStreamPtr input_stream_;
+  mojo::Remote<media::mojom::AudioInputStream> input_stream_;
   media::mojom::AudioInputStreamClientRequest client_request_;
 };
 
diff --git a/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory_unittest.cc b/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory_unittest.cc
index d1a122e1c..a93f9ed 100644
--- a/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory_unittest.cc
+++ b/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory_unittest.cc
@@ -80,7 +80,7 @@
   MOCK_METHOD0(Created, void());
 
   void StreamCreated(
-      media::mojom::AudioInputStreamPtr input_stream,
+      mojo::PendingRemote<media::mojom::AudioInputStream> input_stream,
       media::mojom::AudioInputStreamClientRequest client_request,
       media::mojom::ReadOnlyAudioDataPipePtr data_pipe,
       bool initially_muted,
@@ -150,7 +150,6 @@
   MediaStreamManager media_stream_manager_;
 
   mojo::Remote<mojom::RendererAudioInputStreamFactory> factory_remote_;
-  media::mojom::AudioInputStreamPtr stream_ptr_;
   MockRendererAudioInputStreamFactoryClient client_;
   mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
       client_pending_remote_;
diff --git a/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc b/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc
index a3f65d6a..7d91a41 100644
--- a/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc
+++ b/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc
@@ -144,7 +144,7 @@
       : public mojom::RendererAudioInputStreamFactoryClient {
    public:
     void StreamCreated(
-        media::mojom::AudioInputStreamPtr stream,
+        mojo::PendingRemote<media::mojom::AudioInputStream> stream,
         media::mojom::AudioInputStreamClientRequest client_request,
         media::mojom::ReadOnlyAudioDataPipePtr data_pipe,
         bool initially_muted,
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index 06f9c08..99bb296 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -2468,15 +2468,16 @@
   //
   // We may not be able to allow powerful APIs such as memory measurement APIs
   // (see https://crbug.com/887967) without removing this call.
-  CreateURLLoaderFactory(request_initiator_site_lock,
-                         network::mojom::CrossOriginEmbedderPolicy::kNone,
-                         nullptr /* preferences */, net::NetworkIsolationKey(),
-                         mojo::NullRemote() /* header_client */,
-                         std::move(receiver));
+  CreateURLLoaderFactoryInternal(
+      request_initiator_site_lock,
+      network::mojom::CrossOriginEmbedderPolicy::kNone,
+      nullptr /* preferences */, net::NetworkIsolationKey(),
+      mojo::NullRemote() /* header_client */, std::move(receiver),
+      false /* is_trusted */);
 }
 
 void RenderProcessHostImpl::CreateURLLoaderFactory(
-    const base::Optional<url::Origin>& origin,
+    const url::Origin& origin,
     network::mojom::CrossOriginEmbedderPolicy embedder_policy,
     const WebPreferences* preferences,
     const net::NetworkIsolationKey& network_isolation_key,
@@ -2489,7 +2490,7 @@
 }
 
 void RenderProcessHostImpl::CreateTrustedURLLoaderFactory(
-    const base::Optional<url::Origin>& origin,
+    const url::Origin& origin,
     network::mojom::CrossOriginEmbedderPolicy embedder_policy,
     const WebPreferences* preferences,
     mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient>
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h
index 20a22b5..d195a2b 100644
--- a/content/browser/renderer_host/render_process_host_impl.h
+++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -232,7 +232,7 @@
   void Resume() override;
   mojom::Renderer* GetRendererInterface() override;
   void CreateURLLoaderFactory(
-      const base::Optional<url::Origin>& origin,
+      const url::Origin& origin,
       network::mojom::CrossOriginEmbedderPolicy embedder_policy,
       const WebPreferences* preferences,
       const net::NetworkIsolationKey& network_isolation_key,
@@ -279,7 +279,7 @@
   // Similar to the CreateURLLoaderFactory RenderProcessHost override, but this
   // creates a trusted URLLoaderFactory with no default NetworkIsolationKey.
   void CreateTrustedURLLoaderFactory(
-      const base::Optional<url::Origin>& origin,
+      const url::Origin& origin,
       network::mojom::CrossOriginEmbedderPolicy embedder_policy,
       const WebPreferences* preferences,
       mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient>
@@ -820,9 +820,11 @@
 
   // Creates a URLLoaderFactory whose NetworkIsolationKey is set if
   // |network_isoation_key| has a value, and whose trust is given by
-  // |is_trusted|. Only called by CreateURLLoaderFactory and
-  // CreateTrustedURLLoaderFactory.
+  // |is_trusted|. Only called by CreateURLLoaderFactory,
+  // CreateTrustedURLLoaderFactory and CreateURLLoaderFactoryForRendererProcess.
   void CreateURLLoaderFactoryInternal(
+      // TODO(kinuko, lukasza): https://crbug.com/891872: Make |origin|
+      // non-optional, once CreateURLLoaderFactoryForRendererProcess is removed.
       const base::Optional<url::Origin>& origin,
       network::mojom::CrossOriginEmbedderPolicy embedder_policy,
       const WebPreferences* preferences,
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index b85fe2d..d46936e 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -21,7 +21,6 @@
 #include "base/lazy_instance.h"
 #include "base/location.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/metrics/field_trial.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/single_thread_task_runner.h"
diff --git a/content/browser/renderer_interface_binders.cc b/content/browser/renderer_interface_binders.cc
index 6b584056f..ca88085 100644
--- a/content/browser/renderer_interface_binders.cc
+++ b/content/browser/renderer_interface_binders.cc
@@ -153,8 +153,14 @@
     const url::Origin& origin) {
   // TODO(jam): is it ok to not send extraHeaders for sockets created from
   // shared and service workers?
+  //
+  // Shared Workers and service workers are not directly associated with a
+  // frame, so the concept of "top-level frame" does not exist. Can use
+  // (origin, origin) for the NetworkIsolationKey for requests because these
+  // workers can only be created when the site has cookie access.
   mojo::MakeSelfOwnedReceiver(std::make_unique<WebSocketConnectorImpl>(
-                                  host->GetID(), MSG_ROUTING_NONE, origin),
+                                  host->GetID(), MSG_ROUTING_NONE, origin,
+                                  net::NetworkIsolationKey(origin, origin)),
                               std::move(receiver));
 }
 
diff --git a/content/browser/scheduler/browser_ui_thread_scheduler.h b/content/browser/scheduler/browser_ui_thread_scheduler.h
index 3a98ec0..88a3e14e 100644
--- a/content/browser/scheduler/browser_ui_thread_scheduler.h
+++ b/content/browser/scheduler/browser_ui_thread_scheduler.h
@@ -8,7 +8,6 @@
 #include <memory>
 
 #include "base/containers/flat_map.h"
-#include "base/message_loop/message_loop.h"
 #include "base/task/sequence_manager/task_queue.h"
 #include "content/browser/scheduler/browser_task_queues.h"
 #include "content/common/content_export.h"
diff --git a/content/browser/scheduler/browser_ui_thread_scheduler_unittest.cc b/content/browser/scheduler/browser_ui_thread_scheduler_unittest.cc
index 211ee5f..262b12b 100644
--- a/content/browser/scheduler/browser_ui_thread_scheduler_unittest.cc
+++ b/content/browser/scheduler/browser_ui_thread_scheduler_unittest.cc
@@ -9,7 +9,6 @@
 #include <vector>
 
 #include "base/callback_helpers.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/task/post_task.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
diff --git a/content/browser/site_instance_impl.cc b/content/browser/site_instance_impl.cc
index 1d7865f..83cbdbd 100644
--- a/content/browser/site_instance_impl.cc
+++ b/content/browser/site_instance_impl.cc
@@ -384,12 +384,12 @@
   return browsing_instance_->active_contents_count();
 }
 
-bool SiteInstanceImpl::HasWrongProcessForURL(const GURL& url) {
+bool SiteInstanceImpl::IsSuitableForURL(const GURL& url) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   // If the URL to navigate to can be associated with any site instance,
   // we want to keep it in the same process.
   if (IsRendererDebugURL(url))
-    return false;
+    return true;
 
   // Any process can host an about:blank URL, except the one used for error
   // pages, which should not commit successful navigations.  This check avoids a
@@ -400,7 +400,7 @@
   // elsewhere and leave them in the source SiteInstance, along with
   // about:srcdoc and data:.
   if (url.IsAboutBlank() && site_ != GURL(kUnreachableWebDataURL))
-    return false;
+    return true;
 
   // If the site URL is an extension (e.g., for hosted apps or WebUI) but the
   // process is not (or vice versa), make sure we notice and fix it.
@@ -425,7 +425,7 @@
   // SiteInstance associated with that frame is initially a SiteInstance with
   // no site URL set.
   if (IsDefaultSiteInstance() && site_url != GetSiteURL())
-    return true;
+    return false;
 
   // Note that HasProcess() may return true if process_ is null, in
   // process-per-site cases where there's an existing process available.
@@ -435,29 +435,29 @@
     // If there is no process or site, then this is a new SiteInstance that can
     // be used for anything.
     if (!HasSite())
-      return false;
+      return true;
 
     // If there is no process but there is a site, then the process must have
     // been discarded after we navigated away.  If the site URLs match, then it
     // is safe to use this SiteInstance.
     if (GetSiteURL() == site_url)
-      return false;
+      return true;
 
     // If the site URLs do not match, but neither this SiteInstance nor the
     // destination site_url require dedicated processes, then it is safe to use
     // this SiteInstance.
     if (!RequiresDedicatedProcess() &&
         !DoesSiteURLRequireDedicatedProcess(GetIsolationContext(), site_url)) {
-      return false;
+      return true;
     }
 
     // Otherwise, there's no process, the site URLs don't match, and at least
     // one of them requires a dedicated process, so it is not safe to use this
     // SiteInstance.
-    return true;
+    return false;
   }
 
-  return !RenderProcessHostImpl::IsSuitableHost(
+  return RenderProcessHostImpl::IsSuitableHost(
       GetProcess(), browsing_instance_->GetBrowserContext(),
       GetIsolationContext(), site_url, origin_lock);
 }
diff --git a/content/browser/site_instance_impl.h b/content/browser/site_instance_impl.h
index 5784da18..9fc7e17 100644
--- a/content/browser/site_instance_impl.h
+++ b/content/browser/site_instance_impl.h
@@ -205,10 +205,10 @@
   // avoid dedicating an unused SiteInstance to it (e.g., in a new tab).
   bool HasRelatedSiteInstance(const GURL& url);
 
-  // Returns whether this SiteInstance has a process that is the wrong type for
-  // the given URL.  If so, the browser should force a process swap when
-  // navigating to the URL.
-  bool HasWrongProcessForURL(const GURL& url);
+  // Returns whether this SiteInstance is compatible with and can host the given
+  // |url|. If not, the browser should force a SiteInstance swap when
+  // navigating to |url|.
+  bool IsSuitableForURL(const GURL& url);
 
   // Increase the number of active frames in this SiteInstance. This is
   // increased when a frame is created.
diff --git a/content/browser/site_instance_impl_unittest.cc b/content/browser/site_instance_impl_unittest.cc
index 7f46eff6..57c10cc7 100644
--- a/content/browser/site_instance_impl_unittest.cc
+++ b/content/browser/site_instance_impl_unittest.cc
@@ -750,9 +750,9 @@
   DrainMessageLoop();
 }
 
-// Test to ensure that HasWrongProcessForURL behaves properly for different
-// types of URLs.
-TEST_F(SiteInstanceTest, HasWrongProcessForURL) {
+// Test to ensure that IsSuitableForURL behaves properly for different types of
+// URLs.
+TEST_F(SiteInstanceTest, IsSuitableForURL) {
   std::unique_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
   std::unique_ptr<RenderProcessHost> host;
   scoped_refptr<SiteInstanceImpl> instance(
@@ -763,7 +763,7 @@
 
   // Check prior to assigning a site or process to the instance, which is
   // expected to return false to allow the SiteInstance to be used for anything.
-  EXPECT_FALSE(instance->HasWrongProcessForURL(GURL("http://google.com")));
+  EXPECT_TRUE(instance->IsSuitableForURL(GURL("http://google.com")));
 
   instance->SetSite(GURL("http://evernote.com/"));
   EXPECT_TRUE(instance->HasSite());
@@ -774,11 +774,11 @@
   EXPECT_TRUE(host.get() != nullptr);
   EXPECT_TRUE(instance->HasProcess());
 
-  EXPECT_FALSE(instance->HasWrongProcessForURL(GURL("http://evernote.com")));
-  EXPECT_FALSE(instance->HasWrongProcessForURL(
+  EXPECT_TRUE(instance->IsSuitableForURL(GURL("http://evernote.com")));
+  EXPECT_TRUE(instance->IsSuitableForURL(
       GURL("javascript:alert(document.location.href);")));
 
-  EXPECT_TRUE(instance->HasWrongProcessForURL(GetWebUIURL(kChromeUIGpuHost)));
+  EXPECT_FALSE(instance->IsSuitableForURL(GetWebUIURL(kChromeUIGpuHost)));
 
   // Test that WebUI SiteInstances reject normal web URLs.
   const GURL webui_url(GetWebUIURL(kChromeUIGpuHost));
@@ -792,26 +792,25 @@
       webui_host->GetID(), BINDINGS_POLICY_WEB_UI);
 
   EXPECT_TRUE(webui_instance->HasProcess());
-  EXPECT_FALSE(webui_instance->HasWrongProcessForURL(webui_url));
-  EXPECT_TRUE(webui_instance->HasWrongProcessForURL(GURL("http://google.com")));
-  EXPECT_TRUE(webui_instance->HasWrongProcessForURL(GURL("http://gpu")));
+  EXPECT_TRUE(webui_instance->IsSuitableForURL(webui_url));
+  EXPECT_FALSE(webui_instance->IsSuitableForURL(GURL("http://google.com")));
+  EXPECT_FALSE(webui_instance->IsSuitableForURL(GURL("http://gpu")));
 
   // WebUI uses process-per-site, so another instance will use the same process
-  // even if we haven't called GetProcess yet.  Make sure HasWrongProcessForURL
+  // even if we haven't called GetProcess yet.  Make sure IsSuitableForURL
   // doesn't crash (http://crbug.com/137070).
   scoped_refptr<SiteInstanceImpl> webui_instance2(
       SiteInstanceImpl::Create(browser_context.get()));
   webui_instance2->SetSite(webui_url);
-  EXPECT_FALSE(webui_instance2->HasWrongProcessForURL(webui_url));
-  EXPECT_TRUE(
-      webui_instance2->HasWrongProcessForURL(GURL("http://google.com")));
+  EXPECT_TRUE(webui_instance2->IsSuitableForURL(webui_url));
+  EXPECT_FALSE(webui_instance2->IsSuitableForURL(GURL("http://google.com")));
 
   DrainMessageLoop();
 }
 
-// Test to ensure that HasWrongProcessForURL behaves properly even when
+// Test to ensure that IsSuitableForURL behaves properly even when
 // --site-per-process is used (http://crbug.com/160671).
-TEST_F(SiteInstanceTest, HasWrongProcessForURLInSitePerProcess) {
+TEST_F(SiteInstanceTest, IsSuitableForURLInSitePerProcess) {
   IsolateAllSitesForTesting(base::CommandLine::ForCurrentProcess());
 
   std::unique_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
@@ -821,7 +820,7 @@
 
   // Check prior to assigning a site or process to the instance, which is
   // expected to return false to allow the SiteInstance to be used for anything.
-  EXPECT_FALSE(instance->HasWrongProcessForURL(GURL("http://google.com")));
+  EXPECT_TRUE(instance->IsSuitableForURL(GURL("http://google.com")));
 
   instance->SetSite(GURL("http://evernote.com/"));
   EXPECT_TRUE(instance->HasSite());
@@ -832,11 +831,11 @@
   EXPECT_TRUE(host.get() != nullptr);
   EXPECT_TRUE(instance->HasProcess());
 
-  EXPECT_FALSE(instance->HasWrongProcessForURL(GURL("http://evernote.com")));
-  EXPECT_FALSE(instance->HasWrongProcessForURL(
+  EXPECT_TRUE(instance->IsSuitableForURL(GURL("http://evernote.com")));
+  EXPECT_TRUE(instance->IsSuitableForURL(
       GURL("javascript:alert(document.location.href);")));
 
-  EXPECT_TRUE(instance->HasWrongProcessForURL(GetWebUIURL(kChromeUIGpuHost)));
+  EXPECT_FALSE(instance->IsSuitableForURL(GetWebUIURL(kChromeUIGpuHost)));
 
   DrainMessageLoop();
 }
@@ -865,7 +864,7 @@
   EXPECT_TRUE(instance->HasProcess());
 
   // Without bindings, this should look like the wrong process.
-  EXPECT_TRUE(instance->HasWrongProcessForURL(webui_url));
+  EXPECT_FALSE(instance->IsSuitableForURL(webui_url));
 
   // WebUI uses process-per-site, so another instance would normally use the
   // same process.  Make sure it doesn't use the same process if the bindings
diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc
index df2fe81..eef4ad69 100644
--- a/content/browser/web_contents/web_contents_impl_unittest.cc
+++ b/content/browser/web_contents/web_contents_impl_unittest.cc
@@ -1230,8 +1230,8 @@
 
   // DidNavigate from the second back.
   // Note that the process in instance1 is gone at this point, but we will still
-  // use instance1 and entry1 because HasWrongProcessForURL will return false
-  // when there is no process and the site URL matches.
+  // use instance1 and entry1 because IsSuitableForURL will return true when
+  // there is no process and the site URL matches.
   back_navigation2->Commit();
 
   // That should have landed us on the first entry.
diff --git a/content/browser/websockets/websocket_connector_impl.cc b/content/browser/websockets/websocket_connector_impl.cc
index c1e45c45..e091362 100644
--- a/content/browser/websockets/websocket_connector_impl.cc
+++ b/content/browser/websockets/websocket_connector_impl.cc
@@ -14,10 +14,15 @@
 
 namespace content {
 
-WebSocketConnectorImpl::WebSocketConnectorImpl(int process_id,
-                                               int frame_id,
-                                               const url::Origin& origin)
-    : process_id_(process_id), frame_id_(frame_id), origin_(origin) {}
+WebSocketConnectorImpl::WebSocketConnectorImpl(
+    int process_id,
+    int frame_id,
+    const url::Origin& origin,
+    const net::NetworkIsolationKey& network_isolation_key)
+    : process_id_(process_id),
+      frame_id_(frame_id),
+      origin_(origin),
+      network_isolation_key_(network_isolation_key) {}
 
 WebSocketConnectorImpl::~WebSocketConnectorImpl() = default;
 
@@ -33,6 +38,7 @@
   if (!process) {
     return;
   }
+
   RenderFrameHost* frame = RenderFrameHost::FromID(process_id_, frame_id_);
   const uint32_t options =
       GetContentClient()->browser()->GetWebSocketOptions(frame);
@@ -41,8 +47,8 @@
     GetContentClient()->browser()->CreateWebSocket(
         frame,
         base::BindOnce(ConnectCalledByContentBrowserClient, requested_protocols,
-                       site_for_cookies, process_id_, frame_id_, origin_,
-                       options),
+                       site_for_cookies, network_isolation_key_, process_id_,
+                       frame_id_, origin_, options),
         url, site_for_cookies, user_agent, std::move(handshake_client));
     return;
   }
@@ -52,14 +58,15 @@
         net::HttpRequestHeaders::kUserAgent, *user_agent));
   }
   process->GetStoragePartition()->GetNetworkContext()->CreateWebSocket(
-      url, requested_protocols, site_for_cookies, std::move(headers),
-      process_id_, frame_id_, origin_, options, std::move(handshake_client),
-      mojo::NullRemote(), mojo::NullRemote());
+      url, requested_protocols, site_for_cookies, network_isolation_key_,
+      std::move(headers), process_id_, frame_id_, origin_, options,
+      std::move(handshake_client), mojo::NullRemote(), mojo::NullRemote());
 }
 
 void WebSocketConnectorImpl::ConnectCalledByContentBrowserClient(
     const std::vector<std::string>& requested_protocols,
     const GURL& site_for_cookies,
+    const net::NetworkIsolationKey& network_isolation_key,
     int process_id,
     int frame_id,
     const url::Origin& origin,
@@ -77,9 +84,10 @@
     return;
   }
   process->GetStoragePartition()->GetNetworkContext()->CreateWebSocket(
-      url, requested_protocols, site_for_cookies, std::move(additional_headers),
-      process_id, frame_id, origin, options, std::move(handshake_client),
-      std::move(auth_handler), std::move(trusted_header_client));
+      url, requested_protocols, site_for_cookies, network_isolation_key,
+      std::move(additional_headers), process_id, frame_id, origin, options,
+      std::move(handshake_client), std::move(auth_handler),
+      std::move(trusted_header_client));
 }
 
 }  // namespace content
diff --git a/content/browser/websockets/websocket_connector_impl.h b/content/browser/websockets/websocket_connector_impl.h
index b865c33..d41894e 100644
--- a/content/browser/websockets/websocket_connector_impl.h
+++ b/content/browser/websockets/websocket_connector_impl.h
@@ -30,7 +30,8 @@
   //   MSG_ROUTING_NONE because they do not have a frame.
   WebSocketConnectorImpl(int process_id,
                          int frame_id,
-                         const url::Origin& origin);
+                         const url::Origin& origin,
+                         const net::NetworkIsolationKey& network_isolation_key);
   ~WebSocketConnectorImpl() override;
 
   // WebSocketConnector implementation
@@ -45,6 +46,7 @@
   static void ConnectCalledByContentBrowserClient(
       const std::vector<std::string>& requested_protocols,
       const GURL& site_for_cookies,
+      const net::NetworkIsolationKey& network_isolation_key,
       int process_id,
       int frame_id,
       const url::Origin& origin,
@@ -60,6 +62,7 @@
   const int process_id_;
   const int frame_id_;
   const url::Origin origin_;
+  const net::NetworkIsolationKey network_isolation_key_;
 };
 
 }  // namespace content
diff --git a/content/browser/worker_host/dedicated_worker_host.cc b/content/browser/worker_host/dedicated_worker_host.cc
index 7662f7d..4ab9b63a 100644
--- a/content/browser/worker_host/dedicated_worker_host.cc
+++ b/content/browser/worker_host/dedicated_worker_host.cc
@@ -381,10 +381,10 @@
                              "The parent frame has already been gone.");
     return;
   }
-  mojo::MakeSelfOwnedReceiver(
-      std::make_unique<WebSocketConnectorImpl>(
-          worker_process_id_, ancestor_render_frame_id_, origin_),
-      std::move(receiver));
+  mojo::MakeSelfOwnedReceiver(std::make_unique<WebSocketConnectorImpl>(
+                                  worker_process_id_, ancestor_render_frame_id_,
+                                  origin_, network_isolation_key_),
+                              std::move(receiver));
 }
 
 void DedicatedWorkerHost::CreateNestedDedicatedWorker(
diff --git a/content/common/frame.mojom b/content/common/frame.mojom
index b7ef358..cacab917 100644
--- a/content/common/frame.mojom
+++ b/content/common/frame.mojom
@@ -517,26 +517,6 @@
       int32 line_number,
       mojo_base.mojom.String16 source_id);
 
-  // Sent when the renderer fails a provisional load with an error.
-  //
-  // |url| is the URL that the error is reported for.
-  //
-  // |error_code| is a net::Error code as reported in the
-  // DidFailProvisionalLoad callback.
-  //
-  // |error_description| is an error message generated from the error_code.
-  // This can be an empty string if we were unable to find a meaningful
-  // description.
-  //
-  // |showing_repost_interstitial| is true if the failure is the result of
-  // navigating to a POST again and we're going to show the POST interstitial.
-  // TODO(https://crbug.com/963806): Delete this method.
-  DidFailProvisionalLoadWithError(
-      url.mojom.Url url,
-      int32 error_code,
-      mojo_base.mojom.String16 error_description,
-      bool showing_repost_interstitial);
-
   // Sent when the renderer fails to load with an error.
   DidFailLoadWithError(
       url.mojom.Url url,
diff --git a/content/common/media/renderer_audio_input_stream_factory.mojom b/content/common/media/renderer_audio_input_stream_factory.mojom
index a6120da..f6ba358e 100644
--- a/content/common/media/renderer_audio_input_stream_factory.mojom
+++ b/content/common/media/renderer_audio_input_stream_factory.mojom
@@ -44,7 +44,7 @@
   // process hosting it crashing, this function should be called again with a
   // fresh stream.
   StreamCreated(
-      media.mojom.AudioInputStream stream,
+      pending_remote<media.mojom.AudioInputStream> stream,
       media.mojom.AudioInputStreamClient& client_request,
       media.mojom.ReadOnlyAudioDataPipe data_pipe,
       bool initially_muted,
diff --git a/content/public/browser/audio_loopback_stream_creator.h b/content/public/browser/audio_loopback_stream_creator.h
index fe8a9ff..be98a320 100644
--- a/content/public/browser/audio_loopback_stream_creator.h
+++ b/content/public/browser/audio_loopback_stream_creator.h
@@ -9,6 +9,7 @@
 #include "content/common/content_export.h"
 #include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "media/mojo/mojom/audio_input_stream.mojom.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 
 namespace media {
 class AudioParameters;
@@ -30,7 +31,7 @@
 
   // The callback that is called when the requested stream is created.
   using StreamCreatedCallback = base::RepeatingCallback<void(
-      media::mojom::AudioInputStreamPtr stream,
+      mojo::PendingRemote<media::mojom::AudioInputStream> stream,
       media::mojom::AudioInputStreamClientRequest client_request,
       media::mojom::ReadOnlyAudioDataPipePtr data_pipe)>;
 
diff --git a/content/public/browser/render_process_host.h b/content/public/browser/render_process_host.h
index c69667c5..6eb36c59 100644
--- a/content/public/browser/render_process_host.h
+++ b/content/public/browser/render_process_host.h
@@ -14,7 +14,6 @@
 
 #include "base/callback_list.h"
 #include "base/containers/id_map.h"
-#include "base/optional.h"
 #include "base/process/kill.h"
 #include "base/process/process.h"
 #include "base/supports_user_data.h"
@@ -447,10 +446,8 @@
   // creating the factory. All resource requests through this factory will
   // propagate the key to the network stack so that resources with different
   // keys do not share network resources like the http cache.
-  //
-  // TODO(lukasza, nasko): https://crbug.com/888079: Make |origin| mandatory.
   virtual void CreateURLLoaderFactory(
-      const base::Optional<url::Origin>& origin,
+      const url::Origin& origin,
       network::mojom::CrossOriginEmbedderPolicy embedder_policy,
       const WebPreferences* preferences,
       const net::NetworkIsolationKey& network_isolation_key,
diff --git a/content/public/test/browser_test_base.cc b/content/public/test/browser_test_base.cc
index eff7bff..d3eb266 100644
--- a/content/public/test/browser_test_base.cc
+++ b/content/public/test/browser_test_base.cc
@@ -19,7 +19,6 @@
 #include "base/i18n/icu_util.h"
 #include "base/location.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/message_loop/message_loop_current.h"
 #include "base/rand_util.h"
 #include "base/run_loop.h"
diff --git a/content/public/test/mock_render_process_host.cc b/content/public/test/mock_render_process_host.cc
index 8445d70..a7fb73f 100644
--- a/content/public/test/mock_render_process_host.cc
+++ b/content/public/test/mock_render_process_host.cc
@@ -419,7 +419,7 @@
 }
 
 void MockRenderProcessHost::CreateURLLoaderFactory(
-    const base::Optional<url::Origin>& origin,
+    const url::Origin& origin,
     network::mojom::CrossOriginEmbedderPolicy embedder_policy,
     const WebPreferences* preferences,
     const net::NetworkIsolationKey& network_isolation_key,
diff --git a/content/public/test/mock_render_process_host.h b/content/public/test/mock_render_process_host.h
index d28777f..b7068ddc 100644
--- a/content/public/test/mock_render_process_host.h
+++ b/content/public/test/mock_render_process_host.h
@@ -156,7 +156,7 @@
   void Resume() override;
   mojom::Renderer* GetRendererInterface() override;
   void CreateURLLoaderFactory(
-      const base::Optional<url::Origin>& origin,
+      const url::Origin& origin,
       network::mojom::CrossOriginEmbedderPolicy embedder_policy,
       const WebPreferences* preferences,
       const net::NetworkIsolationKey& network_isolation_key,
diff --git a/content/public/test/navigation_simulator.h b/content/public/test/navigation_simulator.h
index 19aed76..dcca2ee 100644
--- a/content/public/test/navigation_simulator.h
+++ b/content/public/test/navigation_simulator.h
@@ -196,6 +196,11 @@
   // Simulates the commit of a navigation or an error page aborting.
   virtual void AbortCommit() = 0;
 
+  // Simulates aborting the navigation from the renderer, e.g. window.stop(),
+  // before it was committed in the renderer.
+  // Note: this is only valid for renderer-initiated navigations.
+  virtual void AbortFromRenderer() = 0;
+
   // Simulates the navigation failing with the error code |error_code| and
   // response headers |response_headers|.
   virtual void FailWithResponseHeaders(
diff --git a/content/public/test/test_browser_thread.cc b/content/public/test/test_browser_thread.cc
index d12612c..b8d007e 100644
--- a/content/public/test/test_browser_thread.cc
+++ b/content/public/test/test_browser_thread.cc
@@ -6,7 +6,6 @@
 
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
-#include "base/message_loop/message_loop.h"
 #include "base/threading/thread.h"
 #include "build/build_config.h"
 #include "content/browser/browser_process_sub_thread.h"
diff --git a/content/renderer/media/audio/mojo_audio_input_ipc.cc b/content/renderer/media/audio/mojo_audio_input_ipc.cc
index 22398430..a8a1ced 100644
--- a/content/renderer/media/audio/mojo_audio_input_ipc.cc
+++ b/content/renderer/media/audio/mojo_audio_input_ipc.cc
@@ -109,7 +109,7 @@
 }
 
 void MojoAudioInputIPC::StreamCreated(
-    media::mojom::AudioInputStreamPtr stream,
+    mojo::PendingRemote<media::mojom::AudioInputStream> stream,
     media::mojom::AudioInputStreamClientRequest stream_client_request,
     media::mojom::ReadOnlyAudioDataPipePtr data_pipe,
     bool initially_muted,
@@ -122,7 +122,7 @@
   UMA_HISTOGRAM_TIMES("Media.Audio.Render.InputDeviceStreamCreationTime",
                       base::TimeTicks::Now() - stream_creation_start_time_);
 
-  stream_ = std::move(stream);
+  stream_.Bind(std::move(stream));
   stream_client_binding_.Bind(std::move(stream_client_request));
 
   // Keep the stream_id, if we get one. Regular input stream have stream ids,
diff --git a/content/renderer/media/audio/mojo_audio_input_ipc.h b/content/renderer/media/audio/mojo_audio_input_ipc.h
index e72643b1..dfe29668 100644
--- a/content/renderer/media/audio/mojo_audio_input_ipc.h
+++ b/content/renderer/media/audio/mojo_audio_input_ipc.h
@@ -76,7 +76,7 @@
 
  private:
   void StreamCreated(
-      media::mojom::AudioInputStreamPtr stream,
+      mojo::PendingRemote<media::mojom::AudioInputStream> stream,
       media::mojom::AudioInputStreamClientRequest stream_client_request,
       media::mojom::ReadOnlyAudioDataPipePtr data_pipe,
       bool initially_muted,
@@ -91,7 +91,7 @@
   StreamCreatorCB stream_creator_;
   StreamAssociatorCB stream_associator_;
 
-  media::mojom::AudioInputStreamPtr stream_;
+  mojo::Remote<media::mojom::AudioInputStream> stream_;
   mojo::Remote<audio::mojom::AudioProcessorControls> processor_controls_;
   // Initialized on StreamCreated.
   base::Optional<base::UnguessableToken> stream_id_;
diff --git a/content/renderer/media/audio/mojo_audio_input_ipc_unittest.cc b/content/renderer/media/audio/mojo_audio_input_ipc_unittest.cc
index ae3a58d..1ccc4747 100644
--- a/content/renderer/media/audio/mojo_audio_input_ipc_unittest.cc
+++ b/content/renderer/media/audio/mojo_audio_input_ipc_unittest.cc
@@ -17,9 +17,9 @@
 #include "media/audio/audio_device_description.h"
 #include "media/base/audio_parameters.h"
 #include "media/mojo/mojom/audio_data_pipe.mojom.h"
-#include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/system/buffer.h"
 #include "mojo/public/cpp/system/platform_handle.h"
@@ -79,7 +79,9 @@
  public:
   FakeStreamCreator(media::mojom::AudioInputStream* stream,
                     bool initially_muted)
-      : stream_(stream), binding_(stream_), initially_muted_(initially_muted) {}
+      : stream_(stream),
+        receiver_(stream_),
+        initially_muted_(initially_muted) {}
 
   void Create(const media::AudioSourceParameters& source_params,
               mojo::PendingRemote<mojom::RendererAudioInputStreamFactoryClient>
@@ -89,18 +91,17 @@
               const media::AudioParameters& params,
               bool automatic_gain_control,
               uint32_t total_segments) {
-    EXPECT_FALSE(binding_.is_bound());
+    EXPECT_FALSE(receiver_.is_bound());
     EXPECT_NE(stream_, nullptr);
     EXPECT_EQ(source_params.session_id, SourceParams().session_id);
     factory_client_.reset();
     factory_client_.Bind(std::move(factory_client));
-    media::mojom::AudioInputStreamPtr stream_ptr;
-    binding_.Bind(mojo::MakeRequest(&stream_ptr));
     base::CancelableSyncSocket foreign_socket;
     EXPECT_TRUE(
         base::CancelableSyncSocket::CreatePair(&socket_, &foreign_socket));
     factory_client_->StreamCreated(
-        std::move(stream_ptr), mojo::MakeRequest(&stream_client_),
+        receiver_.BindNewPipeAndPassRemote(),
+        mojo::MakeRequest(&stream_client_),
         {base::in_place,
          base::ReadOnlySharedMemoryRegion::Create(kMemoryLength).region,
          mojo::WrapPlatformFile(foreign_socket.Release())},
@@ -113,8 +114,7 @@
   }
 
   void Rearm() {
-    if (binding_.is_bound())
-      binding_.Unbind();
+    receiver_.reset();
     socket_.Close();
   }
 
@@ -127,7 +127,7 @@
   media::mojom::AudioInputStream* stream_;
   media::mojom::AudioInputStreamClientPtr stream_client_;
   mojo::Remote<mojom::RendererAudioInputStreamFactoryClient> factory_client_;
-  mojo::Binding<media::mojom::AudioInputStream> binding_;
+  mojo::Receiver<media::mojom::AudioInputStream> receiver_;
   bool initially_muted_;
   base::CancelableSyncSocket socket_;
 };
diff --git a/content/renderer/media/webrtc/rtc_peer_connection_handler.cc b/content/renderer/media/webrtc/rtc_peer_connection_handler.cc
index c8f2fcd1..741052b 100644
--- a/content/renderer/media/webrtc/rtc_peer_connection_handler.cc
+++ b/content/renderer/media/webrtc/rtc_peer_connection_handler.cc
@@ -1270,7 +1270,10 @@
       FROM_HERE,
       base::BindOnce(
           &RunClosureWithTrace,
-          base::Bind(&webrtc::PeerConnectionInterface::SetLocalDescription,
+          base::Bind(static_cast<void (webrtc::PeerConnectionInterface::*)(
+                         webrtc::SetSessionDescriptionObserver*,
+                         webrtc::SessionDescriptionInterface*)>(
+                         &webrtc::PeerConnectionInterface::SetLocalDescription),
                      native_peer_connection_,
                      base::RetainedRef(webrtc_observer),
                      base::Unretained(native_desc)),
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 5260a032..7afce45 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -3745,16 +3745,6 @@
     // For renderer initiated navigations, we send out a
     // DidFailProvisionalLoad() notification.
     NotifyObserversOfFailedProvisionalLoad();
-
-    // |browser_side_navigation_pending_| can be false if we are committing
-    // failed navigation in a different process than it was started, e.g.
-    // an error page which is isolated.
-    if (browser_side_navigation_pending_) {
-      // TODO(dgozman): why do we need to notify browser in response
-      // to it's own request?
-      SendFailedProvisionalLoad(navigation_params->http_method.Ascii(), error,
-                                frame_);
-    }
   }
 
   if (fallback_result != blink::WebNavigationControl::NoFallbackContent) {
@@ -7012,19 +7002,6 @@
       routing_id_, SingleHistoryItemToPageState(current_history_item_)));
 }
 
-void RenderFrameImpl::SendFailedProvisionalLoad(const std::string& http_method,
-                                                const WebURLError& error,
-                                                blink::WebLocalFrame* frame) {
-  bool show_repost_interstitial =
-      error.reason() == net::ERR_CACHE_MISS && http_method == "POST";
-
-  base::string16 error_description;
-  GetContentClient()->renderer()->GetErrorDescription(error, http_method,
-                                                      &error_description);
-  GetFrameHost()->DidFailProvisionalLoadWithError(
-      error.url(), error.reason(), error_description, show_repost_interstitial);
-}
-
 bool RenderFrameImpl::ShouldDisplayErrorPageForFailedLoad(
     int error_code,
     const GURL& unreachable_url) {
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index eb32a30..aa40ac9 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -1278,12 +1278,6 @@
                      std::string* data,
                      GURL* base_url);
 
-  // Sends a proper DidFailProvisionalLoadWithError mojo IPC for
-  // the failed provisional load.
-  void SendFailedProvisionalLoad(const std::string& http_method,
-                                 const blink::WebURLError& error,
-                                 blink::WebLocalFrame* frame);
-
   bool ShouldDisplayErrorPageForFailedLoad(int error_code,
                                            const GURL& unreachable_url);
 
diff --git a/content/renderer/service_worker/service_worker_provider_context_unittest.cc b/content/renderer/service_worker/service_worker_provider_context_unittest.cc
index e62a299..7e1bddcb 100644
--- a/content/renderer/service_worker/service_worker_provider_context_unittest.cc
+++ b/content/renderer/service_worker/service_worker_provider_context_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
 #include "content/child/thread_safe_sender.h"
diff --git a/content/test/data/accessibility/aria/aria-generic-expected-android.txt b/content/test/data/accessibility/aria/aria-generic-expected-android.txt
new file mode 100644
index 0000000..5d817e3
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-generic-expected-android.txt
@@ -0,0 +1,2 @@
+android.webkit.WebView focusable focused scrollable
+++android.view.View name='content'
diff --git a/content/test/data/accessibility/aria/aria-generic-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-generic-expected-auralinux.txt
new file mode 100644
index 0000000..a2a9055
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-generic-expected-auralinux.txt
@@ -0,0 +1,3 @@
+[document web]
+++[section]
+++++[text] name='content'
diff --git a/content/test/data/accessibility/aria/aria-generic-expected-blink.txt b/content/test/data/accessibility/aria/aria-generic-expected-blink.txt
new file mode 100644
index 0000000..31110018
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-generic-expected-blink.txt
@@ -0,0 +1,5 @@
+rootWebArea
+++genericContainer ignored
+++++genericContainer
+++++++staticText name='content'
+++++++++inlineTextBox name='content'
diff --git a/content/test/data/accessibility/aria/aria-generic-expected-mac.txt b/content/test/data/accessibility/aria/aria-generic-expected-mac.txt
new file mode 100644
index 0000000..97dada5
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-generic-expected-mac.txt
@@ -0,0 +1,3 @@
+AXWebArea
+++AXGroup
+++++AXStaticText AXValue='content'
diff --git a/content/test/data/accessibility/aria/aria-generic-expected-uia-win.txt b/content/test/data/accessibility/aria/aria-generic-expected-uia-win.txt
new file mode 100644
index 0000000..abe00ed
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-generic-expected-uia-win.txt
@@ -0,0 +1,3 @@
+document
+++group
+++++description Name='content'
diff --git a/content/test/data/accessibility/aria/aria-generic-expected-win.txt b/content/test/data/accessibility/aria/aria-generic-expected-win.txt
new file mode 100644
index 0000000..b53abf6
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-generic-expected-win.txt
@@ -0,0 +1,3 @@
+ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE
+++IA2_ROLE_SECTION
+++++ROLE_SYSTEM_STATICTEXT name='content'
diff --git a/content/test/data/accessibility/aria/aria-generic.html b/content/test/data/accessibility/aria/aria-generic.html
new file mode 100644
index 0000000..99c0a67
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-generic.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<html>
+<body>
+  <fieldset role="generic">content</fieldset>
+</body>
+</html>
diff --git a/content/test/data/browsing_data/site_data.html b/content/test/data/browsing_data/site_data.html
index 855e262..40150ea 100644
--- a/content/test/data/browsing_data/site_data.html
+++ b/content/test/data/browsing_data/site_data.html
@@ -9,8 +9,13 @@
     domAutomationController.send(false);
   }
 
+  function isHttps_() {
+    return location.protocol === 'https:';
+  }
+
   function setCookie() {
-    document.cookie = 'foo=bar; Max-Age=1000';
+    const samesite_none_secure = '; SameSite=None; Secure';
+    document.cookie = 'foo=bar; Max-Age=1000' + (isHttps_() ? samesite_none_secure : '');
     success_();
   }
 
@@ -19,7 +24,8 @@
   }
 
   function setSessionCookie() {
-    document.cookie = 'bar=session';
+    const samesite_none_secure = '; SameSite=None; Secure';
+    document.cookie = 'bar=session' + (isHttps_() ? samesite_none_secure : '');
     success_();
   }
 
@@ -155,4 +161,4 @@
   and BrowsingDataRemoverBrowserTest::SetDataForType.
 </body>
 
-</html>
\ No newline at end of file
+</html>
diff --git a/content/test/navigation_simulator_impl.cc b/content/test/navigation_simulator_impl.cc
index 43485163..0c05800 100644
--- a/content/test/navigation_simulator_impl.cc
+++ b/content/test/navigation_simulator_impl.cc
@@ -660,6 +660,23 @@
   CHECK_EQ(1, num_did_finish_navigation_called_);
 }
 
+void NavigationSimulatorImpl::AbortFromRenderer() {
+  CHECK(!browser_initiated_)
+      << "NavigationSimulatorImpl::AbortFromRenderer cannot be called for "
+         "browser-initiated navigation.";
+  CHECK_LE(state_, FAILED)
+      << "NavigationSimulatorImpl::AbortFromRenderer cannot be called after "
+         "NavigationSimulatorImpl::Commit or  "
+         "NavigationSimulatorImpl::CommitErrorPage.";
+
+  was_aborted_ = true;
+  DCHECK(IsPerNavigationMojoInterfaceEnabled());
+  request_->RendererAbortedNavigationForTesting();
+  state_ = FINISHED;
+
+  CHECK_EQ(1, num_did_finish_navigation_called_);
+}
+
 void NavigationSimulatorImpl::FailWithResponseHeaders(
     int error_code,
     scoped_refptr<net::HttpResponseHeaders> response_headers) {
@@ -1019,6 +1036,8 @@
   if (request == request_) {
     num_did_finish_navigation_called_++;
     request_ = nullptr;
+    if (was_aborted_)
+      CHECK_EQ(net::ERR_ABORTED, request->GetNetErrorCode());
   }
 }
 
@@ -1124,24 +1143,13 @@
       InitiatorCSPInfo(should_check_main_world_csp_,
                        std::vector<ContentSecurityPolicy>(), base::nullopt);
 
-  if (IsPerNavigationMojoInterfaceEnabled()) {
-    mojo::PendingAssociatedRemote<mojom::NavigationClient>
-        navigation_client_remote;
-    navigation_client_receiver_ =
-        navigation_client_remote.InitWithNewEndpointAndPassReceiver();
-    render_frame_host_->frame_host_receiver_for_testing()
-        .impl()
-        ->BeginNavigation(std::move(common_params), std::move(begin_params),
-                          mojo::NullRemote(),
-                          std::move(navigation_client_remote),
-                          mojo::NullRemote());
-  } else {
-    render_frame_host_->frame_host_receiver_for_testing()
-        .impl()
-        ->BeginNavigation(std::move(common_params), std::move(begin_params),
-                          mojo::NullRemote(), mojo::NullAssociatedRemote(),
-                          mojo::NullRemote());
-  }
+  mojo::PendingAssociatedRemote<mojom::NavigationClient>
+      navigation_client_remote;
+  navigation_client_receiver_ =
+      navigation_client_remote.InitWithNewEndpointAndPassReceiver();
+  render_frame_host_->frame_host_receiver_for_testing().impl()->BeginNavigation(
+      std::move(common_params), std::move(begin_params), mojo::NullRemote(),
+      std::move(navigation_client_remote), mojo::NullRemote());
 
   NavigationRequest* request =
       render_frame_host_->frame_tree_node()->navigation_request();
diff --git a/content/test/navigation_simulator_impl.h b/content/test/navigation_simulator_impl.h
index 21450f3..72a3603 100644
--- a/content/test/navigation_simulator_impl.h
+++ b/content/test/navigation_simulator_impl.h
@@ -70,6 +70,7 @@
   void ReadyToCommit() override;
   void Commit() override;
   void AbortCommit() override;
+  void AbortFromRenderer() override;
   void FailWithResponseHeaders(
       int error_code,
       scoped_refptr<net::HttpResponseHeaders> response_headers) override;
@@ -311,6 +312,7 @@
   bool should_replace_current_entry_ = false;
   base::Optional<bool> did_create_new_entry_;
   base::Optional<bool> intended_as_new_entry_;
+  bool was_aborted_ = false;
 
   // These are used to sanity check the content/public/ API calls emitted as
   // part of the navigation.
diff --git a/content/test/test_render_frame.cc b/content/test/test_render_frame.cc
index a9589e5..0e47ec6 100644
--- a/content/test/test_render_frame.cc
+++ b/content/test/test_render_frame.cc
@@ -211,12 +211,6 @@
     }
   }
 
-  void DidFailProvisionalLoadWithError(
-      const GURL& url,
-      int error_code,
-      const base::string16& error_description,
-      bool showing_repost_interstitial) override {}
-
   void DidFailLoadWithError(const GURL& url,
                             int error_code,
                             const base::string16& error_description) override {}
@@ -278,17 +272,6 @@
 void TestRenderFrame::Navigate(network::mojom::URLResponseHeadPtr head,
                                mojom::CommonNavigationParamsPtr common_params,
                                mojom::CommitNavigationParamsPtr commit_params) {
-  if (!IsPerNavigationMojoInterfaceEnabled()) {
-    CommitNavigation(std::move(common_params), std::move(commit_params),
-                     std::move(head), mojo::ScopedDataPipeConsumerHandle(),
-                     network::mojom::URLLoaderClientEndpointsPtr(),
-                     std::make_unique<blink::URLLoaderFactoryBundleInfo>(),
-                     base::nullopt,
-                     blink::mojom::ControllerServiceWorkerInfoPtr(),
-                     blink::mojom::ServiceWorkerProviderInfoForClientPtr(),
-                     mojo::NullRemote() /* prefetch_loader_factory */,
-                     base::UnguessableToken::Create(), base::DoNothing());
-  } else {
     mock_navigation_client_.reset();
     BindNavigationClient(
         mock_navigation_client_
@@ -304,7 +287,6 @@
         base::UnguessableToken::Create(),
         base::BindOnce(&MockFrameHost::DidCommitProvisionalLoad,
                        base::Unretained(mock_frame_host_.get())));
-  }
 }
 
 void TestRenderFrame::Navigate(mojom::CommonNavigationParamsPtr common_params,
@@ -318,22 +300,16 @@
     mojom::CommitNavigationParamsPtr commit_params,
     int error_code,
     const base::Optional<std::string>& error_page_content) {
-  if (!IsPerNavigationMojoInterfaceEnabled()) {
-    CommitFailedNavigation(std::move(common_params), std::move(commit_params),
-                           false /* has_stale_copy_in_cache */, error_code,
-                           error_page_content, nullptr, base::DoNothing());
-  } else {
-    mock_navigation_client_.reset();
-    BindNavigationClient(
-        mock_navigation_client_
-            .BindNewEndpointAndPassDedicatedReceiverForTesting());
-    mock_navigation_client_->CommitFailedNavigation(
-        std::move(common_params), std::move(commit_params),
-        false /* has_stale_copy_in_cache */, error_code, error_page_content,
-        nullptr,
-        base::BindOnce(&MockFrameHost::DidCommitProvisionalLoad,
-                       base::Unretained(mock_frame_host_.get())));
-  }
+  mock_navigation_client_.reset();
+  BindNavigationClient(
+      mock_navigation_client_
+          .BindNewEndpointAndPassDedicatedReceiverForTesting());
+  mock_navigation_client_->CommitFailedNavigation(
+      std::move(common_params), std::move(commit_params),
+      false /* has_stale_copy_in_cache */, error_code, error_page_content,
+      nullptr,
+      base::BindOnce(&MockFrameHost::DidCommitProvisionalLoad,
+                     base::Unretained(mock_frame_host_.get())));
 }
 
 void TestRenderFrame::SwapOut(
diff --git a/content/test/test_render_frame_host.cc b/content/test/test_render_frame_host.cc
index 2eabc97..b76bd451 100644
--- a/content/test/test_render_frame_host.cc
+++ b/content/test/test_render_frame_host.cc
@@ -115,15 +115,6 @@
   return true;
 }
 
-void TestRenderFrameHost::DidFailProvisionalLoadWithError(
-    const GURL& url,
-    int error_code,
-    const base::string16& error_description,
-    bool showing_repost_interstitial) {
-  RenderFrameHostImpl::DidFailProvisionalLoadWithError(
-      url, error_code, error_description, showing_repost_interstitial);
-}
-
 void TestRenderFrameHost::DidFailLoadWithError(
     const GURL& url,
     int error_code,
@@ -353,17 +344,11 @@
 
   mojo::PendingAssociatedRemote<mojom::NavigationClient>
       navigation_client_remote;
-  if (IsPerNavigationMojoInterfaceEnabled()) {
-    GetRemoteAssociatedInterfaces()->GetInterface(
-        navigation_client_remote.InitWithNewEndpointAndPassReceiver());
-    BeginNavigation(std::move(common_params), std::move(begin_params),
-                    mojo::NullRemote(), std::move(navigation_client_remote),
-                    mojo::NullRemote());
-  } else {
-    BeginNavigation(std::move(common_params), std::move(begin_params),
-                    mojo::NullRemote(), mojo::NullAssociatedRemote(),
-                    mojo::NullRemote());
-  }
+  GetRemoteAssociatedInterfaces()->GetInterface(
+      navigation_client_remote.InitWithNewEndpointAndPassReceiver());
+  BeginNavigation(std::move(common_params), std::move(begin_params),
+                  mojo::NullRemote(), std::move(navigation_client_remote),
+                  mojo::NullRemote());
 }
 
 void TestRenderFrameHost::DidChangeOpener(int opener_routing_id) {
diff --git a/content/test/test_render_frame_host.h b/content/test/test_render_frame_host.h
index 87304f9..6924adf 100644
--- a/content/test/test_render_frame_host.h
+++ b/content/test/test_render_frame_host.h
@@ -69,11 +69,6 @@
   bool IsTestRenderFrameHost() const override;
 
   // Public overrides to expose RenderFrameHostImpl's mojo methods to tests.
-  void DidFailProvisionalLoadWithError(
-      const GURL& url,
-      int error_code,
-      const base::string16& error_description,
-      bool showing_repost_interstitial) override;
   void DidFailLoadWithError(const GURL& url,
                             int error_code,
                             const base::string16& error_description) override;
diff --git a/extensions/browser/api/system_memory/system_memory_apitest.cc b/extensions/browser/api/system_memory/system_memory_apitest.cc
index 7b84452..eaee59a 100644
--- a/extensions/browser/api/system_memory/system_memory_apitest.cc
+++ b/extensions/browser/api/system_memory/system_memory_apitest.cc
@@ -2,7 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/message_loop/message_loop.h"
 #include "extensions/browser/api/system_memory/memory_info_provider.h"
 #include "extensions/shell/test/shell_apitest.h"
 
diff --git a/extensions/browser/api/system_storage/system_storage_apitest.cc b/extensions/browser/api/system_storage/system_storage_apitest.cc
index f99d181..b7b66ce1 100644
--- a/extensions/browser/api/system_storage/system_storage_apitest.cc
+++ b/extensions/browser/api/system_storage/system_storage_apitest.cc
@@ -6,7 +6,6 @@
 
 #include <vector>
 
-#include "base/message_loop/message_loop.h"
 #include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/storage_monitor/storage_monitor.h"
diff --git a/fuchsia/engine/test/web_engine_test_launcher.cc b/fuchsia/engine/test/web_engine_test_launcher.cc
index 169667f..9109588 100644
--- a/fuchsia/engine/test/web_engine_test_launcher.cc
+++ b/fuchsia/engine/test/web_engine_test_launcher.cc
@@ -5,7 +5,6 @@
 #include <utility>
 
 #include "base/fuchsia/fuchsia_logging.h"
-#include "base/message_loop/message_loop.h"
 #include "base/test/launcher/test_launcher.h"
 #include "base/test/test_suite.h"
 #include "content/public/common/content_switches.h"
diff --git a/google_apis/drive/base_requests_unittest.cc b/google_apis/drive/base_requests_unittest.cc
index 8f6ac331..32a5ef0 100644
--- a/google_apis/drive/base_requests_unittest.cc
+++ b/google_apis/drive/base_requests_unittest.cc
@@ -10,7 +10,6 @@
 #include <utility>
 
 #include "base/bind.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
 #include "base/values.h"
diff --git a/google_apis/drive/drive_api_requests_unittest.cc b/google_apis/drive/drive_api_requests_unittest.cc
index d52ddbf..62449b0 100644
--- a/google_apis/drive/drive_api_requests_unittest.cc
+++ b/google_apis/drive/drive_api_requests_unittest.cc
@@ -16,7 +16,6 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/json/json_reader.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
diff --git a/google_apis/drive/files_list_request_runner_unittest.cc b/google_apis/drive/files_list_request_runner_unittest.cc
index 50a5e75..bb04f154 100644
--- a/google_apis/drive/files_list_request_runner_unittest.cc
+++ b/google_apis/drive/files_list_request_runner_unittest.cc
@@ -8,7 +8,6 @@
 #include <utility>
 
 #include "base/bind.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/sequenced_task_runner.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/google_apis/gaia/gaia_auth_fetcher_unittest.cc b/google_apis/gaia/gaia_auth_fetcher_unittest.cc
index 9f93033..2b4be85 100644
--- a/google_apis/gaia/gaia_auth_fetcher_unittest.cc
+++ b/google_apis/gaia/gaia_auth_fetcher_unittest.cc
@@ -11,7 +11,6 @@
 #include "base/bind.h"
 #include "base/json/json_reader.h"
 #include "base/memory/ref_counted.h"
-#include "base/message_loop/message_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/bind_test_util.h"
diff --git a/google_apis/gcm/base/socket_stream_unittest.cc b/google_apis/gcm/base/socket_stream_unittest.cc
index a8d8b5c..dde40081 100644
--- a/google_apis/gcm/base/socket_stream_unittest.cc
+++ b/google_apis/gcm/base/socket_stream_unittest.cc
@@ -12,7 +12,6 @@
 #include <vector>
 
 #include "base/bind.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/stl_util.h"
 #include "base/strings/string_piece.h"
diff --git a/google_apis/gcm/engine/connection_factory_impl_unittest.cc b/google_apis/gcm/engine/connection_factory_impl_unittest.cc
index dfd9032..c0229a2 100644
--- a/google_apis/gcm/engine/connection_factory_impl_unittest.cc
+++ b/google_apis/gcm/engine/connection_factory_impl_unittest.cc
@@ -9,7 +9,6 @@
 #include <utility>
 
 #include "base/bind.h"
-#include "base/message_loop/message_loop.h"
 #include "base/optional.h"
 #include "base/run_loop.h"
 #include "base/test/simple_test_tick_clock.h"
diff --git a/google_apis/gcm/engine/connection_handler_impl_unittest.cc b/google_apis/gcm/engine/connection_handler_impl_unittest.cc
index 24bd193..35675a2 100644
--- a/google_apis/gcm/engine/connection_handler_impl_unittest.cc
+++ b/google_apis/gcm/engine/connection_handler_impl_unittest.cc
@@ -11,7 +11,6 @@
 #include <utility>
 
 #include "base/bind.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/test/bind_test_util.h"
diff --git a/ios/chrome/browser/browsing_data/browsing_data_features.cc b/ios/chrome/browser/browsing_data/browsing_data_features.cc
index 991ec07..cc8a4a3 100644
--- a/ios/chrome/browser/browsing_data/browsing_data_features.cc
+++ b/ios/chrome/browser/browsing_data/browsing_data_features.cc
@@ -8,7 +8,7 @@
                                             base::FEATURE_ENABLED_BY_DEFAULT};
 
 const base::Feature kWebClearBrowsingData{"WebClearBrowsingData",
-                                          base::FEATURE_DISABLED_BY_DEFAULT};
+                                          base::FEATURE_ENABLED_BY_DEFAULT};
 
 bool IsNewClearBrowsingDataUIEnabled() {
   return base::FeatureList::IsEnabled(kNewClearBrowsingDataUI);
diff --git a/ios/chrome/browser/net/retryable_url_fetcher_unittest.mm b/ios/chrome/browser/net/retryable_url_fetcher_unittest.mm
index 99a15f7..a0458bb 100644
--- a/ios/chrome/browser/net/retryable_url_fetcher_unittest.mm
+++ b/ios/chrome/browser/net/retryable_url_fetcher_unittest.mm
@@ -4,7 +4,6 @@
 
 #import "ios/chrome/browser/net/retryable_url_fetcher.h"
 
-#include "base/message_loop/message_loop.h"
 #import "base/strings/sys_string_conversions.h"
 #include "base/test/task_environment.h"
 #include "ios/web/public/test/test_web_thread.h"
diff --git a/ios/chrome/browser/ntp_tiles/BUILD.gn b/ios/chrome/browser/ntp_tiles/BUILD.gn
index d0f3ac650..067ee70 100644
--- a/ios/chrome/browser/ntp_tiles/BUILD.gn
+++ b/ios/chrome/browser/ntp_tiles/BUILD.gn
@@ -31,7 +31,28 @@
   ]
 }
 
+source_set("eg2_tests") {
+  defines = [ "CHROME_EARL_GREY_2" ]
+  configs += [
+    "//build/config/compiler:enable_arc",
+    "//build/config/ios:xctest_config",
+  ]
+  testonly = true
+  sources = [
+    "ntp_tiles_egtest.mm",
+  ]
+  deps = [
+    "//ios/chrome/test/earl_grey:eg_test_support+eg2",
+    "//ios/testing/earl_grey:eg_test_support+eg2",
+    "//ios/third_party/earl_grey2:test_lib",
+    "//ios/web/public/test/http_server:http_server",
+    "//net",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
 source_set("eg_tests") {
+  defines = [ "CHROME_EARL_GREY_1" ]
   testonly = true
   configs += [ "//build/config/compiler:enable_arc" ]
   sources = [
@@ -43,6 +64,7 @@
     "//components/ntp_tiles:ntp_tiles",
     "//ios/chrome/test/app:test_support",
     "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing/earl_grey:earl_grey_support",
     "//ios/web/public/test/http_server:http_server",
   ]
 }
diff --git a/ios/chrome/browser/ntp_tiles/ntp_tiles_egtest.mm b/ios/chrome/browser/ntp_tiles/ntp_tiles_egtest.mm
index 6902a47..a742238 100644
--- a/ios/chrome/browser/ntp_tiles/ntp_tiles_egtest.mm
+++ b/ios/chrome/browser/ntp_tiles/ntp_tiles_egtest.mm
@@ -2,13 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import <EarlGrey/EarlGrey.h>
-
-#import "ios/chrome/test/app/chrome_test_util.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
+#import "ios/testing/earl_grey/earl_grey_test.h"
 #import "ios/web/public/test/http_server/html_response_provider.h"
 #import "ios/web/public/test/http_server/html_response_provider_impl.h"
 #import "ios/web/public/test/http_server/http_server.h"
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/card_view_controller_egtest.mm b/ios/chrome/browser/ui/autofill/manual_fill/card_view_controller_egtest.mm
index c3e8a639..d9153ee 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/card_view_controller_egtest.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/card_view_controller_egtest.mm
@@ -174,6 +174,18 @@
       autofill::PersonalDataManagerFactory::GetForBrowserState(
           chrome_test_util::GetOriginalBrowserState());
   _personalDataManager->SetSyncingForTest(true);
+
+  for (autofill::CreditCard* card :
+       _personalDataManager->GetLocalCreditCards()) {
+    _personalDataManager->RemoveByGUID(card->guid());
+  }
+  GREYAssert(base::test::ios::WaitUntilConditionOrTimeout(
+                 kPDMMaxDelaySeconds,
+                 ^bool() {
+                   return _personalDataManager->GetLocalCreditCards().size() ==
+                          0;
+                 }),
+             @"Failed to remove local credit cards.");
 }
 
 - (void)tearDown {
@@ -524,7 +536,8 @@
 
 // Tests that the credit card View Controller is dismissed when tapping the
 // keyboard.
-- (void)testTappingKeyboardDismissCreditCardControllerPopOver {
+// TODO(crbug.com/1017095): Re-enable this test.
+- (void)DISABLED_testTappingKeyboardDismissCreditCardControllerPopOver {
   if (![ChromeEarlGrey isIPadIdiom]) {
     return;
   }
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator_egtest.mm b/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator_egtest.mm
index f101e14..276fc3a9 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator_egtest.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator_egtest.mm
@@ -13,8 +13,6 @@
 #import "base/test/ios/wait_util.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
-#include "components/autofill/core/common/autofill_features.h"
-#include "components/autofill/ios/browser/autofill_switches.h"
 #include "ios/chrome/browser/application_context.h"
 #import "ios/chrome/browser/autofill/form_suggestion_constants.h"
 #include "ios/chrome/browser/autofill/personal_data_manager_factory.h"
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.mm b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.mm
index a895c48..61f45cee 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.mm
@@ -5,7 +5,6 @@
 #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.h"
 
 #include "base/metrics/user_metrics.h"
-#include "components/autofill/core/common/autofill_features.h"
 #include "ios/chrome/browser/ui/util/ui_util.h"
 #import "ios/chrome/common/colors/semantic_color_names.h"
 #import "ios/chrome/common/ui_util/constraints_ui_util.h"
diff --git a/ios/chrome/browser/ui/popup_menu/BUILD.gn b/ios/chrome/browser/ui/popup_menu/BUILD.gn
index 360b2e2..8ae7a56 100644
--- a/ios/chrome/browser/ui/popup_menu/BUILD.gn
+++ b/ios/chrome/browser/ui/popup_menu/BUILD.gn
@@ -130,7 +130,31 @@
   configs += [ "//build/config/compiler:enable_arc" ]
 }
 
+source_set("eg2_tests") {
+  defines = [ "CHROME_EARL_GREY_2" ]
+  configs += [
+    "//build/config/compiler:enable_arc",
+    "//build/config/ios:xctest_config",
+  ]
+  testonly = true
+  sources = [
+    "popup_menu_egtest.mm",
+  ]
+  deps = [
+    ":constants",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/test/earl_grey:eg_test_support+eg2",
+    "//ios/testing/earl_grey:eg_test_support+eg2",
+    "//ios/third_party/earl_grey2:test_lib",
+    "//ios/web/public/test/http_server:http_server",
+    "//net",
+    "//ui/base",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
 source_set("eg_tests") {
+  defines = [ "CHROME_EARL_GREY_1" ]
   configs += [ "//build/config/compiler:enable_arc" ]
   testonly = true
   sources = [
@@ -146,6 +170,7 @@
     "//ios/chrome/browser/web:web_internal",
     "//ios/chrome/test/app:test_support",
     "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing/earl_grey:earl_grey_support",
     "//ios/web/public/test",
     "//ios/web/public/test/http_server",
     "//ui/base",
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_egtest.mm b/ios/chrome/browser/ui/popup_menu/popup_menu_egtest.mm
index 8be56e0..7f9e132 100644
--- a/ios/chrome/browser/ui/popup_menu/popup_menu_egtest.mm
+++ b/ios/chrome/browser/ui/popup_menu/popup_menu_egtest.mm
@@ -2,21 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import <EarlGrey/EarlGrey.h>
-#import <XCTest/XCTest.h>
-
 #include "base/strings/sys_string_conversions.h"
 #import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h"
-#include "ios/chrome/browser/ui/util/ui_util.h"
 #include "ios/chrome/grit/ios_strings.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
+#import "ios/testing/earl_grey/earl_grey_test.h"
 #import "ios/web/public/test/http_server/http_server.h"
 #import "ios/web/public/test/http_server/http_server_util.h"
 #include "ios/web/public/test/http_server/http_server_util.h"
-#include "ios/web/public/test/url_test_util.h"
 #include "ui/base/l10n/l10n_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -37,7 +33,11 @@
 // in landscape.
 - (void)tearDown {
   [EarlGrey rotateDeviceToOrientation:UIDeviceOrientationPortrait
+#if defined(CHROME_EARL_GREY_1)
                            errorOrNil:nil];
+#elif defined(CHROME_EARL_GREY_2)
+                                error:nil];
+#endif
   [super tearDown];
 }
 
@@ -52,10 +52,10 @@
   const GURL URL3 = web::test::HttpServer::MakeUrl("http://page3");
   const GURL URL4 = web::test::HttpServer::MakeUrl("http://page4");
   NSString* entry0 = @"New Tab";
-  NSString* entry1 = base::SysUTF16ToNSString(web::GetDisplayTitleForUrl(URL1));
-  NSString* entry2 = base::SysUTF16ToNSString(web::GetDisplayTitleForUrl(URL2));
-  NSString* entry3 = base::SysUTF16ToNSString(web::GetDisplayTitleForUrl(URL3));
-  NSString* entry4 = base::SysUTF16ToNSString(web::GetDisplayTitleForUrl(URL4));
+  NSString* entry1 = [ChromeEarlGrey displayTitleForURL:URL1];
+  NSString* entry2 = [ChromeEarlGrey displayTitleForURL:URL2];
+  NSString* entry3 = [ChromeEarlGrey displayTitleForURL:URL3];
+  NSString* entry4 = [ChromeEarlGrey displayTitleForURL:URL4];
 
   // Create map of canned responses and set up the test HTML server.
   std::map<GURL, std::string> responses;
@@ -128,7 +128,11 @@
       assertWithMatcher:grey_sufficientlyVisible()];
 
   [EarlGrey rotateDeviceToOrientation:UIDeviceOrientationLandscapeRight
+#if defined(CHROME_EARL_GREY_1)
                            errorOrNil:nil];
+#elif defined(CHROME_EARL_GREY_2)
+                                error:nil];
+#endif
 
   // Expect that the tools menu has disappeared.
   [[EarlGrey selectElementWithMatcher:chrome_test_util::ToolsMenuView()]
diff --git a/ios/chrome/browser/ui/settings/autofill/BUILD.gn b/ios/chrome/browser/ui/settings/autofill/BUILD.gn
index f9a92fa..377e4db0 100644
--- a/ios/chrome/browser/ui/settings/autofill/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/autofill/BUILD.gn
@@ -115,6 +115,7 @@
     "//ios/chrome/browser/autofill",
     "//ios/chrome/test/app:test_support",
     "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing/earl_grey:earl_grey_support",
     "//ui/base",
   ]
 }
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_settings_egtest.mm b/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_settings_egtest.mm
index afdee41..81366981 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_settings_egtest.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_credit_card_settings_egtest.mm
@@ -22,6 +22,7 @@
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
+#include "ios/testing/earl_grey/disabled_test_macros.h"
 #include "ui/base/l10n/l10n_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -263,6 +264,11 @@
 // Checks that the toolbar appears in edit mode once a card is selected and
 // disappears when a card is deselected.
 - (void)testToolbarInEditMode {
+  if (base::FeatureList::IsEnabled(kSettingsAddPaymentMethod)) {
+    // The toolbar is always displayed when the AddPayment feature is enabled.
+    EARL_GREY_TEST_SKIPPED(
+        @"This test makes sense only when there is no Add Payment button.");
+  }
   autofill::CreditCard creditCard = [self addCreditCard];
   [self openCreditCardListInEditMode];
 
@@ -285,6 +291,12 @@
 // is selected. There should be no 'Add payment method' button if the
 // kSettingsAddPaymentMethod flag is not enabled.
 - (void)testToolbarButtonsInEditMode {
+  if (base::FeatureList::IsEnabled(kSettingsAddPaymentMethod)) {
+    // The toolbar is always displayed when the AddPayment feature is enabled.
+    EARL_GREY_TEST_SKIPPED(
+        @"This test makes sense only when there is no Add Payment button.");
+  }
+
   autofill::CreditCard creditCard = [self addCreditCard];
   [self openCreditCardListInEditMode];
 
diff --git a/ios/chrome/test/earl_grey2/BUILD.gn b/ios/chrome/test/earl_grey2/BUILD.gn
index 1001089..9698ed9a 100644
--- a/ios/chrome/test/earl_grey2/BUILD.gn
+++ b/ios/chrome/test/earl_grey2/BUILD.gn
@@ -11,6 +11,7 @@
   deps = [
     ":ios_chrome_autofill_automation_eg2tests_module",
     ":ios_chrome_eg2tests",
+    ":ios_chrome_integration_eg2tests_module",
     ":ios_chrome_smoke_eg2tests_module",
     ":ios_chrome_ui_eg2tests_module",
     ":ios_chrome_web_eg2tests_module",
@@ -28,6 +29,14 @@
   ]
 }
 
+chrome_ios_eg2_test("ios_chrome_integration_eg2tests_module") {
+  xcode_test_application_name = "ios_chrome_eg2tests"
+
+  deps = [
+    "//ios/chrome/browser/ntp_tiles:eg2_tests",
+  ]
+}
+
 chrome_ios_eg2_test("ios_chrome_smoke_eg2tests_module") {
   xcode_test_application_name = "ios_chrome_eg2tests"
 
@@ -57,6 +66,7 @@
     "//ios/chrome/browser/ui/omnibox/popup/shortcuts:eg2_tests",
     "//ios/chrome/browser/ui/open_in:eg2_tests",
     "//ios/chrome/browser/ui/page_info:eg2_tests",
+    "//ios/chrome/browser/ui/popup_menu:eg2_tests",
     "//ios/chrome/browser/ui/sad_tab:eg2_tests",
     "//ios/chrome/browser/ui/safe_mode:eg2_tests",
     "//ios/chrome/browser/ui/settings/autofill:eg2_tests",
diff --git a/ios/web/browsing_data/browsing_data_remover.mm b/ios/web/browsing_data/browsing_data_remover.mm
index 06f9258..b520893fa 100644
--- a/ios/web/browsing_data/browsing_data_remover.mm
+++ b/ios/web/browsing_data/browsing_data_remover.mm
@@ -79,7 +79,7 @@
   }
 
   if (![data_types_to_remove count]) {
-    base::PostTask(FROM_HERE, base::BindOnce(std::move(block_closure)));
+    std::move(block_closure).Run();
     return;
   }
 
diff --git a/ios/web/js_messaging/web_frame_impl_unittest.mm b/ios/web/js_messaging/web_frame_impl_unittest.mm
index 2881d164..0fd599f 100644
--- a/ios/web/js_messaging/web_frame_impl_unittest.mm
+++ b/ios/web/js_messaging/web_frame_impl_unittest.mm
@@ -7,7 +7,6 @@
 #import "base/base64.h"
 #include "base/bind.h"
 #include "base/json/json_reader.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #import "base/strings/sys_string_conversions.h"
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm
index ced49011..8b10b8c4 100644
--- a/ios/web/web_state/ui/crw_web_controller.mm
+++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -15,7 +15,6 @@
 #include "base/metrics/user_metrics_action.h"
 #include "base/strings/sys_string_conversions.h"
 #import "ios/web/browsing_data/browsing_data_remover.h"
-#import "ios/web/browsing_data/browsing_data_remover_observer.h"
 #import "ios/web/common/crw_web_view_content_view.h"
 #include "ios/web/common/features.h"
 #include "ios/web/common/url_util.h"
@@ -90,8 +89,7 @@
 
 }  // namespace
 
-@interface CRWWebController () <BrowsingDataRemoverObserver,
-                                CRWWKNavigationHandlerDelegate,
+@interface CRWWebController () <CRWWKNavigationHandlerDelegate,
                                 CRWContextMenuDelegate,
                                 CRWJSInjectorDelegate,
                                 CRWLegacyNativeContentControllerDelegate,
@@ -308,7 +306,6 @@
     web::BrowserState* browserState = _webStateImpl->GetBrowserState();
     _certVerificationController = [[CRWCertVerificationController alloc]
         initWithBrowserState:browserState];
-    web::BrowsingDataRemover::FromBrowserState(browserState)->AddObserver(self);
     web::FindInPageManagerImpl::CreateForWebState(_webStateImpl);
     _faviconManager = std::make_unique<web::FaviconManager>(_webStateImpl);
     _jsWindowErrorManager =
@@ -1040,16 +1037,6 @@
   [_pendingLoadCompleteActions removeAllObjects];
 }
 
-#pragma mark - BrowsingDataRemoverObserver
-
-- (void)willRemoveBrowsingData:(web::BrowsingDataRemover*)dataRemover {
-  self.webUsageEnabled = NO;
-}
-
-- (void)didRemoveBrowsingData:(web::BrowsingDataRemover*)dataRemover {
-  self.webUsageEnabled = YES;
-}
-
 #pragma mark - JavaScript history manipulation
 
 // Updates the HTML5 history state of the page using the current NavigationItem.
diff --git a/ios/web/web_thread_impl.cc b/ios/web/web_thread_impl.cc
index 20ab2bd..8e35fb9 100644
--- a/ios/web/web_thread_impl.cc
+++ b/ios/web/web_thread_impl.cc
@@ -13,7 +13,6 @@
 #include "base/compiler_specific.h"
 #include "base/lazy_instance.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/no_destructor.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
diff --git a/media/capture/video/chromeos/camera_hal_delegate_unittest.cc b/media/capture/video/chromeos/camera_hal_delegate_unittest.cc
index a2328cf..8b34a4c 100644
--- a/media/capture/video/chromeos/camera_hal_delegate_unittest.cc
+++ b/media/capture/video/chromeos/camera_hal_delegate_unittest.cc
@@ -10,7 +10,6 @@
 #include <memory>
 #include <utility>
 
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
 #include "media/capture/video/chromeos/mock_camera_module.h"
diff --git a/media/mojo/services/mojo_audio_input_stream.cc b/media/mojo/services/mojo_audio_input_stream.cc
index f0a7c2b58..74a6bc0 100644
--- a/media/mojo/services/mojo_audio_input_stream.cc
+++ b/media/mojo/services/mojo_audio_input_stream.cc
@@ -16,20 +16,20 @@
 namespace media {
 
 MojoAudioInputStream::MojoAudioInputStream(
-    mojom::AudioInputStreamRequest request,
+    mojo::PendingReceiver<mojom::AudioInputStream> receiver,
     mojom::AudioInputStreamClientPtr client,
     CreateDelegateCallback create_delegate_callback,
     StreamCreatedCallback stream_created_callback,
     base::OnceClosure deleter_callback)
     : stream_created_callback_(std::move(stream_created_callback)),
       deleter_callback_(std::move(deleter_callback)),
-      binding_(this, std::move(request)),
+      receiver_(this, std::move(receiver)),
       client_(std::move(client)) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(stream_created_callback_);
   DCHECK(deleter_callback_);
-  // |this| owns |binding_|, so unretained is safe.
-  binding_.set_connection_error_handler(
+  // |this| owns |receiver_|, so unretained is safe.
+  receiver_.set_disconnect_handler(
       base::BindOnce(&MojoAudioInputStream::OnError, base::Unretained(this)));
   client_.set_connection_error_handler(
       base::BindOnce(&MojoAudioInputStream::OnError, base::Unretained(this)));
@@ -37,7 +37,7 @@
   if (!delegate_) {
     // Failed to initialize the stream. We cannot call |deleter_callback_| yet,
     // since construction isn't done.
-    binding_.Close();
+    receiver_.reset();
     base::ThreadTaskRunnerHandle::Get()->PostTask(
         FROM_HERE,
         base::BindOnce(&MojoAudioInputStream::OnStreamError,
diff --git a/media/mojo/services/mojo_audio_input_stream.h b/media/mojo/services/mojo_audio_input_stream.h
index ec2c3a86..c052f25 100644
--- a/media/mojo/services/mojo_audio_input_stream.h
+++ b/media/mojo/services/mojo_audio_input_stream.h
@@ -13,7 +13,8 @@
 #include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
-#include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 
 namespace media {
 
@@ -34,7 +35,7 @@
   // stream has been initialized. |deleter_callback| is called when this class
   // should be removed (stream ended/error). |deleter_callback| is required to
   // destroy |this| synchronously.
-  MojoAudioInputStream(mojom::AudioInputStreamRequest request,
+  MojoAudioInputStream(mojo::PendingReceiver<mojom::AudioInputStream> receiver,
                        mojom::AudioInputStreamClientPtr client,
                        CreateDelegateCallback create_delegate_callback,
                        StreamCreatedCallback stream_created_callback,
@@ -65,7 +66,7 @@
 
   StreamCreatedCallback stream_created_callback_;
   base::OnceClosure deleter_callback_;
-  mojo::Binding<AudioInputStream> binding_;
+  mojo::Receiver<AudioInputStream> receiver_;
   mojom::AudioInputStreamClientPtr client_;
   std::unique_ptr<AudioInputDelegate> delegate_;
   base::WeakPtrFactory<MojoAudioInputStream> weak_factory_{this};
diff --git a/media/mojo/services/mojo_audio_input_stream_unittest.cc b/media/mojo/services/mojo_audio_input_stream_unittest.cc
index 1e0b585..3ab9d205 100644
--- a/media/mojo/services/mojo_audio_input_stream_unittest.cc
+++ b/media/mojo/services/mojo_audio_input_stream_unittest.cc
@@ -12,6 +12,8 @@
 #include "base/sync_socket.h"
 #include "base/test/task_environment.h"
 #include "media/audio/audio_input_controller.h"
+#include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -35,7 +37,6 @@
 using testing::StrictMock;
 using testing::Test;
 using AudioInputStream = mojom::AudioInputStream;
-using AudioInputStreamPtr = mojo::InterfacePtr<AudioInputStream>;
 
 class TestCancelableSyncSocket : public base::CancelableSyncSocket {
  public:
@@ -146,17 +147,17 @@
       : foreign_socket_(std::make_unique<TestCancelableSyncSocket>()),
         client_binding_(&client_, mojo::MakeRequest(&client_ptr_)) {}
 
-  AudioInputStreamPtr CreateAudioInput() {
-    AudioInputStreamPtr p;
+  mojo::Remote<mojom::AudioInputStream> CreateAudioInput() {
+    mojo::Remote<mojom::AudioInputStream> stream;
     ExpectDelegateCreation();
     impl_ = std::make_unique<MojoAudioInputStream>(
-        mojo::MakeRequest(&p), std::move(client_ptr_),
+        stream.BindNewPipeAndPassReceiver(), std::move(client_ptr_),
         base::BindOnce(&MockDelegateFactory::CreateDelegate,
                        base::Unretained(&mock_delegate_factory_)),
         base::BindOnce(&MockClient::Initialized, base::Unretained(&client_)),
         base::BindOnce(&MockDeleter::Finished, base::Unretained(&deleter_)));
-    EXPECT_TRUE(p.is_bound());
-    return p;
+    EXPECT_TRUE(stream.is_bound());
+    return stream;
   }
 
  protected:
@@ -191,9 +192,9 @@
 TEST_F(MojoAudioInputStreamTest, NoDelegate_SignalsError) {
   bool deleter_called = false;
   EXPECT_CALL(client_, OnError());
-  mojom::AudioInputStreamPtr stream_ptr;
+  mojo::Remote<mojom::AudioInputStream> stream_remote;
   MojoAudioInputStream stream(
-      mojo::MakeRequest(&stream_ptr), std::move(client_ptr_),
+      stream_remote.BindNewPipeAndPassReceiver(), std::move(client_ptr_),
       base::BindOnce(&CreateNoDelegate), base::BindOnce(&NotCalled),
       base::BindOnce([](bool* p) { *p = true; }, &deleter_called));
   EXPECT_FALSE(deleter_called)
@@ -203,23 +204,23 @@
 }
 
 TEST_F(MojoAudioInputStreamTest, Record_Records) {
-  AudioInputStreamPtr audio_input_ptr = CreateAudioInput();
+  auto audio_input = CreateAudioInput();
   EXPECT_CALL(*delegate_, OnRecordStream());
 
-  audio_input_ptr->Record();
+  audio_input->Record();
   base::RunLoop().RunUntilIdle();
 }
 
 TEST_F(MojoAudioInputStreamTest, SetVolume_SetsVolume) {
-  AudioInputStreamPtr audio_input_ptr = CreateAudioInput();
+  auto audio_input = CreateAudioInput();
   EXPECT_CALL(*delegate_, OnSetVolume(kNewVolume));
 
-  audio_input_ptr->SetVolume(kNewVolume);
+  audio_input->SetVolume(kNewVolume);
   base::RunLoop().RunUntilIdle();
 }
 
 TEST_F(MojoAudioInputStreamTest, DestructWithCallPending_Safe) {
-  AudioInputStreamPtr audio_input_ptr = CreateAudioInput();
+  auto audio_input = CreateAudioInput();
   EXPECT_CALL(client_, GotNotification(kInitiallyNotMuted));
   base::RunLoop().RunUntilIdle();
 
@@ -228,13 +229,13 @@
   delegate_event_handler_->OnStreamCreated(kStreamId, std::move(mem_),
                                            std::move(foreign_socket_),
                                            kInitiallyNotMuted);
-  audio_input_ptr->Record();
+  audio_input->Record();
   impl_.reset();
   base::RunLoop().RunUntilIdle();
 }
 
 TEST_F(MojoAudioInputStreamTest, Created_NotifiesClient) {
-  AudioInputStreamPtr audio_input_ptr = CreateAudioInput();
+  auto audio_input = CreateAudioInput();
   base::RunLoop().RunUntilIdle();
 
   EXPECT_CALL(client_, GotNotification(kInitiallyNotMuted));
@@ -249,27 +250,27 @@
 }
 
 TEST_F(MojoAudioInputStreamTest, SetVolumeTooLarge_Error) {
-  AudioInputStreamPtr audio_input_ptr = CreateAudioInput();
+  auto audio_input = CreateAudioInput();
   EXPECT_CALL(deleter_, Finished());
   EXPECT_CALL(client_, OnError());
 
-  audio_input_ptr->SetVolume(15);
+  audio_input->SetVolume(15);
   base::RunLoop().RunUntilIdle();
   Mock::VerifyAndClear(&deleter_);
 }
 
 TEST_F(MojoAudioInputStreamTest, SetVolumeNegative_Error) {
-  AudioInputStreamPtr audio_input_ptr = CreateAudioInput();
+  auto audio_input = CreateAudioInput();
   EXPECT_CALL(deleter_, Finished());
   EXPECT_CALL(client_, OnError());
 
-  audio_input_ptr->SetVolume(-0.5);
+  audio_input->SetVolume(-0.5);
   base::RunLoop().RunUntilIdle();
   Mock::VerifyAndClear(&deleter_);
 }
 
 TEST_F(MojoAudioInputStreamTest, DelegateErrorBeforeCreated_PropagatesError) {
-  AudioInputStreamPtr audio_input_ptr = CreateAudioInput();
+  auto audio_input = CreateAudioInput();
   EXPECT_CALL(deleter_, Finished());
   EXPECT_CALL(client_, OnError());
 
@@ -281,7 +282,7 @@
 }
 
 TEST_F(MojoAudioInputStreamTest, DelegateErrorAfterCreated_PropagatesError) {
-  AudioInputStreamPtr audio_input_ptr = CreateAudioInput();
+  auto audio_input = CreateAudioInput();
   EXPECT_CALL(client_, GotNotification(kInitiallyNotMuted));
   EXPECT_CALL(deleter_, Finished());
   EXPECT_CALL(client_, OnError());
@@ -299,9 +300,9 @@
 }
 
 TEST_F(MojoAudioInputStreamTest, RemoteEndGone_Error) {
-  AudioInputStreamPtr audio_input_ptr = CreateAudioInput();
+  auto audio_input = CreateAudioInput();
   EXPECT_CALL(deleter_, Finished());
-  audio_input_ptr.reset();
+  audio_input.reset();
   base::RunLoop().RunUntilIdle();
   Mock::VerifyAndClear(&deleter_);
 }
diff --git a/media/webrtc/audio_processor.cc b/media/webrtc/audio_processor.cc
index 1a281ef..58de7a2 100644
--- a/media/webrtc/audio_processor.cc
+++ b/media/webrtc/audio_processor.cc
@@ -244,6 +244,10 @@
 
   webrtc::AudioProcessing::Config apm_config = audio_processing_->GetConfig();
 
+  // APM audio pipeline setup.
+  apm_config.pipeline.experimental_multi_channel =
+      base::FeatureList::IsEnabled(features::kWebRtcEnableMultiChannelApm);
+
   // Typing detection setup.
   if (settings_.typing_detection) {
     typing_detector_ = std::make_unique<webrtc::TypingDetection>();
diff --git a/media/webrtc/webrtc_switches.cc b/media/webrtc/webrtc_switches.cc
index e19d3a4..93e936469 100644
--- a/media/webrtc/webrtc_switches.cc
+++ b/media/webrtc/webrtc_switches.cc
@@ -26,6 +26,11 @@
 const base::Feature kWebRtcApmInAudioService{"WebRtcApmInAudioService",
                                              base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Enables multi channel playout and capture audio to be processed without
+// downmixing in the WebRTC audio processing module.
+const base::Feature kWebRtcEnableMultiChannelApm{
+    "WebRtcEnableMultiChannelApm", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Enables the WebRTC Agc2 digital adaptation with WebRTC Agc1 analog
 // adaptation. Feature for http://crbug.com/873650. Is sent to WebRTC.
 const base::Feature kWebRtcHybridAgc{"WebRtcHybridAgc",
diff --git a/media/webrtc/webrtc_switches.h b/media/webrtc/webrtc_switches.h
index b527169..5fd4eda 100644
--- a/media/webrtc/webrtc_switches.h
+++ b/media/webrtc/webrtc_switches.h
@@ -20,6 +20,10 @@
 
 COMPONENT_EXPORT(MEDIA_WEBRTC)
 extern const base::Feature kWebRtcApmInAudioService;
+
+COMPONENT_EXPORT(MEDIA_WEBRTC)
+extern const base::Feature kWebRtcEnableMultiChannelApm;
+
 COMPONENT_EXPORT(MEDIA_WEBRTC)
 extern const base::Feature kWebRtcHybridAgc;
 
diff --git a/mojo/core/embedder_unittest.cc b/mojo/core/embedder_unittest.cc
index 8d90cc2..e36f6fa 100644
--- a/mojo/core/embedder_unittest.cc
+++ b/mojo/core/embedder_unittest.cc
@@ -20,7 +20,6 @@
 #include "base/memory/read_only_shared_memory_region.h"
 #include "base/memory/unsafe_shared_memory_region.h"
 #include "base/memory/writable_shared_memory_region.h"
-#include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
 #include "base/rand_util.h"
 #include "base/run_loop.h"
diff --git a/mojo/public/cpp/bindings/tests/equals_unittest.cc b/mojo/public/cpp/bindings/tests/equals_unittest.cc
index f91aede..6633716 100644
--- a/mojo/public/cpp/bindings/tests/equals_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/equals_unittest.cc
@@ -4,7 +4,6 @@
 
 #include <utility>
 
-#include "base/message_loop/message_loop.h"
 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/net/android/network_change_notifier_android.cc b/net/android/network_change_notifier_android.cc
index 4cf89f9..29d4ddb 100644
--- a/net/android/network_change_notifier_android.cc
+++ b/net/android/network_change_notifier_android.cc
@@ -65,7 +65,6 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
diff --git a/net/base/network_change_notifier_linux.cc b/net/base/network_change_notifier_linux.cc
index 9fae1e4..abc2742 100644
--- a/net/base/network_change_notifier_linux.cc
+++ b/net/base/network_change_notifier_linux.cc
@@ -8,7 +8,6 @@
 #include "base/bind_helpers.h"
 #include "base/compiler_specific.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
diff --git a/net/base/network_change_notifier_mac.cc b/net/base/network_change_notifier_mac.cc
index c082e84..91cf418e 100644
--- a/net/base/network_change_notifier_mac.cc
+++ b/net/base/network_change_notifier_mac.cc
@@ -9,7 +9,6 @@
 
 #include "base/bind.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
diff --git a/net/cert/cert_database_mac.cc b/net/cert/cert_database_mac.cc
index c7551e3f..c5dedce 100644
--- a/net/cert/cert_database_mac.cc
+++ b/net/cert/cert_database_mac.cc
@@ -10,7 +10,6 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/mac/mac_logging.h"
-#include "base/message_loop/message_loop.h"
 #include "base/message_loop/message_loop_current.h"
 #include "base/process/process_handle.h"
 #include "base/single_thread_task_runner.h"
diff --git a/net/cookies/cookie_store_test_callbacks.cc b/net/cookies/cookie_store_test_callbacks.cc
index 87ab3aee..a582a6e 100644
--- a/net/cookies/cookie_store_test_callbacks.cc
+++ b/net/cookies/cookie_store_test_callbacks.cc
@@ -5,7 +5,6 @@
 #include "net/cookies/cookie_store_test_callbacks.h"
 
 #include "base/location.h"
-#include "base/message_loop/message_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_task_runner_handle.h"
diff --git a/net/dns/dns_transaction_unittest.cc b/net/dns/dns_transaction_unittest.cc
index 3f0bcaf..3ec0ffe 100644
--- a/net/dns/dns_transaction_unittest.cc
+++ b/net/dns/dns_transaction_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/base64url.h"
 #include "base/bind.h"
 #include "base/containers/circular_deque.h"
-#include "base/message_loop/message_loop.h"
 #include "base/optional.h"
 #include "base/rand_util.h"
 #include "base/run_loop.h"
diff --git a/net/socket/client_socket_pool_base_unittest.cc b/net/socket/client_socket_pool_base_unittest.cc
index eebd2c4..9371ec4 100644
--- a/net/socket/client_socket_pool_base_unittest.cc
+++ b/net/socket/client_socket_pool_base_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop.h"
 #include "base/optional.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
diff --git a/net/url_request/url_request_filter.cc b/net/url_request/url_request_filter.cc
index 5a8a7209..6b0f70a 100644
--- a/net/url_request/url_request_filter.cc
+++ b/net/url_request/url_request_filter.cc
@@ -5,7 +5,6 @@
 #include "net/url_request/url_request_filter.h"
 
 #include "base/logging.h"
-#include "base/message_loop/message_loop.h"
 #include "base/message_loop/message_loop_current.h"
 #include "base/stl_util.h"
 #include "net/url_request/url_request.h"
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc
index 6d3ebd2..d63ad13 100644
--- a/net/url_request/url_request_unittest.cc
+++ b/net/url_request/url_request_unittest.cc
@@ -32,7 +32,6 @@
 #include "base/json/json_reader.h"
 #include "base/location.h"
 #include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
diff --git a/net/websockets/websocket_channel.cc b/net/websockets/websocket_channel.cc
index a9be7da5..c95e822 100644
--- a/net/websockets/websocket_channel.cc
+++ b/net/websockets/websocket_channel.cc
@@ -265,10 +265,12 @@
     const std::vector<std::string>& requested_subprotocols,
     const url::Origin& origin,
     const GURL& site_for_cookies,
+    const net::NetworkIsolationKey& network_isolation_key,
     const HttpRequestHeaders& additional_headers) {
   SendAddChannelRequestWithSuppliedCallback(
       socket_url, requested_subprotocols, origin, site_for_cookies,
-      additional_headers, base::Bind(&WebSocketStream::CreateAndConnectStream));
+      network_isolation_key, additional_headers,
+      base::Bind(&WebSocketStream::CreateAndConnectStream));
 }
 
 void WebSocketChannel::SetState(State new_state) {
@@ -407,11 +409,12 @@
     const std::vector<std::string>& requested_subprotocols,
     const url::Origin& origin,
     const GURL& site_for_cookies,
+    const net::NetworkIsolationKey& network_isolation_key,
     const HttpRequestHeaders& additional_headers,
     const WebSocketStreamRequestCreationCallback& callback) {
-  SendAddChannelRequestWithSuppliedCallback(socket_url, requested_subprotocols,
-                                            origin, site_for_cookies,
-                                            additional_headers, callback);
+  SendAddChannelRequestWithSuppliedCallback(
+      socket_url, requested_subprotocols, origin, site_for_cookies,
+      network_isolation_key, additional_headers, callback);
 }
 
 void WebSocketChannel::SetClosingHandshakeTimeoutForTesting(
@@ -429,6 +432,7 @@
     const std::vector<std::string>& requested_subprotocols,
     const url::Origin& origin,
     const GURL& site_for_cookies,
+    const net::NetworkIsolationKey& network_isolation_key,
     const HttpRequestHeaders& additional_headers,
     const WebSocketStreamRequestCreationCallback& callback) {
   DCHECK_EQ(FRESHLY_CONSTRUCTED, state_);
@@ -441,10 +445,10 @@
   }
   socket_url_ = socket_url;
   auto connect_delegate = std::make_unique<ConnectDelegate>(this);
-  stream_request_ =
-      callback.Run(socket_url_, requested_subprotocols, origin,
-                   site_for_cookies, additional_headers, url_request_context_,
-                   NetLogWithSource(), std::move(connect_delegate));
+  stream_request_ = callback.Run(
+      socket_url_, requested_subprotocols, origin, site_for_cookies,
+      network_isolation_key, additional_headers, url_request_context_,
+      NetLogWithSource(), std::move(connect_delegate));
   SetState(CONNECTING);
 }
 
diff --git a/net/websockets/websocket_channel.h b/net/websockets/websocket_channel.h
index b62c50a..e8105b45 100644
--- a/net/websockets/websocket_channel.h
+++ b/net/websockets/websocket_channel.h
@@ -55,6 +55,7 @@
       const std::vector<std::string>&,
       const url::Origin&,
       const GURL&,
+      const net::NetworkIsolationKey&,
       const HttpRequestHeaders&,
       URLRequestContext*,
       const NetLogWithSource&,
@@ -79,6 +80,7 @@
       const std::vector<std::string>& requested_protocols,
       const url::Origin& origin,
       const GURL& site_for_cookies,
+      const net::NetworkIsolationKey& network_isolation_key,
       const HttpRequestHeaders& additional_headers);
 
   // Sends a data frame to the remote side. It is the responsibility of the
@@ -127,6 +129,7 @@
       const std::vector<std::string>& requested_protocols,
       const url::Origin& origin,
       const GURL& site_for_cookies,
+      const net::NetworkIsolationKey& network_isolation_key,
       const HttpRequestHeaders& additional_headers,
       const WebSocketStreamRequestCreationCallback& callback);
 
@@ -193,6 +196,7 @@
       const std::vector<std::string>& requested_protocols,
       const url::Origin& origin,
       const GURL& site_for_cookies,
+      const net::NetworkIsolationKey& network_isolation_key,
       const HttpRequestHeaders& additional_headers,
       const WebSocketStreamRequestCreationCallback& callback);
 
diff --git a/net/websockets/websocket_channel_test.cc b/net/websockets/websocket_channel_test.cc
index e3d00767..2485b08 100644
--- a/net/websockets/websocket_channel_test.cc
+++ b/net/websockets/websocket_channel_test.cc
@@ -756,6 +756,7 @@
       const std::vector<std::string>& requested_subprotocols,
       const url::Origin& origin,
       const GURL& site_for_cookies,
+      const net::NetworkIsolationKey& network_isolation_key,
       const HttpRequestHeaders& additional_headers,
       URLRequestContext* url_request_context,
       const NetLogWithSource& net_log,
@@ -763,6 +764,7 @@
     this->socket_url = socket_url;
     this->origin = origin;
     this->site_for_cookies = site_for_cookies;
+    this->network_isolation_key = network_isolation_key;
     this->url_request_context = url_request_context;
     this->connect_delegate = std::move(connect_delegate);
     return std::make_unique<MockWebSocketStreamRequest>();
@@ -771,6 +773,7 @@
   GURL socket_url;
   url::Origin origin;
   GURL site_for_cookies;
+  net::NetworkIsolationKey network_isolation_key;
   URLRequestContext* url_request_context;
   std::unique_ptr<WebSocketStream::ConnectDelegate> connect_delegate;
 };
@@ -808,7 +811,7 @@
     channel_->SendAddChannelRequestForTesting(
         connect_data_.socket_url, connect_data_.requested_subprotocols,
         connect_data_.origin, connect_data_.site_for_cookies,
-        HttpRequestHeaders(),
+        connect_data_.network_isolation_key, HttpRequestHeaders(),
         base::Bind(&WebSocketStreamCreationCallbackArgumentSaver::Create,
                    base::Unretained(&connect_data_.argument_saver)));
   }
@@ -843,7 +846,11 @@
     ConnectData()
         : socket_url("ws://ws/"),
           origin(url::Origin::Create(GURL("http://ws"))),
-          site_for_cookies("http://ws/") {}
+          site_for_cookies("http://ws/") {
+      url::Origin top_frame_origin = url::Origin::Create(GURL("http://ws-1"));
+      this->network_isolation_key =
+          net::NetworkIsolationKey(top_frame_origin, origin);
+    }
 
     // URLRequestContext object.
     URLRequestContext url_request_context;
@@ -856,6 +863,8 @@
     url::Origin origin;
     // First party for cookies for the request.
     GURL site_for_cookies;
+    // NetworkIsolationKey created from the origin of the top level frame.
+    net::NetworkIsolationKey network_isolation_key;
 
     WebSocketStreamCreationCallbackArgumentSaver argument_saver;
   };
@@ -979,6 +988,10 @@
   connect_data_.socket_url = GURL("ws://example.com/test");
   connect_data_.origin = url::Origin::Create(GURL("http://example.com"));
   connect_data_.site_for_cookies = GURL("http://example.com/");
+  url::Origin top_frame_origin =
+      url::Origin::Create(GURL("http://example-1.com"));
+  connect_data_.network_isolation_key =
+      net::NetworkIsolationKey(top_frame_origin, connect_data_.origin);
   connect_data_.requested_subprotocols.push_back("Sinbad");
 
   CreateChannelAndConnect();
@@ -991,6 +1004,7 @@
   EXPECT_EQ(connect_data_.socket_url, actual.socket_url);
   EXPECT_EQ(connect_data_.origin.Serialize(), actual.origin.Serialize());
   EXPECT_EQ(connect_data_.site_for_cookies, actual.site_for_cookies);
+  EXPECT_EQ(connect_data_.network_isolation_key, actual.network_isolation_key);
 }
 
 TEST_F(WebSocketChannelEventInterfaceTest, ConnectSuccessReported) {
diff --git a/net/websockets/websocket_end_to_end_test.cc b/net/websockets/websocket_end_to_end_test.cc
index 4f29a1d..fe102ac 100644
--- a/net/websockets/websocket_end_to_end_test.cc
+++ b/net/websockets/websocket_end_to_end_test.cc
@@ -293,11 +293,13 @@
     }
     url::Origin origin = url::Origin::Create(GURL("http://localhost"));
     GURL site_for_cookies("http://localhost/");
+    net::NetworkIsolationKey network_isolation_key(origin, origin);
     event_interface_ = new ConnectTestingEventInterface();
     channel_ = std::make_unique<WebSocketChannel>(
         base::WrapUnique(event_interface_), &context_);
     channel_->SendAddChannelRequest(GURL(socket_url), sub_protocols_, origin,
-                                    site_for_cookies, HttpRequestHeaders());
+                                    site_for_cookies, network_isolation_key,
+                                    HttpRequestHeaders());
     event_interface_->WaitForResponse();
     return !event_interface_->failed();
   }
diff --git a/net/websockets/websocket_stream.cc b/net/websockets/websocket_stream.cc
index a92bcccf..a40c60d 100644
--- a/net/websockets/websocket_stream.cc
+++ b/net/websockets/websocket_stream.cc
@@ -114,6 +114,7 @@
       const URLRequestContext* context,
       const url::Origin& origin,
       const GURL& site_for_cookies,
+      const net::NetworkIsolationKey& network_isolation_key,
       const HttpRequestHeaders& additional_headers,
       std::unique_ptr<WebSocketStream::ConnectDelegate> connect_delegate,
       std::unique_ptr<WebSocketStreamRequestAPI> api_delegate)
@@ -140,6 +141,7 @@
     url_request_->SetExtraRequestHeaders(headers);
     url_request_->set_initiator(origin);
     url_request_->set_site_for_cookies(site_for_cookies);
+    url_request_->set_network_isolation_key(network_isolation_key);
 
     auto create_helper = std::make_unique<WebSocketHandshakeStreamCreateHelper>(
         connect_delegate_.get(), requested_subprotocols, this);
@@ -470,14 +472,15 @@
     const std::vector<std::string>& requested_subprotocols,
     const url::Origin& origin,
     const GURL& site_for_cookies,
+    const net::NetworkIsolationKey& network_isolation_key,
     const HttpRequestHeaders& additional_headers,
     URLRequestContext* url_request_context,
     const NetLogWithSource& net_log,
     std::unique_ptr<ConnectDelegate> connect_delegate) {
   auto request = std::make_unique<WebSocketStreamRequestImpl>(
       socket_url, requested_subprotocols, url_request_context, origin,
-      site_for_cookies, additional_headers, std::move(connect_delegate),
-      nullptr);
+      site_for_cookies, network_isolation_key, additional_headers,
+      std::move(connect_delegate), nullptr);
   request->Start(std::make_unique<base::OneShotTimer>());
   return std::move(request);
 }
@@ -488,6 +491,7 @@
     const std::vector<std::string>& requested_subprotocols,
     const url::Origin& origin,
     const GURL& site_for_cookies,
+    const net::NetworkIsolationKey& network_isolation_key,
     const HttpRequestHeaders& additional_headers,
     URLRequestContext* url_request_context,
     const NetLogWithSource& net_log,
@@ -496,8 +500,8 @@
     std::unique_ptr<WebSocketStreamRequestAPI> api_delegate) {
   auto request = std::make_unique<WebSocketStreamRequestImpl>(
       socket_url, requested_subprotocols, url_request_context, origin,
-      site_for_cookies, additional_headers, std::move(connect_delegate),
-      std::move(api_delegate));
+      site_for_cookies, network_isolation_key, additional_headers,
+      std::move(connect_delegate), std::move(api_delegate));
   request->Start(std::move(timer));
   return std::move(request);
 }
diff --git a/net/websockets/websocket_stream.h b/net/websockets/websocket_stream.h
index e3fdfef..6cc0c14 100644
--- a/net/websockets/websocket_stream.h
+++ b/net/websockets/websocket_stream.h
@@ -16,6 +16,7 @@
 #include "base/time/time.h"
 #include "net/base/completion_once_callback.h"
 #include "net/base/net_export.h"
+#include "net/base/network_isolation_key.h"
 #include "net/websockets/websocket_event_interface.h"
 #include "net/websockets/websocket_handshake_request_info.h"
 #include "net/websockets/websocket_handshake_response_info.h"
@@ -154,6 +155,7 @@
       const std::vector<std::string>& requested_subprotocols,
       const url::Origin& origin,
       const GURL& site_for_cookies,
+      const net::NetworkIsolationKey& network_isolation_key,
       const HttpRequestHeaders& additional_headers,
       URLRequestContext* url_request_context,
       const NetLogWithSource& net_log,
@@ -169,6 +171,7 @@
       const std::vector<std::string>& requested_subprotocols,
       const url::Origin& origin,
       const GURL& site_for_cookies,
+      const net::NetworkIsolationKey& network_isolation_key,
       const HttpRequestHeaders& additional_headers,
       URLRequestContext* url_request_context,
       const NetLogWithSource& net_log,
diff --git a/net/websockets/websocket_stream_cookie_test.cc b/net/websockets/websocket_stream_cookie_test.cc
index c01cf64..b5b5727 100644
--- a/net/websockets/websocket_stream_cookie_test.cc
+++ b/net/websockets/websocket_stream_cookie_test.cc
@@ -38,6 +38,7 @@
   void CreateAndConnect(const GURL& url,
                         const url::Origin& origin,
                         const GURL& site_for_cookies,
+                        const net::NetworkIsolationKey& network_isolation_key,
                         const std::string& cookie_header,
                         const std::string& response_body) {
     // We assume cookie_header ends with CRLF if not empty, as
@@ -52,7 +53,8 @@
                                             std::string()),
         response_body);
     CreateAndConnectStream(url, NoSubProtocols(), origin, site_for_cookies,
-                           HttpRequestHeaders(), nullptr);
+                           network_isolation_key, HttpRequestHeaders(),
+                           nullptr);
   }
 
   std::string AddCRLFIfNotEmpty(const std::string& s) {
@@ -141,6 +143,7 @@
   const url::Origin origin =
       url::Origin::Create(GURL("http://www.example.com"));
   const GURL site_for_cookies("http://www.example.com/");
+  const net::NetworkIsolationKey network_isolation_key(origin, origin);
   const std::string cookie_line(GetParam().cookie_line);
   const std::string cookie_header(AddCRLFIfNotEmpty(GetParam().cookie_header));
 
@@ -163,8 +166,8 @@
   ASSERT_TRUE(is_called);
   ASSERT_TRUE(set_cookie_result);
 
-  CreateAndConnect(url, origin, site_for_cookies, cookie_header,
-                   WebSocketStandardResponse(""));
+  CreateAndConnect(url, origin, site_for_cookies, network_isolation_key,
+                   cookie_header, WebSocketStandardResponse(""));
   WaitUntilConnectDone();
   EXPECT_FALSE(has_failed());
 }
@@ -179,6 +182,7 @@
   const url::Origin origin =
       url::Origin::Create(GURL("http://www.example.com"));
   const GURL site_for_cookies("http://www.example.com/");
+  const net::NetworkIsolationKey network_isolation_key(origin, origin);
   const std::string cookie_line(GetParam().cookie_line);
   const std::string cookie_header(AddCRLFIfNotEmpty(GetParam().cookie_header));
 
@@ -194,7 +198,8 @@
   CookieStore* store =
       url_request_context_host_.GetURLRequestContext()->cookie_store();
 
-  CreateAndConnect(url, origin, site_for_cookies, "", response);
+  CreateAndConnect(url, origin, site_for_cookies, network_isolation_key, "",
+                   response);
   WaitUntilConnectDone();
   EXPECT_FALSE(has_failed());
 
diff --git a/net/websockets/websocket_stream_create_test_base.cc b/net/websockets/websocket_stream_create_test_base.cc
index dd5aaa9..ac22e69 100644
--- a/net/websockets/websocket_stream_create_test_base.cc
+++ b/net/websockets/websocket_stream_create_test_base.cc
@@ -98,13 +98,15 @@
     const std::vector<std::string>& sub_protocols,
     const url::Origin& origin,
     const GURL& site_for_cookies,
+    const net::NetworkIsolationKey& network_isolation_key,
     const HttpRequestHeaders& additional_headers,
     std::unique_ptr<base::OneShotTimer> timer) {
   auto connect_delegate = std::make_unique<TestConnectDelegate>(
       this, connect_run_loop_.QuitClosure());
   auto api_delegate = std::make_unique<TestWebSocketStreamRequestAPI>();
   stream_request_ = WebSocketStream::CreateAndConnectStreamForTesting(
-      socket_url, sub_protocols, origin, site_for_cookies, additional_headers,
+      socket_url, sub_protocols, origin, site_for_cookies,
+      network_isolation_key, additional_headers,
       url_request_context_host_.GetURLRequestContext(), NetLogWithSource(),
       std::move(connect_delegate),
       timer ? std::move(timer) : std::make_unique<base::OneShotTimer>(),
diff --git a/net/websockets/websocket_stream_create_test_base.h b/net/websockets/websocket_stream_create_test_base.h
index c799ba0f..6ceee89 100644
--- a/net/websockets/websocket_stream_create_test_base.h
+++ b/net/websockets/websocket_stream_create_test_base.h
@@ -40,12 +40,14 @@
 
   // A wrapper for CreateAndConnectStreamForTesting that knows about our default
   // parameters.
-  void CreateAndConnectStream(const GURL& socket_url,
-                              const std::vector<std::string>& sub_protocols,
-                              const url::Origin& origin,
-                              const GURL& site_for_cookies,
-                              const HttpRequestHeaders& additional_headers,
-                              std::unique_ptr<base::OneShotTimer> timer);
+  void CreateAndConnectStream(
+      const GURL& socket_url,
+      const std::vector<std::string>& sub_protocols,
+      const url::Origin& origin,
+      const GURL& site_for_cookies,
+      const net::NetworkIsolationKey& network_isolation_key,
+      const HttpRequestHeaders& additional_headers,
+      std::unique_ptr<base::OneShotTimer> timer);
 
   static std::vector<HeaderKeyValuePair> RequestHeadersToVector(
       const HttpRequestHeaders& headers);
diff --git a/net/websockets/websocket_stream_test.cc b/net/websockets/websocket_stream_test.cc
index 1b77f05..9a4667e 100644
--- a/net/websockets/websocket_stream_test.cc
+++ b/net/websockets/websocket_stream_test.cc
@@ -86,7 +86,14 @@
 }
 
 static GURL SiteForCookies() {
-  return GURL("http://www.example.org/foobar");
+  return GURL(kOrigin);
+}
+
+static net::NetworkIsolationKey CreateNetworkIsolationKey() {
+  // Top frame origin can be different but currently not testing in a
+  // third-party context so using the same kOrigin.
+  url::Origin top_frame_origin = url::Origin::Create(GURL(kOrigin));
+  return net::NetworkIsolationKey(top_frame_origin, Origin());
 }
 
 class WebSocketStreamCreateTest : public TestWithParam<HandshakeStreamType>,
@@ -158,7 +165,7 @@
               WebSocketExtraHeadersToString(extra_response_headers)) +
               additional_data_);
       CreateAndConnectStream(socket_url, sub_protocols, Origin(),
-                             SiteForCookies(),
+                             SiteForCookies(), CreateNetworkIsolationKey(),
                              WebSocketExtraHeadersToHttpRequestHeaders(
                                  send_additional_request_headers),
                              std::move(timer_));
@@ -291,7 +298,7 @@
     EXPECT_FALSE(request->is_pending());
 
     CreateAndConnectStream(socket_url, sub_protocols, Origin(),
-                           SiteForCookies(),
+                           SiteForCookies(), CreateNetworkIsolationKey(),
                            WebSocketExtraHeadersToHttpRequestHeaders(
                                send_additional_request_headers),
                            std::move(timer_));
@@ -318,7 +325,7 @@
             WebSocketExtraHeadersToString(extra_request_headers)),
         response_body);
     CreateAndConnectStream(socket_url, sub_protocols, Origin(),
-                           SiteForCookies(),
+                           SiteForCookies(), CreateNetworkIsolationKey(),
                            WebSocketExtraHeadersToHttpRequestHeaders(
                                send_additional_request_headers),
                            nullptr);
@@ -341,7 +348,8 @@
         WebSocketStandardRequest(socket_path, socket_host, Origin(), "", ""),
         WebSocketStandardResponse(extra_response_headers));
     CreateAndConnectStream(socket_url, sub_protocols, Origin(),
-                           SiteForCookies(), HttpRequestHeaders(), nullptr);
+                           SiteForCookies(), CreateNetworkIsolationKey(),
+                           HttpRequestHeaders(), nullptr);
   }
 
   // Like CreateAndConnectStandard(), but take raw mock data.
@@ -354,7 +362,8 @@
 
     AddRawExpectations(std::move(socket_data));
     CreateAndConnectStream(GURL(url), sub_protocols, Origin(), SiteForCookies(),
-                           additional_headers, std::move(timer_));
+                           CreateNetworkIsolationKey(), additional_headers,
+                           std::move(timer_));
   }
 
  private:
diff --git a/remoting/host/chromoting_host_unittest.cc b/remoting/host/chromoting_host_unittest.cc
index e48d3cf..2520e5c 100644
--- a/remoting/host/chromoting_host_unittest.cc
+++ b/remoting/host/chromoting_host_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/memory/ptr_util.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread_task_runner_handle.h"
diff --git a/remoting/host/config_file_watcher_unittest.cc b/remoting/host/config_file_watcher_unittest.cc
index c41f79b3..5d8a92e 100644
--- a/remoting/host/config_file_watcher_unittest.cc
+++ b/remoting/host/config_file_watcher_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
diff --git a/remoting/host/desktop_process_unittest.cc b/remoting/host/desktop_process_unittest.cc
index e0a0847d..1a626d0 100644
--- a/remoting/host/desktop_process_unittest.cc
+++ b/remoting/host/desktop_process_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/location.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/message_loop/message_loop.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
diff --git a/remoting/host/it2me/it2me_host_unittest.cc b/remoting/host/it2me/it2me_host_unittest.cc
index 7ed3fa61..5330310 100644
--- a/remoting/host/it2me/it2me_host_unittest.cc
+++ b/remoting/host/it2me/it2me_host_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread_task_runner_handle.h"
diff --git a/remoting/test/host_list_fetcher_unittest.cc b/remoting/test/host_list_fetcher_unittest.cc
index 484d9d5..064160cc 100644
--- a/remoting/test/host_list_fetcher_unittest.cc
+++ b/remoting/test/host_list_fetcher_unittest.cc
@@ -6,7 +6,6 @@
 
 #include "base/bind.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/task_environment.h"
diff --git a/services/audio/input_controller_unittest.cc b/services/audio/input_controller_unittest.cc
index eb4fa3a..9f41f190 100644
--- a/services/audio/input_controller_unittest.cc
+++ b/services/audio/input_controller_unittest.cc
@@ -8,7 +8,6 @@
 #include <utility>
 
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
diff --git a/services/audio/public/cpp/fake_stream_factory.h b/services/audio/public/cpp/fake_stream_factory.h
index e829ec61..5096843c 100644
--- a/services/audio/public/cpp/fake_stream_factory.h
+++ b/services/audio/public/cpp/fake_stream_factory.h
@@ -11,7 +11,7 @@
 #include "base/run_loop.h"
 #include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "media/mojo/mojom/audio_logging.mojom.h"
-#include "mojo/public/cpp/bindings/interface_request.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
 #include "services/audio/public/mojom/stream_factory.mojom.h"
diff --git a/services/device/device_service_test_base.cc b/services/device/device_service_test_base.cc
index a77de49b4..533a5940c 100644
--- a/services/device/device_service_test_base.cc
+++ b/services/device/device_service_test_base.cc
@@ -9,7 +9,6 @@
 #include "base/bind.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/message_loop/message_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/task/post_task.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
diff --git a/services/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc b/services/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc
index dad8e79..74fb67e 100644
--- a/services/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc
+++ b/services/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc
@@ -7,7 +7,6 @@
 #include <wrl/implements.h>
 
 #include "base/bind.h"
-#include "base/message_loop/message_loop.h"
 #include "base/metrics/statistics_recorder.h"
 #include "base/run_loop.h"
 #include "base/test/bind_test_util.h"
diff --git a/services/device/serial/serial_port_manager_impl_unittest.cc b/services/device/serial/serial_port_manager_impl_unittest.cc
index f5352abc..8de3851 100644
--- a/services/device/serial/serial_port_manager_impl_unittest.cc
+++ b/services/device/serial/serial_port_manager_impl_unittest.cc
@@ -11,7 +11,6 @@
 
 #include "base/bind.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/task/post_task.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/task_environment.h"
diff --git a/services/network/cookie_manager_unittest.cc b/services/network/cookie_manager_unittest.cc
index 0bbba99..5c7b251 100644
--- a/services/network/cookie_manager_unittest.cc
+++ b/services/network/cookie_manager_unittest.cc
@@ -8,7 +8,6 @@
 
 #include "base/bind.h"
 #include "base/files/scoped_temp_dir.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/stl_util.h"
 #include "base/strings/strcat.h"
@@ -369,14 +368,14 @@
       net::CanonicalCookie("A", "B", kCookieDomain, "/", base::Time(),
                            base::Time(), base::Time(),
                            /*secure=*/false, /*httponly=*/false,
-                           net::CookieSameSite::NO_RESTRICTION,
+                           net::CookieSameSite::LAX_MODE,
                            net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "C", "D", "foo_host2", "/with/path", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("C", "D", "foo_host2", "/with/path", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
       net::CanonicalCookie(
@@ -386,11 +385,11 @@
           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "HttpOnly", "F", kCookieDomain, "/with/path", base::Time(),
-          base::Time(), base::Time(), /*secure=*/false,
-          /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION,
-          net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("HttpOnly", "F", kCookieDomain, "/with/path",
+                           base::Time(), base::Time(), base::Time(),
+                           /*secure=*/false,
+                           /*httponly=*/true, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   base::Time after_creation(base::Time::Now());
@@ -412,7 +411,7 @@
   EXPECT_FALSE(cookies[0].IsPersistent());
   EXPECT_FALSE(cookies[0].IsSecure());
   EXPECT_FALSE(cookies[0].IsHttpOnly());
-  EXPECT_EQ(net::CookieSameSite::NO_RESTRICTION, cookies[0].SameSite());
+  EXPECT_EQ(net::CookieSameSite::LAX_MODE, cookies[0].SameSite());
   EXPECT_EQ(net::COOKIE_PRIORITY_MEDIUM, cookies[0].Priority());
 
   EXPECT_EQ("C", cookies[1].Name());
@@ -426,7 +425,7 @@
   EXPECT_FALSE(cookies[1].IsPersistent());
   EXPECT_FALSE(cookies[1].IsSecure());
   EXPECT_FALSE(cookies[1].IsHttpOnly());
-  EXPECT_EQ(net::CookieSameSite::NO_RESTRICTION, cookies[1].SameSite());
+  EXPECT_EQ(net::CookieSameSite::LAX_MODE, cookies[1].SameSite());
   EXPECT_EQ(net::COOKIE_PRIORITY_MEDIUM, cookies[1].Priority());
 
   EXPECT_EQ("HttpOnly", cookies[2].Name());
@@ -440,7 +439,7 @@
   EXPECT_FALSE(cookies[2].IsPersistent());
   EXPECT_FALSE(cookies[2].IsSecure());
   EXPECT_TRUE(cookies[2].IsHttpOnly());
-  EXPECT_EQ(net::CookieSameSite::NO_RESTRICTION, cookies[2].SameSite());
+  EXPECT_EQ(net::CookieSameSite::LAX_MODE, cookies[2].SameSite());
   EXPECT_EQ(net::COOKIE_PRIORITY_MEDIUM, cookies[2].Priority());
 
   EXPECT_EQ("Secure", cookies[3].Name());
@@ -481,7 +480,7 @@
       net::CanonicalCookie("A", "B", "domain1.test",
                            "/this/path/is/the/longest/for/sorting/purposes",
                            base::Time(), base::Time(), base::Time(),
-                           /*secure=*/false, /*httponly=*/false,
+                           /*secure=*/true, /*httponly=*/false,
                            net::CookieSameSite::NO_RESTRICTION,
                            net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
@@ -489,14 +488,14 @@
   EXPECT_TRUE(SetCanonicalCookie(
       net::CanonicalCookie(
           "C", "D", "domain2.test", "/with/longer/path", base::Time(),
-          base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false,
+          base::Time(), base::Time(), /*secure=*/true, /*httponly=*/false,
           net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   // not set (UNKNOWN)
   EXPECT_TRUE(SetCanonicalCookie(
       net::CanonicalCookie(
           "HttpOnly", "F", "domain3.test", "/with/path", base::Time(),
-          base::Time(), base::Time(), /*secure=*/false,
+          base::Time(), base::Time(), /*secure=*/true,
           /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION,
           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
@@ -505,7 +504,7 @@
       net::CanonicalCookie(
           "Secure", "E", ".domainwithdot.test", "/", base::Time(), base::Time(),
           base::Time(), /*secure=*/true,
-          /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
+          /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION,
           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
@@ -533,32 +532,36 @@
       net::CanonicalCookie("A", "B", kCookieDomain, "/", base::Time(),
                            base::Time(), base::Time(),
                            /*secure=*/false, /*httponly=*/false,
-                           net::CookieSameSite::NO_RESTRICTION,
+                           net::CookieSameSite::LAX_MODE,
                            net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "C", "D", "foo_host2", "/with/path", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("C", "D", "foo_host2", "/with/path", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "Secure", "E", kCookieDomain, "/with/path", base::Time(),
-          base::Time(), base::Time(), /*secure=*/true,
-          /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
-          net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("Secure", "E", kCookieDomain, "/with/path",
+                           base::Time(), base::Time(), base::Time(),
+                           /*secure=*/true,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "HttpOnly", "F", kCookieDomain, "/with/path", base::Time(),
-          base::Time(), base::Time(), /*secure=*/false,
-          /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION,
-          net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("HttpOnly", "F", kCookieDomain, "/with/path",
+                           base::Time(), base::Time(), base::Time(),
+                           /*secure=*/false,
+                           /*httponly=*/true, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
+  // Want the SameSite=lax cookies, but not httponly ones.
+  net::CookieOptions options;
+  options.set_same_site_cookie_context(
+      net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT);
   std::vector<net::CanonicalCookie> cookies = service_wrapper()->GetCookieList(
-      GURL("https://foo_host.com/with/path"), net::CookieOptions());
+      GURL("https://foo_host.com/with/path"), options);
 
   ASSERT_EQ(2u, cookies.size());
   std::sort(cookies.begin(), cookies.end(), &CompareCanonicalCookies);
@@ -569,7 +572,7 @@
   EXPECT_EQ("Secure", cookies[1].Name());
   EXPECT_EQ("E", cookies[1].Value());
 
-  net::CookieOptions excluded_options;
+  net::CookieOptions excluded_options = options;
   excluded_options.set_return_excluded_cookies();
   net::CookieStatusList excluded_cookies =
       service_wrapper()->GetExcludedCookieList(
@@ -590,7 +593,7 @@
       net::CanonicalCookie("A", "B", kCookieDomain, "/", base::Time(),
                            base::Time(), base::Time(),
                            /*secure=*/false, /*httponly=*/true,
-                           net::CookieSameSite::NO_RESTRICTION,
+                           net::CookieSameSite::LAX_MODE,
                            net::COOKIE_PRIORITY_MEDIUM),
       "https", true);
   ASSERT_TRUE(result);
@@ -598,13 +601,16 @@
       net::CanonicalCookie("C", "D", kCookieDomain, "/", base::Time(),
                            base::Time(), base::Time(),
                            /*secure=*/false, /*httponly=*/false,
-                           net::CookieSameSite::NO_RESTRICTION,
+                           net::CookieSameSite::LAX_MODE,
                            net::COOKIE_PRIORITY_MEDIUM),
       "https", true);
   ASSERT_TRUE(result);
 
   // Retrieve without httponly cookies (default)
   net::CookieOptions options;
+  options.set_same_site_cookie_context(
+      net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT);
+
   EXPECT_TRUE(options.exclude_httponly());
   std::vector<net::CanonicalCookie> cookies = service_wrapper()->GetCookieList(
       GURL("https://foo_host.com/with/path"), options);
@@ -636,7 +642,7 @@
   result = SetCanonicalCookie(
       net::CanonicalCookie("A", "B", kCookieDomain, "/", base::Time(),
                            base::Time(), base::Time(),
-                           /*secure=*/false, /*httponly=*/false,
+                           /*secure=*/true, /*httponly=*/false,
                            net::CookieSameSite::NO_RESTRICTION,
                            net::COOKIE_PRIORITY_MEDIUM),
       "https", true);
@@ -707,7 +713,7 @@
       net::CanonicalCookie("A", "B", kCookieDomain, "/", base::Time(),
                            base::Time(), base::Time(),
                            /*secure=*/false, /*httponly=*/false,
-                           net::CookieSameSite::NO_RESTRICTION,
+                           net::CookieSameSite::LAX_MODE,
                            net::COOKIE_PRIORITY_MEDIUM),
       "https", true);
   ASSERT_TRUE(result);
@@ -715,6 +721,9 @@
   // Get the cookie without updating the access time and check
   // the access time is null.
   net::CookieOptions options;
+  options.set_same_site_cookie_context(
+      net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT);
+
   options.set_do_not_update_access_time();
   std::vector<net::CanonicalCookie> cookies = service_wrapper()->GetCookieList(
       GURL("https://foo_host.com/with/path"), options);
@@ -739,8 +748,8 @@
   EXPECT_TRUE(SetCanonicalCookie(
       net::CanonicalCookie(
           "A", "B", "foo_host", "/", base::Time(), base::Time(), base::Time(),
-          /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          /*secure=*/false, /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+          net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   std::vector<net::CanonicalCookie> cookies =
       service_wrapper()->GetAllCookies();
@@ -755,36 +764,36 @@
       net::CanonicalCookie("A", "B", kCookieDomain, "/", base::Time(),
                            base::Time(), base::Time(),
                            /*secure=*/false, /*httponly=*/false,
-                           net::CookieSameSite::NO_RESTRICTION,
+                           net::CookieSameSite::LAX_MODE,
                            net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "C", "D", "foo_host2", "/with/path", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("C", "D", "foo_host2", "/with/path", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "Secure", "E", kCookieDomain, "/with/path", base::Time(),
-          base::Time(), base::Time(), /*secure=*/true,
-          /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
-          net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("Secure", "E", kCookieDomain, "/with/path",
+                           base::Time(), base::Time(), base::Time(),
+                           /*secure=*/true,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "HttpOnly", "F", kCookieDomain, "/with/path", base::Time(),
-          base::Time(), base::Time(), /*secure=*/false,
-          /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION,
-          net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("HttpOnly", "F", kCookieDomain, "/with/path",
+                           base::Time(), base::Time(), base::Time(),
+                           /*secure=*/false,
+                           /*httponly=*/true, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   base::Time yesterday = base::Time::Now() - base::TimeDelta::FromDays(1);
   EXPECT_TRUE(service_wrapper()->SetCanonicalCookie(
       net::CanonicalCookie(
           "A", "E", kCookieDomain, "/", base::Time(), yesterday, base::Time(),
-          /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          /*secure=*/false, /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+          net::COOKIE_PRIORITY_MEDIUM),
       "http", false));
 
   std::vector<net::CanonicalCookie> cookies =
@@ -829,7 +838,7 @@
               net::CanonicalCookie("N", "O", kCookieDomain, "/", base::Time(),
                                    base::Time(), base::Time(),
                                    /*secure=*/false, /*httponly=*/true,
-                                   net::CookieSameSite::NO_RESTRICTION,
+                                   net::CookieSameSite::LAX_MODE,
                                    net::COOKIE_PRIORITY_MEDIUM),
               "http", false)
           .HasExactlyExclusionReasonsForTesting(
@@ -843,11 +852,11 @@
 
 TEST_F(CookieManagerTest, ConfirmSecureOverwriteFails) {
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "Secure", "F", kCookieDomain, "/with/path", base::Time(),
-          base::Time(), base::Time(), /*secure=*/true,
-          /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
-          net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("Secure", "F", kCookieDomain, "/with/path",
+                           base::Time(), base::Time(), base::Time(),
+                           /*secure=*/true,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   EXPECT_TRUE(
@@ -856,7 +865,7 @@
               net::CanonicalCookie(
                   "Secure", "Nope", kCookieDomain, "/with/path", base::Time(),
                   base::Time(), base::Time(), /*secure=*/false,
-                  /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
+                  /*httponly=*/false, net::CookieSameSite::LAX_MODE,
                   net::COOKIE_PRIORITY_MEDIUM),
               "http", false)
           .HasExactlyExclusionReasonsForTesting(
@@ -873,11 +882,11 @@
 
 TEST_F(CookieManagerTest, ConfirmHttpOnlyOverwriteFails) {
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "HttpOnly", "F", kCookieDomain, "/with/path", base::Time(),
-          base::Time(), base::Time(), /*secure=*/false,
-          /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION,
-          net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("HttpOnly", "F", kCookieDomain, "/with/path",
+                           base::Time(), base::Time(), base::Time(),
+                           /*secure=*/false,
+                           /*httponly=*/true, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "http", true));
 
   EXPECT_TRUE(
@@ -886,7 +895,7 @@
               net::CanonicalCookie(
                   "HttpOnly", "Nope", kCookieDomain, "/with/path", base::Time(),
                   base::Time(), base::Time(), /*secure=*/false,
-                  /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
+                  /*httponly=*/false, net::CookieSameSite::LAX_MODE,
                   net::COOKIE_PRIORITY_MEDIUM),
               "https", false)
           .HasExactlyExclusionReasonsForTesting(
@@ -907,14 +916,14 @@
       net::CanonicalCookie("A", "B", kCookieDomain, "/", base::Time(),
                            base::Time(), base::Time(),
                            /*secure=*/false, /*httponly=*/false,
-                           net::CookieSameSite::NO_RESTRICTION,
+                           net::CookieSameSite::LAX_MODE,
                            net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "C", "D", "foo_host2", "/with/path", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("C", "D", "foo_host2", "/with/path", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
       net::CanonicalCookie(
@@ -924,11 +933,11 @@
           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "HttpOnly", "F", kCookieDomain, "/with/path", base::Time(),
-          base::Time(), base::Time(), /*secure=*/false,
-          /*httponly=*/true, net::CookieSameSite::NO_RESTRICTION,
-          net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("HttpOnly", "F", kCookieDomain, "/with/path",
+                           base::Time(), base::Time(), base::Time(),
+                           /*secure=*/false,
+                           /*httponly=*/true, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   mojom::CookieDeletionFilter filter;
@@ -947,7 +956,7 @@
       net::CanonicalCookie("A1", "val", kCookieDomain, "/",
                            now - base::TimeDelta::FromMinutes(60), base::Time(),
                            base::Time(), /*secure=*/false, /*httponly=*/false,
-                           net::CookieSameSite::NO_RESTRICTION,
+                           net::CookieSameSite::LAX_MODE,
                            net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
@@ -955,16 +964,16 @@
       net::CanonicalCookie(
           "A2", "val", kCookieDomain, "/",
           now - base::TimeDelta::FromMinutes(120), base::Time(), base::Time(),
-          /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          /*secure=*/false, /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+          net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   EXPECT_TRUE(SetCanonicalCookie(
       net::CanonicalCookie(
           "A3", "val", kCookieDomain, "/",
           now - base::TimeDelta::FromMinutes(180), base::Time(), base::Time(),
-          /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          /*secure=*/false, /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+          net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   mojom::CookieDeletionFilter filter;
@@ -982,24 +991,24 @@
 TEST_F(CookieManagerTest, DeleteByExcludingDomains) {
   // Create three cookies and delete the middle one.
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A1", "val", "foo_host1", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A1", "val", "foo_host1", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A2", "val", "foo_host2", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A2", "val", "foo_host2", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A3", "val", "foo_host3", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A3", "val", "foo_host3", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   mojom::CookieDeletionFilter filter;
@@ -1015,24 +1024,24 @@
 TEST_F(CookieManagerTest, DeleteByIncludingDomains) {
   // Create three cookies and delete the middle one.
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A1", "val", "foo_host1", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A1", "val", "foo_host1", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A2", "val", "foo_host2", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A2", "val", "foo_host2", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A3", "val", "foo_host3", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A3", "val", "foo_host3", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   mojom::CookieDeletionFilter filter;
@@ -1050,22 +1059,22 @@
 TEST_F(CookieManagerTest, DeleteDetails_eTLD) {
   // Two domains on diferent levels of the same eTLD both get deleted.
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A1", "val", "example.com", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A1", "val", "example.com", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A2", "val", "www.example.com", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A2", "val", "www.example.com", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A3", "val", "www.nonexample.com", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A3", "val", "www.nonexample.com", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   mojom::CookieDeletionFilter filter;
@@ -1081,22 +1090,22 @@
 
   // Same thing happens on an eTLD+1 which isn't a TLD+1.
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A1", "val", "example.co.uk", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A1", "val", "example.co.uk", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A2", "val", "www.example.co.uk", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A2", "val", "www.example.co.uk", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
       net::CanonicalCookie(
           "A3", "val", "www.nonexample.co.uk", "/", base::Time(), base::Time(),
           base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   filter.including_domains = std::vector<std::string>();
   filter.including_domains->push_back("example.co.uk");
@@ -1110,22 +1119,22 @@
   // Deletion of a second level domain that's an eTLD doesn't delete any
   // subdomains.
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A1", "val", "example.co.uk", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A1", "val", "example.co.uk", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A2", "val", "www.example.co.uk", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A2", "val", "www.example.co.uk", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
       net::CanonicalCookie(
           "A3", "val", "www.nonexample.co.uk", "/", base::Time(), base::Time(),
           base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   filter.including_domains = std::vector<std::string>();
   filter.including_domains->push_back("co.uk");
@@ -1143,28 +1152,28 @@
   // (leading .) for each of two separate domains.  Confirm that the
   // filter deletes both of one domain and leaves the other alone.
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A1", "val", "foo_host.com", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A1", "val", "foo_host.com", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A2", "val", ".foo_host.com", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A2", "val", ".foo_host.com", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A3", "val", "bar.host.com", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A3", "val", "bar.host.com", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A4", "val", ".bar.host.com", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A4", "val", ".bar.host.com", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   mojom::CookieDeletionFilter filter;
@@ -1181,34 +1190,34 @@
 
 TEST_F(CookieManagerTest, DeleteDetails_eTLDvsPrivateRegistry) {
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A1", "val", "random.co.uk", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A1", "val", "random.co.uk", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
       net::CanonicalCookie(
           "A2", "val", "sub.domain.random.co.uk", "/", base::Time(),
           base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A3", "val", "random.com", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A3", "val", "random.com", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
       net::CanonicalCookie(
           "A4", "val", "random", "/", base::Time(), base::Time(), base::Time(),
-          /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          /*secure=*/false, /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+          net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A5", "val", "normal.co.uk", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A5", "val", "normal.co.uk", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   mojom::CookieDeletionFilter filter;
@@ -1226,10 +1235,10 @@
 
 TEST_F(CookieManagerTest, DeleteDetails_PrivateRegistry) {
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A1", "val", "privatedomain", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A1", "val", "privatedomain", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   EXPECT_TRUE(SetCanonicalCookie(
@@ -1238,7 +1247,7 @@
           // .com.
           "A2", "val", "privatedomain.com", "/", base::Time(), base::Time(),
           base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   EXPECT_TRUE(SetCanonicalCookie(
@@ -1247,7 +1256,7 @@
           // level
           "A3", "val", "subdomain.privatedomain", "/", base::Time(),
           base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   mojom::CookieDeletionFilter filter;
@@ -1281,13 +1290,13 @@
       net::CanonicalCookie(
           "A01", "RandomValue", "example.com", "/", base::Time(), base::Time(),
           base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
       net::CanonicalCookie(
           "A02", "RandomValue", "canonical.com", "/", base::Time(),
           base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   // Path
@@ -1295,13 +1304,13 @@
       net::CanonicalCookie(
           "A03", "val", "example.com", "/this/is/a/long/path", base::Time(),
           base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
       net::CanonicalCookie(
           "A04", "val", "canonical.com", "/this/is/a/long/path", base::Time(),
           base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   // Last_access
@@ -1310,7 +1319,7 @@
           "A05", "val", "example.com", "/",
           base::Time::Now() - base::TimeDelta::FromDays(3), base::Time(),
           base::Time::Now() - base::TimeDelta::FromDays(3), /*secure=*/false,
-          /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
+          /*httponly=*/false, net::CookieSameSite::LAX_MODE,
           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
@@ -1318,7 +1327,7 @@
           "A06", "val", "canonical.com", "/",
           base::Time::Now() - base::TimeDelta::FromDays(3), base::Time(),
           base::Time::Now() - base::TimeDelta::FromDays(3), /*secure=*/false,
-          /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
+          /*httponly=*/false, net::CookieSameSite::LAX_MODE,
           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
@@ -1338,16 +1347,16 @@
 
   // Priority
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A09", "val", "example.com", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_HIGH),
+      net::CanonicalCookie("A09", "val", "example.com", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_HIGH),
       "https", true));
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A10", "val", "canonical.com", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_HIGH),
+      net::CanonicalCookie("A10", "val", "canonical.com", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_HIGH),
       "https", true));
 
   // Use the filter and make sure the result is the expected set.
@@ -1441,7 +1450,7 @@
         net::CanonicalCookie(
             "A1", "val", test_cases[i].domain, test_cases[i].path, base::Time(),
             base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false,
-            net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+            net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
         "https", true));
 
     if (!exclude_domain_cookie) {
@@ -1450,7 +1459,7 @@
           net::CanonicalCookie(
               "A2", "val", "." + test_cases[i].domain, test_cases[i].path,
               base::Time(), base::Time(), base::Time(), /*secure=*/false,
-              /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
+              /*httponly=*/false, net::CookieSameSite::LAX_MODE,
               net::COOKIE_PRIORITY_MEDIUM),
           "https", true));
     }
@@ -1460,7 +1469,7 @@
         net::CanonicalCookie(
             "A3", "val", test_cases[i].domain, test_cases[i].path, base::Time(),
             base::Time(), base::Time(), /*secure=*/false, /*httponly=*/true,
-            net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+            net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
         "https", true));
 
     // Httponly and secure cookie
@@ -1468,7 +1477,7 @@
         net::CanonicalCookie(
             "A4", "val", test_cases[i].domain, test_cases[i].path, base::Time(),
             base::Time(), base::Time(), /*secure=*/false, /*httponly=*/true,
-            net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+            net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
         "https", true));
 
     const uint32_t number_cookies = exclude_domain_cookie ? 3u : 4u;
@@ -1486,31 +1495,31 @@
 TEST_F(CookieManagerTest, DeleteByName) {
   // Create cookies with varying (name, host)
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A1", "val", kCookieDomain, "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A1", "val", kCookieDomain, "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true /*modify_httponly*/));
 
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A1", "val", "bar_host", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A1", "val", "bar_host", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true /*modify_httponly*/));
 
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A2", "val", kCookieDomain, "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A2", "val", kCookieDomain, "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true /*modify_httponly*/));
 
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A3", "val", "bar_host", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A3", "val", "bar_host", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true /*modify_httponly*/));
 
   mojom::CookieDeletionFilter filter;
@@ -1542,7 +1551,7 @@
       net::CanonicalCookie(
           "A02", "val", "sub.www.example.com", "/path", base::Time(),
           base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
       "https", true /*modify_httponly*/));
 
   // Cookie that shouldn't be deleted because the path doesn't match.
@@ -1550,7 +1559,7 @@
       net::CanonicalCookie(
           "A03", "val", "www.example.com", "/otherpath", base::Time(),
           base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
       "https", true /*modify_httponly*/));
 
   // Cookie that shouldn't be deleted because the path is more specific
@@ -1559,16 +1568,16 @@
       net::CanonicalCookie(
           "A04", "val", "www.example.com", "/path/path2", base::Time(),
           base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
       "https", true /*modify_httponly*/));
 
   // Cookie that shouldn't be deleted because it's at a host cookie domain that
   // doesn't exactly match the url's host.
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A05", "val", "example.com", "/path", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A05", "val", "example.com", "/path", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true /*modify_httponly*/));
 
   // Cookie that should not be deleted because it's not a host cookie and
@@ -1577,7 +1586,7 @@
       net::CanonicalCookie(
           "A06", "val", ".sub.www.example.com", "/path", base::Time(),
           base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
       "https", true /*modify_httponly*/));
 
   // Cookie that should be deleted because it's not a host cookie and has a
@@ -1586,16 +1595,16 @@
       net::CanonicalCookie(
           "A07", "val", ".www.example.com", "/path", base::Time(), base::Time(),
           base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
       "https", true /*modify_httponly*/));
 
   // Cookie that should be deleted because it's not a host cookie and has a
   // domain that domain matches the URL.
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A08", "val", ".example.com", "/path", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A08", "val", ".example.com", "/path", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true /*modify_httponly*/));
 
   // Cookie that should be deleted because it matches exactly.
@@ -1603,16 +1612,16 @@
       net::CanonicalCookie(
           "A09", "val", "www.example.com", "/path", base::Time(), base::Time(),
           base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
       "https", true /*modify_httponly*/));
 
   // Cookie that should be deleted because it applies to a larger set
   // of paths than the URL path.
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A10", "val", "www.example.com", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A10", "val", "www.example.com", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true /*modify_httponly*/));
 
   mojom::CookieDeletionFilter filter;
@@ -1636,25 +1645,25 @@
 
   // Create three cookies and delete the middle one.
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A1", "val", kCookieDomain, "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A1", "val", kCookieDomain, "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   EXPECT_TRUE(SetCanonicalCookie(
       net::CanonicalCookie("A2", "val", kCookieDomain, "/", base::Time(),
                            now + base::TimeDelta::FromDays(1), base::Time(),
                            /*secure=*/false, /*httponly=*/false,
-                           net::CookieSameSite::NO_RESTRICTION,
+                           net::CookieSameSite::LAX_MODE,
                            net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A3", "val", kCookieDomain, "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A3", "val", kCookieDomain, "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   mojom::CookieDeletionFilter filter;
@@ -1706,7 +1715,7 @@
       net::CanonicalCookie(
           "A1", "val0", "nope.com", "/path", now - base::TimeDelta::FromDays(3),
           now + base::TimeDelta::FromDays(3), base::Time(), /*secure=*/false,
-          /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
+          /*httponly=*/false, net::CookieSameSite::LAX_MODE,
           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
@@ -1715,7 +1724,7 @@
       net::CanonicalCookie(
           "A2", "val1", "nope.com", "/path", now - base::TimeDelta::FromDays(5),
           now + base::TimeDelta::FromDays(3), base::Time(), /*secure=*/false,
-          /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
+          /*httponly=*/false, net::CookieSameSite::LAX_MODE,
           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
@@ -1724,18 +1733,18 @@
       net::CanonicalCookie(
           "A3", "val2", "nope.com", "/path", now - base::TimeDelta::FromDays(1),
           now + base::TimeDelta::FromDays(3), base::Time(), /*secure=*/false,
-          /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
+          /*httponly=*/false, net::CookieSameSite::LAX_MODE,
           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   // Not in domains_and_ips_to_delete.
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A4", "val3", "other.com", "/path",
-          now - base::TimeDelta::FromDays(3),
-          now + base::TimeDelta::FromDays(3), base::Time(), /*secure=*/false,
-          /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
-          net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A4", "val3", "other.com", "/path",
+                           now - base::TimeDelta::FromDays(3),
+                           now + base::TimeDelta::FromDays(3), base::Time(),
+                           /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   // In domains_and_ips_to_ignore.
@@ -1743,18 +1752,18 @@
       net::CanonicalCookie(
           "A5", "val4", "no.com", "/path", now - base::TimeDelta::FromDays(3),
           now + base::TimeDelta::FromDays(3), base::Time(), /*secure=*/false,
-          /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
+          /*httponly=*/false, net::CookieSameSite::LAX_MODE,
           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   // Doesn't match URL (by path).
   EXPECT_TRUE(SetCanonicalCookie(
-      net::CanonicalCookie(
-          "A6", "val6", "nope.com", "/otherpath",
-          now - base::TimeDelta::FromDays(3),
-          now + base::TimeDelta::FromDays(3), base::Time(), /*secure=*/false,
-          /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
-          net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("A6", "val6", "nope.com", "/otherpath",
+                           now - base::TimeDelta::FromDays(3),
+                           now + base::TimeDelta::FromDays(3), base::Time(),
+                           /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   // Session
@@ -1762,7 +1771,7 @@
       net::CanonicalCookie(
           "A7", "val7", "nope.com", "/path", now - base::TimeDelta::FromDays(3),
           base::Time(), base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+          net::CookieSameSite::LAX_MODE, net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   EXPECT_EQ(1u, service_wrapper()->DeleteCookies(filter));
@@ -1836,11 +1845,11 @@
   // Set a cookie that doesn't match the above notification request in name
   // and confirm it doesn't produce a notification.
   service_wrapper()->SetCanonicalCookie(
-      net::CanonicalCookie(
-          "DifferentName", "val", listener_url_host, "/", base::Time(),
-          base::Time(), base::Time(), /*secure=*/false,
-          /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
-          net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("DifferentName", "val", listener_url_host, "/",
+                           base::Time(), base::Time(), base::Time(),
+                           /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true);
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ(0u, listener.observed_changes().size());
@@ -1848,11 +1857,11 @@
   // Set a cookie that doesn't match the above notification request in url
   // and confirm it doesn't produce a notification.
   service_wrapper()->SetCanonicalCookie(
-      net::CanonicalCookie(
-          listener_cookie_name, "val", "www.other.host", "/", base::Time(),
-          base::Time(), base::Time(), /*secure=*/false,
-          /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
-          net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie(listener_cookie_name, "val", "www.other.host", "/",
+                           base::Time(), base::Time(), base::Time(),
+                           /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true);
 
   base::RunLoop().RunUntilIdle();
@@ -1860,11 +1869,11 @@
 
   // Insert a cookie that does match.
   service_wrapper()->SetCanonicalCookie(
-      net::CanonicalCookie(
-          listener_cookie_name, "val", listener_url_host, "/", base::Time(),
-          base::Time(), base::Time(), /*secure=*/false,
-          /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
-          net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie(listener_cookie_name, "val", listener_url_host, "/",
+                           base::Time(), base::Time(), base::Time(),
+                           /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true);
 
   // Expect asynchrony
@@ -1917,8 +1926,7 @@
   service_wrapper()->SetCanonicalCookie(
       net::CanonicalCookie("Thing1", "val", kExampleHost, "/", base::Time(),
                            base::Time(), base::Time(), /*secure=*/false,
-                           /*httponly=*/false,
-                           net::CookieSameSite::NO_RESTRICTION,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
                            net::COOKIE_PRIORITY_MEDIUM),
       "https", true);
 
@@ -1941,15 +1949,13 @@
   service_wrapper()->SetCanonicalCookie(
       net::CanonicalCookie("Thing1", "val", kThisHost, "/", base::Time(),
                            base::Time(), base::Time(), /*secure=*/false,
-                           /*httponly=*/false,
-                           net::CookieSameSite::NO_RESTRICTION,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
                            net::COOKIE_PRIORITY_MEDIUM),
       "https", true);
   service_wrapper()->SetCanonicalCookie(
       net::CanonicalCookie("Thing2", "val", kThatHost, "/", base::Time(),
                            base::Time(), base::Time(), /*secure=*/false,
-                           /*httponly=*/false,
-                           net::CookieSameSite::NO_RESTRICTION,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
                            net::COOKIE_PRIORITY_MEDIUM),
       "https", true);
 
@@ -2002,11 +2008,11 @@
 
   // Add a cookie and receive a notification on both interfaces.
   service_wrapper()->SetCanonicalCookie(
-      net::CanonicalCookie(
-          listener_cookie_name, "val", listener_url_host, "/", base::Time(),
-          base::Time(), base::Time(), /*secure=*/false,
-          /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
-          net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie(listener_cookie_name, "val", listener_url_host, "/",
+                           base::Time(), base::Time(), base::Time(),
+                           /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true);
 
   EXPECT_EQ(0u, listener1->observed_changes().size());
@@ -2056,14 +2062,14 @@
   // Set a cookie on the new interface and make sure it's visible on the
   // old one.
   EXPECT_TRUE(new_wrapper.SetCanonicalCookie(
-      net::CanonicalCookie(
-          "X", "Y", "www.other.host", "/", base::Time(), base::Time(),
-          base::Time(), /*secure=*/false, /*httponly=*/false,
-          net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_MEDIUM),
+      net::CanonicalCookie("X", "Y", "www.other.host", "/", base::Time(),
+                           base::Time(), base::Time(), /*secure=*/false,
+                           /*httponly=*/false, net::CookieSameSite::LAX_MODE,
+                           net::COOKIE_PRIORITY_MEDIUM),
       "https", true));
 
   std::vector<net::CanonicalCookie> cookies = service_wrapper()->GetCookieList(
-      GURL("http://www.other.host/"), net::CookieOptions());
+      GURL("http://www.other.host/"), net::CookieOptions::MakeAllInclusive());
   ASSERT_EQ(1u, cookies.size());
   EXPECT_EQ("X", cookies[0].Name());
   EXPECT_EQ("Y", cookies[0].Value());
@@ -2224,7 +2230,7 @@
     return net::CanonicalCookie("A", "B", domain, "/", t,
                                 t + base::TimeDelta::FromDays(1), base::Time(),
                                 /*secure=*/false, /*httponly=*/false,
-                                net::CookieSameSite::NO_RESTRICTION,
+                                net::CookieSameSite::LAX_MODE,
                                 net::COOKIE_PRIORITY_MEDIUM);
   }
 
diff --git a/services/network/cors/cors_url_loader_factory_unittest.cc b/services/network/cors/cors_url_loader_factory_unittest.cc
index 289e806..c7ae5ef 100644
--- a/services/network/cors/cors_url_loader_factory_unittest.cc
+++ b/services/network/cors/cors_url_loader_factory_unittest.cc
@@ -5,7 +5,6 @@
 #include <memory>
 
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/services/network/cors/cors_url_loader_unittest.cc b/services/network/cors/cors_url_loader_unittest.cc
index 6ffb755..b9ca215a 100644
--- a/services/network/cors/cors_url_loader_unittest.cc
+++ b/services/network/cors/cors_url_loader_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop.h"
 #include "base/optional.h"
 #include "base/run_loop.h"
 #include "base/strings/string_piece.h"
diff --git a/services/network/network_context.cc b/services/network/network_context.cc
index c538b12d..d9c92c4 100644
--- a/services/network/network_context.cc
+++ b/services/network/network_context.cc
@@ -1083,6 +1083,7 @@
     const GURL& url,
     const std::vector<std::string>& requested_protocols,
     const GURL& site_for_cookies,
+    const net::NetworkIsolationKey& network_isolation_key,
     std::vector<mojom::HttpHeaderPtr> additional_headers,
     int32_t process_id,
     int32_t render_frame_id,
@@ -1095,9 +1096,10 @@
   if (!websocket_factory_)
     websocket_factory_ = std::make_unique<WebSocketFactory>(this);
   websocket_factory_->CreateWebSocket(
-      url, requested_protocols, site_for_cookies, std::move(additional_headers),
-      process_id, render_frame_id, origin, options, std::move(handshake_client),
-      std::move(auth_handler), std::move(header_client));
+      url, requested_protocols, site_for_cookies, network_isolation_key,
+      std::move(additional_headers), process_id, render_frame_id, origin,
+      options, std::move(handshake_client), std::move(auth_handler),
+      std::move(header_client));
 #endif  // !defined(OS_IOS)
 }
 
diff --git a/services/network/network_context.h b/services/network/network_context.h
index 28dcfb30..7a51a2ae 100644
--- a/services/network/network_context.h
+++ b/services/network/network_context.h
@@ -278,6 +278,7 @@
       const GURL& url,
       const std::vector<std::string>& requested_protocols,
       const GURL& site_for_cookies,
+      const net::NetworkIsolationKey& network_isolation_key,
       std::vector<mojom::HttpHeaderPtr> additional_headers,
       int32_t process_id,
       int32_t render_frame_id,
diff --git a/services/network/network_context_unittest.cc b/services/network/network_context_unittest.cc
index 561fc89..1cd2c664 100644
--- a/services/network/network_context_unittest.cc
+++ b/services/network/network_context_unittest.cc
@@ -2107,10 +2107,10 @@
   bool result = false;
   cookie_manager->SetCanonicalCookie(
       net::CanonicalCookie(key, value, url.host(), "/", base::Time(),
-                           base::Time(), base::Time(), false, false,
+                           base::Time(), base::Time(), true, false,
                            net::CookieSameSite::NO_RESTRICTION,
                            net::COOKIE_PRIORITY_LOW),
-      url.scheme(), net::CookieOptions(),
+      url.scheme(), net::CookieOptions::MakeAllInclusive(),
       base::BindOnce(&SetCookieCallback, &run_loop, &result));
   run_loop.Run();
   return result;
@@ -2127,14 +2127,12 @@
   // Set a cookie through the cookie interface.
   base::RunLoop run_loop1;
   bool result = false;
-  net::CookieOptions options;
-  options.set_include_httponly();
   cookie_manager_remote->SetCanonicalCookie(
       net::CanonicalCookie("TestCookie", "1", "www.test.com", "/", base::Time(),
                            base::Time(), base::Time(), false, false,
-                           net::CookieSameSite::NO_RESTRICTION,
+                           net::CookieSameSite::LAX_MODE,
                            net::COOKIE_PRIORITY_LOW),
-      "https", options,
+      "https", net::CookieOptions::MakeAllInclusive(),
       base::BindOnce(&SetCookieCallback, &run_loop1, &result));
   run_loop1.Run();
   EXPECT_TRUE(result);
@@ -2146,7 +2144,8 @@
   network_context->url_request_context()
       ->cookie_store()
       ->GetCookieListWithOptionsAsync(
-          GURL("http://www.test.com/whatever"), net::CookieOptions(),
+          GURL("http://www.test.com/whatever"),
+          net::CookieOptions::MakeAllInclusive(),
           base::Bind(&GetCookieListCallback, &run_loop2, &cookies));
   run_loop2.Run();
   ASSERT_EQ(1u, cookies.size());
@@ -3317,7 +3316,7 @@
       kURL, net::DEFAULT_PRIORITY, nullptr, TRAFFIC_ANNOTATION_FOR_TESTS);
   net::CanonicalCookie cookie("TestCookie", "1", "www.test.com", "/",
                               base::Time(), base::Time(), base::Time(), false,
-                              false, net::CookieSameSite::NO_RESTRICTION,
+                              false, net::CookieSameSite::LAX_MODE,
                               net::COOKIE_PRIORITY_LOW);
 
   EXPECT_TRUE(
@@ -3337,7 +3336,7 @@
       kURL, net::DEFAULT_PRIORITY, nullptr, TRAFFIC_ANNOTATION_FOR_TESTS);
   net::CanonicalCookie cookie("TestCookie", "1", "www.test.com", "/",
                               base::Time(), base::Time(), base::Time(), false,
-                              false, net::CookieSameSite::NO_RESTRICTION,
+                              false, net::CookieSameSite::LAX_MODE,
                               net::COOKIE_PRIORITY_LOW);
 
   SetDefaultContentSetting(CONTENT_SETTING_ALLOW, network_context.get());
@@ -5584,7 +5583,8 @@
 }
 
 TEST_F(NetworkContextTest, AllowAllCookies) {
-  net::test_server::EmbeddedTestServer test_server;
+  net::test_server::EmbeddedTestServer test_server(
+      net::test_server::EmbeddedTestServer::TYPE_HTTPS);
   test_server.AddDefaultHandlers(
       base::FilePath(FILE_PATH_LITERAL("services/test/data")));
   ASSERT_TRUE(test_server.Start());
@@ -5628,7 +5628,8 @@
 }
 
 TEST_F(NetworkContextTest, BlockThirdPartyCookies) {
-  net::test_server::EmbeddedTestServer test_server;
+  net::test_server::EmbeddedTestServer test_server(
+      net::test_server::EmbeddedTestServer::TYPE_HTTPS);
   test_server.AddDefaultHandlers(
       base::FilePath(FILE_PATH_LITERAL("services/test/data")));
   ASSERT_TRUE(test_server.Start());
@@ -5672,7 +5673,8 @@
 }
 
 TEST_F(NetworkContextTest, BlockAllCookies) {
-  net::test_server::EmbeddedTestServer test_server;
+  net::test_server::EmbeddedTestServer test_server(
+      net::test_server::EmbeddedTestServer::TYPE_HTTPS);
   test_server.AddDefaultHandlers(
       base::FilePath(FILE_PATH_LITERAL("services/test/data")));
   ASSERT_TRUE(test_server.Start());
diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom
index dc293ac..ed3b458d 100644
--- a/services/network/public/mojom/network_context.mojom
+++ b/services/network/public/mojom/network_context.mojom
@@ -1042,6 +1042,8 @@
   // "sec-websocket-protocol" is constructed from  |requested_protocols| in
   // this message). |site_for_cookies| represents the first-party origin for
   // the request. |options| may be a combination of the kWebSocketOption* flags.
+  // |network_isolation_key| is a (top_frame, current_frame) origin combination
+  // used to isolate shared network stack resources based on the context.
   //
   // If |header_client| is set, requests with the kURLLoadOptionUseHeaderClient
   // option will callback to the |header_client|, allowing the Cookie/Referrer
@@ -1059,6 +1061,7 @@
         url.mojom.Url url,
         array<string> requested_protocols,
         url.mojom.Url site_for_cookies,
+        NetworkIsolationKey network_isolation_key,
         array<HttpHeader> additional_headers,
         int32 process_id,
         int32 render_frame_id,
diff --git a/services/network/restricted_cookie_manager_unittest.cc b/services/network/restricted_cookie_manager_unittest.cc
index 0a44f8e..aeb872b 100644
--- a/services/network/restricted_cookie_manager_unittest.cc
+++ b/services/network/restricted_cookie_manager_unittest.cc
@@ -216,15 +216,16 @@
 
   // Simplified helper for SetCanonicalCookie.
   //
-  // Creates a CanonicalCookie that is not secure, not http-only,
+  // Creates a CanonicalCookie that is secure (unless overriden), not http-only,
   // and has SameSite=None. Crashes if the creation fails.
   void SetSessionCookie(const char* name,
                         const char* value,
                         const char* domain,
-                        const char* path) {
+                        const char* path,
+                        bool secure = true) {
     CHECK(SetCanonicalCookie(
         net::CanonicalCookie(name, value, domain, path, base::Time(),
-                             base::Time(), base::Time(), /* secure = */ false,
+                             base::Time(), base::Time(), /* secure = */ secure,
                              /* httponly = */ false,
                              net::CookieSameSite::NO_RESTRICTION,
                              net::COOKIE_PRIORITY_DEFAULT),
@@ -238,7 +239,7 @@
                                 const char* path) {
     CHECK(SetCanonicalCookie(
         net::CanonicalCookie(name, value, domain, path, base::Time(),
-                             base::Time(), base::Time(), /* secure = */ false,
+                             base::Time(), base::Time(), /* secure = */ true,
                              /* httponly = */ true,
                              net::CookieSameSite::NO_RESTRICTION,
                              net::COOKIE_PRIORITY_DEFAULT),
@@ -452,9 +453,9 @@
   EXPECT_THAT(recorded_activity()[0].cookie,
               net::MatchesCookieLine("cookie-name=cookie-value"));
   EXPECT_TRUE(recorded_activity()[0].status.IsInclude());
-  EXPECT_EQ(net::CanonicalCookie::CookieInclusionStatus::WarningReason::
-                WARN_SAMESITE_NONE_INSECURE,
-            recorded_activity()[0].status.warning());
+  EXPECT_EQ(
+      net::CanonicalCookie::CookieInclusionStatus::WarningReason::DO_NOT_WARN,
+      recorded_activity()[0].status.warning());
 
   // Disabing getting third-party cookies works correctly.
   cookie_settings_.set_block_third_party_cookies(true);
@@ -483,7 +484,19 @@
 
 TEST_P(RestrictedCookieManagerTest, GetAllForUrlPolicyWarnActual) {
   service_->OverrideSiteForCookiesForTesting(GURL("https://notexample.com"));
-  SetSessionCookie("cookie-name", "cookie-value", "example.com", "/");
+  {
+    // Disable kCookiesWithoutSameSiteMustBeSecure to inject such a cookie.
+    base::test::ScopedFeatureList feature_list;
+    feature_list.InitWithFeatures(
+        {} /* enabled_features */,
+        {net::features::kSameSiteByDefaultCookies,
+         net::features::
+             kCookiesWithoutSameSiteMustBeSecure} /* disabled_features */);
+    SetSessionCookie("cookie-name", "cookie-value", "example.com", "/",
+                     /* secure = */ false);
+  }
+
+  // Now test get with the feature on.
   base::test::ScopedFeatureList feature_list;
   feature_list.InitWithFeatures(
       {net::features::kSameSiteByDefaultCookies,
@@ -519,7 +532,7 @@
   EXPECT_TRUE(sync_service_->SetCanonicalCookie(
       net::CanonicalCookie(
           "new-name", "new-value", "example.com", "/", base::Time(),
-          base::Time(), base::Time(), /* secure = */ false,
+          base::Time(), base::Time(), /* secure = */ true,
           /* httponly = */ false, net::CookieSameSite::NO_RESTRICTION,
           net::COOKIE_PRIORITY_DEFAULT),
       GURL("https://example.com/test/"), GURL("https://example.com"),
@@ -543,7 +556,7 @@
             sync_service_->SetCanonicalCookie(
                 net::CanonicalCookie(
                     "new-name", "new-value", "example.com", "/", base::Time(),
-                    base::Time(), base::Time(), /* secure = */ false,
+                    base::Time(), base::Time(), /* secure = */ true,
                     /* httponly = */ true, net::CookieSameSite::NO_RESTRICTION,
                     net::COOKIE_PRIORITY_DEFAULT),
                 GURL("https://example.com/test/"), GURL("https://example.com"),
@@ -611,7 +624,7 @@
   EXPECT_FALSE(sync_service_->SetCanonicalCookie(
       net::CanonicalCookie(
           "new-name", "new-value", "not-example.com", "/", base::Time(),
-          base::Time(), base::Time(), /* secure = */ false,
+          base::Time(), base::Time(), /* secure = */ true,
           /* httponly = */ false, net::CookieSameSite::NO_RESTRICTION,
           net::COOKIE_PRIORITY_DEFAULT),
       GURL("https://not-example.com/test/"), GURL("https://example.com"),
@@ -632,9 +645,9 @@
   service_->OverrideSiteForCookiesForTesting(GURL("https://notexample.com"));
   {
     // With default settings object, setting a third-party cookie is OK.
-    auto cookie = net::CanonicalCookie::Create(GURL("https://example.com"),
-                                               "A=B", base::Time::Now(),
-                                               base::nullopt /* server_time */);
+    auto cookie = net::CanonicalCookie::Create(
+        GURL("https://example.com"), "A=B; SameSite=none; Secure",
+        base::Time::Now(), base::nullopt /* server_time */);
     EXPECT_TRUE(sync_service_->SetCanonicalCookie(
         *cookie, GURL("https://example.com"), GURL("https://notexample.com"),
         url::Origin::Create(GURL("https://example.com"))));
@@ -646,17 +659,17 @@
   EXPECT_EQ(recorded_activity()[0].site_for_cookies, "https://notexample.com/");
   EXPECT_THAT(recorded_activity()[0].cookie, net::MatchesCookieLine("A=B"));
   EXPECT_TRUE(recorded_activity()[0].status.IsInclude());
-  EXPECT_EQ(net::CanonicalCookie::CookieInclusionStatus::WarningReason::
-                WARN_SAMESITE_UNSPECIFIED_CROSS_SITE_CONTEXT,
-            recorded_activity()[0].status.warning());
+  EXPECT_EQ(
+      net::CanonicalCookie::CookieInclusionStatus::WarningReason::DO_NOT_WARN,
+      recorded_activity()[0].status.warning());
 
   service_->OverrideSiteForCookiesForTesting(GURL("https://otherexample.com"));
   {
     // Not if third-party cookies are disabled, though.
     cookie_settings_.set_block_third_party_cookies(true);
-    auto cookie = net::CanonicalCookie::Create(GURL("https://example.com"),
-                                               "A2=B2", base::Time::Now(),
-                                               base::nullopt /* server_time */);
+    auto cookie = net::CanonicalCookie::Create(
+        GURL("https://example.com"), "A2=B2; SameSite=none; Secure",
+        base::Time::Now(), base::nullopt /* server_time */);
     EXPECT_FALSE(sync_service_->SetCanonicalCookie(
         *cookie, GURL("https://example.com"), GURL("https://otherexample.com"),
         url::Origin::Create(GURL("https://example.com"))));
diff --git a/services/network/test/test_network_context.h b/services/network/test/test_network_context.h
index 0d48737..83d1d91 100644
--- a/services/network/test/test_network_context.h
+++ b/services/network/test/test_network_context.h
@@ -149,6 +149,7 @@
       const GURL& url,
       const std::vector<std::string>& requested_protocols,
       const GURL& site_for_cookies,
+      const net::NetworkIsolationKey& network_isolation_key,
       std::vector<mojom::HttpHeaderPtr> additional_headers,
       int32_t process_id,
       int32_t render_frame_id,
diff --git a/services/network/url_loader_unittest.cc b/services/network/url_loader_unittest.cc
index c2cc1f0..a59a236f 100644
--- a/services/network/url_loader_unittest.cc
+++ b/services/network/url_loader_unittest.cc
@@ -43,6 +43,7 @@
 #include "net/base/mime_sniffer.h"
 #include "net/base/net_errors.h"
 #include "net/cert/test_root_certs.h"
+#include "net/cookies/cookie_util.h"
 #include "net/dns/mock_host_resolver.h"
 #include "net/http/http_response_info.h"
 #include "net/ssl/client_cert_identity_test_util.h"
@@ -3811,8 +3812,8 @@
     auto cookie = net::CanonicalCookie::Create(
         cookie_url, "a=b", base::Time::Now(), base::nullopt /* server_time */);
     context()->cookie_store()->SetCanonicalCookieAsync(
-        std::move(cookie), cookie_url.scheme(), net::CookieOptions(),
-        base::DoNothing());
+        std::move(cookie), cookie_url.scheme(),
+        net::CookieOptions::MakeAllInclusive(), base::DoNothing());
 
     base::RunLoop delete_run_loop;
     mojom::URLLoaderPtr loader;
@@ -3860,8 +3861,8 @@
         cookie_url, "a=b;Path=/something-else", base::Time::Now(),
         base::nullopt /* server_time */);
     context()->cookie_store()->SetCanonicalCookieAsync(
-        std::move(cookie), cookie_url.scheme(), net::CookieOptions(),
-        base::DoNothing());
+        std::move(cookie), cookie_url.scheme(),
+        net::CookieOptions::MakeAllInclusive(), base::DoNothing());
 
     base::RunLoop delete_run_loop;
     mojom::URLLoaderPtr loader;
@@ -4203,12 +4204,18 @@
 TEST_F(URLLoaderTest, CookieReportingCategories) {
   MockNetworkServiceClient network_service_client;
 
+  net::test_server::EmbeddedTestServer https_server(
+      net::test_server::EmbeddedTestServer::TYPE_HTTPS);
+  https_server.AddDefaultHandlers(
+      base::FilePath(FILE_PATH_LITERAL("services/test/data")));
+  ASSERT_TRUE(https_server.Start());
+
   // Upcoming deprecation warning.
   {
     MockNetworkContextClient network_context_client;
     TestURLLoaderClient loader_client;
-    ResourceRequest request =
-        CreateResourceRequest("GET", test_server()->GetURL("/set-cookie?a=b"));
+    ResourceRequest request = CreateResourceRequest(
+        "GET", https_server.GetURL("/set-cookie?a=b;Secure"));
     // Make this a third-party request.
     request.site_for_cookies = GURL("http://www.example.com");
 
@@ -4237,8 +4244,17 @@
     EXPECT_EQ(
         "b",
         network_context_client.reported_response_cookies()[0].cookie.Value());
-    EXPECT_TRUE(network_context_client.reported_response_cookies()[0]
-                    .status.IsInclude());
+    // This is either included or rejected as implicitly-cross-site, depending
+    // on flags.
+    if (net::cookie_util::IsSameSiteByDefaultCookiesEnabled()) {
+      EXPECT_TRUE(network_context_client.reported_response_cookies()[0]
+                      .status.HasExactlyExclusionReasonsForTesting(
+                          {net::CanonicalCookie::CookieInclusionStatus::
+                               EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX}));
+    } else {
+      EXPECT_TRUE(network_context_client.reported_response_cookies()[0]
+                      .status.IsInclude());
+    }
     EXPECT_EQ(
         net::CanonicalCookie::CookieInclusionStatus::WarningReason::
             WARN_SAMESITE_UNSPECIFIED_CROSS_SITE_CONTEXT,
@@ -4251,8 +4267,8 @@
     TestURLLoaderClient loader_client;
     test_network_delegate()->set_cookie_options(
         net::TestNetworkDelegate::NO_SET_COOKIE);
-    ResourceRequest request =
-        CreateResourceRequest("GET", test_server()->GetURL("/set-cookie?a=b"));
+    ResourceRequest request = CreateResourceRequest(
+        "GET", https_server.GetURL("/set-cookie?a=b;Secure"));
     // Make this a third-party request.
     request.site_for_cookies = GURL("http://www.example.com");
 
@@ -4289,7 +4305,9 @@
     test_network_delegate()->set_cookie_options(0);
   }
 
-  // Not permitted by cookie rules, but not the sort of thing that's reported.
+  // Not permitted by cookie rules, but not the sort of thing that's reported
+  // to NetworkContextClient. Note: this uses HTTP, not HTTPS, unlike others;
+  // and is in 1st-party context.
   {
     MockNetworkContextClient network_context_client;
     TestURLLoaderClient loader_client;
diff --git a/services/network/websocket.cc b/services/network/websocket.cc
index 0c77e56..b94c56ec 100644
--- a/services/network/websocket.cc
+++ b/services/network/websocket.cc
@@ -357,6 +357,7 @@
     const GURL& url,
     const std::vector<std::string>& requested_protocols,
     const GURL& site_for_cookies,
+    const net::NetworkIsolationKey& network_isolation_key,
     std::vector<mojom::HttpHeaderPtr> additional_headers,
     int32_t child_id,
     int32_t frame_id,
@@ -402,11 +403,11 @@
         FROM_HERE,
         base::BindOnce(&WebSocket::AddChannel, weak_ptr_factory_.GetWeakPtr(),
                        url, requested_protocols, site_for_cookies,
-                       std::move(additional_headers)),
+                       network_isolation_key, std::move(additional_headers)),
         delay_);
     return;
   }
-  AddChannel(url, requested_protocols, site_for_cookies,
+  AddChannel(url, requested_protocols, site_for_cookies, network_isolation_key,
              std::move(additional_headers));
 }
 
@@ -524,6 +525,7 @@
     const GURL& socket_url,
     const std::vector<std::string>& requested_protocols,
     const GURL& site_for_cookies,
+    const net::NetworkIsolationKey& network_isolation_key,
     std::vector<mojom::HttpHeaderPtr> additional_headers) {
   DVLOG(3) << "WebSocket::AddChannel @" << reinterpret_cast<void*>(this)
            << " socket_url=\"" << socket_url << "\" requested_protocols=\""
@@ -551,7 +553,8 @@
     }
   }
   channel_->SendAddChannelRequest(socket_url, requested_protocols, origin_,
-                                  site_for_cookies, headers_to_pass);
+                                  site_for_cookies, network_isolation_key,
+                                  headers_to_pass);
 }
 
 void WebSocket::OnWritable(MojoResult result,
diff --git a/services/network/websocket.h b/services/network/websocket.h
index a31430f..85d1ad8a 100644
--- a/services/network/websocket.h
+++ b/services/network/websocket.h
@@ -52,6 +52,7 @@
       const GURL& url,
       const std::vector<std::string>& requested_protocols,
       const GURL& site_for_cookies,
+      const net::NetworkIsolationKey& network_isolation_key,
       std::vector<mojom::HttpHeaderPtr> additional_headers,
       int32_t process_id,
       int32_t render_frame_id,
@@ -117,6 +118,7 @@
   void AddChannel(const GURL& socket_url,
                   const std::vector<std::string>& requested_protocols,
                   const GURL& site_for_cookies,
+                  const net::NetworkIsolationKey& network_isolation_key,
                   std::vector<mojom::HttpHeaderPtr> additional_headers);
   void OnSSLCertificateErrorResponse(
       std::unique_ptr<net::WebSocketEventInterface::SSLErrorCallbacks>
diff --git a/services/network/websocket_factory.cc b/services/network/websocket_factory.cc
index ae10cfb5..d6b859f 100644
--- a/services/network/websocket_factory.cc
+++ b/services/network/websocket_factory.cc
@@ -28,6 +28,7 @@
     const GURL& url,
     const std::vector<std::string>& requested_protocols,
     const GURL& site_for_cookies,
+    const net::NetworkIsolationKey& network_isolation_key,
     std::vector<mojom::HttpHeaderPtr> additional_headers,
     int32_t process_id,
     int32_t render_frame_id,
@@ -49,7 +50,7 @@
       context_->network_service()->HasRawHeadersAccess(
           process_id, net::ChangeWebSocketSchemeToHttpScheme(url)));
   connections_.insert(std::make_unique<WebSocket>(
-      this, url, requested_protocols, site_for_cookies,
+      this, url, requested_protocols, site_for_cookies, network_isolation_key,
       std::move(additional_headers), process_id, render_frame_id, origin,
       options, has_raw_headers_access, std::move(handshake_client),
       std::move(auth_handler), std::move(header_client),
diff --git a/services/network/websocket_factory.h b/services/network/websocket_factory.h
index 1d99e50..ea1e186 100644
--- a/services/network/websocket_factory.h
+++ b/services/network/websocket_factory.h
@@ -40,6 +40,7 @@
       const GURL& url,
       const std::vector<std::string>& requested_protocols,
       const GURL& site_for_cookies,
+      const net::NetworkIsolationKey& network_isolation_key,
       std::vector<mojom::HttpHeaderPtr> additional_headers,
       int32_t process_id,
       int32_t render_frame_id,
diff --git a/services/tracing/perfetto/consumer_host_unittest.cc b/services/tracing/perfetto/consumer_host_unittest.cc
index 41a9a09..7edc4b3 100644
--- a/services/tracing/perfetto/consumer_host_unittest.cc
+++ b/services/tracing/perfetto/consumer_host_unittest.cc
@@ -11,7 +11,6 @@
 #include <vector>
 
 #include "base/bind_helpers.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/sequenced_task_runner.h"
 #include "base/strings/strcat.h"
diff --git a/services/tracing/perfetto/json_trace_exporter_unittest.cc b/services/tracing/perfetto/json_trace_exporter_unittest.cc
index cdc98150..b9692f60 100644
--- a/services/tracing/perfetto/json_trace_exporter_unittest.cc
+++ b/services/tracing/perfetto/json_trace_exporter_unittest.cc
@@ -11,7 +11,6 @@
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/logging.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/strings/pattern.h"
 #include "base/strings/stringprintf.h"
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 4d5684d1..99d4f19 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
@@ -14,7 +14,6 @@
 #include "base/command_line.h"
 #include "base/debug/leak_annotations.h"
 #include "base/json/json_reader.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
diff --git a/styleguide/c++/c++-dos-and-donts.md b/styleguide/c++/c++-dos-and-donts.md
index 1b5b2541..6f7bde7 100644
--- a/styleguide/c++/c++-dos-and-donts.md
+++ b/styleguide/c++/c++-dos-and-donts.md
@@ -263,3 +263,9 @@
 // FooImpl implements the FooBase class.
 // FooFunction() modifies |foo_member_|.
 ```
+
+## Named namespaces
+
+Named namespaces are discouraged in top-level embedders (e.g., `chrome/`). See
+[this thread](https://groups.google.com/a/chromium.org/d/msg/chromium-dev/8ROncnL1t4k/J7uJMCQ8BwAJ)
+for background and discussion.
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 9e3e7cfe..f7f4c3e 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -1607,69 +1607,6 @@
             ]
         }
     ],
-    "ClickToCall": [
-        {
-            "platforms": [
-                "linux",
-                "mac",
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "ClickToCallUI"
-                    ]
-                }
-            ]
-        }
-    ],
-    "ClickToCallV2Receiver": [
-        {
-            "platforms": [
-                "android"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "ClickToCallOpenDialerDirectly"
-                    ]
-                }
-            ]
-        }
-    ],
-    "ClickToCallV2Sender": [
-        {
-            "platforms": [
-                "linux",
-                "mac",
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "ClickToCallContextMenuForSelectedText"
-                    ]
-                }
-            ]
-        },
-        {
-            "platforms": [
-                "chromeos"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "ClickToCallContextMenuForSelectedText",
-                        "ClickToCallUI"
-                    ]
-                }
-            ]
-        }
-    ],
     "ClipboardContentBehavior": [
         {
             "platforms": [
@@ -2994,6 +2931,21 @@
             ]
         }
     ],
+    "IOSSettingsAddPaymentMethod": [
+        {
+            "platforms": [
+                "ios"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "SettingsAddPaymentMethod"
+                    ]
+                }
+            ]
+        }
+    ],
     "IdentityDiscIPH": [
         {
             "platforms": [
diff --git a/third_party/blink/public/web/web_user_media_client.h b/third_party/blink/public/web/web_user_media_client.h
deleted file mode 100644
index 8e4ef18..0000000
--- a/third_party/blink/public/web/web_user_media_client.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * 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.
- */
-
-#ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_USER_MEDIA_CLIENT_H_
-#define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_USER_MEDIA_CLIENT_H_
-
-#include <memory>
-
-#include "base/memory/scoped_refptr.h"
-#include "third_party/blink/public/platform/web_common.h"
-
-namespace blink {
-
-class WebApplyConstraintsRequest;
-class WebMediaStreamTrack;
-class WebUserMediaRequest;
-class WebUserMediaClient;
-
-class WebUserMediaClient {
- public:
-  virtual ~WebUserMediaClient() = default;
-
-  virtual void RequestUserMedia(const WebUserMediaRequest&) = 0;
-  virtual void CancelUserMediaRequest(const WebUserMediaRequest&) = 0;
-  virtual void ApplyConstraints(const WebApplyConstraintsRequest&) = 0;
-  virtual void StopTrack(const WebMediaStreamTrack&) = 0;
-  virtual void ContextDestroyed() = 0;
-};
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_USER_MEDIA_CLIENT_H_
diff --git a/third_party/blink/renderer/controller/BUILD.gn b/third_party/blink/renderer/controller/BUILD.gn
index afb2259..23124f516 100644
--- a/third_party/blink/renderer/controller/BUILD.gn
+++ b/third_party/blink/renderer/controller/BUILD.gn
@@ -18,6 +18,7 @@
   deps = [
     "//skia",
     "//third_party/blink/renderer/core",
+    "//third_party/blink/renderer/core:testing",
     "//third_party/blink/renderer/modules",
     "//third_party/blink/renderer/platform",
     "//v8",
diff --git a/third_party/blink/renderer/controller/blink_leak_detector.cc b/third_party/blink/renderer/controller/blink_leak_detector.cc
index 2de2369..d35880b 100644
--- a/third_party/blink/renderer/controller/blink_leak_detector.cc
+++ b/third_party/blink/renderer/controller/blink_leak_detector.cc
@@ -67,7 +67,10 @@
   for (auto resource_fetcher : ResourceFetcher::MainThreadFetchers())
     resource_fetcher->PrepareForLeakDetection();
 
-  Page::PrepareForLeakDetection();
+  // Internal settings are ScriptWrappable and thus may retain documents
+  // depending on whether the garbage collector(s) are able to find the settings
+  // object through the Page supplement.
+  InternalSettings::PrepareForLeakDetection();
 
   // Task queue may contain delayed object destruction tasks.
   // This method is called from navigation hook inside FrameLoader,
diff --git a/third_party/blink/renderer/core/BUILD.gn b/third_party/blink/renderer/core/BUILD.gn
index b5ef5948..08478ec 100644
--- a/third_party/blink/renderer/core/BUILD.gn
+++ b/third_party/blink/renderer/core/BUILD.gn
@@ -241,8 +241,6 @@
 }
 
 jumbo_source_set("testing") {
-  testonly = true
-
   configs += [
     ":blink_core_pch",
     "//third_party/blink/renderer:config",
diff --git a/third_party/blink/renderer/core/css/css_rule.h b/third_party/blink/renderer/core/css/css_rule.h
index 4dbd80e8..32b2862 100644
--- a/third_party/blink/renderer/core/css/css_rule.h
+++ b/third_party/blink/renderer/core/css/css_rule.h
@@ -56,11 +56,9 @@
     kNamespaceRule = 10,
     kSupportsRule = 12,
     kViewportRule = 15,
+    kPropertyRule = 18,
     // Experimental features below. Such features must be greater than 1000:
     // the 0-1000 range is reserved by the CSS Working Group.
-    //
-    // TODO(https://crbug.com/978781): Spec a proper number.
-    kPropertyRule = 1001,
   };
 
   virtual Type type() const = 0;
diff --git a/third_party/blink/renderer/core/css/css_rule.idl b/third_party/blink/renderer/core/css/css_rule.idl
index 96679da6..875cdc60 100644
--- a/third_party/blink/renderer/core/css/css_rule.idl
+++ b/third_party/blink/renderer/core/css/css_rule.idl
@@ -51,6 +51,6 @@
     [RuntimeEnabled=CSSViewport] const unsigned short VIEWPORT_RULE = 15;
 
     // CSS Properties and Values Level 1
-    // TODO(https://crbug.com/978781): Spec a proper number.
-    [RuntimeEnabled=CSSVariables2AtProperty] const unsigned short PROPERTY_RULE = 1001;
+    // https://drafts.css-houdini.org/css-properties-values-api/#extensions-to-css-rule-interface
+    [RuntimeEnabled=CSSVariables2AtProperty] const unsigned short PROPERTY_RULE = 18;
 };
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 6c2f080..e76a9e6 100644
--- a/third_party/blink/renderer/core/css/element_rule_collector.cc
+++ b/third_party/blink/renderer/core/css/element_rule_collector.cc
@@ -351,7 +351,8 @@
          dynamic_pseudo == kPseudoIdAfter) &&
         !rule_data->Rule()->Properties().HasProperty(CSSPropertyID::kContent))
       return;
-    style_->SetHasPseudoElementStyle(dynamic_pseudo);
+    if (!rule_data->Rule()->Properties().IsEmpty())
+      style_->SetHasPseudoElementStyle(dynamic_pseudo);
   } else {
     matched_rules_.push_back(MatchedRule(
         rule_data, result.specificity, cascade_order,
diff --git a/third_party/blink/renderer/core/editing/commands/apply_block_element_command.cc b/third_party/blink/renderer/core/editing/commands/apply_block_element_command.cc
index a8e4c108..9f4a15e0 100644
--- a/third_party/blink/renderer/core/editing/commands/apply_block_element_command.cc
+++ b/third_party/blink/renderer/core/editing/commands/apply_block_element_command.cc
@@ -43,8 +43,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 ApplyBlockElementCommand::ApplyBlockElementCommand(
     Document& document,
     const QualifiedName& tag_name,
@@ -416,7 +414,7 @@
 HTMLElement* ApplyBlockElementCommand::CreateBlockElement() const {
   HTMLElement* element = CreateHTMLElement(GetDocument(), tag_name_);
   if (inline_style_.length())
-    element->setAttribute(kStyleAttr, inline_style_);
+    element->setAttribute(html_names::kStyleAttr, inline_style_);
   return element;
 }
 
diff --git a/third_party/blink/renderer/core/editing/commands/apply_style_command.cc b/third_party/blink/renderer/core/editing/commands/apply_style_command.cc
index 0b864232..d815f5b 100644
--- a/third_party/blink/renderer/core/editing/commands/apply_style_command.cc
+++ b/third_party/blink/renderer/core/editing/commands/apply_style_command.cc
@@ -62,8 +62,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 static bool HasNoAttributeOrOnlyStyleAttribute(
     const HTMLElement* element,
     ShouldStyleAttributeBeEmpty should_style_attribute_be_empty) {
@@ -72,7 +70,7 @@
     return true;
 
   unsigned matched_attributes = 0;
-  if (element->hasAttribute(kStyleAttr) &&
+  if (element->hasAttribute(html_names::kStyleAttr) &&
       (should_style_attribute_be_empty == kAllowNonEmptyStyleAttribute ||
        !element->InlineStyle() || element->InlineStyle()->IsEmpty()))
     matched_attributes++;
@@ -514,11 +512,11 @@
           *CSSNumericLiteralValue::Create(desired_font_size,
                                           CSSPrimitiveValue::UnitType::kPixels),
           false);
-      SetNodeAttribute(element, kStyleAttr,
+      SetNodeAttribute(element, html_names::kStyleAttr,
                        AtomicString(inline_style->AsText()));
     }
     if (inline_style->IsEmpty()) {
-      RemoveElementAttribute(element, kStyleAttr);
+      RemoveElementAttribute(element, html_names::kStyleAttr);
       if (IsSpanWithoutAttributesOrUnstyledStyleSpan(element))
         unstyled_spans.push_back(element);
     }
@@ -656,17 +654,17 @@
     // it assumes that if the 'dir' attribute is present, then removing it will
     // suffice, and otherwise it sets the property in the inline style
     // declaration.
-    if (element->hasAttribute(kDirAttr)) {
+    if (element->hasAttribute(html_names::kDirAttr)) {
       // FIXME: If this is a BDO element, we should probably just remove it if
       // it has no other attributes, like we (should) do with B and I elements.
-      RemoveElementAttribute(element, kDirAttr);
+      RemoveElementAttribute(element, html_names::kDirAttr);
     } else {
       MutableCSSPropertyValueSet* inline_style =
           CopyStyleOrCreateEmpty(element->InlineStyle());
       inline_style->SetProperty(CSSPropertyID::kUnicodeBidi,
                                 CSSValueID::kNormal);
       inline_style->RemoveProperty(CSSPropertyID::kDirection);
-      SetNodeAttribute(element, kStyleAttr,
+      SetNodeAttribute(element, html_names::kStyleAttr,
                        AtomicString(inline_style->AsText()));
       if (IsSpanWithoutAttributesOrUnstyledStyleSpan(element)) {
         RemoveNodePreservingChildren(element, editing_state);
@@ -1011,7 +1009,7 @@
       MutableCSSPropertyValueSet* inline_style =
           CopyStyleOrCreateEmpty(element->InlineStyle());
       inline_style->MergeAndOverrideOnConflict(style->Style());
-      SetNodeAttribute(element, kStyleAttr,
+      SetNodeAttribute(element, html_names::kStyleAttr,
                        AtomicString(inline_style->AsText()));
       continue;
     }
@@ -1341,7 +1339,7 @@
   // FIXME: applyInlineStyleToRange should be used here instead.
   if ((node->GetLayoutObject()->IsLayoutBlockFlow() || node->hasChildren()) &&
       html_element) {
-    SetNodeAttribute(html_element, kStyleAttr,
+    SetNodeAttribute(html_element, html_names::kStyleAttr,
                      AtomicString(new_inline_style->Style()->AsText()));
     return;
   }
@@ -1403,7 +1401,7 @@
       if (!child->contains(target_node) && elements_to_push_down.size()) {
         for (const auto& element : elements_to_push_down) {
           Element& wrapper = element->CloneWithoutChildren();
-          wrapper.removeAttribute(kStyleAttr);
+          wrapper.removeAttribute(html_names::kStyleAttr);
           // Delete id attribute from the second element because the same id
           // cannot be used for more than one element
           element->removeAttribute(html_names::kIdAttr);
@@ -1842,7 +1840,7 @@
       css_text.Append(' ');
     css_text.Append(decl->AsText());
   }
-  SetNodeAttribute(block, kStyleAttr, css_text.ToAtomicString());
+  SetNodeAttribute(block, html_names::kStyleAttr, css_text.ToAtomicString());
 }
 
 void ApplyStyleCommand::AddInlineStyleIfNeeded(EditingStyle* style,
@@ -1926,24 +1924,24 @@
       style_change.ApplyFontSize()) {
     if (font_container) {
       if (style_change.ApplyFontColor())
-        SetNodeAttribute(font_container, kColorAttr,
+        SetNodeAttribute(font_container, html_names::kColorAttr,
                          AtomicString(style_change.FontColor()));
       if (style_change.ApplyFontFace())
-        SetNodeAttribute(font_container, kFaceAttr,
+        SetNodeAttribute(font_container, html_names::kFaceAttr,
                          AtomicString(style_change.FontFace()));
       if (style_change.ApplyFontSize())
-        SetNodeAttribute(font_container, kSizeAttr,
+        SetNodeAttribute(font_container, html_names::kSizeAttr,
                          AtomicString(style_change.FontSize()));
     } else {
       auto* font_element = MakeGarbageCollected<HTMLFontElement>(GetDocument());
       if (style_change.ApplyFontColor())
-        font_element->setAttribute(kColorAttr,
+        font_element->setAttribute(html_names::kColorAttr,
                                    AtomicString(style_change.FontColor()));
       if (style_change.ApplyFontFace())
-        font_element->setAttribute(kFaceAttr,
+        font_element->setAttribute(html_names::kFaceAttr,
                                    AtomicString(style_change.FontFace()));
       if (style_change.ApplyFontSize())
-        font_element->setAttribute(kSizeAttr,
+        font_element->setAttribute(html_names::kSizeAttr,
                                    AtomicString(style_change.FontSize()));
       SurroundNodeRangeWithElement(start_node, end_node, font_element,
                                    editing_state);
@@ -1962,16 +1960,16 @@
         if (!existing_text.IsEmpty())
           css_text.Append(' ');
         css_text.Append(style_change.CssStyle());
-        SetNodeAttribute(style_container, kStyleAttr,
+        SetNodeAttribute(style_container, html_names::kStyleAttr,
                          css_text.ToAtomicString());
       } else {
-        SetNodeAttribute(style_container, kStyleAttr,
+        SetNodeAttribute(style_container, html_names::kStyleAttr,
                          AtomicString(style_change.CssStyle()));
       }
     } else {
       auto* style_element =
           MakeGarbageCollected<HTMLSpanElement>(GetDocument());
-      style_element->setAttribute(kStyleAttr,
+      style_element->setAttribute(html_names::kStyleAttr,
                                   AtomicString(style_change.CssStyle()));
       SurroundNodeRangeWithElement(start_node, end_node, style_element,
                                    editing_state);
@@ -1983,7 +1981,8 @@
   if (style_change.ApplyBold()) {
     SurroundNodeRangeWithElement(
         start_node, end_node,
-        MakeGarbageCollected<HTMLElement>(kBTag, GetDocument()), editing_state);
+        MakeGarbageCollected<HTMLElement>(html_names::kBTag, GetDocument()),
+        editing_state);
     if (editing_state->IsAborted())
       return;
   }
@@ -1991,7 +1990,8 @@
   if (style_change.ApplyItalic()) {
     SurroundNodeRangeWithElement(
         start_node, end_node,
-        MakeGarbageCollected<HTMLElement>(kITag, GetDocument()), editing_state);
+        MakeGarbageCollected<HTMLElement>(html_names::kITag, GetDocument()),
+        editing_state);
     if (editing_state->IsAborted())
       return;
   }
@@ -1999,16 +1999,17 @@
   if (style_change.ApplyUnderline()) {
     SurroundNodeRangeWithElement(
         start_node, end_node,
-        MakeGarbageCollected<HTMLElement>(kUTag, GetDocument()), editing_state);
+        MakeGarbageCollected<HTMLElement>(html_names::kUTag, GetDocument()),
+        editing_state);
     if (editing_state->IsAborted())
       return;
   }
 
   if (style_change.ApplyLineThrough()) {
-    SurroundNodeRangeWithElement(
-        start_node, end_node,
-        MakeGarbageCollected<HTMLElement>(kStrikeTag, GetDocument()),
-        editing_state);
+    SurroundNodeRangeWithElement(start_node, end_node,
+                                 MakeGarbageCollected<HTMLElement>(
+                                     html_names::kStrikeTag, GetDocument()),
+                                 editing_state);
     if (editing_state->IsAborted())
       return;
   }
@@ -2016,14 +2017,14 @@
   if (style_change.ApplySubscript()) {
     SurroundNodeRangeWithElement(
         start_node, end_node,
-        MakeGarbageCollected<HTMLElement>(kSubTag, GetDocument()),
+        MakeGarbageCollected<HTMLElement>(html_names::kSubTag, GetDocument()),
         editing_state);
     if (editing_state->IsAborted())
       return;
   } else if (style_change.ApplySuperscript()) {
     SurroundNodeRangeWithElement(
         start_node, end_node,
-        MakeGarbageCollected<HTMLElement>(kSupTag, GetDocument()),
+        MakeGarbageCollected<HTMLElement>(html_names::kSupTag, GetDocument()),
         editing_state);
     if (editing_state->IsAborted())
       return;
diff --git a/third_party/blink/renderer/core/editing/commands/break_blockquote_command.cc b/third_party/blink/renderer/core/editing/commands/break_blockquote_command.cc
index 141e536d..01c3941 100644
--- a/third_party/blink/renderer/core/editing/commands/break_blockquote_command.cc
+++ b/third_party/blink/renderer/core/editing/commands/break_blockquote_command.cc
@@ -43,8 +43,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 namespace {
 
 bool IsFirstVisiblePositionInNode(const VisiblePosition& visible_position,
@@ -238,7 +236,7 @@
         list_child_node = list_child_node->nextSibling();
       if (IsListItem(list_child_node))
         SetNodeAttribute(
-            &cloned_child, kStartAttr,
+            &cloned_child, html_names::kStartAttr,
             AtomicString::Number(
                 ToLayoutListItem(list_child_node->GetLayoutObject())->Value()));
     }
diff --git a/third_party/blink/renderer/core/editing/commands/composite_edit_command.cc b/third_party/blink/renderer/core/editing/commands/composite_edit_command.cc
index c7d74ca..83634fc 100644
--- a/third_party/blink/renderer/core/editing/commands/composite_edit_command.cc
+++ b/third_party/blink/renderer/core/editing/commands/composite_edit_command.cc
@@ -85,8 +85,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 CompositeEditCommand::CompositeEditCommand(Document& document)
     : EditCommand(document) {
   const VisibleSelection& visible_selection =
@@ -366,9 +364,9 @@
   // |cloneParagraphUnderNewElement()| attempt to clone non-well-formed HTML,
   // produced by JavaScript.
   auto* parent_element = DynamicTo<Element>(parent);
-  ABORT_EDITING_COMMAND_IF(
-      !CanHaveChildrenForEditing(parent) &&
-      !(parent_element && parent_element->TagQName() == kObjectTag));
+  ABORT_EDITING_COMMAND_IF(!CanHaveChildrenForEditing(parent) &&
+                           !(parent_element && parent_element->TagQName() ==
+                                                   html_names::kObjectTag));
   ABORT_EDITING_COMMAND_IF(!HasEditableStyle(*parent) &&
                            parent->InActiveDocument());
   ApplyCommandToComposite(MakeGarbageCollected<AppendNodeCommand>(parent, node),
diff --git a/third_party/blink/renderer/core/editing/commands/editor_command.cc b/third_party/blink/renderer/core/editing/commands/editor_command.cc
index 2cacdfb..bc78d39d 100644
--- a/third_party/blink/renderer/core/editing/commands/editor_command.cc
+++ b/third_party/blink/renderer/core/editing/commands/editor_command.cc
@@ -77,8 +77,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 namespace {
 
 struct CommandNameEntry {
@@ -318,8 +316,9 @@
       // If the selected list has the different type of list as child, return
       // |FalseTriState|.
       // See http://crbug.com/385374
-      if (HasChildTags(*start_element,
-                       tag_name.Matches(kUlTag) ? kOlTag : kUlTag))
+      if (HasChildTags(*start_element, tag_name.Matches(html_names::kUlTag)
+                                           ? html_names::kOlTag
+                                           : html_names::kUlTag))
         return EditingTriState::kFalse;
       return EditingTriState::kTrue;
     }
@@ -615,7 +614,8 @@
   if (!Document::ParseQualifiedName(AtomicString(tag_name), prefix, local_name,
                                     IGNORE_EXCEPTION_FOR_TESTING))
     return false;
-  QualifiedName qualified_tag_name(prefix, local_name, xhtmlNamespaceURI);
+  QualifiedName qualified_tag_name(prefix, local_name,
+                                   html_names::xhtmlNamespaceURI);
 
   DCHECK(frame.GetDocument());
   auto* command = MakeGarbageCollected<FormatBlockCommand>(*frame.GetDocument(),
@@ -1223,11 +1223,11 @@
 }
 
 EditingTriState StateOrderedList(LocalFrame& frame, Event*) {
-  return SelectionListState(frame.Selection(), kOlTag);
+  return SelectionListState(frame.Selection(), html_names::kOlTag);
 }
 
 static EditingTriState StateUnorderedList(LocalFrame& frame, Event*) {
-  return SelectionListState(frame.Selection(), kUlTag);
+  return SelectionListState(frame.Selection(), html_names::kUlTag);
 }
 
 static EditingTriState StateJustifyCenter(LocalFrame& frame, Event*) {
@@ -1270,9 +1270,9 @@
                                              Event*) {
   switch (frame.GetEditor().DefaultParagraphSeparator()) {
     case EditorParagraphSeparator::kIsDiv:
-      return kDivTag.LocalName();
+      return html_names::kDivTag.LocalName();
     case EditorParagraphSeparator::kIsP:
-      return kPTag.LocalName();
+      return html_names::kPTag.LocalName();
   }
 
   NOTREACHED();
diff --git a/third_party/blink/renderer/core/editing/commands/format_block_command.cc b/third_party/blink/renderer/core/editing/commands/format_block_command.cc
index 4812c04..fe177074 100644
--- a/third_party/blink/renderer/core/editing/commands/format_block_command.cc
+++ b/third_party/blink/renderer/core/editing/commands/format_block_command.cc
@@ -40,8 +40,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 static Node* EnclosingBlockToSplitTreeTo(Node* start_node);
 static bool IsElementForFormatBlock(const QualifiedName& tag_name);
 static inline bool IsElementForFormatBlock(Node* node) {
@@ -142,10 +140,10 @@
   // block-style element.
   if (outer_block != node_after_insertion_position &&
       To<HTMLElement>(node_after_insertion_position)
-          ->hasAttribute(kStyleAttr)) {
-    block_element->setAttribute(kStyleAttr,
+          ->hasAttribute(html_names::kStyleAttr)) {
+    block_element->setAttribute(html_names::kStyleAttr,
                                 To<HTMLElement>(node_after_insertion_position)
-                                    ->getAttribute(kStyleAttr));
+                                    ->getAttribute(html_names::kStyleAttr));
   }
 
   GetDocument().UpdateStyleAndLayout();
@@ -174,15 +172,20 @@
 }
 
 bool IsElementForFormatBlock(const QualifiedName& tag_name) {
-  DEFINE_STATIC_LOCAL(
-      HashSet<QualifiedName>, block_tags,
-      ({
-          kAddressTag, kArticleTag, kAsideTag, kBlockquoteTag, kDdTag,
-          kDivTag,     kDlTag,      kDtTag,    kFooterTag,     kH1Tag,
-          kH2Tag,      kH3Tag,      kH4Tag,    kH5Tag,         kH6Tag,
-          kHeaderTag,  kHgroupTag,  kMainTag,  kNavTag,        kPTag,
-          kPreTag,     kSectionTag,
-      }));
+  DEFINE_STATIC_LOCAL(HashSet<QualifiedName>, block_tags,
+                      ({
+                          html_names::kAddressTag, html_names::kArticleTag,
+                          html_names::kAsideTag,   html_names::kBlockquoteTag,
+                          html_names::kDdTag,      html_names::kDivTag,
+                          html_names::kDlTag,      html_names::kDtTag,
+                          html_names::kFooterTag,  html_names::kH1Tag,
+                          html_names::kH2Tag,      html_names::kH3Tag,
+                          html_names::kH4Tag,      html_names::kH5Tag,
+                          html_names::kH6Tag,      html_names::kHeaderTag,
+                          html_names::kHgroupTag,  html_names::kMainTag,
+                          html_names::kNavTag,     html_names::kPTag,
+                          html_names::kPreTag,     html_names::kSectionTag,
+                      }));
   return block_tags.Contains(tag_name);
 }
 
diff --git a/third_party/blink/renderer/core/editing/commands/indent_outdent_command.cc b/third_party/blink/renderer/core/editing/commands/indent_outdent_command.cc
index 8aa3caee..329eb46 100644
--- a/third_party/blink/renderer/core/editing/commands/indent_outdent_command.cc
+++ b/third_party/blink/renderer/core/editing/commands/indent_outdent_command.cc
@@ -42,8 +42,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 // Returns true if |node| is UL, OL, or BLOCKQUOTE with "display:block".
 // "Outdent" command considers <BLOCKQUOTE style="display:inline"> makes
 // indentation.
@@ -56,14 +54,14 @@
   // TODO(yosin): We should check OL/UL element has "list-style-type" CSS
   // property to make sure they layout contents as list.
   return IsHTMLUListElement(*element) || IsA<HTMLOListElement>(*element) ||
-         element->HasTagName(kBlockquoteTag);
+         element->HasTagName(html_names::kBlockquoteTag);
 }
 
 IndentOutdentCommand::IndentOutdentCommand(Document& document,
                                            IndentType type_of_action)
     : ApplyBlockElementCommand(
           document,
-          kBlockquoteTag,
+          html_names::kBlockquoteTag,
           "margin: 0 0 0 40px; border: none; padding: 0px;"),
       type_of_action_(type_of_action) {}
 
@@ -185,7 +183,7 @@
     if (outer_block == start.ComputeContainerNode()) {
       // When we apply indent to an empty <blockquote>, we should call
       // insertNodeAfter(). See http://crbug.com/625802 for more details.
-      if (outer_block->HasTagName(kBlockquoteTag))
+      if (outer_block->HasTagName(html_names::kBlockquoteTag))
         InsertNodeAfter(target_blockquote, outer_block, editing_state);
       else
         InsertNodeAt(target_blockquote, start, editing_state);
@@ -263,8 +261,8 @@
     if (split_point) {
       if (Element* split_point_parent = split_point->parentElement()) {
         // We can't outdent if there is no place to go!
-        if (split_point_parent->HasTagName(kBlockquoteTag) &&
-            !split_point->HasTagName(kBlockquoteTag) &&
+        if (split_point_parent->HasTagName(html_names::kBlockquoteTag) &&
+            !split_point->HasTagName(html_names::kBlockquoteTag) &&
             HasEditableStyle(*split_point_parent->parentNode()))
           SplitElement(split_point_parent, split_point);
       }
diff --git a/third_party/blink/renderer/core/editing/commands/insert_list_command.cc b/third_party/blink/renderer/core/editing/commands/insert_list_command.cc
index e4692f2e..b5f1b68 100644
--- a/third_party/blink/renderer/core/editing/commands/insert_list_command.cc
+++ b/third_party/blink/renderer/core/editing/commands/insert_list_command.cc
@@ -46,8 +46,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 static Node* EnclosingListChild(Node* node, Node* list_node) {
   Node* list_child = EnclosingListChild(node);
   while (list_child && EnclosingList(list_child) != list_node)
@@ -178,7 +176,8 @@
       return;
   }
 
-  const HTMLQualifiedName& list_tag = (type_ == kOrderedList) ? kOlTag : kUlTag;
+  const HTMLQualifiedName& list_tag =
+      (type_ == kOrderedList) ? html_names::kOlTag : html_names::kUlTag;
   if (EndingSelection().IsRange()) {
     bool force_list_creation = false;
     VisibleSelection selection =
diff --git a/third_party/blink/renderer/core/editing/commands/insert_paragraph_separator_command.cc b/third_party/blink/renderer/core/editing/commands/insert_paragraph_separator_command.cc
index 43386672..e242a40 100644
--- a/third_party/blink/renderer/core/editing/commands/insert_paragraph_separator_command.cc
+++ b/third_party/blink/renderer/core/editing/commands/insert_paragraph_separator_command.cc
@@ -47,8 +47,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 // When inserting a new line, we want to avoid nesting empty divs if we can.
 // Otherwise, when pasting, it's easy to have each new line be a div deeper than
 // the previous. E.g., in the case below, we want to insert at ^ instead of |.
@@ -112,11 +110,11 @@
     EditingState* editing_state) {
   // Not only do we break out of header tags, but we also do not preserve the
   // typing style, in order to match other browsers.
-  if (original_enclosing_block->HasTagName(kH1Tag) ||
-      original_enclosing_block->HasTagName(kH2Tag) ||
-      original_enclosing_block->HasTagName(kH3Tag) ||
-      original_enclosing_block->HasTagName(kH4Tag) ||
-      original_enclosing_block->HasTagName(kH5Tag)) {
+  if (original_enclosing_block->HasTagName(html_names::kH1Tag) ||
+      original_enclosing_block->HasTagName(html_names::kH2Tag) ||
+      original_enclosing_block->HasTagName(html_names::kH3Tag) ||
+      original_enclosing_block->HasTagName(html_names::kH4Tag) ||
+      original_enclosing_block->HasTagName(html_names::kH5Tag)) {
     return;
   }
 
@@ -139,11 +137,11 @@
   if (!IsEndOfBlock(EndingVisibleSelection().VisibleStart()))
     return false;
 
-  return enclosing_block->HasTagName(kH1Tag) ||
-         enclosing_block->HasTagName(kH2Tag) ||
-         enclosing_block->HasTagName(kH3Tag) ||
-         enclosing_block->HasTagName(kH4Tag) ||
-         enclosing_block->HasTagName(kH5Tag);
+  return enclosing_block->HasTagName(html_names::kH1Tag) ||
+         enclosing_block->HasTagName(html_names::kH2Tag) ||
+         enclosing_block->HasTagName(html_names::kH3Tag) ||
+         enclosing_block->HasTagName(html_names::kH4Tag) ||
+         enclosing_block->HasTagName(html_names::kH5Tag);
 }
 
 void InsertParagraphSeparatorCommand::GetAncestorsInsideBlock(
@@ -171,7 +169,7 @@
     Element& child = ancestors[i - 1]->CloneWithoutChildren();
     // It should always be okay to remove id from the cloned elements, since the
     // originals are not deleted.
-    child.removeAttribute(kIdAttr);
+    child.removeAttribute(html_names::kIdAttr);
     AppendNode(&child, parent, editing_state);
     if (editing_state->IsAborted())
       return nullptr;
diff --git a/third_party/blink/renderer/core/editing/commands/remove_format_command.cc b/third_party/blink/renderer/core/editing/commands/remove_format_command.cc
index 0e40797d..49a2c80 100644
--- a/third_party/blink/renderer/core/editing/commands/remove_format_command.cc
+++ b/third_party/blink/renderer/core/editing/commands/remove_format_command.cc
@@ -39,20 +39,25 @@
 
 namespace blink {
 
-using namespace html_names;
-
 RemoveFormatCommand::RemoveFormatCommand(Document& document)
     : CompositeEditCommand(document) {}
 
 static bool IsElementForRemoveFormatCommand(const Element* element) {
-  DEFINE_STATIC_LOCAL(
-      HashSet<QualifiedName>, elements,
-      ({
-          kAcronymTag, kBTag,   kBdoTag,  kBigTag,  kCiteTag,  kCodeTag,
-          kDfnTag,     kEmTag,  kFontTag, kITag,    kInsTag,   kKbdTag,
-          kNobrTag,    kQTag,   kSTag,    kSampTag, kSmallTag, kStrikeTag,
-          kStrongTag,  kSubTag, kSupTag,  kTtTag,   kUTag,     kVarTag,
-      }));
+  DEFINE_STATIC_LOCAL(HashSet<QualifiedName>, elements,
+                      ({
+                          html_names::kAcronymTag, html_names::kBTag,
+                          html_names::kBdoTag,     html_names::kBigTag,
+                          html_names::kCiteTag,    html_names::kCodeTag,
+                          html_names::kDfnTag,     html_names::kEmTag,
+                          html_names::kFontTag,    html_names::kITag,
+                          html_names::kInsTag,     html_names::kKbdTag,
+                          html_names::kNobrTag,    html_names::kQTag,
+                          html_names::kSTag,       html_names::kSampTag,
+                          html_names::kSmallTag,   html_names::kStrikeTag,
+                          html_names::kStrongTag,  html_names::kSubTag,
+                          html_names::kSupTag,     html_names::kTtTag,
+                          html_names::kUTag,       html_names::kVarTag,
+                      }));
   return elements.Contains(element->TagQName());
 }
 
diff --git a/third_party/blink/renderer/core/editing/commands/replace_selection_command.cc b/third_party/blink/renderer/core/editing/commands/replace_selection_command.cc
index 8784b1c..612fc42 100644
--- a/third_party/blink/renderer/core/editing/commands/replace_selection_command.cc
+++ b/third_party/blink/renderer/core/editing/commands/replace_selection_command.cc
@@ -73,8 +73,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 // --- ReplacementFragment helper class
 
 class ReplacementFragment final {
@@ -118,8 +116,9 @@
   DEFINE_STATIC_LOCAL(String, interchange_newline_class_string,
                       (AppleInterchangeNewline));
   auto* html_br_element = DynamicTo<HTMLBRElement>(node);
-  if (!html_br_element || html_br_element->getAttribute(kClassAttr) !=
-                              interchange_newline_class_string)
+  if (!html_br_element ||
+      html_br_element->getAttribute(html_names::kClassAttr) !=
+          interchange_newline_class_string)
     return false;
   UseCounter::Count(node->GetDocument(),
                     WebFeature::kEditingAppleInterchangeNewline);
@@ -508,9 +507,12 @@
   if (!element)
     return false;
 
-  return element->HasTagName(kH1Tag) || element->HasTagName(kH2Tag) ||
-         element->HasTagName(kH3Tag) || element->HasTagName(kH4Tag) ||
-         element->HasTagName(kH5Tag) || element->HasTagName(kH6Tag);
+  return element->HasTagName(html_names::kH1Tag) ||
+         element->HasTagName(html_names::kH2Tag) ||
+         element->HasTagName(html_names::kH3Tag) ||
+         element->HasTagName(html_names::kH4Tag) ||
+         element->HasTagName(html_names::kH5Tag) ||
+         element->HasTagName(html_names::kH6Tag);
 }
 
 static bool HaveSameTagName(Element* a, Element* b) {
@@ -527,7 +529,7 @@
   Element* source_block = EnclosingBlock(source_node);
   Element* destination_block = EnclosingBlock(destination_node);
   return source_block &&
-         (!source_block->HasTagName(kBlockquoteTag) ||
+         (!source_block->HasTagName(html_names::kBlockquoteTag) ||
           IsMailHTMLBlockquoteElement(source_block)) &&
          EnclosingListChild(source_block) ==
              EnclosingListChild(destination_node) &&
@@ -625,10 +627,10 @@
           return;
         continue;
       }
-      RemoveElementAttribute(element, kStyleAttr);
+      RemoveElementAttribute(element, html_names::kStyleAttr);
     } else if (new_inline_style->Style()->PropertyCount() !=
                inline_style->PropertyCount()) {
-      SetNodeAttribute(element, kStyleAttr,
+      SetNodeAttribute(element, html_names::kStyleAttr,
                        AtomicString(new_inline_style->Style()->AsText()));
     }
 
@@ -653,7 +655,7 @@
     if (element->parentNode() &&
         HasRichlyEditableStyle(*element->parentNode()) &&
         HasRichlyEditableStyle(*element)) {
-      RemoveElementAttribute(element, kContenteditableAttr);
+      RemoveElementAttribute(element, html_names::kContenteditableAttr);
     }
   }
 }
@@ -663,31 +665,54 @@
   DEFINE_STATIC_LOCAL(
       HashSet<AtomicString>, elements,
       ({
-          kAddressTag.LocalName(),   kArticleTag.LocalName(),
-          kAsideTag.LocalName(),     kBlockquoteTag.LocalName(),
-          kCaptionTag.LocalName(),   kCenterTag.LocalName(),
-          kColTag.LocalName(),       kColgroupTag.LocalName(),
-          kDdTag.LocalName(),        kDetailsTag.LocalName(),
-          kDirTag.LocalName(),       kDivTag.LocalName(),
-          kDlTag.LocalName(),        kDtTag.LocalName(),
-          kFieldsetTag.LocalName(),  kFigcaptionTag.LocalName(),
-          kFigureTag.LocalName(),    kFooterTag.LocalName(),
-          kFormTag.LocalName(),      kH1Tag.LocalName(),
-          kH2Tag.LocalName(),        kH3Tag.LocalName(),
-          kH4Tag.LocalName(),        kH5Tag.LocalName(),
-          kH6Tag.LocalName(),        kHeaderTag.LocalName(),
-          kHgroupTag.LocalName(),    kHrTag.LocalName(),
-          kLiTag.LocalName(),        kListingTag.LocalName(),
-          kMainTag.LocalName(),  // Missing in the specification.
-          kMenuTag.LocalName(),      kNavTag.LocalName(),
-          kOlTag.LocalName(),        kPTag.LocalName(),
-          kPlaintextTag.LocalName(), kPreTag.LocalName(),
-          kSectionTag.LocalName(),   kSummaryTag.LocalName(),
-          kTableTag.LocalName(),     kTbodyTag.LocalName(),
-          kTdTag.LocalName(),        kTfootTag.LocalName(),
-          kThTag.LocalName(),        kTheadTag.LocalName(),
-          kTrTag.LocalName(),        kUlTag.LocalName(),
-          kXmpTag.LocalName(),
+          html_names::kAddressTag.LocalName(),
+          html_names::kArticleTag.LocalName(),
+          html_names::kAsideTag.LocalName(),
+          html_names::kBlockquoteTag.LocalName(),
+          html_names::kCaptionTag.LocalName(),
+          html_names::kCenterTag.LocalName(),
+          html_names::kColTag.LocalName(),
+          html_names::kColgroupTag.LocalName(),
+          html_names::kDdTag.LocalName(),
+          html_names::kDetailsTag.LocalName(),
+          html_names::kDirTag.LocalName(),
+          html_names::kDivTag.LocalName(),
+          html_names::kDlTag.LocalName(),
+          html_names::kDtTag.LocalName(),
+          html_names::kFieldsetTag.LocalName(),
+          html_names::kFigcaptionTag.LocalName(),
+          html_names::kFigureTag.LocalName(),
+          html_names::kFooterTag.LocalName(),
+          html_names::kFormTag.LocalName(),
+          html_names::kH1Tag.LocalName(),
+          html_names::kH2Tag.LocalName(),
+          html_names::kH3Tag.LocalName(),
+          html_names::kH4Tag.LocalName(),
+          html_names::kH5Tag.LocalName(),
+          html_names::kH6Tag.LocalName(),
+          html_names::kHeaderTag.LocalName(),
+          html_names::kHgroupTag.LocalName(),
+          html_names::kHrTag.LocalName(),
+          html_names::kLiTag.LocalName(),
+          html_names::kListingTag.LocalName(),
+          html_names::kMainTag.LocalName(),  // Missing in the specification.
+          html_names::kMenuTag.LocalName(),
+          html_names::kNavTag.LocalName(),
+          html_names::kOlTag.LocalName(),
+          html_names::kPTag.LocalName(),
+          html_names::kPlaintextTag.LocalName(),
+          html_names::kPreTag.LocalName(),
+          html_names::kSectionTag.LocalName(),
+          html_names::kSummaryTag.LocalName(),
+          html_names::kTableTag.LocalName(),
+          html_names::kTbodyTag.LocalName(),
+          html_names::kTdTag.LocalName(),
+          html_names::kTfootTag.LocalName(),
+          html_names::kThTag.LocalName(),
+          html_names::kTheadTag.LocalName(),
+          html_names::kTrTag.LocalName(),
+          html_names::kUlTag.LocalName(),
+          html_names::kXmpTag.LocalName(),
       }));
   return elements.Contains(name);
 }
@@ -713,7 +738,7 @@
     if (IsProhibitedParagraphChild(element->localName())) {
       if (HTMLElement* paragraph_element =
               To<HTMLElement>(EnclosingElementWithTag(
-                  Position::InParentBeforeNode(*element), kPTag))) {
+                  Position::InParentBeforeNode(*element), html_names::kPTag))) {
         MoveElementOutOfAncestor(element, paragraph_element, editing_state);
         if (editing_state->IsAborted())
           return;
@@ -780,9 +805,9 @@
   auto* last_leaf_inserted = DynamicTo<Text>(inserted_nodes.LastLeafInserted());
   if (last_leaf_inserted && !NodeHasVisibleLayoutText(*last_leaf_inserted) &&
       !EnclosingElementWithTag(FirstPositionInOrBeforeNode(*last_leaf_inserted),
-                               kSelectTag) &&
+                               html_names::kSelectTag) &&
       !EnclosingElementWithTag(FirstPositionInOrBeforeNode(*last_leaf_inserted),
-                               kScriptTag)) {
+                               html_names::kScriptTag)) {
     inserted_nodes.WillRemoveNode(*last_leaf_inserted);
     // Removing a Text node won't dispatch synchronous events.
     RemoveNode(last_leaf_inserted, ASSERT_NO_EDITING_ABORT);
@@ -807,8 +832,8 @@
   // TODO(yosin): We should set |end_of_inserted_content_| not in SELECT
   // element, since contents of SELECT elements, e.g. OPTION, OPTGROUP, are
   // not editable, or SELECT element is an atomic on editing.
-  auto* enclosing_select = To<HTMLSelectElement>(
-      EnclosingElementWithTag(end_of_inserted_content_, kSelectTag));
+  auto* enclosing_select = To<HTMLSelectElement>(EnclosingElementWithTag(
+      end_of_inserted_content_, html_names::kSelectTag));
   if (enclosing_select) {
     return CreateVisiblePosition(LastPositionInOrAfterNode(*enclosing_select));
   }
@@ -854,10 +879,13 @@
   }
 
   return IsListItem(node) || IsTableCell(node) ||
-         element->HasTagName(kPreTag) || element->HasTagName(kH1Tag) ||
-         element->HasTagName(kH2Tag) || element->HasTagName(kH3Tag) ||
-         element->HasTagName(kH4Tag) || element->HasTagName(kH5Tag) ||
-         element->HasTagName(kH6Tag);
+         element->HasTagName(html_names::kPreTag) ||
+         element->HasTagName(html_names::kH1Tag) ||
+         element->HasTagName(html_names::kH2Tag) ||
+         element->HasTagName(html_names::kH3Tag) ||
+         element->HasTagName(html_names::kH4Tag) ||
+         element->HasTagName(html_names::kH5Tag) ||
+         element->HasTagName(html_names::kH6Tag);
 }
 
 // Remove style spans before insertion if they are unnecessary.  It's faster
@@ -901,7 +929,7 @@
 
   // FIXME: This string comparison is a naive way of comparing two styles.
   // We should be taking the diff and check that the diff is empty.
-  if (style_text != wrapping_style_span->getAttribute(kStyleAttr))
+  if (style_text != wrapping_style_span->getAttribute(html_names::kStyleAttr))
     return;
 
   fragment.RemoveNodePreservingChildren(wrapping_style_span);
diff --git a/third_party/blink/renderer/core/editing/serializers/markup_formatter.cc b/third_party/blink/renderer/core/editing/serializers/markup_formatter.cc
index 8332061..12badfa 100644
--- a/third_party/blink/renderer/core/editing/serializers/markup_formatter.cc
+++ b/third_party/blink/renderer/core/editing/serializers/markup_formatter.cc
@@ -47,8 +47,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 struct EntityDescription {
   UChar entity;
   const std::string& reference;
@@ -388,11 +386,15 @@
     parent_name = &(text.parentElement())->TagQName();
 
   if (parent_name &&
-      (*parent_name == kScriptTag || *parent_name == kStyleTag ||
-       *parent_name == kXmpTag || *parent_name == kIFrameTag ||
-       *parent_name == kPlaintextTag || *parent_name == kNoembedTag ||
-       *parent_name == kNoframesTag ||
-       (*parent_name == kNoscriptTag && text.GetDocument().GetFrame() &&
+      (*parent_name == html_names::kScriptTag ||
+       *parent_name == html_names::kStyleTag ||
+       *parent_name == html_names::kXmpTag ||
+       *parent_name == html_names::kIFrameTag ||
+       *parent_name == html_names::kPlaintextTag ||
+       *parent_name == html_names::kNoembedTag ||
+       *parent_name == html_names::kNoframesTag ||
+       (*parent_name == html_names::kNoscriptTag &&
+        text.GetDocument().GetFrame() &&
         text.GetDocument().CanExecuteScripts(kNotAboutToExecuteScript))))
     return kEntityMaskInCDATA;
   return kEntityMaskInHTMLPCDATA;
diff --git a/third_party/blink/renderer/core/editing/serializers/serialization.cc b/third_party/blink/renderer/core/editing/serializers/serialization.cc
index c94bee9..4a2d43e 100644
--- a/third_party/blink/renderer/core/editing/serializers/serialization.cc
+++ b/third_party/blink/renderer/core/editing/serializers/serialization.cc
@@ -72,8 +72,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 class AttributeChange {
   DISALLOW_NEW();
 
@@ -131,7 +129,7 @@
   if (!common_ancestor_block)
     return nullptr;
 
-  if (common_ancestor_block->HasTagName(kTbodyTag) ||
+  if (common_ancestor_block->HasTagName(html_names::kTbodyTag) ||
       IsHTMLTableRowElement(*common_ancestor_block))
     return Traversal<HTMLTableElement>::FirstAncestor(*common_ancestor_block);
 
@@ -251,7 +249,7 @@
           Position::FirstPositionInNode(special_common_ancestor
                                             ? *special_common_ancestor
                                             : *common_ancestor),
-          kATag)))
+          html_names::kATag)))
     special_common_ancestor = enclosing_anchor;
 
   return special_common_ancestor;
@@ -562,7 +560,7 @@
     fragment->AppendChild(document.createTextNode(string));
     if (string.EndsWith('\n')) {
       auto* element = MakeGarbageCollected<HTMLBRElement>(document);
-      element->setAttribute(kClassAttr, AppleInterchangeNewline);
+      element->setAttribute(html_names::kClassAttr, AppleInterchangeNewline);
       fragment->AppendChild(element);
     }
     return fragment;
@@ -592,7 +590,7 @@
     if (s.IsEmpty() && i + 1 == num_lines) {
       // For last line, use the "magic BR" rather than a P.
       element = MakeGarbageCollected<HTMLBRElement>(document);
-      element->setAttribute(kClassAttr, AppleInterchangeNewline);
+      element->setAttribute(html_names::kClassAttr, AppleInterchangeNewline);
     } else {
       if (use_clones_of_enclosing_block)
         element = &block->CloneWithoutChildren();
diff --git a/third_party/blink/renderer/core/editing/serializers/styled_markup_accumulator.cc b/third_party/blink/renderer/core/editing/serializers/styled_markup_accumulator.cc
index 14b776f..8eb7aa6e 100644
--- a/third_party/blink/renderer/core/editing/serializers/styled_markup_accumulator.cc
+++ b/third_party/blink/renderer/core/editing/serializers/styled_markup_accumulator.cc
@@ -49,8 +49,6 @@
 
 }  // namespace
 
-using namespace html_names;
-
 StyledMarkupAccumulator::StyledMarkupAccumulator(
     AbsoluteURLs should_resolve_urls,
     const TextOffset& start,
@@ -119,7 +117,7 @@
     AppendText(text);
   } else {
     const bool use_rendered_text = !EnclosingElementWithTag(
-        Position::FirstPositionInNode(text), kSelectTag);
+        Position::FirstPositionInNode(text), html_names::kSelectTag);
     String content =
         use_rendered_text ? RenderedText(text) : StringValueForRange(text);
     StringBuilder buffer;
@@ -146,7 +144,7 @@
   AttributeCollection attributes = element.Attributes();
   for (const auto& attribute : attributes) {
     // We'll handle the style attribute separately, below.
-    if (attribute.GetName() == kStyleAttr)
+    if (attribute.GetName() == html_names::kStyleAttr)
       continue;
     AppendAttribute(out, element, attribute);
   }
diff --git a/third_party/blink/renderer/core/editing/serializers/styled_markup_serializer.cc b/third_party/blink/renderer/core/editing/serializers/styled_markup_serializer.cc
index 24c15b3..b109157 100644
--- a/third_party/blink/renderer/core/editing/serializers/styled_markup_serializer.cc
+++ b/third_party/blink/renderer/core/editing/serializers/styled_markup_serializer.cc
@@ -79,8 +79,6 @@
 
 }  // namespace
 
-using namespace html_names;
-
 template <typename Strategy>
 class StyledMarkupTraverser {
   STACK_ALLOCATED();
@@ -233,7 +231,7 @@
         *start_.ComputeContainerNode(), *end_.ComputeContainerNode());
     DCHECK(common_ancestor);
     auto* body = To<HTMLBodyElement>(EnclosingElementWithTag(
-        Position::FirstPositionInNode(*common_ancestor), kBodyTag));
+        Position::FirstPositionInNode(*common_ancestor), html_names::kBodyTag));
     HTMLBodyElement* fully_selected_root = nullptr;
     // FIXME: Do this for all fully selected blocks, not just the body.
     if (body && AreSameRanges(body, start_, end_))
@@ -255,10 +253,12 @@
              !fully_selected_root_style->Style() ||
              !fully_selected_root_style->Style()->GetPropertyCSSValue(
                  CSSPropertyID::kBackgroundImage)) &&
-            fully_selected_root->hasAttribute(kBackgroundAttr)) {
+            fully_selected_root->hasAttribute(html_names::kBackgroundAttr)) {
           fully_selected_root_style->Style()->SetProperty(
               CSSPropertyID::kBackgroundImage,
-              "url('" + fully_selected_root->getAttribute(kBackgroundAttr) +
+              "url('" +
+                  fully_selected_root->getAttribute(
+                      html_names::kBackgroundAttr) +
                   "')",
               /* important */ false,
               fully_selected_root->GetDocument().GetSecureContextMode());
@@ -370,7 +370,7 @@
       if (n->GetLayoutObject() ||
           (element && element->HasDisplayContentsStyle()) ||
           EnclosingElementWithTag(FirstPositionInOrBeforeNode(*n),
-                                  kSelectTag)) {
+                                  html_names::kSelectTag)) {
         // Add the node to the markup if we're not skipping the descendants
         AppendStartMarkup(*n);
 
diff --git a/third_party/blink/renderer/core/events/README.md b/third_party/blink/renderer/core/events/README.md
new file mode 100644
index 0000000..eaab3c3
--- /dev/null
+++ b/third_party/blink/renderer/core/events/README.md
@@ -0,0 +1,6 @@
+# core/events/
+
+**Pleae do not add new files to this directory.**
+
+Files for an Event subclass should be put to a directory containing
+other files related to the feature using the Event subclass.
diff --git a/third_party/blink/renderer/core/fileapi/file_reader_loader.cc b/third_party/blink/renderer/core/fileapi/file_reader_loader.cc
index a7cd502..e84f5d0 100644
--- a/third_party/blink/renderer/core/fileapi/file_reader_loader.cc
+++ b/third_party/blink/renderer/core/fileapi/file_reader_loader.cc
@@ -82,7 +82,6 @@
 
 FileReaderLoader::~FileReaderLoader() {
   Cleanup();
-  UnadjustReportedMemoryUsageToV8();
 }
 
 void FileReaderLoader::Start(scoped_refptr<BlobDataHandle> blob_data) {
@@ -140,7 +139,7 @@
     return array_buffer_result_;
 
   // If the loading is not started or an error occurs, return an empty result.
-  if (!raw_data_ || error_code_ != FileErrorCode::kOK)
+  if (!raw_data_.IsValid() || error_code_ != FileErrorCode::kOK)
     return nullptr;
 
   if (!finished_loading_) {
@@ -148,11 +147,9 @@
         raw_data_.Data(), static_cast<unsigned>(bytes_loaded_)));
   }
 
-  WTF::ArrayBufferContents contents(std::move(raw_data_),
-                                    WTF::ArrayBufferContents::kNotShared);
-  array_buffer_result_ = DOMArrayBuffer::Create(contents);
-  AdjustReportedMemoryUsageToV8(-1 * static_cast<int64_t>(bytes_loaded_));
-  raw_data_.reset();
+  array_buffer_result_ = DOMArrayBuffer::Create(raw_data_);
+  DCHECK_EQ(raw_data_.DataLength(), 0u);
+  raw_data_.Reset();
   return array_buffer_result_;
 }
 
@@ -160,7 +157,7 @@
   DCHECK_NE(read_type_, kReadAsArrayBuffer);
   DCHECK_NE(read_type_, kReadByClient);
 
-  if (!raw_data_ || (error_code_ != FileErrorCode::kOK) ||
+  if (!raw_data_.IsValid() || (error_code_ != FileErrorCode::kOK) ||
       is_raw_data_converted_) {
     return string_result_;
   }
@@ -187,21 +184,18 @@
 
   if (finished_loading_) {
     DCHECK(is_raw_data_converted_);
-    AdjustReportedMemoryUsageToV8(-1 * static_cast<int64_t>(bytes_loaded_));
-    raw_data_.reset();
+    raw_data_.Reset();
   }
   return string_result_;
 }
 
-WTF::ArrayBufferContents::DataHandle FileReaderLoader::TakeDataHandle() {
-  if (!raw_data_ || error_code_ != FileErrorCode::kOK)
-    return WTF::ArrayBufferContents::DataHandle();
+WTF::ArrayBufferContents FileReaderLoader::TakeContents() {
+  if (!raw_data_.IsValid() || error_code_ != FileErrorCode::kOK)
+    return WTF::ArrayBufferContents();
 
   DCHECK(finished_loading_);
-  WTF::ArrayBufferContents::DataHandle handle = std::move(raw_data_);
-  AdjustReportedMemoryUsageToV8(-1 * static_cast<int64_t>(bytes_loaded_));
-  raw_data_.reset();
-  return handle;
+  WTF::ArrayBufferContents contents = std::move(raw_data_);
+  return contents;
 }
 
 void FileReaderLoader::SetEncoding(const String& encoding) {
@@ -215,12 +209,11 @@
 
   // If we get any error, we do not need to keep a buffer around.
   if (error_code_ != FileErrorCode::kOK) {
-    raw_data_.reset();
+    raw_data_.Reset();
     string_result_ = "";
     is_raw_data_converted_ = true;
     decoder_.reset();
     array_buffer_result_ = nullptr;
-    UnadjustReportedMemoryUsageToV8();
   }
 }
 
@@ -241,7 +234,7 @@
 void FileReaderLoader::OnStartLoading(uint64_t total_bytes) {
   total_bytes_ = total_bytes;
 
-  DCHECK(!raw_data_);
+  DCHECK(!raw_data_.IsValid());
 
   if (read_type_ != kReadByClient) {
     // Check that we can cast to unsigned since we have to do
@@ -252,10 +245,11 @@
       return;
     }
 
-    raw_data_ = WTF::ArrayBufferContents::CreateDataHandle(
-        static_cast<unsigned>(total_bytes),
-        WTF::ArrayBufferContents::kDontInitialize);
-    if (!raw_data_) {
+    raw_data_ =
+        WTF::ArrayBufferContents(static_cast<unsigned>(total_bytes), 1,
+                                 WTF::ArrayBufferContents::kNotShared,
+                                 WTF::ArrayBufferContents::kDontInitialize);
+    if (!raw_data_.IsValid()) {
       Failed(FileErrorCode::kNotReadableErr,
              FailureType::kArrayBufferBuilderCreation);
       return;
@@ -288,7 +282,7 @@
   // validate anything received. So return an error if we received too much
   // data.
   if (bytes_loaded_ + data_length > raw_data_.DataLength()) {
-    raw_data_.reset();
+    raw_data_.Reset();
     bytes_loaded_ = 0;
     Failed(FileErrorCode::kNotReadableErr,
            FailureType::kArrayBufferBuilderAppend);
@@ -298,14 +292,13 @@
          data_length);
   bytes_loaded_ += data_length;
   is_raw_data_converted_ = false;
-  AdjustReportedMemoryUsageToV8(data_length);
 
   if (client_)
     client_->DidReceiveData();
 }
 
 void FileReaderLoader::OnFinishLoading() {
-  if (read_type_ != kReadByClient && raw_data_) {
+  if (read_type_ != kReadByClient && raw_data_.IsValid()) {
     DCHECK_EQ(bytes_loaded_, raw_data_.DataLength());
     is_raw_data_converted_ = false;
   }
@@ -418,22 +411,6 @@
   }
 }
 
-void FileReaderLoader::AdjustReportedMemoryUsageToV8(int64_t usage) {
-  if (!usage)
-    return;
-  memory_usage_reported_to_v8_ += usage;
-  v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(usage);
-  DCHECK_GE(memory_usage_reported_to_v8_, 0);
-}
-
-void FileReaderLoader::UnadjustReportedMemoryUsageToV8() {
-  if (!memory_usage_reported_to_v8_)
-    return;
-  v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(
-      -memory_usage_reported_to_v8_);
-  memory_usage_reported_to_v8_ = 0;
-}
-
 String FileReaderLoader::ConvertToText() {
   if (!bytes_loaded_)
     return "";
@@ -485,11 +462,8 @@
 }
 
 void FileReaderLoader::SetStringResult(const String& result) {
-  AdjustReportedMemoryUsageToV8(
-      -1 * static_cast<int64_t>(string_result_.CharactersSizeInBytes()));
   is_raw_data_converted_ = true;
   string_result_ = result;
-  AdjustReportedMemoryUsageToV8(string_result_.CharactersSizeInBytes());
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/fileapi/file_reader_loader.h b/third_party/blink/renderer/core/fileapi/file_reader_loader.h
index 85bbd24..5dd090b 100644
--- a/third_party/blink/renderer/core/fileapi/file_reader_loader.h
+++ b/third_party/blink/renderer/core/fileapi/file_reader_loader.h
@@ -86,7 +86,7 @@
 
   DOMArrayBuffer* ArrayBufferResult();
   String StringResult();
-  WTF::ArrayBufferContents::DataHandle TakeDataHandle();
+  WTF::ArrayBufferContents TakeContents();
 
   // Returns the total bytes received. Bytes ignored by m_rawData won't be
   // counted.
@@ -144,9 +144,6 @@
   void OnComplete(int32_t status, uint64_t data_length) override;
   void OnDataPipeReadable(MojoResult);
 
-  void AdjustReportedMemoryUsageToV8(int64_t usage);
-  void UnadjustReportedMemoryUsageToV8();
-
   String ConvertToText();
   String ConvertToDataURL();
   void SetStringResult(const String&);
@@ -156,7 +153,7 @@
   WTF::TextEncoding encoding_;
   String data_type_;
 
-  WTF::ArrayBufferContents::DataHandle raw_data_;
+  WTF::ArrayBufferContents raw_data_;
   bool is_raw_data_converted_ = false;
 
   Persistent<DOMArrayBuffer> array_buffer_result_;
@@ -171,7 +168,6 @@
   // it is known, and  the buffer for receiving data of total_bytes_ is
   // allocated and never grow even when extra data is appended.
   base::Optional<uint64_t> total_bytes_;
-  int64_t memory_usage_reported_to_v8_ = 0;
 
   int32_t net_error_ = 0;  // net::OK
   FileErrorCode error_code_ = FileErrorCode::kOK;
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
index 587e024..fd0f919 100644
--- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
+++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
@@ -92,8 +92,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 namespace {
 
 // These values come from the WhatWG spec.
@@ -109,7 +107,7 @@
 }  // namespace
 
 HTMLCanvasElement::HTMLCanvasElement(Document& document)
-    : HTMLElement(kCanvasTag, document),
+    : HTMLElement(html_names::kCanvasTag, document),
       ContextLifecycleObserver(&document),
       PageVisibilityObserver(document.GetPage()),
       CanvasRenderingContextHost(
@@ -171,7 +169,8 @@
 
 void HTMLCanvasElement::ParseAttribute(
     const AttributeModificationParams& params) {
-  if (params.name == kWidthAttr || params.name == kHeightAttr)
+  if (params.name == html_names::kWidthAttr ||
+      params.name == html_names::kHeightAttr)
     Reset();
   HTMLElement::ParseAttribute(params);
 }
@@ -198,7 +197,8 @@
         "Cannot resize canvas after call to transferControlToOffscreen().");
     return;
   }
-  SetUnsignedIntegralAttribute(kHeightAttr, value, kDefaultCanvasHeight);
+  SetUnsignedIntegralAttribute(html_names::kHeightAttr, value,
+                               kDefaultCanvasHeight);
 }
 
 void HTMLCanvasElement::setWidth(unsigned value,
@@ -209,15 +209,16 @@
         "Cannot resize canvas after call to transferControlToOffscreen().");
     return;
   }
-  SetUnsignedIntegralAttribute(kWidthAttr, value, kDefaultCanvasWidth);
+  SetUnsignedIntegralAttribute(html_names::kWidthAttr, value,
+                               kDefaultCanvasWidth);
 }
 
 void HTMLCanvasElement::SetSize(const IntSize& new_size) {
   if (new_size == Size())
     return;
   ignore_reset_ = true;
-  SetIntegralAttribute(kWidthAttr, new_size.Width());
-  SetIntegralAttribute(kHeightAttr, new_size.Height());
+  SetIntegralAttribute(html_names::kWidthAttr, new_size.Width());
+  SetIntegralAttribute(html_names::kHeightAttr, new_size.Height());
   ignore_reset_ = false;
   Reset();
 }
@@ -549,14 +550,14 @@
   bool had_resource_provider = HasResourceProvider();
 
   unsigned w = 0;
-  AtomicString value = getAttribute(kWidthAttr);
+  AtomicString value = getAttribute(html_names::kWidthAttr);
   if (value.IsEmpty() || !ParseHTMLNonNegativeInteger(value, w) ||
       w > 0x7fffffffu) {
     w = kDefaultCanvasWidth;
   }
 
   unsigned h = 0;
-  value = getAttribute(kHeightAttr);
+  value = getAttribute(html_names::kHeightAttr);
   if (value.IsEmpty() || !ParseHTMLNonNegativeInteger(value, h) ||
       h > 0x7fffffffu) {
     h = kDefaultCanvasHeight;
@@ -1141,8 +1142,8 @@
     std::unique_ptr<Canvas2DLayerBridge> bridge,
     const IntSize& size) {
   DiscardResourceProvider();
-  SetIntegralAttribute(kWidthAttr, size.Width());
-  SetIntegralAttribute(kHeightAttr, size.Height());
+  SetIntegralAttribute(html_names::kWidthAttr, size.Width());
+  SetIntegralAttribute(html_names::kHeightAttr, size.Height());
   SetCanvas2DLayerBridgeInternal(std::move(bridge));
   ReplaceResourceProvider(std::move(resource_provider));
 }
diff --git a/third_party/blink/renderer/core/html/html_anchor_element.cc b/third_party/blink/renderer/core/html/html_anchor_element.cc
index e9a0bc7d..b21fb6b 100644
--- a/third_party/blink/renderer/core/html/html_anchor_element.cc
+++ b/third_party/blink/renderer/core/html/html_anchor_element.cc
@@ -95,10 +95,8 @@
 
 }  // namespace
 
-using namespace html_names;
-
 HTMLAnchorElement::HTMLAnchorElement(Document& document)
-    : HTMLAnchorElement(kATag, document) {}
+    : HTMLAnchorElement(html_names::kATag, document) {}
 
 HTMLAnchorElement::HTMLAnchorElement(const QualifiedName& tag_name,
                                      Document& document)
@@ -216,7 +214,7 @@
   HTMLElement::AttributeChanged(params);
   if (params.reason != AttributeModificationReason::kDirectly)
     return;
-  if (params.name != kHrefAttr)
+  if (params.name != html_names::kHrefAttr)
     return;
   if (!IsLink() && AdjustedFocusedElementInTreeScope() == this)
     blur();
@@ -224,7 +222,7 @@
 
 void HTMLAnchorElement::ParseAttribute(
     const AttributeModificationParams& params) {
-  if (params.name == kHrefAttr) {
+  if (params.name == html_names::kHrefAttr) {
     bool was_link = IsLink();
     SetIsLink(!params.new_value.IsNull());
     if (was_link || IsLink()) {
@@ -249,9 +247,10 @@
     }
     InvalidateCachedVisitedLinkHash();
     LogUpdateAttributeIfIsolatedWorldAndInDocument("a", params);
-  } else if (params.name == kNameAttr || params.name == kTitleAttr) {
+  } else if (params.name == html_names::kNameAttr ||
+             params.name == html_names::kTitleAttr) {
     // Do nothing.
-  } else if (params.name == kRelAttr) {
+  } else if (params.name == html_names::kRelAttr) {
     SetRel(params.new_value);
     rel_list_->DidUpdateAttributeValue(params.old_value, params.new_value);
   } else {
@@ -265,12 +264,13 @@
 }
 
 bool HTMLAnchorElement::IsURLAttribute(const Attribute& attribute) const {
-  return attribute.GetName().LocalName() == kHrefAttr ||
+  return attribute.GetName().LocalName() == html_names::kHrefAttr ||
          HTMLElement::IsURLAttribute(attribute);
 }
 
 bool HTMLAnchorElement::HasLegalLinkAttribute(const QualifiedName& name) const {
-  return name == kHrefAttr || HTMLElement::HasLegalLinkAttribute(name);
+  return name == html_names::kHrefAttr ||
+         HTMLElement::HasLegalLinkAttribute(name);
 }
 
 bool HTMLAnchorElement::CanStartSelection() const {
@@ -281,21 +281,21 @@
 
 bool HTMLAnchorElement::draggable() const {
   // Should be draggable if we have an href attribute.
-  const AtomicString& value = getAttribute(kDraggableAttr);
+  const AtomicString& value = getAttribute(html_names::kDraggableAttr);
   if (DeprecatedEqualIgnoringCase(value, "true"))
     return true;
   if (DeprecatedEqualIgnoringCase(value, "false"))
     return false;
-  return hasAttribute(kHrefAttr);
+  return hasAttribute(html_names::kHrefAttr);
 }
 
 KURL HTMLAnchorElement::Href() const {
   return GetDocument().CompleteURL(
-      StripLeadingAndTrailingHTMLSpaces(getAttribute(kHrefAttr)));
+      StripLeadingAndTrailingHTMLSpaces(getAttribute(html_names::kHrefAttr)));
 }
 
 void HTMLAnchorElement::SetHref(const AtomicString& value) {
-  setAttribute(kHrefAttr, value);
+  setAttribute(html_names::kHrefAttr, value);
 }
 
 KURL HTMLAnchorElement::Url() const {
@@ -307,7 +307,7 @@
 }
 
 String HTMLAnchorElement::Input() const {
-  return getAttribute(kHrefAttr);
+  return getAttribute(html_names::kHrefAttr);
 }
 
 void HTMLAnchorElement::SetInput(const String& value) {
@@ -342,7 +342,7 @@
 }
 
 void HTMLAnchorElement::SendPings(const KURL& destination_url) const {
-  const AtomicString& ping_value = getAttribute(kPingAttr);
+  const AtomicString& ping_value = getAttribute(html_names::kPingAttr);
   if (ping_value.IsNull() || !GetDocument().GetSettings() ||
       !GetDocument().GetSettings()->GetHyperlinkAuditingEnabled()) {
     return;
@@ -385,7 +385,8 @@
   AnchorElementMetrics::MaybeReportClickedMetricsOnClick(this);
 
   StringBuilder url;
-  url.Append(StripLeadingAndTrailingHTMLSpaces(FastGetAttribute(kHrefAttr)));
+  url.Append(StripLeadingAndTrailingHTMLSpaces(
+      FastGetAttribute(html_names::kHrefAttr)));
   AppendServerMapMousePosition(url, &event);
   KURL completed_url = GetDocument().CompleteURL(url.ToString());
 
@@ -396,9 +397,9 @@
   ResourceRequest request(completed_url);
 
   network::mojom::ReferrerPolicy policy;
-  if (hasAttribute(kReferrerpolicyAttr) &&
+  if (hasAttribute(html_names::kReferrerpolicyAttr) &&
       SecurityPolicy::ReferrerPolicyFromString(
-          FastGetAttribute(kReferrerpolicyAttr),
+          FastGetAttribute(html_names::kReferrerpolicyAttr),
           kSupportReferrerPolicyLegacyKeywords, &policy) &&
       !HasRel(kRelationNoReferrer)) {
     UseCounter::Count(GetDocument(),
@@ -408,13 +409,13 @@
 
   // Ignore the download attribute if we either can't read the content, or
   // the event is an alt-click or similar.
-  if (hasAttribute(kDownloadAttr) &&
+  if (hasAttribute(html_names::kDownloadAttr) &&
       NavigationPolicyFromEvent(&event) != kNavigationPolicyDownload &&
       GetDocument().GetSecurityOrigin()->CanReadContent(completed_url)) {
     if (ShouldInterveneDownloadByFramePolicy(frame))
       return;
     request.SetSuggestedFilename(
-        static_cast<String>(FastGetAttribute(kDownloadAttr)));
+        static_cast<String>(FastGetAttribute(html_names::kDownloadAttr)));
     request.SetRequestContext(mojom::RequestContextType::DOWNLOAD);
     request.SetRequestorOrigin(GetDocument().GetSecurityOrigin());
     frame->Client()->DownloadURL(request,
@@ -424,7 +425,7 @@
 
   request.SetRequestContext(mojom::RequestContextType::HYPERLINK);
   request.SetHasUserGesture(LocalFrame::HasTransientUserActivation(frame));
-  const AtomicString& target = getAttribute(kTargetAttr);
+  const AtomicString& target = getAttribute(html_names::kTargetAttr);
   FrameLoadRequest frame_request(&GetDocument(), request);
   frame_request.SetNavigationPolicy(NavigationPolicyFromEvent(&event));
   if (HasRel(kRelationNoReferrer)) {
@@ -434,8 +435,9 @@
   if (HasRel(kRelationNoOpener))
     frame_request.SetNoOpener();
   if (RuntimeEnabledFeatures::HrefTranslateEnabled(&GetDocument()) &&
-      hasAttribute(kHreftranslateAttr)) {
-    frame_request.SetHrefTranslate(FastGetAttribute(kHreftranslateAttr));
+      hasAttribute(html_names::kHreftranslateAttr)) {
+    frame_request.SetHrefTranslate(
+        FastGetAttribute(html_names::kHreftranslateAttr));
     UseCounter::Count(GetDocument(),
                       WebFeature::kHTMLAnchorElementHrefTranslateAttribute);
   }
@@ -487,7 +489,7 @@
     ContainerNode& insertion_point) {
   InsertionNotificationRequest request =
       HTMLElement::InsertedInto(insertion_point);
-  LogAddElementIfIsolatedWorldAndInDocument("a", kHrefAttr);
+  LogAddElementIfIsolatedWorldAndInDocument("a", html_names::kHrefAttr);
 
   Document& top_document = GetDocument().TopDocument();
   if (AnchorElementMetricsSender::HasAnchorElementMetricsSender(top_document))
diff --git a/third_party/blink/renderer/core/html/html_area_element.cc b/third_party/blink/renderer/core/html/html_area_element.cc
index 3df9f0a..e890daa 100644
--- a/third_party/blink/renderer/core/html/html_area_element.cc
+++ b/third_party/blink/renderer/core/html/html_area_element.cc
@@ -42,10 +42,8 @@
 }
 }
 
-using namespace html_names;
-
 HTMLAreaElement::HTMLAreaElement(Document& document)
-    : HTMLAnchorElement(kAreaTag, document), shape_(kRect) {}
+    : HTMLAnchorElement(html_names::kAreaTag, document), shape_(kRect) {}
 
 // An explicit empty destructor should be in html_area_element.cc, because
 // if an implicit destructor is used or an empty destructor is defined in
@@ -57,7 +55,7 @@
 void HTMLAreaElement::ParseAttribute(
     const AttributeModificationParams& params) {
   const AtomicString& value = params.new_value;
-  if (params.name == kShapeAttr) {
+  if (params.name == html_names::kShapeAttr) {
     if (EqualIgnoringASCIICase(value, "default")) {
       shape_ = kDefault;
     } else if (EqualIgnoringASCIICase(value, "circle") ||
@@ -72,10 +70,11 @@
       shape_ = kRect;
     }
     InvalidateCachedPath();
-  } else if (params.name == kCoordsAttr) {
+  } else if (params.name == html_names::kCoordsAttr) {
     coords_ = ParseHTMLListOfFloatingPointNumbers(value.GetString());
     InvalidateCachedPath();
-  } else if (params.name == kAltAttr || params.name == kAccesskeyAttr) {
+  } else if (params.name == html_names::kAltAttr ||
+             params.name == html_names::kAccesskeyAttr) {
     // Do nothing.
   } else {
     HTMLAnchorElement::ParseAttribute(params);
diff --git a/third_party/blink/renderer/core/html/html_base_element.cc b/third_party/blink/renderer/core/html/html_base_element.cc
index e3e89b8..3a49acbe 100644
--- a/third_party/blink/renderer/core/html/html_base_element.cc
+++ b/third_party/blink/renderer/core/html/html_base_element.cc
@@ -30,14 +30,13 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLBaseElement::HTMLBaseElement(Document& document)
-    : HTMLElement(kBaseTag, document) {}
+    : HTMLElement(html_names::kBaseTag, document) {}
 
 void HTMLBaseElement::ParseAttribute(
     const AttributeModificationParams& params) {
-  if (params.name == kHrefAttr || params.name == kTargetAttr)
+  if (params.name == html_names::kHrefAttr ||
+      params.name == html_names::kTargetAttr)
     GetDocument().ProcessBaseElement();
   else
     HTMLElement::ParseAttribute(params);
@@ -58,7 +57,7 @@
 }
 
 bool HTMLBaseElement::IsURLAttribute(const Attribute& attribute) const {
-  return attribute.GetName().LocalName() == kHrefAttr ||
+  return attribute.GetName().LocalName() == html_names::kHrefAttr ||
          HTMLElement::IsURLAttribute(attribute);
 }
 
@@ -69,7 +68,7 @@
   // document's fallback base URL and ignore the base URL.
   // https://html.spec.whatwg.org/C/#dom-base-href
 
-  const AtomicString& attribute_value = FastGetAttribute(kHrefAttr);
+  const AtomicString& attribute_value = FastGetAttribute(html_names::kHrefAttr);
   if (attribute_value.IsNull())
     return GetDocument().Url();
 
@@ -87,7 +86,7 @@
 }
 
 void HTMLBaseElement::setHref(const AtomicString& url_string) {
-  setAttribute(kHrefAttr, url_string);
+  setAttribute(html_names::kHrefAttr, url_string);
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/html_body_element.cc b/third_party/blink/renderer/core/html/html_body_element.cc
index a0925a2..f81c88d9 100644
--- a/third_party/blink/renderer/core/html/html_body_element.cc
+++ b/third_party/blink/renderer/core/html/html_body_element.cc
@@ -41,17 +41,18 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLBodyElement::HTMLBodyElement(Document& document)
-    : HTMLElement(kBodyTag, document) {}
+    : HTMLElement(html_names::kBodyTag, document) {}
 
 HTMLBodyElement::~HTMLBodyElement() = default;
 
 bool HTMLBodyElement::IsPresentationAttribute(const QualifiedName& name) const {
-  if (name == kBackgroundAttr || name == kMarginwidthAttr ||
-      name == kLeftmarginAttr || name == kMarginheightAttr ||
-      name == kTopmarginAttr || name == kBgcolorAttr || name == kTextAttr)
+  if (name == html_names::kBackgroundAttr ||
+      name == html_names::kMarginwidthAttr ||
+      name == html_names::kLeftmarginAttr ||
+      name == html_names::kMarginheightAttr ||
+      name == html_names::kTopmarginAttr || name == html_names::kBgcolorAttr ||
+      name == html_names::kTextAttr)
     return true;
   return HTMLElement::IsPresentationAttribute(name);
 }
@@ -60,7 +61,7 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kBackgroundAttr) {
+  if (name == html_names::kBackgroundAttr) {
     String url = StripLeadingAndTrailingHTMLSpaces(value);
     if (!url.IsEmpty()) {
       CSSImageValue* image_value =
@@ -72,15 +73,17 @@
       style->SetProperty(
           CSSPropertyValue(GetCSSPropertyBackgroundImage(), *image_value));
     }
-  } else if (name == kMarginwidthAttr || name == kLeftmarginAttr) {
+  } else if (name == html_names::kMarginwidthAttr ||
+             name == html_names::kLeftmarginAttr) {
     AddHTMLLengthToStyle(style, CSSPropertyID::kMarginRight, value);
     AddHTMLLengthToStyle(style, CSSPropertyID::kMarginLeft, value);
-  } else if (name == kMarginheightAttr || name == kTopmarginAttr) {
+  } else if (name == html_names::kMarginheightAttr ||
+             name == html_names::kTopmarginAttr) {
     AddHTMLLengthToStyle(style, CSSPropertyID::kMarginBottom, value);
     AddHTMLLengthToStyle(style, CSSPropertyID::kMarginTop, value);
-  } else if (name == kBgcolorAttr) {
+  } else if (name == html_names::kBgcolorAttr) {
     AddHTMLColorToStyle(style, CSSPropertyID::kBackgroundColor, value);
-  } else if (name == kTextAttr) {
+  } else if (name == html_names::kTextAttr) {
     AddHTMLColorToStyle(style, CSSPropertyID::kColor, value);
   } else {
     HTMLElement::CollectStyleForPresentationAttribute(name, value, style);
@@ -91,11 +94,12 @@
     const AttributeModificationParams& params) {
   const QualifiedName& name = params.name;
   const AtomicString& value = params.new_value;
-  if (name == kVlinkAttr || name == kAlinkAttr || name == kLinkAttr) {
+  if (name == html_names::kVlinkAttr || name == html_names::kAlinkAttr ||
+      name == html_names::kLinkAttr) {
     if (value.IsNull()) {
-      if (name == kLinkAttr)
+      if (name == html_names::kLinkAttr)
         GetDocument().GetTextLinkColors().ResetLinkColor();
-      else if (name == kVlinkAttr)
+      else if (name == html_names::kVlinkAttr)
         GetDocument().GetTextLinkColors().ResetVisitedLinkColor();
       else
         GetDocument().GetTextLinkColors().ResetActiveLinkColor();
@@ -105,9 +109,9 @@
       if (!HTMLElement::ParseColorWithLegacyRules(string_value, color))
         return;
 
-      if (name == kLinkAttr)
+      if (name == html_names::kLinkAttr)
         GetDocument().GetTextLinkColors().SetLinkColor(color);
-      else if (name == kVlinkAttr)
+      else if (name == html_names::kVlinkAttr)
         GetDocument().GetTextLinkColors().SetVisitedLinkColor(color);
       else
         GetDocument().GetTextLinkColors().SetActiveLinkColor(color);
@@ -116,103 +120,103 @@
     SetNeedsStyleRecalc(kSubtreeStyleChange,
                         StyleChangeReasonForTracing::Create(
                             style_change_reason::kLinkColorChange));
-  } else if (name == kOnafterprintAttr) {
+  } else if (name == html_names::kOnafterprintAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kAfterprint,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnbeforeprintAttr) {
+  } else if (name == html_names::kOnbeforeprintAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kBeforeprint,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnloadAttr) {
+  } else if (name == html_names::kOnloadAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kLoad,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnbeforeunloadAttr) {
+  } else if (name == html_names::kOnbeforeunloadAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kBeforeunload,
         CreateAttributeEventListener(
             GetDocument().GetFrame(), name, value,
             JSEventHandler::HandlerType::kOnBeforeUnloadEventHandler));
-  } else if (name == kOnunloadAttr) {
+  } else if (name == html_names::kOnunloadAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kUnload,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnpagehideAttr) {
+  } else if (name == html_names::kOnpagehideAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kPagehide,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnpageshowAttr) {
+  } else if (name == html_names::kOnpageshowAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kPageshow,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnpopstateAttr) {
+  } else if (name == html_names::kOnpopstateAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kPopstate,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnblurAttr) {
+  } else if (name == html_names::kOnblurAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kBlur,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnerrorAttr) {
+  } else if (name == html_names::kOnerrorAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kError,
         CreateAttributeEventListener(
             GetDocument().GetFrame(), name, value,
             JSEventHandler::HandlerType::kOnErrorEventHandler));
-  } else if (name == kOnfocusAttr) {
+  } else if (name == html_names::kOnfocusAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kFocus,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
   } else if (RuntimeEnabledFeatures::OrientationEventEnabled() &&
-             name == kOnorientationchangeAttr) {
+             name == html_names::kOnorientationchangeAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kOrientationchange,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnhashchangeAttr) {
+  } else if (name == html_names::kOnhashchangeAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kHashchange,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnmessageAttr) {
+  } else if (name == html_names::kOnmessageAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kMessage,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnmessageerrorAttr) {
+  } else if (name == html_names::kOnmessageerrorAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kMessageerror,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnresizeAttr) {
+  } else if (name == html_names::kOnresizeAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kResize,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnscrollAttr) {
+  } else if (name == html_names::kOnscrollAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kScroll,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnselectionchangeAttr) {
+  } else if (name == html_names::kOnselectionchangeAttr) {
     UseCounter::Count(GetDocument(),
                       WebFeature::kHTMLBodyElementOnSelectionChangeAttribute);
     GetDocument().SetAttributeEventListener(
         event_type_names::kSelectionchange,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnstorageAttr) {
+  } else if (name == html_names::kOnstorageAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kStorage,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnonlineAttr) {
+  } else if (name == html_names::kOnonlineAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kOnline,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnofflineAttr) {
+  } else if (name == html_names::kOnofflineAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kOffline,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnlanguagechangeAttr) {
+  } else if (name == html_names::kOnlanguagechangeAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kLanguagechange,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
   } else if (RuntimeEnabledFeatures::PortalsEnabled() &&
-             name == kOnportalactivateAttr) {
+             name == html_names::kOnportalactivateAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kPortalactivate,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
@@ -235,23 +239,24 @@
     int margin_width = GetDocument().GetFrame()->Owner()->MarginWidth();
     int margin_height = GetDocument().GetFrame()->Owner()->MarginHeight();
     if (margin_width != -1)
-      SetIntegralAttribute(kMarginwidthAttr, margin_width);
+      SetIntegralAttribute(html_names::kMarginwidthAttr, margin_width);
     if (margin_height != -1)
-      SetIntegralAttribute(kMarginheightAttr, margin_height);
+      SetIntegralAttribute(html_names::kMarginheightAttr, margin_height);
   }
 }
 
 bool HTMLBodyElement::IsURLAttribute(const Attribute& attribute) const {
-  return attribute.GetName() == kBackgroundAttr ||
+  return attribute.GetName() == html_names::kBackgroundAttr ||
          HTMLElement::IsURLAttribute(attribute);
 }
 
 bool HTMLBodyElement::HasLegalLinkAttribute(const QualifiedName& name) const {
-  return name == kBackgroundAttr || HTMLElement::HasLegalLinkAttribute(name);
+  return name == html_names::kBackgroundAttr ||
+         HTMLElement::HasLegalLinkAttribute(name);
 }
 
 const QualifiedName& HTMLBodyElement::SubResourceAttributeName() const {
-  return kBackgroundAttr;
+  return html_names::kBackgroundAttr;
 }
 
 bool HTMLBodyElement::SupportsFocus() const {
diff --git a/third_party/blink/renderer/core/html/html_br_element.cc b/third_party/blink/renderer/core/html/html_br_element.cc
index 23b187a8..d81dd2d7 100644
--- a/third_party/blink/renderer/core/html/html_br_element.cc
+++ b/third_party/blink/renderer/core/html/html_br_element.cc
@@ -29,13 +29,11 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLBRElement::HTMLBRElement(Document& document)
-    : HTMLElement(kBrTag, document) {}
+    : HTMLElement(html_names::kBrTag, document) {}
 
 bool HTMLBRElement::IsPresentationAttribute(const QualifiedName& name) const {
-  if (name == kClearAttr)
+  if (name == html_names::kClearAttr)
     return true;
   return HTMLElement::IsPresentationAttribute(name);
 }
@@ -44,7 +42,7 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kClearAttr) {
+  if (name == html_names::kClearAttr) {
     // If the string is empty, then don't add the clear property.
     // <br clear> and <br clear=""> are just treated like <br> by Gecko, Mac IE,
     // etc. -dwh
diff --git a/third_party/blink/renderer/core/html/html_collection.cc b/third_party/blink/renderer/core/html/html_collection.cc
index 3450872e..fcf01b8 100644
--- a/third_party/blink/renderer/core/html/html_collection.cc
+++ b/third_party/blink/renderer/core/html/html_collection.cc
@@ -42,8 +42,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 static bool ShouldTypeOnlyIncludeDirectChildren(CollectionType type) {
   switch (type) {
     case kClassCollectionType:
@@ -215,22 +213,23 @@
                                          const HTMLElement& element) {
   switch (html_collection.GetType()) {
     case kDocImages:
-      return element.HasTagName(kImgTag);
+      return element.HasTagName(html_names::kImgTag);
     case kDocScripts:
-      return element.HasTagName(kScriptTag);
+      return element.HasTagName(html_names::kScriptTag);
     case kDocForms:
-      return element.HasTagName(kFormTag);
+      return element.HasTagName(html_names::kFormTag);
     case kDocumentNamedItems:
       return ToDocumentNameCollection(html_collection).ElementMatches(element);
     case kDocumentAllNamedItems:
       return ToDocumentAllNameCollection(html_collection)
           .ElementMatches(element);
     case kTableTBodies:
-      return element.HasTagName(kTbodyTag);
+      return element.HasTagName(html_names::kTbodyTag);
     case kTRCells:
-      return element.HasTagName(kTdTag) || element.HasTagName(kThTag);
+      return element.HasTagName(html_names::kTdTag) ||
+             element.HasTagName(html_names::kThTag);
     case kTSectionRows:
-      return element.HasTagName(kTrTag);
+      return element.HasTagName(html_names::kTrTag);
     case kSelectOptions:
       return ToHTMLOptionsCollection(html_collection).ElementMatches(element);
     case kSelectedOptions: {
@@ -241,17 +240,19 @@
       return ToHTMLDataListOptionsCollection(html_collection)
           .ElementMatches(element);
     case kMapAreas:
-      return element.HasTagName(kAreaTag);
+      return element.HasTagName(html_names::kAreaTag);
     case kDocApplets:
       return IsHTMLObjectElement(element) &&
              ToHTMLObjectElement(element).ContainsJavaApplet();
     case kDocEmbeds:
-      return element.HasTagName(kEmbedTag);
+      return element.HasTagName(html_names::kEmbedTag);
     case kDocLinks:
-      return (element.HasTagName(kATag) || element.HasTagName(kAreaTag)) &&
-             element.FastHasAttribute(kHrefAttr);
+      return (element.HasTagName(html_names::kATag) ||
+              element.HasTagName(html_names::kAreaTag)) &&
+             element.FastHasAttribute(html_names::kHrefAttr);
     case kDocAnchors:
-      return element.HasTagName(kATag) && element.FastHasAttribute(kNameAttr);
+      return element.HasTagName(html_names::kATag) &&
+             element.FastHasAttribute(html_names::kNameAttr);
     case kFormControls:
       DCHECK(IsA<HTMLFieldSetElement>(html_collection.ownerNode()));
       return IsHTMLObjectElement(element) ||
@@ -336,13 +337,20 @@
 // although it returns any type of element by id.
 static inline bool NameShouldBeVisibleInDocumentAll(
     const HTMLElement& element) {
-  return element.HasTagName(kATag) || element.HasTagName(kButtonTag) ||
-         element.HasTagName(kEmbedTag) || element.HasTagName(kFormTag) ||
-         element.HasTagName(kFrameTag) || element.HasTagName(kFramesetTag) ||
-         element.HasTagName(kIFrameTag) || element.HasTagName(kImgTag) ||
-         element.HasTagName(kInputTag) || element.HasTagName(kMapTag) ||
-         element.HasTagName(kMetaTag) || element.HasTagName(kObjectTag) ||
-         element.HasTagName(kSelectTag) || element.HasTagName(kTextareaTag);
+  return element.HasTagName(html_names::kATag) ||
+         element.HasTagName(html_names::kButtonTag) ||
+         element.HasTagName(html_names::kEmbedTag) ||
+         element.HasTagName(html_names::kFormTag) ||
+         element.HasTagName(html_names::kFrameTag) ||
+         element.HasTagName(html_names::kFramesetTag) ||
+         element.HasTagName(html_names::kIFrameTag) ||
+         element.HasTagName(html_names::kImgTag) ||
+         element.HasTagName(html_names::kInputTag) ||
+         element.HasTagName(html_names::kMapTag) ||
+         element.HasTagName(html_names::kMetaTag) ||
+         element.HasTagName(html_names::kObjectTag) ||
+         element.HasTagName(html_names::kSelectTag) ||
+         element.HasTagName(html_names::kTextareaTag);
 }
 
 Element* HTMLCollection::TraverseToFirst() const {
diff --git a/third_party/blink/renderer/core/html/html_content_element.cc b/third_party/blink/renderer/core/html/html_content_element.cc
index 7697e3a..2f120a42 100644
--- a/third_party/blink/renderer/core/html/html_content_element.cc
+++ b/third_party/blink/renderer/core/html/html_content_element.cc
@@ -39,10 +39,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLContentElement::HTMLContentElement(Document& document)
-    : V0InsertionPoint(kContentTag, document),
+    : V0InsertionPoint(html_names::kContentTag, document),
       should_parse_select_(false),
       is_valid_selector_(true) {
   UseCounter::Count(document, WebFeature::kHTMLContentElement);
@@ -67,7 +65,7 @@
 
 void HTMLContentElement::ParseAttribute(
     const AttributeModificationParams& params) {
-  if (params.name == kSelectAttr) {
+  if (params.name == html_names::kSelectAttr) {
     if (ShadowRoot* root = ContainingShadowRoot()) {
       if (!root->IsV1())
         root->V0().WillAffectSelector();
diff --git a/third_party/blink/renderer/core/html/html_details_element.cc b/third_party/blink/renderer/core/html/html_details_element.cc
index 043d0e3a..410cee2 100644
--- a/third_party/blink/renderer/core/html/html_details_element.cc
+++ b/third_party/blink/renderer/core/html/html_details_element.cc
@@ -44,10 +44,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLDetailsElement::HTMLDetailsElement(Document& document)
-    : HTMLElement(kDetailsTag, document), is_open_(false) {
+    : HTMLElement(html_names::kDetailsTag, document), is_open_(false) {
   UseCounter::Count(document, WebFeature::kDetailsElement);
   EnsureUserAgentShadowRoot();
 }
@@ -114,7 +112,7 @@
 
 void HTMLDetailsElement::ParseAttribute(
     const AttributeModificationParams& params) {
-  if (params.name == kOpenAttr) {
+  if (params.name == html_names::kOpenAttr) {
     bool old_value = is_open_;
     is_open_ = !params.new_value.IsNull();
     if (is_open_ == old_value)
@@ -151,7 +149,7 @@
 }
 
 void HTMLDetailsElement::ToggleOpen() {
-  setAttribute(kOpenAttr, is_open_ ? g_null_atom : g_empty_atom);
+  setAttribute(html_names::kOpenAttr, is_open_ ? g_null_atom : g_empty_atom);
 }
 
 bool HTMLDetailsElement::IsInteractiveContent() const {
diff --git a/third_party/blink/renderer/core/html/html_dialog_element.cc b/third_party/blink/renderer/core/html/html_dialog_element.cc
index 0036d0d1..7666a717 100644
--- a/third_party/blink/renderer/core/html/html_dialog_element.cc
+++ b/third_party/blink/renderer/core/html/html_dialog_element.cc
@@ -39,8 +39,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 // This function chooses the focused element when show() or showModal() is
 // invoked, as described in their spec.
 static void SetFocusForDialog(HTMLDialogElement* dialog) {
@@ -94,7 +92,7 @@
 }
 
 HTMLDialogElement::HTMLDialogElement(Document& document)
-    : HTMLElement(kDialogTag, document),
+    : HTMLElement(html_names::kDialogTag, document),
       centering_mode_(kNotCentered),
       centered_position_(0),
       return_value_("") {
@@ -104,9 +102,9 @@
 void HTMLDialogElement::close(const String& return_value) {
   // https://html.spec.whatwg.org/C/#close-the-dialog
 
-  if (!FastHasAttribute(kOpenAttr))
+  if (!FastHasAttribute(html_names::kOpenAttr))
     return;
-  SetBooleanAttribute(kOpenAttr, false);
+  SetBooleanAttribute(html_names::kOpenAttr, false);
 
   HTMLDialogElement* active_modal_dialog = GetDocument().ActiveModalDialog();
   GetDocument().RemoveFromTopLayer(this);
@@ -133,9 +131,9 @@
 }
 
 void HTMLDialogElement::show() {
-  if (FastHasAttribute(kOpenAttr))
+  if (FastHasAttribute(html_names::kOpenAttr))
     return;
-  SetBooleanAttribute(kOpenAttr, true);
+  SetBooleanAttribute(html_names::kOpenAttr, true);
 
   // The layout must be updated here because setFocusForDialog calls
   // Element::isFocusable, which requires an up-to-date layout.
@@ -145,7 +143,7 @@
 }
 
 void HTMLDialogElement::showModal(ExceptionState& exception_state) {
-  if (FastHasAttribute(kOpenAttr)) {
+  if (FastHasAttribute(html_names::kOpenAttr)) {
     exception_state.ThrowDOMException(DOMExceptionCode::kInvalidStateError,
                                       "The element already has an 'open' "
                                       "attribute, and therefore cannot be "
@@ -165,7 +163,7 @@
   }
 
   GetDocument().AddToTopLayer(this);
-  SetBooleanAttribute(kOpenAttr, true);
+  SetBooleanAttribute(html_names::kOpenAttr, true);
 
   ForceLayoutForCentering();
 
@@ -205,7 +203,7 @@
   // FIXME: Workaround for <https://bugs.webkit.org/show_bug.cgi?id=91058>:
   // modifying an attribute for which there is an attribute selector in html.css
   // sometimes does not trigger a style recalc.
-  if (name == kOpenAttr)
+  if (name == html_names::kOpenAttr)
     return true;
 
   return HTMLElement::IsPresentationAttribute(name);
diff --git a/third_party/blink/renderer/core/html/html_directory_element.cc b/third_party/blink/renderer/core/html/html_directory_element.cc
index 5a75da96..ca9d13c 100644
--- a/third_party/blink/renderer/core/html/html_directory_element.cc
+++ b/third_party/blink/renderer/core/html/html_directory_element.cc
@@ -26,9 +26,7 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLDirectoryElement::HTMLDirectoryElement(Document& document)
-    : HTMLElement(kDirTag, document) {}
+    : HTMLElement(html_names::kDirTag, document) {}
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/html_div_element.cc b/third_party/blink/renderer/core/html/html_div_element.cc
index 03fecf84..3b7b6c5 100644
--- a/third_party/blink/renderer/core/html/html_div_element.cc
+++ b/third_party/blink/renderer/core/html/html_div_element.cc
@@ -28,16 +28,14 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLDivElement::HTMLDivElement(Document& document)
-    : HTMLElement(kDivTag, document) {}
+    : HTMLElement(html_names::kDivTag, document) {}
 
 void HTMLDivElement::CollectStyleForPresentationAttribute(
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kAlignAttr) {
+  if (name == html_names::kAlignAttr) {
     if (DeprecatedEqualIgnoringCase(value, "middle") ||
         DeprecatedEqualIgnoringCase(value, "center")) {
       AddPropertyToPresentationAttributeStyle(style, CSSPropertyID::kTextAlign,
diff --git a/third_party/blink/renderer/core/html/html_dlist_element.cc b/third_party/blink/renderer/core/html/html_dlist_element.cc
index e812fc81..9336084 100644
--- a/third_party/blink/renderer/core/html/html_dlist_element.cc
+++ b/third_party/blink/renderer/core/html/html_dlist_element.cc
@@ -26,9 +26,7 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLDListElement::HTMLDListElement(Document& document)
-    : HTMLElement(kDlTag, document) {}
+    : HTMLElement(html_names::kDlTag, document) {}
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/html_document.cc b/third_party/blink/renderer/core/html/html_document.cc
index 3db77e50..869a05f 100644
--- a/third_party/blink/renderer/core/html/html_document.cc
+++ b/third_party/blink/renderer/core/html/html_document.cc
@@ -62,8 +62,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLDocument::HTMLDocument(const DocumentInit& initializer,
                            DocumentClassFlags extended_document_classes)
     : Document(initializer, kHTMLDocumentClass | extended_document_classes) {
@@ -118,18 +116,29 @@
   HashSet<StringImpl*>* attr_set = new HashSet<StringImpl*>;
 
   const QualifiedName* case_insensitive_attributes[] = {
-      &kAcceptCharsetAttr, &kAcceptAttr,    &kAlignAttr,    &kAlinkAttr,
-      &kAxisAttr,          &kBgcolorAttr,   &kCharsetAttr,  &kCheckedAttr,
-      &kClearAttr,         &kCodetypeAttr,  &kColorAttr,    &kCompactAttr,
-      &kDeclareAttr,       &kDeferAttr,     &kDirAttr,      &kDirectionAttr,
-      &kDisabledAttr,      &kEnctypeAttr,   &kFaceAttr,     &kFrameAttr,
-      &kHreflangAttr,      &kHttpEquivAttr, &kLangAttr,     &kLanguageAttr,
-      &kLinkAttr,          &kMediaAttr,     &kMethodAttr,   &kMultipleAttr,
-      &kNohrefAttr,        &kNoresizeAttr,  &kNoshadeAttr,  &kNowrapAttr,
-      &kReadonlyAttr,      &kRelAttr,       &kRevAttr,      &kRulesAttr,
-      &kScopeAttr,         &kScrollingAttr, &kSelectedAttr, &kShapeAttr,
-      &kTargetAttr,        &kTextAttr,      &kTypeAttr,     &kValignAttr,
-      &kValuetypeAttr,     &kVlinkAttr};
+      &html_names::kAcceptCharsetAttr, &html_names::kAcceptAttr,
+      &html_names::kAlignAttr,         &html_names::kAlinkAttr,
+      &html_names::kAxisAttr,          &html_names::kBgcolorAttr,
+      &html_names::kCharsetAttr,       &html_names::kCheckedAttr,
+      &html_names::kClearAttr,         &html_names::kCodetypeAttr,
+      &html_names::kColorAttr,         &html_names::kCompactAttr,
+      &html_names::kDeclareAttr,       &html_names::kDeferAttr,
+      &html_names::kDirAttr,           &html_names::kDirectionAttr,
+      &html_names::kDisabledAttr,      &html_names::kEnctypeAttr,
+      &html_names::kFaceAttr,          &html_names::kFrameAttr,
+      &html_names::kHreflangAttr,      &html_names::kHttpEquivAttr,
+      &html_names::kLangAttr,          &html_names::kLanguageAttr,
+      &html_names::kLinkAttr,          &html_names::kMediaAttr,
+      &html_names::kMethodAttr,        &html_names::kMultipleAttr,
+      &html_names::kNohrefAttr,        &html_names::kNoresizeAttr,
+      &html_names::kNoshadeAttr,       &html_names::kNowrapAttr,
+      &html_names::kReadonlyAttr,      &html_names::kRelAttr,
+      &html_names::kRevAttr,           &html_names::kRulesAttr,
+      &html_names::kScopeAttr,         &html_names::kScrollingAttr,
+      &html_names::kSelectedAttr,      &html_names::kShapeAttr,
+      &html_names::kTargetAttr,        &html_names::kTextAttr,
+      &html_names::kTypeAttr,          &html_names::kValignAttr,
+      &html_names::kValuetypeAttr,     &html_names::kVlinkAttr};
 
   attr_set->ReserveCapacityForSize(base::size(case_insensitive_attributes));
   for (const QualifiedName* attr : case_insensitive_attributes)
diff --git a/third_party/blink/renderer/core/html/html_element.cc b/third_party/blink/renderer/core/html/html_element.cc
index 7c1ff5e..cf973b5f 100644
--- a/third_party/blink/renderer/core/html/html_element.cc
+++ b/third_party/blink/renderer/core/html/html_element.cc
@@ -85,9 +85,6 @@
 
 namespace blink {
 
-using namespace cssvalue;
-using namespace html_names;
-
 using AttributeChangedFunction =
     void (HTMLElement::*)(const Element::AttributeModificationParams& params);
 
@@ -163,19 +160,23 @@
 
 bool HTMLElement::ShouldSerializeEndTag() const {
   // See https://www.w3.org/TR/DOM-Parsing/
-  if (HasTagName(kAreaTag) || HasTagName(kBaseTag) ||
-      HasTagName(kBasefontTag) || HasTagName(kBgsoundTag) ||
-      HasTagName(kBrTag) || HasTagName(kColTag) || HasTagName(kEmbedTag) ||
-      HasTagName(kFrameTag) || HasTagName(kHrTag) || HasTagName(kImgTag) ||
-      HasTagName(kInputTag) || HasTagName(kKeygenTag) || HasTagName(kLinkTag) ||
-      HasTagName(kMetaTag) || HasTagName(kParamTag) || HasTagName(kSourceTag) ||
-      HasTagName(kTrackTag) || HasTagName(kWbrTag))
+  if (HasTagName(html_names::kAreaTag) || HasTagName(html_names::kBaseTag) ||
+      HasTagName(html_names::kBasefontTag) ||
+      HasTagName(html_names::kBgsoundTag) || HasTagName(html_names::kBrTag) ||
+      HasTagName(html_names::kColTag) || HasTagName(html_names::kEmbedTag) ||
+      HasTagName(html_names::kFrameTag) || HasTagName(html_names::kHrTag) ||
+      HasTagName(html_names::kImgTag) || HasTagName(html_names::kInputTag) ||
+      HasTagName(html_names::kKeygenTag) || HasTagName(html_names::kLinkTag) ||
+      HasTagName(html_names::kMetaTag) || HasTagName(html_names::kParamTag) ||
+      HasTagName(html_names::kSourceTag) || HasTagName(html_names::kTrackTag) ||
+      HasTagName(html_names::kWbrTag))
     return false;
   return true;
 }
 
 static inline CSSValueID UnicodeBidiAttributeForDirAuto(HTMLElement* element) {
-  if (element->HasTagName(kPreTag) || element->HasTagName(kTextareaTag))
+  if (element->HasTagName(html_names::kPreTag) ||
+      element->HasTagName(html_names::kTextareaTag))
     return CSSValueID::kWebkitPlaintext;
   // FIXME: For bdo element, dir="auto" should result in "bidi-override isolate"
   // but we don't support having multiple values in unicode-bidi yet.
@@ -187,7 +188,7 @@
     const AtomicString& value) const {
   unsigned border_width = 0;
   if (value.IsEmpty() || !ParseHTMLNonNegativeInteger(value, border_width)) {
-    if (HasTagName(kTableTag) && !value.IsNull())
+    if (HasTagName(html_names::kTableTag) && !value.IsNull())
       return 1;
   }
   return border_width;
@@ -242,10 +243,11 @@
 }
 
 bool HTMLElement::IsPresentationAttribute(const QualifiedName& name) const {
-  if (name == kAlignAttr || name == kContenteditableAttr ||
-      name == kHiddenAttr || name == kLangAttr ||
-      name.Matches(xml_names::kLangAttr) || name == kDraggableAttr ||
-      name == kDirAttr)
+  if (name == html_names::kAlignAttr ||
+      name == html_names::kContenteditableAttr ||
+      name == html_names::kHiddenAttr || name == html_names::kLangAttr ||
+      name.Matches(xml_names::kLangAttr) ||
+      name == html_names::kDraggableAttr || name == html_names::kDirAttr)
     return true;
   return Element::IsPresentationAttribute(name);
 }
@@ -260,7 +262,7 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kAlignAttr) {
+  if (name == html_names::kAlignAttr) {
     if (DeprecatedEqualIgnoringCase(value, "middle")) {
       AddPropertyToPresentationAttributeStyle(style, CSSPropertyID::kTextAlign,
                                               CSSValueID::kCenter);
@@ -268,7 +270,7 @@
       AddPropertyToPresentationAttributeStyle(style, CSSPropertyID::kTextAlign,
                                               value);
     }
-  } else if (name == kContenteditableAttr) {
+  } else if (name == html_names::kContenteditableAttr) {
     if (value.IsEmpty() || DeprecatedEqualIgnoringCase(value, "true")) {
       AddPropertyToPresentationAttributeStyle(
           style, CSSPropertyID::kWebkitUserModify, CSSValueID::kReadWrite);
@@ -277,7 +279,7 @@
       AddPropertyToPresentationAttributeStyle(
           style, CSSPropertyID::kWebkitLineBreak, CSSValueID::kAfterWhiteSpace);
       UseCounter::Count(GetDocument(), WebFeature::kContentEditableTrue);
-      if (HasTagName(kHTMLTag)) {
+      if (HasTagName(html_names::kHTMLTag)) {
         UseCounter::Count(GetDocument(),
                           WebFeature::kContentEditableTrueOnHTML);
       }
@@ -295,10 +297,10 @@
       AddPropertyToPresentationAttributeStyle(
           style, CSSPropertyID::kWebkitUserModify, CSSValueID::kReadOnly);
     }
-  } else if (name == kHiddenAttr) {
+  } else if (name == html_names::kHiddenAttr) {
     AddPropertyToPresentationAttributeStyle(style, CSSPropertyID::kDisplay,
                                             CSSValueID::kNone);
-  } else if (name == kDraggableAttr) {
+  } else if (name == html_names::kDraggableAttr) {
     UseCounter::Count(GetDocument(), WebFeature::kDraggableAttribute);
     if (DeprecatedEqualIgnoringCase(value, "true")) {
       AddPropertyToPresentationAttributeStyle(
@@ -309,7 +311,7 @@
       AddPropertyToPresentationAttributeStyle(
           style, CSSPropertyID::kWebkitUserDrag, CSSValueID::kNone);
     }
-  } else if (name == kDirAttr) {
+  } else if (name == html_names::kDirAttr) {
     if (DeprecatedEqualIgnoringCase(value, "auto")) {
       AddPropertyToPresentationAttributeStyle(
           style, CSSPropertyID::kUnicodeBidi,
@@ -322,15 +324,16 @@
         AddPropertyToPresentationAttributeStyle(
             style, CSSPropertyID::kDirection, "ltr");
       }
-      if (!HasTagName(kBdiTag) && !HasTagName(kBdoTag) &&
-          !HasTagName(kOutputTag)) {
+      if (!HasTagName(html_names::kBdiTag) &&
+          !HasTagName(html_names::kBdoTag) &&
+          !HasTagName(html_names::kOutputTag)) {
         AddPropertyToPresentationAttributeStyle(
             style, CSSPropertyID::kUnicodeBidi, CSSValueID::kIsolate);
       }
     }
   } else if (name.Matches(xml_names::kLangAttr)) {
     MapLanguageAttributeToLocale(value, style);
-  } else if (name == kLangAttr) {
+  } else if (name == html_names::kLangAttr) {
     // xml:lang has a higher priority than lang.
     if (!FastHasAttribute(xml_names::kLangAttr))
       MapLanguageAttributeToLocale(value, style);
@@ -344,238 +347,321 @@
     const QualifiedName& attr_name) {
   const AtomicString& kNoEvent = g_null_atom;
   static AttributeTriggers attribute_triggers[] = {
-      {kDirAttr, kNoWebFeature, kNoEvent, &HTMLElement::OnDirAttrChanged},
-      {kFormAttr, kNoWebFeature, kNoEvent, &HTMLElement::OnFormAttrChanged},
-      {kInertAttr, WebFeature::kInertAttribute, kNoEvent,
+      {html_names::kDirAttr, kNoWebFeature, kNoEvent,
+       &HTMLElement::OnDirAttrChanged},
+      {html_names::kFormAttr, kNoWebFeature, kNoEvent,
+       &HTMLElement::OnFormAttrChanged},
+      {html_names::kInertAttr, WebFeature::kInertAttribute, kNoEvent,
        &HTMLElement::OnInertAttrChanged},
-      {kLangAttr, kNoWebFeature, kNoEvent, &HTMLElement::OnLangAttrChanged},
-      {kNonceAttr, kNoWebFeature, kNoEvent, &HTMLElement::OnNonceAttrChanged},
-      {kTabindexAttr, kNoWebFeature, kNoEvent,
+      {html_names::kLangAttr, kNoWebFeature, kNoEvent,
+       &HTMLElement::OnLangAttrChanged},
+      {html_names::kNonceAttr, kNoWebFeature, kNoEvent,
+       &HTMLElement::OnNonceAttrChanged},
+      {html_names::kTabindexAttr, kNoWebFeature, kNoEvent,
        &HTMLElement::OnTabIndexAttrChanged},
       {xml_names::kLangAttr, kNoWebFeature, kNoEvent,
        &HTMLElement::OnXMLLangAttrChanged},
 
-      {kOnabortAttr, kNoWebFeature, event_type_names::kAbort, nullptr},
-      {kOnactivateinvisibleAttr, kNoWebFeature,
+      {html_names::kOnabortAttr, kNoWebFeature, event_type_names::kAbort,
+       nullptr},
+      {html_names::kOnactivateinvisibleAttr, kNoWebFeature,
        event_type_names::kActivateinvisible, nullptr},
-      {kOnanimationendAttr, kNoWebFeature, event_type_names::kAnimationend,
-       nullptr},
-      {kOnanimationiterationAttr, kNoWebFeature,
+      {html_names::kOnanimationendAttr, kNoWebFeature,
+       event_type_names::kAnimationend, nullptr},
+      {html_names::kOnanimationiterationAttr, kNoWebFeature,
        event_type_names::kAnimationiteration, nullptr},
-      {kOnanimationstartAttr, kNoWebFeature, event_type_names::kAnimationstart,
+      {html_names::kOnanimationstartAttr, kNoWebFeature,
+       event_type_names::kAnimationstart, nullptr},
+      {html_names::kOnauxclickAttr, kNoWebFeature, event_type_names::kAuxclick,
        nullptr},
-      {kOnauxclickAttr, kNoWebFeature, event_type_names::kAuxclick, nullptr},
-      {kOnbeforeactivateAttr, kNoWebFeature, event_type_names::kBeforeactivate,
+      {html_names::kOnbeforeactivateAttr, kNoWebFeature,
+       event_type_names::kBeforeactivate, nullptr},
+      {html_names::kOnbeforecopyAttr, kNoWebFeature,
+       event_type_names::kBeforecopy, nullptr},
+      {html_names::kOnbeforecutAttr, kNoWebFeature,
+       event_type_names::kBeforecut, nullptr},
+      {html_names::kOnbeforepasteAttr, kNoWebFeature,
+       event_type_names::kBeforepaste, nullptr},
+      {html_names::kOnblurAttr, kNoWebFeature, event_type_names::kBlur,
        nullptr},
-      {kOnbeforecopyAttr, kNoWebFeature, event_type_names::kBeforecopy,
+      {html_names::kOncancelAttr, kNoWebFeature, event_type_names::kCancel,
        nullptr},
-      {kOnbeforecutAttr, kNoWebFeature, event_type_names::kBeforecut, nullptr},
-      {kOnbeforepasteAttr, kNoWebFeature, event_type_names::kBeforepaste,
+      {html_names::kOncanplayAttr, kNoWebFeature, event_type_names::kCanplay,
        nullptr},
-      {kOnblurAttr, kNoWebFeature, event_type_names::kBlur, nullptr},
-      {kOncancelAttr, kNoWebFeature, event_type_names::kCancel, nullptr},
-      {kOncanplayAttr, kNoWebFeature, event_type_names::kCanplay, nullptr},
-      {kOncanplaythroughAttr, kNoWebFeature, event_type_names::kCanplaythrough,
+      {html_names::kOncanplaythroughAttr, kNoWebFeature,
+       event_type_names::kCanplaythrough, nullptr},
+      {html_names::kOnchangeAttr, kNoWebFeature, event_type_names::kChange,
        nullptr},
-      {kOnchangeAttr, kNoWebFeature, event_type_names::kChange, nullptr},
-      {kOnclickAttr, kNoWebFeature, event_type_names::kClick, nullptr},
-      {kOncloseAttr, kNoWebFeature, event_type_names::kClose, nullptr},
-      {kOncontextmenuAttr, kNoWebFeature, event_type_names::kContextmenu,
+      {html_names::kOnclickAttr, kNoWebFeature, event_type_names::kClick,
        nullptr},
-      {kOncopyAttr, kNoWebFeature, event_type_names::kCopy, nullptr},
-      {kOncuechangeAttr, kNoWebFeature, event_type_names::kCuechange, nullptr},
-      {kOncutAttr, kNoWebFeature, event_type_names::kCut, nullptr},
-      {kOndblclickAttr, kNoWebFeature, event_type_names::kDblclick, nullptr},
-      {kOndragAttr, kNoWebFeature, event_type_names::kDrag, nullptr},
-      {kOndragendAttr, kNoWebFeature, event_type_names::kDragend, nullptr},
-      {kOndragenterAttr, kNoWebFeature, event_type_names::kDragenter, nullptr},
-      {kOndragleaveAttr, kNoWebFeature, event_type_names::kDragleave, nullptr},
-      {kOndragoverAttr, kNoWebFeature, event_type_names::kDragover, nullptr},
-      {kOndragstartAttr, kNoWebFeature, event_type_names::kDragstart, nullptr},
-      {kOndropAttr, kNoWebFeature, event_type_names::kDrop, nullptr},
-      {kOndurationchangeAttr, kNoWebFeature, event_type_names::kDurationchange,
+      {html_names::kOncloseAttr, kNoWebFeature, event_type_names::kClose,
        nullptr},
-      {kOnemptiedAttr, kNoWebFeature, event_type_names::kEmptied, nullptr},
-      {kOnendedAttr, kNoWebFeature, event_type_names::kEnded, nullptr},
-      {kOnerrorAttr, kNoWebFeature, event_type_names::kError, nullptr},
-      {kOnfocusAttr, kNoWebFeature, event_type_names::kFocus, nullptr},
-      {kOnfocusinAttr, kNoWebFeature, event_type_names::kFocusin, nullptr},
-      {kOnfocusoutAttr, kNoWebFeature, event_type_names::kFocusout, nullptr},
-      {kOnformdataAttr, kNoWebFeature, event_type_names::kFormdata, nullptr},
-      {kOngotpointercaptureAttr, kNoWebFeature,
+      {html_names::kOncontextmenuAttr, kNoWebFeature,
+       event_type_names::kContextmenu, nullptr},
+      {html_names::kOncopyAttr, kNoWebFeature, event_type_names::kCopy,
+       nullptr},
+      {html_names::kOncuechangeAttr, kNoWebFeature,
+       event_type_names::kCuechange, nullptr},
+      {html_names::kOncutAttr, kNoWebFeature, event_type_names::kCut, nullptr},
+      {html_names::kOndblclickAttr, kNoWebFeature, event_type_names::kDblclick,
+       nullptr},
+      {html_names::kOndragAttr, kNoWebFeature, event_type_names::kDrag,
+       nullptr},
+      {html_names::kOndragendAttr, kNoWebFeature, event_type_names::kDragend,
+       nullptr},
+      {html_names::kOndragenterAttr, kNoWebFeature,
+       event_type_names::kDragenter, nullptr},
+      {html_names::kOndragleaveAttr, kNoWebFeature,
+       event_type_names::kDragleave, nullptr},
+      {html_names::kOndragoverAttr, kNoWebFeature, event_type_names::kDragover,
+       nullptr},
+      {html_names::kOndragstartAttr, kNoWebFeature,
+       event_type_names::kDragstart, nullptr},
+      {html_names::kOndropAttr, kNoWebFeature, event_type_names::kDrop,
+       nullptr},
+      {html_names::kOndurationchangeAttr, kNoWebFeature,
+       event_type_names::kDurationchange, nullptr},
+      {html_names::kOnemptiedAttr, kNoWebFeature, event_type_names::kEmptied,
+       nullptr},
+      {html_names::kOnendedAttr, kNoWebFeature, event_type_names::kEnded,
+       nullptr},
+      {html_names::kOnerrorAttr, kNoWebFeature, event_type_names::kError,
+       nullptr},
+      {html_names::kOnfocusAttr, kNoWebFeature, event_type_names::kFocus,
+       nullptr},
+      {html_names::kOnfocusinAttr, kNoWebFeature, event_type_names::kFocusin,
+       nullptr},
+      {html_names::kOnfocusoutAttr, kNoWebFeature, event_type_names::kFocusout,
+       nullptr},
+      {html_names::kOnformdataAttr, kNoWebFeature, event_type_names::kFormdata,
+       nullptr},
+      {html_names::kOngotpointercaptureAttr, kNoWebFeature,
        event_type_names::kGotpointercapture, nullptr},
-      {kOninputAttr, kNoWebFeature, event_type_names::kInput, nullptr},
-      {kOninvalidAttr, kNoWebFeature, event_type_names::kInvalid, nullptr},
-      {kOnkeydownAttr, kNoWebFeature, event_type_names::kKeydown, nullptr},
-      {kOnkeypressAttr, kNoWebFeature, event_type_names::kKeypress, nullptr},
-      {kOnkeyupAttr, kNoWebFeature, event_type_names::kKeyup, nullptr},
-      {kOnloadAttr, kNoWebFeature, event_type_names::kLoad, nullptr},
-      {kOnloadeddataAttr, kNoWebFeature, event_type_names::kLoadeddata,
+      {html_names::kOninputAttr, kNoWebFeature, event_type_names::kInput,
        nullptr},
-      {kOnloadedmetadataAttr, kNoWebFeature, event_type_names::kLoadedmetadata,
+      {html_names::kOninvalidAttr, kNoWebFeature, event_type_names::kInvalid,
        nullptr},
-      {kOnloadstartAttr, kNoWebFeature, event_type_names::kLoadstart, nullptr},
-      {kOnlostpointercaptureAttr, kNoWebFeature,
+      {html_names::kOnkeydownAttr, kNoWebFeature, event_type_names::kKeydown,
+       nullptr},
+      {html_names::kOnkeypressAttr, kNoWebFeature, event_type_names::kKeypress,
+       nullptr},
+      {html_names::kOnkeyupAttr, kNoWebFeature, event_type_names::kKeyup,
+       nullptr},
+      {html_names::kOnloadAttr, kNoWebFeature, event_type_names::kLoad,
+       nullptr},
+      {html_names::kOnloadeddataAttr, kNoWebFeature,
+       event_type_names::kLoadeddata, nullptr},
+      {html_names::kOnloadedmetadataAttr, kNoWebFeature,
+       event_type_names::kLoadedmetadata, nullptr},
+      {html_names::kOnloadstartAttr, kNoWebFeature,
+       event_type_names::kLoadstart, nullptr},
+      {html_names::kOnlostpointercaptureAttr, kNoWebFeature,
        event_type_names::kLostpointercapture, nullptr},
-      {kOnmousedownAttr, kNoWebFeature, event_type_names::kMousedown, nullptr},
-      {kOnmouseenterAttr, kNoWebFeature, event_type_names::kMouseenter,
+      {html_names::kOnmousedownAttr, kNoWebFeature,
+       event_type_names::kMousedown, nullptr},
+      {html_names::kOnmouseenterAttr, kNoWebFeature,
+       event_type_names::kMouseenter, nullptr},
+      {html_names::kOnmouseleaveAttr, kNoWebFeature,
+       event_type_names::kMouseleave, nullptr},
+      {html_names::kOnmousemoveAttr, kNoWebFeature,
+       event_type_names::kMousemove, nullptr},
+      {html_names::kOnmouseoutAttr, kNoWebFeature, event_type_names::kMouseout,
        nullptr},
-      {kOnmouseleaveAttr, kNoWebFeature, event_type_names::kMouseleave,
+      {html_names::kOnmouseoverAttr, kNoWebFeature,
+       event_type_names::kMouseover, nullptr},
+      {html_names::kOnmouseupAttr, kNoWebFeature, event_type_names::kMouseup,
        nullptr},
-      {kOnmousemoveAttr, kNoWebFeature, event_type_names::kMousemove, nullptr},
-      {kOnmouseoutAttr, kNoWebFeature, event_type_names::kMouseout, nullptr},
-      {kOnmouseoverAttr, kNoWebFeature, event_type_names::kMouseover, nullptr},
-      {kOnmouseupAttr, kNoWebFeature, event_type_names::kMouseup, nullptr},
-      {kOnmousewheelAttr, kNoWebFeature, event_type_names::kMousewheel,
+      {html_names::kOnmousewheelAttr, kNoWebFeature,
+       event_type_names::kMousewheel, nullptr},
+      {html_names::kOnoverscrollAttr, kNoWebFeature,
+       event_type_names::kOverscroll, nullptr},
+      {html_names::kOnpasteAttr, kNoWebFeature, event_type_names::kPaste,
        nullptr},
-      {kOnoverscrollAttr, kNoWebFeature, event_type_names::kOverscroll,
+      {html_names::kOnpauseAttr, kNoWebFeature, event_type_names::kPause,
        nullptr},
-      {kOnpasteAttr, kNoWebFeature, event_type_names::kPaste, nullptr},
-      {kOnpauseAttr, kNoWebFeature, event_type_names::kPause, nullptr},
-      {kOnplayAttr, kNoWebFeature, event_type_names::kPlay, nullptr},
-      {kOnplayingAttr, kNoWebFeature, event_type_names::kPlaying, nullptr},
-      {kOnpointercancelAttr, kNoWebFeature, event_type_names::kPointercancel,
+      {html_names::kOnplayAttr, kNoWebFeature, event_type_names::kPlay,
        nullptr},
-      {kOnpointerdownAttr, kNoWebFeature, event_type_names::kPointerdown,
+      {html_names::kOnplayingAttr, kNoWebFeature, event_type_names::kPlaying,
        nullptr},
-      {kOnpointerenterAttr, kNoWebFeature, event_type_names::kPointerenter,
-       nullptr},
-      {kOnpointerleaveAttr, kNoWebFeature, event_type_names::kPointerleave,
-       nullptr},
-      {kOnpointermoveAttr, kNoWebFeature, event_type_names::kPointermove,
-       nullptr},
-      {kOnpointeroutAttr, kNoWebFeature, event_type_names::kPointerout,
-       nullptr},
-      {kOnpointeroverAttr, kNoWebFeature, event_type_names::kPointerover,
-       nullptr},
-      {kOnpointerrawupdateAttr, kNoWebFeature,
+      {html_names::kOnpointercancelAttr, kNoWebFeature,
+       event_type_names::kPointercancel, nullptr},
+      {html_names::kOnpointerdownAttr, kNoWebFeature,
+       event_type_names::kPointerdown, nullptr},
+      {html_names::kOnpointerenterAttr, kNoWebFeature,
+       event_type_names::kPointerenter, nullptr},
+      {html_names::kOnpointerleaveAttr, kNoWebFeature,
+       event_type_names::kPointerleave, nullptr},
+      {html_names::kOnpointermoveAttr, kNoWebFeature,
+       event_type_names::kPointermove, nullptr},
+      {html_names::kOnpointeroutAttr, kNoWebFeature,
+       event_type_names::kPointerout, nullptr},
+      {html_names::kOnpointeroverAttr, kNoWebFeature,
+       event_type_names::kPointerover, nullptr},
+      {html_names::kOnpointerrawupdateAttr, kNoWebFeature,
        event_type_names::kPointerrawupdate, nullptr},
-      {kOnpointerupAttr, kNoWebFeature, event_type_names::kPointerup, nullptr},
-      {kOnprogressAttr, kNoWebFeature, event_type_names::kProgress, nullptr},
-      {kOnratechangeAttr, kNoWebFeature, event_type_names::kRatechange,
+      {html_names::kOnpointerupAttr, kNoWebFeature,
+       event_type_names::kPointerup, nullptr},
+      {html_names::kOnprogressAttr, kNoWebFeature, event_type_names::kProgress,
        nullptr},
-      {kOnresetAttr, kNoWebFeature, event_type_names::kReset, nullptr},
-      {kOnresizeAttr, kNoWebFeature, event_type_names::kResize, nullptr},
-      {kOnscrollAttr, kNoWebFeature, event_type_names::kScroll, nullptr},
-      {kOnscrollendAttr, kNoWebFeature, event_type_names::kScrollend, nullptr},
-      {kOnseekedAttr, kNoWebFeature, event_type_names::kSeeked, nullptr},
-      {kOnseekingAttr, kNoWebFeature, event_type_names::kSeeking, nullptr},
-      {kOnselectAttr, kNoWebFeature, event_type_names::kSelect, nullptr},
-      {kOnselectstartAttr, kNoWebFeature, event_type_names::kSelectstart,
+      {html_names::kOnratechangeAttr, kNoWebFeature,
+       event_type_names::kRatechange, nullptr},
+      {html_names::kOnresetAttr, kNoWebFeature, event_type_names::kReset,
        nullptr},
-      {kOnstalledAttr, kNoWebFeature, event_type_names::kStalled, nullptr},
-      {kOnsubmitAttr, kNoWebFeature, event_type_names::kSubmit, nullptr},
-      {kOnsuspendAttr, kNoWebFeature, event_type_names::kSuspend, nullptr},
-      {kOntimeupdateAttr, kNoWebFeature, event_type_names::kTimeupdate,
+      {html_names::kOnresizeAttr, kNoWebFeature, event_type_names::kResize,
        nullptr},
-      {kOntoggleAttr, kNoWebFeature, event_type_names::kToggle, nullptr},
-      {kOntouchcancelAttr, kNoWebFeature, event_type_names::kTouchcancel,
+      {html_names::kOnscrollAttr, kNoWebFeature, event_type_names::kScroll,
        nullptr},
-      {kOntouchendAttr, kNoWebFeature, event_type_names::kTouchend, nullptr},
-      {kOntouchmoveAttr, kNoWebFeature, event_type_names::kTouchmove, nullptr},
-      {kOntouchstartAttr, kNoWebFeature, event_type_names::kTouchstart,
+      {html_names::kOnscrollendAttr, kNoWebFeature,
+       event_type_names::kScrollend, nullptr},
+      {html_names::kOnseekedAttr, kNoWebFeature, event_type_names::kSeeked,
        nullptr},
-      {kOntransitionendAttr, kNoWebFeature,
+      {html_names::kOnseekingAttr, kNoWebFeature, event_type_names::kSeeking,
+       nullptr},
+      {html_names::kOnselectAttr, kNoWebFeature, event_type_names::kSelect,
+       nullptr},
+      {html_names::kOnselectstartAttr, kNoWebFeature,
+       event_type_names::kSelectstart, nullptr},
+      {html_names::kOnstalledAttr, kNoWebFeature, event_type_names::kStalled,
+       nullptr},
+      {html_names::kOnsubmitAttr, kNoWebFeature, event_type_names::kSubmit,
+       nullptr},
+      {html_names::kOnsuspendAttr, kNoWebFeature, event_type_names::kSuspend,
+       nullptr},
+      {html_names::kOntimeupdateAttr, kNoWebFeature,
+       event_type_names::kTimeupdate, nullptr},
+      {html_names::kOntoggleAttr, kNoWebFeature, event_type_names::kToggle,
+       nullptr},
+      {html_names::kOntouchcancelAttr, kNoWebFeature,
+       event_type_names::kTouchcancel, nullptr},
+      {html_names::kOntouchendAttr, kNoWebFeature, event_type_names::kTouchend,
+       nullptr},
+      {html_names::kOntouchmoveAttr, kNoWebFeature,
+       event_type_names::kTouchmove, nullptr},
+      {html_names::kOntouchstartAttr, kNoWebFeature,
+       event_type_names::kTouchstart, nullptr},
+      {html_names::kOntransitionendAttr, kNoWebFeature,
        event_type_names::kWebkitTransitionEnd, nullptr},
-      {kOnvolumechangeAttr, kNoWebFeature, event_type_names::kVolumechange,
+      {html_names::kOnvolumechangeAttr, kNoWebFeature,
+       event_type_names::kVolumechange, nullptr},
+      {html_names::kOnwaitingAttr, kNoWebFeature, event_type_names::kWaiting,
        nullptr},
-      {kOnwaitingAttr, kNoWebFeature, event_type_names::kWaiting, nullptr},
-      {kOnwebkitanimationendAttr, kNoWebFeature,
+      {html_names::kOnwebkitanimationendAttr, kNoWebFeature,
        event_type_names::kWebkitAnimationEnd, nullptr},
-      {kOnwebkitanimationiterationAttr, kNoWebFeature,
+      {html_names::kOnwebkitanimationiterationAttr, kNoWebFeature,
        event_type_names::kWebkitAnimationIteration, nullptr},
-      {kOnwebkitanimationstartAttr, kNoWebFeature,
+      {html_names::kOnwebkitanimationstartAttr, kNoWebFeature,
        event_type_names::kWebkitAnimationStart, nullptr},
-      {kOnwebkitfullscreenchangeAttr, kNoWebFeature,
+      {html_names::kOnwebkitfullscreenchangeAttr, kNoWebFeature,
        event_type_names::kWebkitfullscreenchange, nullptr},
-      {kOnwebkitfullscreenerrorAttr, kNoWebFeature,
+      {html_names::kOnwebkitfullscreenerrorAttr, kNoWebFeature,
        event_type_names::kWebkitfullscreenerror, nullptr},
-      {kOnwebkittransitionendAttr, kNoWebFeature,
+      {html_names::kOnwebkittransitionendAttr, kNoWebFeature,
        event_type_names::kWebkitTransitionEnd, nullptr},
-      {kOnwheelAttr, kNoWebFeature, event_type_names::kWheel, nullptr},
+      {html_names::kOnwheelAttr, kNoWebFeature, event_type_names::kWheel,
+       nullptr},
 
-      {kAriaActivedescendantAttr, WebFeature::kARIAActiveDescendantAttribute,
+      {html_names::kAriaActivedescendantAttr,
+       WebFeature::kARIAActiveDescendantAttribute, kNoEvent, nullptr},
+      {html_names::kAriaAtomicAttr, WebFeature::kARIAAtomicAttribute, kNoEvent,
+       nullptr},
+      {html_names::kAriaAutocompleteAttr,
+       WebFeature::kARIAAutocompleteAttribute, kNoEvent, nullptr},
+      {html_names::kAriaBusyAttr, WebFeature::kARIABusyAttribute, kNoEvent,
+       nullptr},
+      {html_names::kAriaCheckedAttr, WebFeature::kARIACheckedAttribute,
        kNoEvent, nullptr},
-      {kAriaAtomicAttr, WebFeature::kARIAAtomicAttribute, kNoEvent, nullptr},
-      {kAriaAutocompleteAttr, WebFeature::kARIAAutocompleteAttribute, kNoEvent,
-       nullptr},
-      {kAriaBusyAttr, WebFeature::kARIABusyAttribute, kNoEvent, nullptr},
-      {kAriaCheckedAttr, WebFeature::kARIACheckedAttribute, kNoEvent, nullptr},
-      {kAriaColcountAttr, WebFeature::kARIAColCountAttribute, kNoEvent,
-       nullptr},
-      {kAriaColindexAttr, WebFeature::kARIAColIndexAttribute, kNoEvent,
-       nullptr},
-      {kAriaColspanAttr, WebFeature::kARIAColSpanAttribute, kNoEvent, nullptr},
-      {kAriaControlsAttr, WebFeature::kARIAControlsAttribute, kNoEvent,
-       nullptr},
-      {kAriaCurrentAttr, WebFeature::kARIACurrentAttribute, kNoEvent, nullptr},
-      {kAriaDescribedbyAttr, WebFeature::kARIADescribedByAttribute, kNoEvent,
-       nullptr},
-      {kAriaDetailsAttr, WebFeature::kARIADetailsAttribute, kNoEvent, nullptr},
-      {kAriaDisabledAttr, WebFeature::kARIADisabledAttribute, kNoEvent,
-       nullptr},
-      {kAriaDropeffectAttr, WebFeature::kARIADropEffectAttribute, kNoEvent,
-       nullptr},
-      {kAriaErrormessageAttr, WebFeature::kARIAErrorMessageAttribute, kNoEvent,
-       nullptr},
-      {kAriaExpandedAttr, WebFeature::kARIAExpandedAttribute, kNoEvent,
-       nullptr},
-      {kAriaFlowtoAttr, WebFeature::kARIAFlowToAttribute, kNoEvent, nullptr},
-      {kAriaGrabbedAttr, WebFeature::kARIAGrabbedAttribute, kNoEvent, nullptr},
-      {kAriaHaspopupAttr, WebFeature::kARIAHasPopupAttribute, kNoEvent,
-       nullptr},
-      {kAriaHelpAttr, WebFeature::kARIAHelpAttribute, kNoEvent, nullptr},
-      {kAriaHiddenAttr, WebFeature::kARIAHiddenAttribute, kNoEvent, nullptr},
-      {kAriaInvalidAttr, WebFeature::kARIAInvalidAttribute, kNoEvent, nullptr},
-      {kAriaKeyshortcutsAttr, WebFeature::kARIAKeyShortcutsAttribute, kNoEvent,
-       nullptr},
-      {kAriaLabelAttr, WebFeature::kARIALabelAttribute, kNoEvent, nullptr},
-      {kAriaLabeledbyAttr, WebFeature::kARIALabeledByAttribute, kNoEvent,
-       nullptr},
-      {kAriaLabelledbyAttr, WebFeature::kARIALabelledByAttribute, kNoEvent,
-       nullptr},
-      {kAriaLevelAttr, WebFeature::kARIALevelAttribute, kNoEvent, nullptr},
-      {kAriaLiveAttr, WebFeature::kARIALiveAttribute, kNoEvent, nullptr},
-      {kAriaModalAttr, WebFeature::kARIAModalAttribute, kNoEvent, nullptr},
-      {kAriaMultilineAttr, WebFeature::kARIAMultilineAttribute, kNoEvent,
-       nullptr},
-      {kAriaMultiselectableAttr, WebFeature::kARIAMultiselectableAttribute,
+      {html_names::kAriaColcountAttr, WebFeature::kARIAColCountAttribute,
        kNoEvent, nullptr},
-      {kAriaOrientationAttr, WebFeature::kARIAOrientationAttribute, kNoEvent,
-       nullptr},
-      {kAriaOwnsAttr, WebFeature::kARIAOwnsAttribute, kNoEvent, nullptr},
-      {kAriaPlaceholderAttr, WebFeature::kARIAPlaceholderAttribute, kNoEvent,
-       nullptr},
-      {kAriaPosinsetAttr, WebFeature::kARIAPosInSetAttribute, kNoEvent,
-       nullptr},
-      {kAriaPressedAttr, WebFeature::kARIAPressedAttribute, kNoEvent, nullptr},
-      {kAriaReadonlyAttr, WebFeature::kARIAReadOnlyAttribute, kNoEvent,
-       nullptr},
-      {kAriaRelevantAttr, WebFeature::kARIARelevantAttribute, kNoEvent,
-       nullptr},
-      {kAriaRequiredAttr, WebFeature::kARIARequiredAttribute, kNoEvent,
-       nullptr},
-      {kAriaRoledescriptionAttr, WebFeature::kARIARoleDescriptionAttribute,
+      {html_names::kAriaColindexAttr, WebFeature::kARIAColIndexAttribute,
        kNoEvent, nullptr},
-      {kAriaRowcountAttr, WebFeature::kARIARowCountAttribute, kNoEvent,
+      {html_names::kAriaColspanAttr, WebFeature::kARIAColSpanAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaControlsAttr, WebFeature::kARIAControlsAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaCurrentAttr, WebFeature::kARIACurrentAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaDescribedbyAttr, WebFeature::kARIADescribedByAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaDetailsAttr, WebFeature::kARIADetailsAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaDisabledAttr, WebFeature::kARIADisabledAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaDropeffectAttr, WebFeature::kARIADropEffectAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaErrormessageAttr,
+       WebFeature::kARIAErrorMessageAttribute, kNoEvent, nullptr},
+      {html_names::kAriaExpandedAttr, WebFeature::kARIAExpandedAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaFlowtoAttr, WebFeature::kARIAFlowToAttribute, kNoEvent,
        nullptr},
-      {kAriaRowindexAttr, WebFeature::kARIARowIndexAttribute, kNoEvent,
+      {html_names::kAriaGrabbedAttr, WebFeature::kARIAGrabbedAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaHaspopupAttr, WebFeature::kARIAHasPopupAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaHelpAttr, WebFeature::kARIAHelpAttribute, kNoEvent,
        nullptr},
-      {kAriaRowspanAttr, WebFeature::kARIARowSpanAttribute, kNoEvent, nullptr},
-      {kAriaSelectedAttr, WebFeature::kARIASelectedAttribute, kNoEvent,
+      {html_names::kAriaHiddenAttr, WebFeature::kARIAHiddenAttribute, kNoEvent,
        nullptr},
-      {kAriaSetsizeAttr, WebFeature::kARIASetSizeAttribute, kNoEvent, nullptr},
-      {kAriaSortAttr, WebFeature::kARIASortAttribute, kNoEvent, nullptr},
-      {kAriaValuemaxAttr, WebFeature::kARIAValueMaxAttribute, kNoEvent,
+      {html_names::kAriaInvalidAttr, WebFeature::kARIAInvalidAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaKeyshortcutsAttr,
+       WebFeature::kARIAKeyShortcutsAttribute, kNoEvent, nullptr},
+      {html_names::kAriaLabelAttr, WebFeature::kARIALabelAttribute, kNoEvent,
        nullptr},
-      {kAriaValueminAttr, WebFeature::kARIAValueMinAttribute, kNoEvent,
+      {html_names::kAriaLabeledbyAttr, WebFeature::kARIALabeledByAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaLabelledbyAttr, WebFeature::kARIALabelledByAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaLevelAttr, WebFeature::kARIALevelAttribute, kNoEvent,
        nullptr},
-      {kAriaValuenowAttr, WebFeature::kARIAValueNowAttribute, kNoEvent,
+      {html_names::kAriaLiveAttr, WebFeature::kARIALiveAttribute, kNoEvent,
        nullptr},
-      {kAriaValuetextAttr, WebFeature::kARIAValueTextAttribute, kNoEvent,
+      {html_names::kAriaModalAttr, WebFeature::kARIAModalAttribute, kNoEvent,
        nullptr},
-      {kAutocapitalizeAttr, WebFeature::kAutocapitalizeAttribute, kNoEvent,
+      {html_names::kAriaMultilineAttr, WebFeature::kARIAMultilineAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaMultiselectableAttr,
+       WebFeature::kARIAMultiselectableAttribute, kNoEvent, nullptr},
+      {html_names::kAriaOrientationAttr, WebFeature::kARIAOrientationAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaOwnsAttr, WebFeature::kARIAOwnsAttribute, kNoEvent,
        nullptr},
+      {html_names::kAriaPlaceholderAttr, WebFeature::kARIAPlaceholderAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaPosinsetAttr, WebFeature::kARIAPosInSetAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaPressedAttr, WebFeature::kARIAPressedAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaReadonlyAttr, WebFeature::kARIAReadOnlyAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaRelevantAttr, WebFeature::kARIARelevantAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaRequiredAttr, WebFeature::kARIARequiredAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaRoledescriptionAttr,
+       WebFeature::kARIARoleDescriptionAttribute, kNoEvent, nullptr},
+      {html_names::kAriaRowcountAttr, WebFeature::kARIARowCountAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaRowindexAttr, WebFeature::kARIARowIndexAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaRowspanAttr, WebFeature::kARIARowSpanAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaSelectedAttr, WebFeature::kARIASelectedAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaSetsizeAttr, WebFeature::kARIASetSizeAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaSortAttr, WebFeature::kARIASortAttribute, kNoEvent,
+       nullptr},
+      {html_names::kAriaValuemaxAttr, WebFeature::kARIAValueMaxAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaValueminAttr, WebFeature::kARIAValueMinAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaValuenowAttr, WebFeature::kARIAValueNowAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAriaValuetextAttr, WebFeature::kARIAValueTextAttribute,
+       kNoEvent, nullptr},
+      {html_names::kAutocapitalizeAttr, WebFeature::kAutocapitalizeAttribute,
+       kNoEvent, nullptr},
   };
 
   using AttributeToTriggerIndexMap = HashMap<QualifiedName, uint32_t>;
@@ -618,10 +704,10 @@
     return;
   // adjustedFocusedElementInTreeScope() is not trivial. We should check
   // attribute names, then call adjustedFocusedElementInTreeScope().
-  if (params.name == kHiddenAttr && !params.new_value.IsNull()) {
+  if (params.name == html_names::kHiddenAttr && !params.new_value.IsNull()) {
     if (AdjustedFocusedElementInTreeScope() == this)
       blur();
-  } else if (params.name == kContenteditableAttr) {
+  } else if (params.name == html_names::kContenteditableAttr) {
     if (GetDocument().GetFrame()) {
       GetDocument()
           .GetFrame()
@@ -845,7 +931,8 @@
 }
 
 String HTMLElement::contentEditable() const {
-  const AtomicString& value = FastGetAttribute(kContenteditableAttr);
+  const AtomicString& value =
+      FastGetAttribute(html_names::kContenteditableAttr);
 
   if (value.IsNull())
     return "inherit";
@@ -862,13 +949,13 @@
 void HTMLElement::setContentEditable(const String& enabled,
                                      ExceptionState& exception_state) {
   if (DeprecatedEqualIgnoringCase(enabled, "true"))
-    setAttribute(kContenteditableAttr, "true");
+    setAttribute(html_names::kContenteditableAttr, "true");
   else if (DeprecatedEqualIgnoringCase(enabled, "false"))
-    setAttribute(kContenteditableAttr, "false");
+    setAttribute(html_names::kContenteditableAttr, "false");
   else if (DeprecatedEqualIgnoringCase(enabled, "plaintext-only"))
-    setAttribute(kContenteditableAttr, "plaintext-only");
+    setAttribute(html_names::kContenteditableAttr, "plaintext-only");
   else if (DeprecatedEqualIgnoringCase(enabled, "inherit"))
-    removeAttribute(kContenteditableAttr);
+    removeAttribute(html_names::kContenteditableAttr);
   else
     exception_state.ThrowDOMException(DOMExceptionCode::kSyntaxError,
                                       "The value provided ('" + enabled +
@@ -883,7 +970,7 @@
   DEFINE_STATIC_LOCAL(const AtomicString, kWords, ("words"));
   DEFINE_STATIC_LOCAL(const AtomicString, kSentences, ("sentences"));
 
-  const AtomicString& value = FastGetAttribute(kAutocapitalizeAttr);
+  const AtomicString& value = FastGetAttribute(html_names::kAutocapitalizeAttr);
   if (value.IsEmpty())
     return g_empty_atom;
 
@@ -899,7 +986,7 @@
 }
 
 void HTMLElement::setAutocapitalize(const AtomicString& value) {
-  setAttribute(kAutocapitalizeAttr, value);
+  setAttribute(html_names::kAutocapitalizeAttr, value);
 }
 
 bool HTMLElement::isContentEditableForBinding() const {
@@ -907,11 +994,12 @@
 }
 
 bool HTMLElement::draggable() const {
-  return DeprecatedEqualIgnoringCase(getAttribute(kDraggableAttr), "true");
+  return DeprecatedEqualIgnoringCase(getAttribute(html_names::kDraggableAttr),
+                                     "true");
 }
 
 void HTMLElement::setDraggable(bool value) {
-  setAttribute(kDraggableAttr, value ? "true" : "false");
+  setAttribute(html_names::kDraggableAttr, value ? "true" : "false");
 }
 
 bool HTMLElement::spellcheck() const {
@@ -919,7 +1007,7 @@
 }
 
 void HTMLElement::setSpellcheck(bool enable) {
-  setAttribute(kSpellcheckAttr, enable ? "true" : "false");
+  setAttribute(html_names::kSpellcheckAttr, enable ? "true" : "false");
 }
 
 void HTMLElement::click() {
@@ -933,7 +1021,7 @@
 }
 
 String HTMLElement::title() const {
-  return FastGetAttribute(kTitleAttr);
+  return FastGetAttribute(html_names::kTitleAttr);
 }
 
 int HTMLElement::tabIndex() const {
@@ -946,7 +1034,7 @@
 }
 
 TranslateAttributeMode HTMLElement::GetTranslateAttributeMode() const {
-  const AtomicString& value = getAttribute(kTranslateAttr);
+  const AtomicString& value = getAttribute(html_names::kTranslateAttr);
 
   if (value == g_null_atom)
     return kTranslateAttributeInherit;
@@ -974,7 +1062,7 @@
 }
 
 void HTMLElement::setTranslate(bool enable) {
-  setAttribute(kTranslateAttr, enable ? "yes" : "no");
+  setAttribute(html_names::kTranslateAttr, enable ? "yes" : "no");
 }
 
 // Returns the conforming 'dir' value associated with the state the attribute is
@@ -998,11 +1086,11 @@
 }
 
 const AtomicString& HTMLElement::dir() {
-  return ToValidDirValue(FastGetAttribute(kDirAttr));
+  return ToValidDirValue(FastGetAttribute(html_names::kDirAttr));
 }
 
 void HTMLElement::setDir(const AtomicString& value) {
-  setAttribute(kDirAttr, value);
+  setAttribute(html_names::kDirAttr, value);
 }
 
 HTMLFormElement* HTMLElement::FindFormAncestor() const {
@@ -1012,7 +1100,7 @@
 static inline bool ElementAffectsDirectionality(const Node* node) {
   auto* html_element = DynamicTo<HTMLElement>(node);
   return html_element && (IsHTMLBDIElement(*html_element) ||
-                          html_element->hasAttribute(kDirAttr));
+                          html_element->hasAttribute(html_names::kDirAttr));
 }
 
 void HTMLElement::ChildrenChanged(const ChildrenChange& change) {
@@ -1023,7 +1111,7 @@
 bool HTMLElement::HasDirectionAuto() const {
   // <bdi> defaults to dir="auto"
   // https://html.spec.whatwg.org/C/#the-bdi-element
-  const AtomicString& direction = FastGetAttribute(kDirAttr);
+  const AtomicString& direction = FastGetAttribute(html_names::kDirAttr);
   return (IsHTMLBDIElement(*this) && direction == g_null_atom) ||
          DeprecatedEqualIgnoringCase(direction, "auto");
 }
@@ -1059,7 +1147,7 @@
     // Skip elements with valid dir attribute
     if (auto* element_node = DynamicTo<Element>(node)) {
       AtomicString dir_attribute_value =
-          element_node->FastGetAttribute(kDirAttr);
+          element_node->FastGetAttribute(html_names::kDirAttr);
       if (IsValidDirAttribute(dir_attribute_value)) {
         node = FlatTreeTraversal::NextSkippingChildren(*node, this);
         continue;
@@ -1139,8 +1227,8 @@
   Element::InsertedInto(insertion_point);
 
   if (GetDocument().GetContentSecurityPolicy()->HasHeaderDeliveredPolicy() &&
-      InActiveDocument() && FastHasAttribute(kNonceAttr)) {
-    setAttribute(kNonceAttr, g_empty_atom);
+      InActiveDocument() && FastHasAttribute(html_names::kNonceAttr)) {
+    setAttribute(html_names::kNonceAttr, g_empty_atom);
   }
   if (IsFormAssociatedCustomElement())
     EnsureElementInternals().InsertedInto(insertion_point);
@@ -1291,7 +1379,8 @@
   if (!ParseColorWithLegacyRules(attribute_value, parsed_color))
     return;
 
-  style->SetProperty(property_id, *CSSColorValue::Create(parsed_color.Rgb()));
+  style->SetProperty(property_id,
+                     *cssvalue::CSSColorValue::Create(parsed_color.Rgb()));
 }
 
 LabelsNodeList* HTMLElement::labels() {
@@ -1319,8 +1408,9 @@
 }
 
 bool HTMLElement::MatchesReadWritePseudoClass() const {
-  if (FastHasAttribute(kContenteditableAttr)) {
-    const AtomicString& value = FastGetAttribute(kContenteditableAttr);
+  if (FastHasAttribute(html_names::kContenteditableAttr)) {
+    const AtomicString& value =
+        FastGetAttribute(html_names::kContenteditableAttr);
 
     if (value.IsEmpty() || DeprecatedEqualIgnoringCase(value, "true") ||
         DeprecatedEqualIgnoringCase(value, "plaintext-only"))
diff --git a/third_party/blink/renderer/core/html/html_embed_element.cc b/third_party/blink/renderer/core/html/html_embed_element.cc
index 577b7a6..37861d1a 100644
--- a/third_party/blink/renderer/core/html/html_embed_element.cc
+++ b/third_party/blink/renderer/core/html/html_embed_element.cc
@@ -40,11 +40,9 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLEmbedElement::HTMLEmbedElement(Document& document,
                                    const CreateElementFlags flags)
-    : HTMLPlugInElement(kEmbedTag,
+    : HTMLPlugInElement(html_names::kEmbedTag,
                         document,
                         flags,
                         kShouldPreferPlugInsForImages) {
@@ -75,7 +73,7 @@
 
 bool HTMLEmbedElement::IsPresentationAttribute(
     const QualifiedName& name) const {
-  if (name == kHiddenAttr)
+  if (name == html_names::kHiddenAttr)
     return true;
   return HTMLPlugInElement::IsPresentationAttribute(name);
 }
@@ -84,7 +82,7 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kHiddenAttr) {
+  if (name == html_names::kHiddenAttr) {
     if (DeprecatedEqualIgnoringCase(value, "yes") ||
         DeprecatedEqualIgnoringCase(value, "true")) {
       AddPropertyToPresentationAttributeStyle(
@@ -101,7 +99,7 @@
 
 void HTMLEmbedElement::ParseAttribute(
     const AttributeModificationParams& params) {
-  if (params.name == kTypeAttr) {
+  if (params.name == html_names::kTypeAttr) {
     SetServiceType(params.new_value.LowerASCII());
     wtf_size_t pos = service_type_.Find(";");
     if (pos != kNotFound)
@@ -112,12 +110,12 @@
       GetLayoutObject()->SetNeedsLayoutAndFullPaintInvalidation(
           "Embed type changed");
     }
-  } else if (params.name == kCodeAttr) {
+  } else if (params.name == html_names::kCodeAttr) {
     // TODO(schenney): Remove this branch? It's not in the spec and we're not in
     // the HTMLAppletElement hierarchy.
     SetUrl(StripLeadingAndTrailingHTMLSpaces(params.new_value));
     SetDisposeView();
-  } else if (params.name == kSrcAttr) {
+  } else if (params.name == html_names::kSrcAttr) {
     SetUrl(StripLeadingAndTrailingHTMLSpaces(params.new_value));
     if (GetLayoutObject() && IsImageType()) {
       SetDisposeView();
@@ -126,7 +124,7 @@
       image_loader_->UpdateFromElement(ImageLoader::kUpdateIgnorePreviousError);
     } else if (GetLayoutObject()) {
       // Check if this Embed can transition from potentially-active to active
-      if (FastHasAttribute(kTypeAttr)) {
+      if (FastHasAttribute(html_names::kTypeAttr)) {
         SetNeedsPluginUpdate(true);
         ReattachOnPluginChangeIfNeeded();
       }
@@ -187,7 +185,8 @@
   // represents nothing:
 
   // * The element has neither a src attribute nor a type attribute.
-  if (!FastHasAttribute(kSrcAttr) && !FastHasAttribute(kTypeAttr))
+  if (!FastHasAttribute(html_names::kSrcAttr) &&
+      !FastHasAttribute(html_names::kTypeAttr))
     return false;
 
   // * The element has a media element ancestor.
@@ -206,12 +205,12 @@
 }
 
 bool HTMLEmbedElement::IsURLAttribute(const Attribute& attribute) const {
-  return attribute.GetName() == kSrcAttr ||
+  return attribute.GetName() == html_names::kSrcAttr ||
          HTMLPlugInElement::IsURLAttribute(attribute);
 }
 
 const QualifiedName& HTMLEmbedElement::SubResourceAttributeName() const {
-  return kSrcAttr;
+  return html_names::kSrcAttr;
 }
 
 bool HTMLEmbedElement::IsInteractiveContent() const {
diff --git a/third_party/blink/renderer/core/html/html_font_element.cc b/third_party/blink/renderer/core/html/html_font_element.cc
index 2d2fae76..3c78d66 100644
--- a/third_party/blink/renderer/core/html/html_font_element.cc
+++ b/third_party/blink/renderer/core/html/html_font_element.cc
@@ -36,11 +36,8 @@
 
 namespace blink {
 
-using namespace cssvalue;
-using namespace html_names;
-
 HTMLFontElement::HTMLFontElement(Document& document)
-    : HTMLElement(kFontTag, document) {}
+    : HTMLElement(html_names::kFontTag, document) {}
 
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/rendering.html#fonts-and-colors
 template <typename CharacterType>
@@ -169,7 +166,8 @@
 }
 
 bool HTMLFontElement::IsPresentationAttribute(const QualifiedName& name) const {
-  if (name == kSizeAttr || name == kColorAttr || name == kFaceAttr)
+  if (name == html_names::kSizeAttr || name == html_names::kColorAttr ||
+      name == html_names::kFaceAttr)
     return true;
   return HTMLElement::IsPresentationAttribute(name);
 }
@@ -178,15 +176,15 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kSizeAttr) {
+  if (name == html_names::kSizeAttr) {
     CSSValueID size = CSSValueID::kInvalid;
     if (CssValueFromFontSizeNumber(value, size)) {
       AddPropertyToPresentationAttributeStyle(style, CSSPropertyID::kFontSize,
                                               size);
     }
-  } else if (name == kColorAttr) {
+  } else if (name == html_names::kColorAttr) {
     AddHTMLColorToStyle(style, CSSPropertyID::kColor, value);
-  } else if (name == kFaceAttr && !value.IsEmpty()) {
+  } else if (name == html_names::kFaceAttr && !value.IsEmpty()) {
     if (const CSSValueList* font_face_value = CreateFontFaceValueWithPool(
             value, GetDocument().GetSecureContextMode())) {
       style->SetProperty(
diff --git a/third_party/blink/renderer/core/html/html_frame_element.cc b/third_party/blink/renderer/core/html/html_frame_element.cc
index bba19e5..50ac0ba 100644
--- a/third_party/blink/renderer/core/html/html_frame_element.cc
+++ b/third_party/blink/renderer/core/html/html_frame_element.cc
@@ -31,10 +31,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLFrameElement::HTMLFrameElement(Document& document)
-    : HTMLFrameElementBase(kFrameTag, document),
+    : HTMLFrameElementBase(html_names::kFrameTag, document),
       frame_border_(true),
       frame_border_set_(false) {}
 
@@ -49,7 +47,7 @@
 }
 
 bool HTMLFrameElement::NoResize() const {
-  return hasAttribute(kNoresizeAttr);
+  return hasAttribute(html_names::kNoresizeAttr);
 }
 
 void HTMLFrameElement::AttachLayoutTree(AttachContext& context) {
@@ -64,11 +62,11 @@
 
 void HTMLFrameElement::ParseAttribute(
     const AttributeModificationParams& params) {
-  if (params.name == kFrameborderAttr) {
+  if (params.name == html_names::kFrameborderAttr) {
     frame_border_ = params.new_value.ToInt();
     frame_border_set_ = !params.new_value.IsNull();
     // FIXME: If we are already attached, this has no effect.
-  } else if (params.name == kNoresizeAttr) {
+  } else if (params.name == html_names::kNoresizeAttr) {
     if (GetLayoutObject())
       GetLayoutObject()->UpdateFromElement();
   } else {
diff --git a/third_party/blink/renderer/core/html/html_frame_element_base.cc b/third_party/blink/renderer/core/html/html_frame_element_base.cc
index 15e83faa..27e18ee 100644
--- a/third_party/blink/renderer/core/html/html_frame_element_base.cc
+++ b/third_party/blink/renderer/core/html/html_frame_element_base.cc
@@ -43,8 +43,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLFrameElementBase::HTMLFrameElementBase(const QualifiedName& tag_name,
                                            Document& document)
     : HTMLFrameOwnerElement(tag_name, document),
@@ -94,28 +92,29 @@
     const AttributeModificationParams& params) {
   const QualifiedName& name = params.name;
   const AtomicString& value = params.new_value;
-  if (name == kSrcdocAttr) {
+  if (name == html_names::kSrcdocAttr) {
     if (!value.IsNull()) {
       SetLocation(SrcdocURL().GetString());
     } else {
-      const AtomicString& src_value = FastGetAttribute(kSrcAttr);
+      const AtomicString& src_value = FastGetAttribute(html_names::kSrcAttr);
       if (!src_value.IsNull())
         SetLocation(StripLeadingAndTrailingHTMLSpaces(src_value));
     }
-  } else if (name == kSrcAttr && !FastHasAttribute(kSrcdocAttr)) {
+  } else if (name == html_names::kSrcAttr &&
+             !FastHasAttribute(html_names::kSrcdocAttr)) {
     SetLocation(StripLeadingAndTrailingHTMLSpaces(value));
-  } else if (name == kIdAttr) {
+  } else if (name == html_names::kIdAttr) {
     // Important to call through to base for the id attribute so the hasID bit
     // gets set.
     HTMLFrameOwnerElement::ParseAttribute(params);
     frame_name_ = value;
-  } else if (name == kNameAttr) {
+  } else if (name == html_names::kNameAttr) {
     frame_name_ = value;
-  } else if (name == kMarginwidthAttr) {
+  } else if (name == html_names::kMarginwidthAttr) {
     SetMarginWidth(value.ToInt());
-  } else if (name == kMarginheightAttr) {
+  } else if (name == html_names::kMarginheightAttr) {
     SetMarginHeight(value.ToInt());
-  } else if (name == kScrollingAttr) {
+  } else if (name == html_names::kScrollingAttr) {
     // Auto and yes both simply mean "allow scrolling." No means "don't allow
     // scrolling."
     if (DeprecatedEqualIgnoringCase(value, "auto") ||
@@ -123,7 +122,7 @@
       SetScrollingMode(ScrollbarMode::kAuto);
     else if (DeprecatedEqualIgnoringCase(value, "no"))
       SetScrollingMode(ScrollbarMode::kAlwaysOff);
-  } else if (name == kOnbeforeunloadAttr) {
+  } else if (name == html_names::kOnbeforeunloadAttr) {
     // FIXME: should <frame> elements have beforeunload handlers?
     SetAttributeEventListener(
         event_type_names::kBeforeunload,
@@ -211,19 +210,20 @@
 }
 
 bool HTMLFrameElementBase::IsURLAttribute(const Attribute& attribute) const {
-  return attribute.GetName() == kLongdescAttr ||
-         attribute.GetName() == kSrcAttr ||
+  return attribute.GetName() == html_names::kLongdescAttr ||
+         attribute.GetName() == html_names::kSrcAttr ||
          HTMLFrameOwnerElement::IsURLAttribute(attribute);
 }
 
 bool HTMLFrameElementBase::HasLegalLinkAttribute(
     const QualifiedName& name) const {
-  return name == kSrcAttr || HTMLFrameOwnerElement::HasLegalLinkAttribute(name);
+  return name == html_names::kSrcAttr ||
+         HTMLFrameOwnerElement::HasLegalLinkAttribute(name);
 }
 
 bool HTMLFrameElementBase::IsHTMLContentAttribute(
     const Attribute& attribute) const {
-  return attribute.GetName() == kSrcdocAttr ||
+  return attribute.GetName() == html_names::kSrcdocAttr ||
          HTMLFrameOwnerElement::IsHTMLContentAttribute(attribute);
 }
 
diff --git a/third_party/blink/renderer/core/html/html_frame_set_element.cc b/third_party/blink/renderer/core/html/html_frame_set_element.cc
index e3485e2..9d4cb87f 100644
--- a/third_party/blink/renderer/core/html/html_frame_set_element.cc
+++ b/third_party/blink/renderer/core/html/html_frame_set_element.cc
@@ -39,10 +39,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLFrameSetElement::HTMLFrameSetElement(Document& document)
-    : HTMLElement(kFramesetTag, document),
+    : HTMLElement(html_names::kFramesetTag, document),
       border_(6),
       border_set_(false),
       border_color_set_(false),
@@ -55,7 +53,7 @@
 
 bool HTMLFrameSetElement::IsPresentationAttribute(
     const QualifiedName& name) const {
-  if (name == kBordercolorAttr)
+  if (name == html_names::kBordercolorAttr)
     return true;
   return HTMLElement::IsPresentationAttribute(name);
 }
@@ -64,7 +62,7 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kBordercolorAttr)
+  if (name == html_names::kBordercolorAttr)
     AddHTMLColorToStyle(style, CSSPropertyID::kBorderColor, value);
   else
     HTMLElement::CollectStyleForPresentationAttribute(name, value, style);
@@ -74,19 +72,19 @@
     const AttributeModificationParams& params) {
   const QualifiedName& name = params.name;
   const AtomicString& value = params.new_value;
-  if (name == kRowsAttr) {
+  if (name == html_names::kRowsAttr) {
     if (!value.IsNull()) {
       row_lengths_ = ParseListOfDimensions(value.GetString());
       SetNeedsStyleRecalc(kSubtreeStyleChange,
                           StyleChangeReasonForTracing::FromAttribute(name));
     }
-  } else if (name == kColsAttr) {
+  } else if (name == html_names::kColsAttr) {
     if (!value.IsNull()) {
       col_lengths_ = ParseListOfDimensions(value.GetString());
       SetNeedsStyleRecalc(kSubtreeStyleChange,
                           StyleChangeReasonForTracing::FromAttribute(name));
     }
-  } else if (name == kFrameborderAttr) {
+  } else if (name == html_names::kFrameborderAttr) {
     if (!value.IsNull()) {
       if (DeprecatedEqualIgnoringCase(value, "no") ||
           DeprecatedEqualIgnoringCase(value, "0")) {
@@ -100,112 +98,112 @@
       frameborder_ = false;
       frameborder_set_ = false;
     }
-  } else if (name == kNoresizeAttr) {
+  } else if (name == html_names::kNoresizeAttr) {
     noresize_ = true;
-  } else if (name == kBorderAttr) {
+  } else if (name == html_names::kBorderAttr) {
     if (!value.IsNull()) {
       border_ = value.ToInt();
       border_set_ = true;
     } else {
       border_set_ = false;
     }
-  } else if (name == kBordercolorAttr) {
+  } else if (name == html_names::kBordercolorAttr) {
     border_color_set_ = !value.IsEmpty();
-  } else if (name == kOnafterprintAttr) {
+  } else if (name == html_names::kOnafterprintAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kAfterprint,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnbeforeprintAttr) {
+  } else if (name == html_names::kOnbeforeprintAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kBeforeprint,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnloadAttr) {
+  } else if (name == html_names::kOnloadAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kLoad,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnbeforeunloadAttr) {
+  } else if (name == html_names::kOnbeforeunloadAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kBeforeunload,
         CreateAttributeEventListener(
             GetDocument().GetFrame(), name, value,
             JSEventHandler::HandlerType::kOnBeforeUnloadEventHandler));
-  } else if (name == kOnunloadAttr) {
+  } else if (name == html_names::kOnunloadAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kUnload,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnpagehideAttr) {
+  } else if (name == html_names::kOnpagehideAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kPagehide,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnpageshowAttr) {
+  } else if (name == html_names::kOnpageshowAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kPageshow,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnblurAttr) {
+  } else if (name == html_names::kOnblurAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kBlur,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnerrorAttr) {
+  } else if (name == html_names::kOnerrorAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kError,
         CreateAttributeEventListener(
             GetDocument().GetFrame(), name, value,
             JSEventHandler::HandlerType::kOnErrorEventHandler));
-  } else if (name == kOnfocusAttr) {
+  } else if (name == html_names::kOnfocusAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kFocus,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnfocusinAttr) {
+  } else if (name == html_names::kOnfocusinAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kFocusin,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnfocusoutAttr) {
+  } else if (name == html_names::kOnfocusoutAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kFocusout,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
   } else if (RuntimeEnabledFeatures::OrientationEventEnabled() &&
-             name == kOnorientationchangeAttr) {
+             name == html_names::kOnorientationchangeAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kOrientationchange,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnhashchangeAttr) {
+  } else if (name == html_names::kOnhashchangeAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kHashchange,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnmessageAttr) {
+  } else if (name == html_names::kOnmessageAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kMessage,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnresizeAttr) {
+  } else if (name == html_names::kOnresizeAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kResize,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnscrollAttr) {
+  } else if (name == html_names::kOnscrollAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kScroll,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnstorageAttr) {
+  } else if (name == html_names::kOnstorageAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kStorage,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnonlineAttr) {
+  } else if (name == html_names::kOnonlineAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kOnline,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnofflineAttr) {
+  } else if (name == html_names::kOnofflineAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kOffline,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnpopstateAttr) {
+  } else if (name == html_names::kOnpopstateAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kPopstate,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
-  } else if (name == kOnlanguagechangeAttr) {
+  } else if (name == html_names::kOnlanguagechangeAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kLanguagechange,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
   } else if (RuntimeEnabledFeatures::PortalsEnabled() &&
-             name == kOnportalactivateAttr) {
+             name == html_names::kOnportalactivateAttr) {
     GetDocument().SetWindowAttributeEventListener(
         event_type_names::kPortalactivate,
         CreateAttributeEventListener(GetDocument().GetFrame(), name, value));
diff --git a/third_party/blink/renderer/core/html/html_head_element.cc b/third_party/blink/renderer/core/html/html_head_element.cc
index 4e3ac17..4ba4ba7d 100644
--- a/third_party/blink/renderer/core/html/html_head_element.cc
+++ b/third_party/blink/renderer/core/html/html_head_element.cc
@@ -27,9 +27,7 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLHeadElement::HTMLHeadElement(Document& document)
-    : HTMLElement(kHeadTag, document) {}
+    : HTMLElement(html_names::kHeadTag, document) {}
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/html_hr_element.cc b/third_party/blink/renderer/core/html/html_hr_element.cc
index 16a88caf..3547a8ac 100644
--- a/third_party/blink/renderer/core/html/html_hr_element.cc
+++ b/third_party/blink/renderer/core/html/html_hr_element.cc
@@ -32,15 +32,13 @@
 
 namespace blink {
 
-using namespace cssvalue;
-using namespace html_names;
-
 HTMLHRElement::HTMLHRElement(Document& document)
-    : HTMLElement(kHrTag, document) {}
+    : HTMLElement(html_names::kHrTag, document) {}
 
 bool HTMLHRElement::IsPresentationAttribute(const QualifiedName& name) const {
-  if (name == kAlignAttr || name == kWidthAttr || name == kColorAttr ||
-      name == kNoshadeAttr || name == kSizeAttr)
+  if (name == html_names::kAlignAttr || name == html_names::kWidthAttr ||
+      name == html_names::kColorAttr || name == html_names::kNoshadeAttr ||
+      name == html_names::kSizeAttr)
     return true;
   return HTMLElement::IsPresentationAttribute(name);
 }
@@ -49,7 +47,7 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kAlignAttr) {
+  if (name == html_names::kAlignAttr) {
     if (DeprecatedEqualIgnoringCase(value, "left")) {
       AddPropertyToPresentationAttributeStyle(
           style, CSSPropertyID::kMarginLeft, 0,
@@ -68,7 +66,7 @@
       AddPropertyToPresentationAttributeStyle(
           style, CSSPropertyID::kMarginRight, CSSValueID::kAuto);
     }
-  } else if (name == kWidthAttr) {
+  } else if (name == html_names::kWidthAttr) {
     bool ok;
     int v = value.ToInt(&ok);
     if (ok && !v) {
@@ -78,22 +76,22 @@
     } else {
       AddHTMLLengthToStyle(style, CSSPropertyID::kWidth, value);
     }
-  } else if (name == kColorAttr) {
+  } else if (name == html_names::kColorAttr) {
     AddPropertyToPresentationAttributeStyle(style, CSSPropertyID::kBorderStyle,
                                             CSSValueID::kSolid);
     AddHTMLColorToStyle(style, CSSPropertyID::kBorderColor, value);
     AddHTMLColorToStyle(style, CSSPropertyID::kBackgroundColor, value);
-  } else if (name == kNoshadeAttr) {
-    if (!hasAttribute(kColorAttr)) {
+  } else if (name == html_names::kNoshadeAttr) {
+    if (!hasAttribute(html_names::kColorAttr)) {
       AddPropertyToPresentationAttributeStyle(
           style, CSSPropertyID::kBorderStyle, CSSValueID::kSolid);
 
-      const CSSColorValue& dark_gray_value =
-          *CSSColorValue::Create(Color::kDarkGray);
+      const cssvalue::CSSColorValue& dark_gray_value =
+          *cssvalue::CSSColorValue::Create(Color::kDarkGray);
       style->SetProperty(CSSPropertyID::kBorderColor, dark_gray_value);
       style->SetProperty(CSSPropertyID::kBackgroundColor, dark_gray_value);
     }
-  } else if (name == kSizeAttr) {
+  } else if (name == html_names::kSizeAttr) {
     int size = value.ToInt();
     if (size <= 1) {
       AddPropertyToPresentationAttributeStyle(
diff --git a/third_party/blink/renderer/core/html/html_html_element.cc b/third_party/blink/renderer/core/html/html_html_element.cc
index e66a2d4..34c9578e 100644
--- a/third_party/blink/renderer/core/html/html_html_element.cc
+++ b/third_party/blink/renderer/core/html/html_html_element.cc
@@ -41,13 +41,11 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLHtmlElement::HTMLHtmlElement(Document& document)
-    : HTMLElement(kHTMLTag, document) {}
+    : HTMLElement(html_names::kHTMLTag, document) {}
 
 bool HTMLHtmlElement::IsURLAttribute(const Attribute& attribute) const {
-  return attribute.GetName() == kManifestAttr ||
+  return attribute.GetName() == html_names::kManifestAttr ||
          HTMLElement::IsURLAttribute(attribute);
 }
 
@@ -78,7 +76,7 @@
   if (!document_loader ||
       !GetDocument().Parser()->DocumentWasLoadedAsPartOfNavigation())
     return;
-  const AtomicString& manifest = FastGetAttribute(kManifestAttr);
+  const AtomicString& manifest = FastGetAttribute(html_names::kManifestAttr);
 
   if (RuntimeEnabledFeatures::RestrictAppCacheToSecureContextsEnabled() &&
       !GetDocument().IsSecureContext()) {
diff --git a/third_party/blink/renderer/core/html/html_iframe_element.cc b/third_party/blink/renderer/core/html/html_iframe_element.cc
index 1b1443d4..731fcd53 100644
--- a/third_party/blink/renderer/core/html/html_iframe_element.cc
+++ b/third_party/blink/renderer/core/html/html_iframe_element.cc
@@ -44,10 +44,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLIFrameElement::HTMLIFrameElement(Document& document)
-    : HTMLFrameElementBase(kIFrameTag, document),
+    : HTMLFrameElementBase(html_names::kIFrameTag, document),
       collapsed_by_client_(false),
       sandbox_(MakeGarbageCollected<HTMLIFrameElementSandbox>(this)),
       referrer_policy_(network::mojom::ReferrerPolicy::kDefault) {}
@@ -98,8 +96,8 @@
 
 bool HTMLIFrameElement::IsPresentationAttribute(
     const QualifiedName& name) const {
-  if (name == kWidthAttr || name == kHeightAttr || name == kAlignAttr ||
-      name == kFrameborderAttr)
+  if (name == html_names::kWidthAttr || name == html_names::kHeightAttr ||
+      name == html_names::kAlignAttr || name == html_names::kFrameborderAttr)
     return true;
   return HTMLFrameElementBase::IsPresentationAttribute(name);
 }
@@ -108,13 +106,13 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kWidthAttr) {
+  if (name == html_names::kWidthAttr) {
     AddHTMLLengthToStyle(style, CSSPropertyID::kWidth, value);
-  } else if (name == kHeightAttr) {
+  } else if (name == html_names::kHeightAttr) {
     AddHTMLLengthToStyle(style, CSSPropertyID::kHeight, value);
-  } else if (name == kAlignAttr) {
+  } else if (name == html_names::kAlignAttr) {
     ApplyAlignmentAttributeToStyle(value, style);
-  } else if (name == kFrameborderAttr) {
+  } else if (name == html_names::kFrameborderAttr) {
     // LocalFrame border doesn't really match the HTML4 spec definition for
     // iframes. It simply adds a presentational hint that the border should be
     // off if set to zero.
@@ -134,7 +132,7 @@
     const AttributeModificationParams& params) {
   const QualifiedName& name = params.name;
   const AtomicString& value = params.new_value;
-  if (name == kNameAttr) {
+  if (name == html_names::kNameAttr) {
     if (IsInDocumentTree() && GetDocument().IsHTMLDocument()) {
       HTMLDocument& document = ToHTMLDocument(GetDocument());
       document.RemoveNamedItem(name_);
@@ -144,7 +142,7 @@
     name_ = value;
     if (name_ != old_name)
       FrameOwnerPropertiesChanged();
-  } else if (name == kSandboxAttr) {
+  } else if (name == html_names::kSandboxAttr) {
     sandbox_->DidUpdateAttributeValue(params.old_value, value);
     String invalid_tokens;
     bool feature_policy_for_sandbox =
@@ -189,7 +187,7 @@
       }
     }
     UseCounter::Count(GetDocument(), WebFeature::kSandboxViaIFrame);
-  } else if (name == kReferrerpolicyAttr) {
+  } else if (name == html_names::kReferrerpolicyAttr) {
     referrer_policy_ = network::mojom::ReferrerPolicy::kDefault;
     if (!value.IsNull()) {
       SecurityPolicy::ReferrerPolicyFromString(
@@ -197,7 +195,7 @@
       UseCounter::Count(GetDocument(),
                         WebFeature::kHTMLIFrameElementReferrerPolicyAttribute);
     }
-  } else if (name == kAllowfullscreenAttr) {
+  } else if (name == html_names::kAllowfullscreenAttr) {
     bool old_allow_fullscreen = allow_fullscreen_;
     allow_fullscreen_ = !value.IsNull();
     if (allow_fullscreen_ != old_allow_fullscreen) {
@@ -212,14 +210,14 @@
       FrameOwnerPropertiesChanged();
       UpdateContainerPolicy();
     }
-  } else if (name == kAllowpaymentrequestAttr) {
+  } else if (name == html_names::kAllowpaymentrequestAttr) {
     bool old_allow_payment_request = allow_payment_request_;
     allow_payment_request_ = !value.IsNull();
     if (allow_payment_request_ != old_allow_payment_request) {
       FrameOwnerPropertiesChanged();
       UpdateContainerPolicy();
     }
-  } else if (name == kCspAttr) {
+  } else if (name == html_names::kCspAttr) {
     if (!ContentSecurityPolicy::IsValidCSPAttr(
             value.GetString(), GetDocument().RequiredCSP().GetString())) {
       required_csp_ = g_null_atom;
@@ -233,7 +231,7 @@
       required_csp_ = value;
       FrameOwnerPropertiesChanged();
     }
-  } else if (name == kAllowAttr) {
+  } else if (name == html_names::kAllowAttr) {
     if (allow_ != value) {
       allow_ = value;
       Vector<String> messages;
@@ -270,7 +268,7 @@
                                  "https://goo.gl/ximf56"));
     }
 
-    if (name == kSrcAttr)
+    if (name == html_names::kSrcAttr)
       LogUpdateAttributeIfIsolatedWorldAndInDocument("iframe", params);
     HTMLFrameElementBase::ParseAttribute(params);
   }
@@ -373,7 +371,7 @@
       }
     }
   }
-  LogAddElementIfIsolatedWorldAndInDocument("iframe", kSrcAttr);
+  LogAddElementIfIsolatedWorldAndInDocument("iframe", html_names::kSrcAttr);
   return result;
 }
 
diff --git a/third_party/blink/renderer/core/html/html_image_element.cc b/third_party/blink/renderer/core/html/html_image_element.cc
index fb6ce59..a66a6aa 100644
--- a/third_party/blink/renderer/core/html/html_image_element.cc
+++ b/third_party/blink/renderer/core/html/html_image_element.cc
@@ -69,8 +69,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 class HTMLImageElement::ViewportChangeListener final
     : public MediaQueryListListener {
  public:
@@ -96,7 +94,7 @@
     : HTMLImageElement(document, flags.IsCreatedByParser()) {}
 
 HTMLImageElement::HTMLImageElement(Document& document, bool created_by_parser)
-    : HTMLElement(kImgTag, document),
+    : HTMLElement(html_names::kImgTag, document),
       image_loader_(MakeGarbageCollected<HTMLImageLoader>(this)),
       image_device_pixel_ratio_(1.0f),
       source_(nullptr),
@@ -158,9 +156,10 @@
 
 bool HTMLImageElement::IsPresentationAttribute(
     const QualifiedName& name) const {
-  if (name == kWidthAttr || name == kHeightAttr || name == kBorderAttr ||
-      name == kVspaceAttr || name == kHspaceAttr || name == kAlignAttr ||
-      name == kValignAttr)
+  if (name == html_names::kWidthAttr || name == html_names::kHeightAttr ||
+      name == html_names::kBorderAttr || name == html_names::kVspaceAttr ||
+      name == html_names::kHspaceAttr || name == html_names::kAlignAttr ||
+      name == html_names::kValignAttr)
     return true;
   return HTMLElement::IsPresentationAttribute(name);
 }
@@ -169,21 +168,21 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kWidthAttr) {
+  if (name == html_names::kWidthAttr) {
     AddHTMLLengthToStyle(style, CSSPropertyID::kWidth, value);
-  } else if (name == kHeightAttr) {
+  } else if (name == html_names::kHeightAttr) {
     AddHTMLLengthToStyle(style, CSSPropertyID::kHeight, value);
-  } else if (name == kBorderAttr) {
+  } else if (name == html_names::kBorderAttr) {
     ApplyBorderAttributeToStyle(value, style);
-  } else if (name == kVspaceAttr) {
+  } else if (name == html_names::kVspaceAttr) {
     AddHTMLLengthToStyle(style, CSSPropertyID::kMarginTop, value);
     AddHTMLLengthToStyle(style, CSSPropertyID::kMarginBottom, value);
-  } else if (name == kHspaceAttr) {
+  } else if (name == html_names::kHspaceAttr) {
     AddHTMLLengthToStyle(style, CSSPropertyID::kMarginLeft, value);
     AddHTMLLengthToStyle(style, CSSPropertyID::kMarginRight, value);
-  } else if (name == kAlignAttr) {
+  } else if (name == html_names::kAlignAttr) {
     ApplyAlignmentAttributeToStyle(value, style);
-  } else if (name == kValignAttr) {
+  } else if (name == html_names::kValignAttr) {
     AddPropertyToPresentationAttributeStyle(
         style, CSSPropertyID::kVerticalAlign, value);
   } else {
@@ -192,7 +191,7 @@
 }
 
 const AtomicString HTMLImageElement::ImageSourceURL() const {
-  return best_fit_image_url_.IsNull() ? FastGetAttribute(kSrcAttr)
+  return best_fit_image_url_.IsNull() ? FastGetAttribute(html_names::kSrcAttr)
                                       : best_fit_image_url_;
 }
 
@@ -258,18 +257,19 @@
 void HTMLImageElement::ParseAttribute(
     const AttributeModificationParams& params) {
   const QualifiedName& name = params.name;
-  if (name == kAltAttr || name == kTitleAttr) {
+  if (name == html_names::kAltAttr || name == html_names::kTitleAttr) {
     if (UserAgentShadowRoot()) {
       Element* text = UserAgentShadowRoot()->getElementById("alttext");
       String alt_text_content = AltText();
       if (text && text->textContent() != alt_text_content)
         text->setTextContent(alt_text_content);
     }
-  } else if (name == kSrcAttr || name == kSrcsetAttr || name == kSizesAttr) {
+  } else if (name == html_names::kSrcAttr || name == html_names::kSrcsetAttr ||
+             name == html_names::kSizesAttr) {
     SelectSourceURL(ImageLoader::kUpdateIgnorePreviousError);
-  } else if (name == kUsemapAttr) {
+  } else if (name == html_names::kUsemapAttr) {
     SetIsLink(!params.new_value.IsNull());
-  } else if (name == kReferrerpolicyAttr) {
+  } else if (name == html_names::kReferrerpolicyAttr) {
     referrer_policy_ = network::mojom::ReferrerPolicy::kDefault;
     if (!params.new_value.IsNull()) {
       SecurityPolicy::ReferrerPolicyFromString(
@@ -278,14 +278,14 @@
       UseCounter::Count(GetDocument(),
                         WebFeature::kHTMLImageElementReferrerPolicyAttribute);
     }
-  } else if (name == kDecodingAttr) {
+  } else if (name == html_names::kDecodingAttr) {
     UseCounter::Count(GetDocument(), WebFeature::kImageDecodingAttribute);
     decoding_mode_ = ParseImageDecodingMode(params.new_value);
-  } else if (name == kLoadingAttr &&
+  } else if (name == html_names::kLoadingAttr &&
              EqualIgnoringASCIICase(params.new_value, "eager") &&
              !GetDocument().IsLazyLoadPolicyEnforced()) {
     GetImageLoader().LoadDeferredImage(referrer_policy_);
-  } else if (name == kImportanceAttr &&
+  } else if (name == html_names::kImportanceAttr &&
              RuntimeEnabledFeatures::PriorityHintsEnabled(&GetDocument())) {
     // We only need to keep track of usage here, as the communication of the
     // |importance| attribute to the loading pipeline takes place in
@@ -300,11 +300,11 @@
   // lets figure out the alt text.. magic stuff
   // http://www.w3.org/TR/1998/REC-html40-19980424/appendix/notes.html#altgen
   // also heavily discussed by Hixie on bugzilla
-  const AtomicString& alt = FastGetAttribute(kAltAttr);
+  const AtomicString& alt = FastGetAttribute(html_names::kAltAttr);
   if (!alt.IsNull())
     return alt;
   // fall back to title attribute
-  return FastGetAttribute(kTitleAttr);
+  return FastGetAttribute(html_names::kTitleAttr);
 }
 
 static bool SupportedImageType(const String& type) {
@@ -331,14 +331,14 @@
       continue;
 
     HTMLSourceElement* source = ToHTMLSourceElement(child);
-    if (!source->FastGetAttribute(kSrcAttr).IsNull()) {
+    if (!source->FastGetAttribute(html_names::kSrcAttr).IsNull()) {
       Deprecation::CountDeprecation(GetDocument(),
                                     WebFeature::kPictureSourceSrc);
     }
-    String srcset = source->FastGetAttribute(kSrcsetAttr);
+    String srcset = source->FastGetAttribute(html_names::kSrcsetAttr);
     if (srcset.IsEmpty())
       continue;
-    String type = source->FastGetAttribute(kTypeAttr);
+    String type = source->FastGetAttribute(html_names::kTypeAttr);
     if (!type.IsEmpty() && !SupportedImageType(type))
       continue;
 
@@ -347,7 +347,7 @@
 
     ImageCandidate candidate = BestFitSourceForSrcsetAttribute(
         GetDocument().DevicePixelRatio(), SourceSize(*source),
-        source->FastGetAttribute(kSrcsetAttr), &GetDocument());
+        source->FastGetAttribute(html_names::kSrcsetAttr), &GetDocument());
     if (candidate.IsEmpty())
       continue;
     source_ = source;
@@ -452,7 +452,8 @@
     // check the attribute first for an explicit pixel value
     // TODO(cbiesinger): The attribute could be a float or percentage value...
     unsigned width = 0;
-    if (ParseHTMLNonNegativeInteger(getAttribute(kWidthAttr), width))
+    if (ParseHTMLNonNegativeInteger(getAttribute(html_names::kWidthAttr),
+                                    width))
       return width;
 
     // if the image is available, use its width
@@ -474,7 +475,8 @@
     // check the attribute first for an explicit pixel value
     // TODO(cbiesinger): The attribute could be a float or percentage value...
     unsigned height = 0;
-    if (ParseHTMLNonNegativeInteger(getAttribute(kHeightAttr), height))
+    if (ParseHTMLNonNegativeInteger(getAttribute(html_names::kHeightAttr),
+                                    height))
       return height;
 
     // if the image is available, use its height
@@ -552,28 +554,31 @@
 }
 
 bool HTMLImageElement::IsURLAttribute(const Attribute& attribute) const {
-  return attribute.GetName() == kSrcAttr ||
-         attribute.GetName() == kLowsrcAttr ||
-         attribute.GetName() == kLongdescAttr ||
-         (attribute.GetName() == kUsemapAttr && attribute.Value()[0] != '#') ||
+  return attribute.GetName() == html_names::kSrcAttr ||
+         attribute.GetName() == html_names::kLowsrcAttr ||
+         attribute.GetName() == html_names::kLongdescAttr ||
+         (attribute.GetName() == html_names::kUsemapAttr &&
+          attribute.Value()[0] != '#') ||
          HTMLElement::IsURLAttribute(attribute);
 }
 
 bool HTMLImageElement::HasLegalLinkAttribute(const QualifiedName& name) const {
-  return name == kSrcAttr || HTMLElement::HasLegalLinkAttribute(name);
+  return name == html_names::kSrcAttr ||
+         HTMLElement::HasLegalLinkAttribute(name);
 }
 
 const QualifiedName& HTMLImageElement::SubResourceAttributeName() const {
-  return kSrcAttr;
+  return html_names::kSrcAttr;
 }
 
 bool HTMLImageElement::draggable() const {
   // Image elements are draggable by default.
-  return !DeprecatedEqualIgnoringCase(getAttribute(kDraggableAttr), "false");
+  return !DeprecatedEqualIgnoringCase(getAttribute(html_names::kDraggableAttr),
+                                      "false");
 }
 
 void HTMLImageElement::setHeight(unsigned value) {
-  SetUnsignedIntegralAttribute(kHeightAttr, value);
+  SetUnsignedIntegralAttribute(html_names::kHeightAttr, value);
 }
 
 IntSize HTMLImageElement::GetOverriddenIntrinsicSize() const {
@@ -581,7 +586,7 @@
 }
 
 void HTMLImageElement::setWidth(unsigned value) {
-  SetUnsignedIntegralAttribute(kWidthAttr, value);
+  SetUnsignedIntegralAttribute(html_names::kWidthAttr, value);
 }
 
 int HTMLImageElement::x() const {
@@ -624,10 +629,10 @@
 }
 
 bool HTMLImageElement::IsServerMap() const {
-  if (!FastHasAttribute(kIsmapAttr))
+  if (!FastHasAttribute(html_names::kIsmapAttr))
     return false;
 
-  const AtomicString& usemap = FastGetAttribute(kUsemapAttr);
+  const AtomicString& usemap = FastGetAttribute(html_names::kUsemapAttr);
 
   // If the usemap attribute starts with '#', it refers to a map element in
   // the document.
@@ -647,7 +652,7 @@
 }
 
 bool HTMLImageElement::IsInteractiveContent() const {
-  return FastHasAttribute(kUsemapAttr);
+  return FastHasAttribute(html_names::kUsemapAttr);
 }
 
 FloatSize HTMLImageElement::DefaultDestinationSize(
@@ -671,7 +676,7 @@
 static bool SourceSizeValue(const Element* element,
                             Document& current_document,
                             float& source_size) {
-  String sizes = element->FastGetAttribute(kSizesAttr);
+  String sizes = element->FastGetAttribute(html_names::kSizesAttr);
   bool exists = !sizes.IsNull();
   if (exists)
     UseCounter::Count(current_document, WebFeature::kSizes);
@@ -711,8 +716,8 @@
   if (candidate.IsEmpty()) {
     candidate = BestFitSourceForImageAttributes(
         GetDocument().DevicePixelRatio(), SourceSize(*this),
-        FastGetAttribute(kSrcAttr), FastGetAttribute(kSrcsetAttr),
-        &GetDocument());
+        FastGetAttribute(html_names::kSrcAttr),
+        FastGetAttribute(html_names::kSrcsetAttr), &GetDocument());
   }
   AtomicString old_url = best_fit_image_url_;
   SetBestFitURLAndDPRFromImageCandidate(candidate);
diff --git a/third_party/blink/renderer/core/html/html_image_fallback_helper.cc b/third_party/blink/renderer/core/html/html_image_fallback_helper.cc
index fa619dfe..b455f3b40 100644
--- a/third_party/blink/renderer/core/html/html_image_fallback_helper.cc
+++ b/third_party/blink/renderer/core/html/html_image_fallback_helper.cc
@@ -21,10 +21,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 static bool NoImageSourceSpecified(const Element& element) {
-  return element.getAttribute(kSrcAttr).IsEmpty();
+  return element.getAttribute(html_names::kSrcAttr).IsEmpty();
 }
 
 static bool ElementRepresentsNothing(const Element& element) {
@@ -116,20 +114,22 @@
   Document& document = element.GetDocument();
 
   auto* container = MakeGarbageCollected<HTMLSpanElement>(document);
-  container->setAttribute(kIdAttr, AtomicString("alttext-container"));
+  container->setAttribute(html_names::kIdAttr,
+                          AtomicString("alttext-container"));
 
   auto* broken_image = MakeGarbageCollected<HTMLImageElement>(document);
   broken_image->SetIsFallbackImage();
-  broken_image->setAttribute(kIdAttr, AtomicString("alttext-image"));
-  broken_image->setAttribute(kWidthAttr, AtomicString("16"));
-  broken_image->setAttribute(kHeightAttr, AtomicString("16"));
-  broken_image->setAttribute(kAlignAttr, AtomicString("left"));
+  broken_image->setAttribute(html_names::kIdAttr,
+                             AtomicString("alttext-image"));
+  broken_image->setAttribute(html_names::kWidthAttr, AtomicString("16"));
+  broken_image->setAttribute(html_names::kHeightAttr, AtomicString("16"));
+  broken_image->setAttribute(html_names::kAlignAttr, AtomicString("left"));
   broken_image->SetInlineStyleProperty(CSSPropertyID::kMargin, 0,
                                        CSSPrimitiveValue::UnitType::kPixels);
   container->AppendChild(broken_image);
 
   auto* alt_text = MakeGarbageCollected<HTMLSpanElement>(document);
-  alt_text->setAttribute(kIdAttr, AtomicString("alttext"));
+  alt_text->setAttribute(html_names::kIdAttr, AtomicString("alttext"));
 
   auto* text = Text::Create(document, To<HTMLElement>(element).AltText());
   alt_text->AppendChild(text);
diff --git a/third_party/blink/renderer/core/html/html_li_element.cc b/third_party/blink/renderer/core/html/html_li_element.cc
index eaed193..7e8e8ea 100644
--- a/third_party/blink/renderer/core/html/html_li_element.cc
+++ b/third_party/blink/renderer/core/html/html_li_element.cc
@@ -32,13 +32,11 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLLIElement::HTMLLIElement(Document& document)
-    : HTMLElement(kLiTag, document) {}
+    : HTMLElement(html_names::kLiTag, document) {}
 
 bool HTMLLIElement::IsPresentationAttribute(const QualifiedName& name) const {
-  if (name == kTypeAttr)
+  if (name == html_names::kTypeAttr)
     return true;
   return HTMLElement::IsPresentationAttribute(name);
 }
@@ -69,7 +67,7 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kTypeAttr) {
+  if (name == html_names::kTypeAttr) {
     CSSValueID type_value = ListTypeToCSSValueID(value);
     if (IsValidCSSValueID(type_value)) {
       AddPropertyToPresentationAttributeStyle(
@@ -81,7 +79,7 @@
 }
 
 void HTMLLIElement::ParseAttribute(const AttributeModificationParams& params) {
-  if (params.name == kValueAttr) {
+  if (params.name == html_names::kValueAttr) {
     if (ListItemOrdinal* ordinal = ListItemOrdinal::Get(*this))
       ParseValue(params.new_value, ordinal);
   } else {
@@ -112,7 +110,7 @@
     if (!list_node)
       ordinal->SetNotInList(true, *this);
 
-    ParseValue(FastGetAttribute(kValueAttr), ordinal);
+    ParseValue(FastGetAttribute(html_names::kValueAttr), ordinal);
   }
 }
 
diff --git a/third_party/blink/renderer/core/html/html_link_element.cc b/third_party/blink/renderer/core/html/html_link_element.cc
index 1e4e449..93a3454 100644
--- a/third_party/blink/renderer/core/html/html_link_element.cc
+++ b/third_party/blink/renderer/core/html/html_link_element.cc
@@ -51,11 +51,9 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLLinkElement::HTMLLinkElement(Document& document,
                                  const CreateElementFlags flags)
-    : HTMLElement(kLinkTag, document),
+    : HTMLElement(html_names::kLinkTag, document),
       link_loader_(LinkLoader::Create(this)),
       referrer_policy_(network::mojom::ReferrerPolicy::kDefault),
       sizes_(MakeGarbageCollected<DOMTokenList>(*this, html_names::kSizesAttr)),
@@ -68,7 +66,7 @@
     const AttributeModificationParams& params) {
   const QualifiedName& name = params.name;
   const AtomicString& value = params.new_value;
-  if (name == kRelAttr) {
+  if (name == html_names::kRelAttr) {
     rel_attribute_ = LinkRelAttribute(value);
     if (rel_attribute_.IsImport() &&
         RuntimeEnabledFeatures::HTMLImportsEnabledByRuntimeFlag()) {
@@ -76,24 +74,24 @@
     }
     rel_list_->DidUpdateAttributeValue(params.old_value, value);
     Process();
-  } else if (name == kHrefAttr) {
+  } else if (name == html_names::kHrefAttr) {
     // Log href attribute before logging resource fetching in process().
     LogUpdateAttributeIfIsolatedWorldAndInDocument("link", params);
     Process();
-  } else if (name == kTypeAttr) {
+  } else if (name == html_names::kTypeAttr) {
     type_ = value;
     Process();
-  } else if (name == kAsAttr) {
+  } else if (name == html_names::kAsAttr) {
     as_ = value;
     Process();
-  } else if (name == kReferrerpolicyAttr) {
+  } else if (name == html_names::kReferrerpolicyAttr) {
     if (!value.IsNull()) {
       SecurityPolicy::ReferrerPolicyFromString(
           value, kDoNotSupportReferrerPolicyLegacyKeywords, &referrer_policy_);
       UseCounter::Count(GetDocument(),
                         WebFeature::kHTMLLinkElementReferrerPolicyAttribute);
     }
-  } else if (name == kSizesAttr) {
+  } else if (name == html_names::kSizesAttr) {
     sizes_->DidUpdateAttributeValue(params.old_value, value);
     WebVector<WebSize> web_icon_sizes =
         WebIconSizesParser::ParseIconSizes(value);
@@ -101,26 +99,26 @@
     for (wtf_size_t i = 0; i < icon_sizes_.size(); ++i)
       icon_sizes_[i] = web_icon_sizes[i];
     Process();
-  } else if (name == kMediaAttr) {
+  } else if (name == html_names::kMediaAttr) {
     media_ = value.LowerASCII();
     Process();
-  } else if (name == kScopeAttr) {
+  } else if (name == html_names::kScopeAttr) {
     scope_ = value;
     Process();
-  } else if (name == kIntegrityAttr) {
+  } else if (name == html_names::kIntegrityAttr) {
     integrity_ = value;
-  } else if (name == kImportanceAttr &&
+  } else if (name == html_names::kImportanceAttr &&
              RuntimeEnabledFeatures::PriorityHintsEnabled(&GetDocument())) {
     UseCounter::Count(GetDocument(), WebFeature::kPriorityHints);
     importance_ = value;
-  } else if (name == kDisabledAttr) {
+  } else if (name == html_names::kDisabledAttr) {
     UseCounter::Count(GetDocument(), WebFeature::kHTMLLinkElementDisabled);
     if (params.reason == AttributeModificationReason::kByParser)
       UseCounter::Count(GetDocument(), WebFeature::kHTMLLinkElementDisabledByParser);
     if (LinkStyle* link = GetLinkStyle())
       link->SetDisabledState(!value.IsNull());
   } else {
-    if (name == kTitleAttr) {
+    if (name == html_names::kTitleAttr) {
       if (LinkStyle* link = GetLinkStyle())
         link->SetSheetTitle(value);
     }
@@ -145,7 +143,7 @@
       return false;
   }
 
-  const KURL& href = GetNonEmptyURLAttribute(kHrefAttr);
+  const KURL& href = GetNonEmptyURLAttribute(html_names::kHrefAttr);
   return !href.PotentiallyDanglingMarkup();
 }
 
@@ -199,7 +197,7 @@
       link_ = MakeGarbageCollected<LinkManifest>(this);
     } else {
       auto* link = MakeGarbageCollected<LinkStyle>(this);
-      if (FastHasAttribute(kDisabledAttr)) {
+      if (FastHasAttribute(html_names::kDisabledAttr)) {
         UseCounter::Count(GetDocument(), WebFeature::kHTMLLinkElementDisabled);
         link->SetDisabledState(true);
       }
@@ -236,7 +234,8 @@
 Node::InsertionNotificationRequest HTMLLinkElement::InsertedInto(
     ContainerNode& insertion_point) {
   HTMLElement::InsertedInto(insertion_point);
-  LogAddElementIfIsolatedWorldAndInDocument("link", kRelAttr, kHrefAttr);
+  LogAddElementIfIsolatedWorldAndInDocument("link", html_names::kRelAttr,
+                                            html_names::kHrefAttr);
   if (!insertion_point.isConnected())
     return kInsertionDone;
   DCHECK(isConnected());
@@ -370,37 +369,39 @@
 }
 
 bool HTMLLinkElement::IsURLAttribute(const Attribute& attribute) const {
-  return attribute.GetName().LocalName() == kHrefAttr ||
+  return attribute.GetName().LocalName() == html_names::kHrefAttr ||
          HTMLElement::IsURLAttribute(attribute);
 }
 
 bool HTMLLinkElement::HasLegalLinkAttribute(const QualifiedName& name) const {
-  return name == kHrefAttr || HTMLElement::HasLegalLinkAttribute(name);
+  return name == html_names::kHrefAttr ||
+         HTMLElement::HasLegalLinkAttribute(name);
 }
 
 const QualifiedName& HTMLLinkElement::SubResourceAttributeName() const {
   // If the link element is not css, ignore it.
-  if (DeprecatedEqualIgnoringCase(getAttribute(kTypeAttr), "text/css")) {
+  if (DeprecatedEqualIgnoringCase(getAttribute(html_names::kTypeAttr),
+                                  "text/css")) {
     // FIXME: Add support for extracting links of sub-resources which
     // are inside style-sheet such as @import, @font-face, url(), etc.
-    return kHrefAttr;
+    return html_names::kHrefAttr;
   }
   return HTMLElement::SubResourceAttributeName();
 }
 
 KURL HTMLLinkElement::Href() const {
-  const String& url = getAttribute(kHrefAttr);
+  const String& url = getAttribute(html_names::kHrefAttr);
   if (url.IsEmpty())
     return KURL();
   return GetDocument().CompleteURL(url);
 }
 
 const AtomicString& HTMLLinkElement::Rel() const {
-  return getAttribute(kRelAttr);
+  return getAttribute(html_names::kRelAttr);
 }
 
 const AtomicString& HTMLLinkElement::GetType() const {
-  return getAttribute(kTypeAttr);
+  return getAttribute(html_names::kTypeAttr);
 }
 
 bool HTMLLinkElement::Async() const {
diff --git a/third_party/blink/renderer/core/html/html_map_element.cc b/third_party/blink/renderer/core/html/html_map_element.cc
index 474a7fc9..330a1d6 100644
--- a/third_party/blink/renderer/core/html/html_map_element.cc
+++ b/third_party/blink/renderer/core/html/html_map_element.cc
@@ -34,10 +34,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLMapElement::HTMLMapElement(Document& document)
-    : HTMLElement(kMapTag, document) {
+    : HTMLElement(html_names::kMapTag, document) {
   UseCounter::Count(document, WebFeature::kMapElement);
 }
 
@@ -64,8 +62,9 @@
     // The HTMLImageElement's useMap() value includes the '#' symbol at the
     // beginning, which has to be stripped off.
     HTMLImageElement& image_element = ToHTMLImageElement(*curr);
-    String use_map_name =
-        image_element.getAttribute(kUsemapAttr).GetString().Substring(1);
+    String use_map_name = image_element.getAttribute(html_names::kUsemapAttr)
+                              .GetString()
+                              .Substring(1);
     if (use_map_name == name_)
       return &image_element;
   }
@@ -78,8 +77,9 @@
   // Either the id or name will be used depending on the order the attributes
   // are parsed.
 
-  if (params.name == kIdAttr || params.name == kNameAttr) {
-    if (params.name == kIdAttr) {
+  if (params.name == html_names::kIdAttr ||
+      params.name == html_names::kNameAttr) {
+    if (params.name == html_names::kIdAttr) {
       // Call base class so that hasID bit gets set.
       HTMLElement::ParseAttribute(params);
       if (GetDocument().IsHTMLDocument())
diff --git a/third_party/blink/renderer/core/html/html_menu_element.cc b/third_party/blink/renderer/core/html/html_menu_element.cc
index 5c9a9cf..2381957a 100644
--- a/third_party/blink/renderer/core/html/html_menu_element.cc
+++ b/third_party/blink/renderer/core/html/html_menu_element.cc
@@ -26,9 +26,7 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLMenuElement::HTMLMenuElement(Document& document)
-    : HTMLElement(kMenuTag, document) {}
+    : HTMLElement(html_names::kMenuTag, document) {}
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/html_meta_element.cc b/third_party/blink/renderer/core/html/html_meta_element.cc
index e8713d5..56df61e 100644
--- a/third_party/blink/renderer/core/html/html_meta_element.cc
+++ b/third_party/blink/renderer/core/html/html_meta_element.cc
@@ -41,10 +41,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLMetaElement::HTMLMetaElement(Document& document)
-    : HTMLElement(kMetaTag, document) {}
+    : HTMLElement(html_names::kMetaTag, document) {}
 
 static bool IsInvalidSeparator(UChar c) {
   return c == ';';
@@ -476,7 +474,8 @@
 }
 
 void HTMLMetaElement::NameRemoved(const AtomicString& name_value) {
-  const AtomicString& content_value = FastGetAttribute(kContentAttr);
+  const AtomicString& content_value =
+      FastGetAttribute(html_names::kContentAttr);
   if (content_value.IsNull())
     return;
   if (EqualIgnoringASCIICase(name_value, "theme-color") &&
@@ -489,14 +488,14 @@
 
 void HTMLMetaElement::ParseAttribute(
     const AttributeModificationParams& params) {
-  if (params.name == kNameAttr) {
+  if (params.name == html_names::kNameAttr) {
     if (IsInDocumentTree())
       NameRemoved(params.old_value);
     ProcessContent();
-  } else if (params.name == kContentAttr) {
+  } else if (params.name == html_names::kContentAttr) {
     ProcessContent();
     ProcessHttpEquiv();
-  } else if (params.name == kHttpEquivAttr) {
+  } else if (params.name == html_names::kHttpEquivAttr) {
     ProcessHttpEquiv();
   } else {
     HTMLElement::ParseAttribute(params);
@@ -518,7 +517,7 @@
   HTMLElement::RemovedFrom(insertion_point);
   if (!insertion_point.IsInDocumentTree())
     return;
-  const AtomicString& name_value = FastGetAttribute(kNameAttr);
+  const AtomicString& name_value = FastGetAttribute(html_names::kNameAttr);
   if (!name_value.IsEmpty())
     NameRemoved(name_value);
 }
@@ -533,10 +532,12 @@
 void HTMLMetaElement::ProcessHttpEquiv() {
   if (!IsInDocumentTree())
     return;
-  const AtomicString& content_value = FastGetAttribute(kContentAttr);
+  const AtomicString& content_value =
+      FastGetAttribute(html_names::kContentAttr);
   if (content_value.IsNull())
     return;
-  const AtomicString& http_equiv_value = FastGetAttribute(kHttpEquivAttr);
+  const AtomicString& http_equiv_value =
+      FastGetAttribute(html_names::kHttpEquivAttr);
   if (http_equiv_value.IsEmpty())
     return;
   HttpEquiv::Process(GetDocument(), http_equiv_value, content_value,
@@ -547,11 +548,12 @@
   if (!IsInDocumentTree())
     return;
 
-  const AtomicString& name_value = FastGetAttribute(kNameAttr);
+  const AtomicString& name_value = FastGetAttribute(html_names::kNameAttr);
   if (name_value.IsEmpty())
     return;
 
-  const AtomicString& content_value = FastGetAttribute(kContentAttr);
+  const AtomicString& content_value =
+      FastGetAttribute(html_names::kContentAttr);
 
   if (EqualIgnoringASCIICase(name_value, "theme-color") &&
       GetDocument().GetFrame()) {
@@ -593,11 +595,11 @@
 }
 
 const AtomicString& HTMLMetaElement::Content() const {
-  return getAttribute(kContentAttr);
+  return getAttribute(html_names::kContentAttr);
 }
 
 const AtomicString& HTMLMetaElement::HttpEquiv() const {
-  return getAttribute(kHttpEquivAttr);
+  return getAttribute(html_names::kHttpEquivAttr);
 }
 
 const AtomicString& HTMLMetaElement::GetName() const {
diff --git a/third_party/blink/renderer/core/html/html_meter_element.cc b/third_party/blink/renderer/core/html/html_meter_element.cc
index be1ba8f1..ed6f1c9e 100644
--- a/third_party/blink/renderer/core/html/html_meter_element.cc
+++ b/third_party/blink/renderer/core/html/html_meter_element.cc
@@ -34,10 +34,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLMeterElement::HTMLMeterElement(Document& document)
-    : HTMLElement(kMeterTag, document) {
+    : HTMLElement(html_names::kMeterTag, document) {
   UseCounter::Count(document, WebFeature::kMeterElement);
   EnsureUserAgentShadowRoot();
 }
@@ -64,64 +62,67 @@
 void HTMLMeterElement::ParseAttribute(
     const AttributeModificationParams& params) {
   const QualifiedName& name = params.name;
-  if (name == kValueAttr || name == kMinAttr || name == kMaxAttr ||
-      name == kLowAttr || name == kHighAttr || name == kOptimumAttr)
+  if (name == html_names::kValueAttr || name == html_names::kMinAttr ||
+      name == html_names::kMaxAttr || name == html_names::kLowAttr ||
+      name == html_names::kHighAttr || name == html_names::kOptimumAttr)
     DidElementStateChange();
   else
     HTMLElement::ParseAttribute(params);
 }
 
 double HTMLMeterElement::value() const {
-  double value = GetFloatingPointAttribute(kValueAttr, 0);
+  double value = GetFloatingPointAttribute(html_names::kValueAttr, 0);
   return std::min(std::max(value, min()), max());
 }
 
 void HTMLMeterElement::setValue(double value) {
-  SetFloatingPointAttribute(kValueAttr, value);
+  SetFloatingPointAttribute(html_names::kValueAttr, value);
 }
 
 double HTMLMeterElement::min() const {
-  return GetFloatingPointAttribute(kMinAttr, 0);
+  return GetFloatingPointAttribute(html_names::kMinAttr, 0);
 }
 
 void HTMLMeterElement::setMin(double min) {
-  SetFloatingPointAttribute(kMinAttr, min);
+  SetFloatingPointAttribute(html_names::kMinAttr, min);
 }
 
 double HTMLMeterElement::max() const {
-  return std::max(GetFloatingPointAttribute(kMaxAttr, std::max(1.0, min())),
-                  min());
+  return std::max(
+      GetFloatingPointAttribute(html_names::kMaxAttr, std::max(1.0, min())),
+      min());
 }
 
 void HTMLMeterElement::setMax(double max) {
-  SetFloatingPointAttribute(kMaxAttr, max);
+  SetFloatingPointAttribute(html_names::kMaxAttr, max);
 }
 
 double HTMLMeterElement::low() const {
-  double low = GetFloatingPointAttribute(kLowAttr, min());
+  double low = GetFloatingPointAttribute(html_names::kLowAttr, min());
   return std::min(std::max(low, min()), max());
 }
 
 void HTMLMeterElement::setLow(double low) {
-  SetFloatingPointAttribute(kLowAttr, low);
+  SetFloatingPointAttribute(html_names::kLowAttr, low);
 }
 
 double HTMLMeterElement::high() const {
-  double high = GetFloatingPointAttribute(kHighAttr, max());
+  double high = GetFloatingPointAttribute(html_names::kHighAttr, max());
   return std::min(std::max(high, low()), max());
 }
 
 void HTMLMeterElement::setHigh(double high) {
-  SetFloatingPointAttribute(kHighAttr, high);
+  SetFloatingPointAttribute(html_names::kHighAttr, high);
 }
 
 double HTMLMeterElement::optimum() const {
-  double optimum = GetFloatingPointAttribute(kOptimumAttr, (max() + min()) / 2);
+  double optimum =
+      GetFloatingPointAttribute(html_names::kOptimumAttr, (max() + min()) / 2);
   return std::min(std::max(optimum, min()), max());
 }
 
 void HTMLMeterElement::setOptimum(double optimum) {
-  SetFloatingPointAttribute(kOptimumAttr, optimum);
+  SetFloatingPointAttribute(html_names::kOptimumAttr, optimum);
 }
 
 HTMLMeterElement::GaugeRegion HTMLMeterElement::GetGaugeRegion() const {
diff --git a/third_party/blink/renderer/core/html/html_mod_element.cc b/third_party/blink/renderer/core/html/html_mod_element.cc
index 7abc3f8..dd6257f 100644
--- a/third_party/blink/renderer/core/html/html_mod_element.cc
+++ b/third_party/blink/renderer/core/html/html_mod_element.cc
@@ -26,23 +26,22 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLModElement::HTMLModElement(const QualifiedName& tag_name,
                                Document& document)
     : HTMLElement(tag_name, document) {}
 
 bool HTMLModElement::IsURLAttribute(const Attribute& attribute) const {
-  return attribute.GetName() == kCiteAttr ||
+  return attribute.GetName() == html_names::kCiteAttr ||
          HTMLElement::IsURLAttribute(attribute);
 }
 
 bool HTMLModElement::HasLegalLinkAttribute(const QualifiedName& name) const {
-  return name == kCiteAttr || HTMLElement::HasLegalLinkAttribute(name);
+  return name == html_names::kCiteAttr ||
+         HTMLElement::HasLegalLinkAttribute(name);
 }
 
 const QualifiedName& HTMLModElement::SubResourceAttributeName() const {
-  return kCiteAttr;
+  return html_names::kCiteAttr;
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/html_no_embed_element.cc b/third_party/blink/renderer/core/html/html_no_embed_element.cc
index f3850eb..3f453f9 100644
--- a/third_party/blink/renderer/core/html/html_no_embed_element.cc
+++ b/third_party/blink/renderer/core/html/html_no_embed_element.cc
@@ -37,10 +37,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLNoEmbedElement::HTMLNoEmbedElement(Document& document)
-    : HTMLElement(kNoembedTag, document) {}
+    : HTMLElement(html_names::kNoembedTag, document) {}
 
 bool HTMLNoEmbedElement::LayoutObjectIsNeeded(
     const ComputedStyle& style) const {
diff --git a/third_party/blink/renderer/core/html/html_no_script_element.cc b/third_party/blink/renderer/core/html/html_no_script_element.cc
index 8d56de65..64ecf0c 100644
--- a/third_party/blink/renderer/core/html/html_no_script_element.cc
+++ b/third_party/blink/renderer/core/html/html_no_script_element.cc
@@ -37,10 +37,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLNoScriptElement::HTMLNoScriptElement(Document& document)
-    : HTMLElement(kNoscriptTag, document) {}
+    : HTMLElement(html_names::kNoscriptTag, document) {}
 
 bool HTMLNoScriptElement::LayoutObjectIsNeeded(
     const ComputedStyle& style) const {
diff --git a/third_party/blink/renderer/core/html/html_object_element.cc b/third_party/blink/renderer/core/html/html_object_element.cc
index cd7aa2be..c5d7a49 100644
--- a/third_party/blink/renderer/core/html/html_object_element.cc
+++ b/third_party/blink/renderer/core/html/html_object_element.cc
@@ -46,11 +46,9 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLObjectElement::HTMLObjectElement(Document& document,
                                      const CreateElementFlags flags)
-    : HTMLPlugInElement(kObjectTag,
+    : HTMLPlugInElement(html_names::kObjectTag,
                         document,
                         flags,
                         kShouldNotPreferPlugInsForImages),
@@ -81,7 +79,7 @@
 
 bool HTMLObjectElement::IsPresentationAttribute(
     const QualifiedName& name) const {
-  if (name == kBorderAttr)
+  if (name == html_names::kBorderAttr)
     return true;
   return HTMLPlugInElement::IsPresentationAttribute(name);
 }
@@ -90,7 +88,7 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kBorderAttr)
+  if (name == html_names::kBorderAttr)
     ApplyBorderAttributeToStyle(value, style);
   else
     HTMLPlugInElement::CollectStyleForPresentationAttribute(name, value, style);
@@ -99,9 +97,9 @@
 void HTMLObjectElement::ParseAttribute(
     const AttributeModificationParams& params) {
   const QualifiedName& name = params.name;
-  if (name == kFormAttr) {
+  if (name == html_names::kFormAttr) {
     FormAttributeChanged();
-  } else if (name == kTypeAttr) {
+  } else if (name == html_names::kTypeAttr) {
     SetServiceType(params.new_value.LowerASCII());
     wtf_size_t pos = service_type_.Find(";");
     if (pos != kNotFound)
@@ -110,7 +108,7 @@
     // Should we suppress the reload stuff when a persistable widget-type is
     // specified?
     ReloadPluginOnAttributeChange(name);
-  } else if (name == kDataAttr) {
+  } else if (name == html_names::kDataAttr) {
     SetUrl(StripLeadingAndTrailingHTMLSpaces(params.new_value));
     if (GetLayoutObject() && IsImageType()) {
       SetNeedsPluginUpdate(true);
@@ -120,7 +118,7 @@
     } else {
       ReloadPluginOnAttributeChange(name);
     }
-  } else if (name == kClassidAttr) {
+  } else if (name == html_names::kClassidAttr) {
     class_id_ = params.new_value;
     ReloadPluginOnAttributeChange(name);
   } else {
@@ -222,12 +220,12 @@
   // the updating of certain attributes should bring about "redetermination"
   // of what the element contains.
   bool needs_invalidation;
-  if (name == kTypeAttr) {
-    needs_invalidation =
-        !FastHasAttribute(kClassidAttr) && !FastHasAttribute(kDataAttr);
-  } else if (name == kDataAttr) {
-    needs_invalidation = !FastHasAttribute(kClassidAttr);
-  } else if (name == kClassidAttr) {
+  if (name == html_names::kTypeAttr) {
+    needs_invalidation = !FastHasAttribute(html_names::kClassidAttr) &&
+                         !FastHasAttribute(html_names::kDataAttr);
+  } else if (name == html_names::kDataAttr) {
+    needs_invalidation = !FastHasAttribute(html_names::kClassidAttr);
+  } else if (name == html_names::kClassidAttr) {
     needs_invalidation = true;
   } else {
     NOTREACHED();
@@ -314,23 +312,25 @@
 }
 
 bool HTMLObjectElement::IsURLAttribute(const Attribute& attribute) const {
-  return attribute.GetName() == kCodebaseAttr ||
-         attribute.GetName() == kDataAttr ||
-         (attribute.GetName() == kUsemapAttr && attribute.Value()[0] != '#') ||
+  return attribute.GetName() == html_names::kCodebaseAttr ||
+         attribute.GetName() == html_names::kDataAttr ||
+         (attribute.GetName() == html_names::kUsemapAttr &&
+          attribute.Value()[0] != '#') ||
          HTMLPlugInElement::IsURLAttribute(attribute);
 }
 
 bool HTMLObjectElement::HasLegalLinkAttribute(const QualifiedName& name) const {
-  return name == kClassidAttr || name == kDataAttr || name == kCodebaseAttr ||
+  return name == html_names::kClassidAttr || name == html_names::kDataAttr ||
+         name == html_names::kCodebaseAttr ||
          HTMLPlugInElement::HasLegalLinkAttribute(name);
 }
 
 const QualifiedName& HTMLObjectElement::SubResourceAttributeName() const {
-  return kDataAttr;
+  return html_names::kDataAttr;
 }
 
 const AtomicString HTMLObjectElement::ImageSourceURL() const {
-  return getAttribute(kDataAttr);
+  return getAttribute(html_names::kDataAttr);
 }
 
 void HTMLObjectElement::ReattachFallbackContent() {
@@ -389,14 +389,15 @@
 }
 
 bool HTMLObjectElement::ContainsJavaApplet() const {
-  if (MIMETypeRegistry::IsJavaAppletMIMEType(getAttribute(kTypeAttr)))
+  if (MIMETypeRegistry::IsJavaAppletMIMEType(
+          getAttribute(html_names::kTypeAttr)))
     return true;
 
   for (HTMLElement& child : Traversal<HTMLElement>::ChildrenOf(*this)) {
     if (IsHTMLParamElement(child) &&
         DeprecatedEqualIgnoringCase(child.GetNameAttribute(), "type") &&
         MIMETypeRegistry::IsJavaAppletMIMEType(
-            child.getAttribute(kValueAttr).GetString()))
+            child.getAttribute(html_names::kValueAttr).GetString()))
       return true;
     if (IsHTMLObjectElement(child) &&
         ToHTMLObjectElement(child).ContainsJavaApplet())
@@ -416,7 +417,7 @@
 }
 
 bool HTMLObjectElement::IsInteractiveContent() const {
-  return FastHasAttribute(kUsemapAttr);
+  return FastHasAttribute(html_names::kUsemapAttr);
 }
 
 bool HTMLObjectElement::UseFallbackContent() const {
diff --git a/third_party/blink/renderer/core/html/html_olist_element.cc b/third_party/blink/renderer/core/html/html_olist_element.cc
index 3299964b..48581eb8 100644
--- a/third_party/blink/renderer/core/html/html_olist_element.cc
+++ b/third_party/blink/renderer/core/html/html_olist_element.cc
@@ -32,10 +32,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLOListElement::HTMLOListElement(Document& document)
-    : HTMLElement(kOlTag, document),
+    : HTMLElement(html_names::kOlTag, document),
       start_(0xBADBEEF),
       item_count_(0),
       has_explicit_start_(false),
@@ -44,7 +42,7 @@
 
 bool HTMLOListElement::IsPresentationAttribute(
     const QualifiedName& name) const {
-  if (name == kTypeAttr)
+  if (name == html_names::kTypeAttr)
     return true;
   return HTMLElement::IsPresentationAttribute(name);
 }
@@ -53,7 +51,7 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kTypeAttr) {
+  if (name == html_names::kTypeAttr) {
     if (value == "a") {
       AddPropertyToPresentationAttributeStyle(
           style, CSSPropertyID::kListStyleType, CSSValueID::kLowerAlpha);
@@ -77,7 +75,7 @@
 
 void HTMLOListElement::ParseAttribute(
     const AttributeModificationParams& params) {
-  if (params.name == kStartAttr) {
+  if (params.name == html_names::kStartAttr) {
     int old_start = StartConsideringItemCount();
     int parsed_start = 0;
     bool can_parse = ParseHTMLInteger(params.new_value, parsed_start);
@@ -86,7 +84,7 @@
     if (old_start == StartConsideringItemCount())
       return;
     UpdateItemValues();
-  } else if (params.name == kReversedAttr) {
+  } else if (params.name == html_names::kReversedAttr) {
     bool reversed = !params.new_value.IsNull();
     if (reversed == is_reversed_)
       return;
@@ -98,7 +96,7 @@
 }
 
 void HTMLOListElement::setStart(int start) {
-  SetIntegralAttribute(kStartAttr, start);
+  SetIntegralAttribute(html_names::kStartAttr, start);
 }
 
 void HTMLOListElement::UpdateItemValues() {
diff --git a/third_party/blink/renderer/core/html/html_paragraph_element.cc b/third_party/blink/renderer/core/html/html_paragraph_element.cc
index 4deeef6..b7811d5 100644
--- a/third_party/blink/renderer/core/html/html_paragraph_element.cc
+++ b/third_party/blink/renderer/core/html/html_paragraph_element.cc
@@ -28,16 +28,14 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLParagraphElement::HTMLParagraphElement(Document& document)
-    : HTMLElement(kPTag, document) {}
+    : HTMLElement(html_names::kPTag, document) {}
 
 void HTMLParagraphElement::CollectStyleForPresentationAttribute(
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kAlignAttr) {
+  if (name == html_names::kAlignAttr) {
     if (DeprecatedEqualIgnoringCase(value, "middle") ||
         DeprecatedEqualIgnoringCase(value, "center")) {
       AddPropertyToPresentationAttributeStyle(style, CSSPropertyID::kTextAlign,
diff --git a/third_party/blink/renderer/core/html/html_param_element.cc b/third_party/blink/renderer/core/html/html_param_element.cc
index 0b1a8a7..68d6bbc8 100644
--- a/third_party/blink/renderer/core/html/html_param_element.cc
+++ b/third_party/blink/renderer/core/html/html_param_element.cc
@@ -28,10 +28,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLParamElement::HTMLParamElement(Document& document)
-    : HTMLElement(kParamTag, document) {}
+    : HTMLElement(html_names::kParamTag, document) {}
 
 const AtomicString& HTMLParamElement::GetName() const {
   if (HasName())
@@ -40,7 +38,7 @@
 }
 
 const AtomicString& HTMLParamElement::Value() const {
-  return FastGetAttribute(kValueAttr);
+  return FastGetAttribute(html_names::kValueAttr);
 }
 
 // HTML5 says that an object resource's URL is specified by the object's
@@ -56,7 +54,8 @@
 }
 
 bool HTMLParamElement::IsURLAttribute(const Attribute& attribute) const {
-  if (attribute.GetName() == kValueAttr && IsURLParameter(GetName()))
+  if (attribute.GetName() == html_names::kValueAttr &&
+      IsURLParameter(GetName()))
     return true;
   return HTMLElement::IsURLAttribute(attribute);
 }
diff --git a/third_party/blink/renderer/core/html/html_picture_element.cc b/third_party/blink/renderer/core/html/html_picture_element.cc
index 9a154d9..d6a7124 100644
--- a/third_party/blink/renderer/core/html/html_picture_element.cc
+++ b/third_party/blink/renderer/core/html/html_picture_element.cc
@@ -15,10 +15,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLPictureElement::HTMLPictureElement(Document& document)
-    : HTMLElement(kPictureTag, document) {}
+    : HTMLElement(html_names::kPictureTag, document) {}
 
 void HTMLPictureElement::SourceOrMediaChanged() {
   for (HTMLImageElement* image_element =
diff --git a/third_party/blink/renderer/core/html/html_plugin_element.cc b/third_party/blink/renderer/core/html/html_plugin_element.cc
index 39e58514..5e88b2a 100644
--- a/third_party/blink/renderer/core/html/html_plugin_element.cc
+++ b/third_party/blink/renderer/core/html/html_plugin_element.cc
@@ -62,8 +62,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 namespace {
 
 String GetMIMETypeFromURL(const KURL& url) {
@@ -399,8 +397,9 @@
 
 bool HTMLPlugInElement::IsPresentationAttribute(
     const QualifiedName& name) const {
-  if (name == kWidthAttr || name == kHeightAttr || name == kVspaceAttr ||
-      name == kHspaceAttr || name == kAlignAttr)
+  if (name == html_names::kWidthAttr || name == html_names::kHeightAttr ||
+      name == html_names::kVspaceAttr || name == html_names::kHspaceAttr ||
+      name == html_names::kAlignAttr)
     return true;
   return HTMLFrameOwnerElement::IsPresentationAttribute(name);
 }
@@ -409,17 +408,17 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kWidthAttr) {
+  if (name == html_names::kWidthAttr) {
     AddHTMLLengthToStyle(style, CSSPropertyID::kWidth, value);
-  } else if (name == kHeightAttr) {
+  } else if (name == html_names::kHeightAttr) {
     AddHTMLLengthToStyle(style, CSSPropertyID::kHeight, value);
-  } else if (name == kVspaceAttr) {
+  } else if (name == html_names::kVspaceAttr) {
     AddHTMLLengthToStyle(style, CSSPropertyID::kMarginTop, value);
     AddHTMLLengthToStyle(style, CSSPropertyID::kMarginBottom, value);
-  } else if (name == kHspaceAttr) {
+  } else if (name == html_names::kHspaceAttr) {
     AddHTMLLengthToStyle(style, CSSPropertyID::kMarginLeft, value);
     AddHTMLLengthToStyle(style, CSSPropertyID::kMarginRight, value);
-  } else if (name == kAlignAttr) {
+  } else if (name == html_names::kAlignAttr) {
     ApplyAlignmentAttributeToStyle(value, style);
   } else {
     HTMLFrameOwnerElement::CollectStyleForPresentationAttribute(name, value,
diff --git a/third_party/blink/renderer/core/html/html_pre_element.cc b/third_party/blink/renderer/core/html/html_pre_element.cc
index 41a92c66..134d128 100644
--- a/third_party/blink/renderer/core/html/html_pre_element.cc
+++ b/third_party/blink/renderer/core/html/html_pre_element.cc
@@ -29,14 +29,12 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLPreElement::HTMLPreElement(const QualifiedName& tag_name,
                                Document& document)
     : HTMLElement(tag_name, document) {}
 
 bool HTMLPreElement::IsPresentationAttribute(const QualifiedName& name) const {
-  if (name == kWrapAttr)
+  if (name == html_names::kWrapAttr)
     return true;
   return HTMLElement::IsPresentationAttribute(name);
 }
@@ -45,7 +43,7 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kWrapAttr)
+  if (name == html_names::kWrapAttr)
     style->SetProperty(CSSPropertyID::kWhiteSpace, CSSValueID::kPreWrap);
   else
     HTMLElement::CollectStyleForPresentationAttribute(name, value, style);
diff --git a/third_party/blink/renderer/core/html/html_progress_element.cc b/third_party/blink/renderer/core/html/html_progress_element.cc
index 7847ce9..054bc29 100644
--- a/third_party/blink/renderer/core/html/html_progress_element.cc
+++ b/third_party/blink/renderer/core/html/html_progress_element.cc
@@ -33,13 +33,11 @@
 
 namespace blink {
 
-using namespace html_names;
-
 const double HTMLProgressElement::kIndeterminatePosition = -1;
 const double HTMLProgressElement::kInvalidPosition = -2;
 
 HTMLProgressElement::HTMLProgressElement(Document& document)
-    : HTMLElement(kProgressTag, document), value_(nullptr) {
+    : HTMLElement(html_names::kProgressTag, document), value_(nullptr) {
   UseCounter::Count(document, WebFeature::kProgressElement);
   EnsureUserAgentShadowRoot();
 }
@@ -67,11 +65,11 @@
 
 void HTMLProgressElement::ParseAttribute(
     const AttributeModificationParams& params) {
-  if (params.name == kValueAttr) {
+  if (params.name == html_names::kValueAttr) {
     if (params.old_value.IsNull() != params.new_value.IsNull())
       PseudoStateChanged(CSSSelector::kPseudoIndeterminate);
     DidElementStateChange();
-  } else if (params.name == kMaxAttr) {
+  } else if (params.name == html_names::kMaxAttr) {
     DidElementStateChange();
   } else {
     HTMLElement::ParseAttribute(params);
@@ -85,7 +83,7 @@
 }
 
 double HTMLProgressElement::value() const {
-  double value = GetFloatingPointAttribute(kValueAttr);
+  double value = GetFloatingPointAttribute(html_names::kValueAttr);
   // Otherwise, if the parsed value was greater than or equal to the maximum
   // value, then the current value of the progress bar is the maximum value
   // of the progress bar. Otherwise, if parsing the value attribute's value
@@ -95,11 +93,11 @@
 }
 
 void HTMLProgressElement::setValue(double value) {
-  SetFloatingPointAttribute(kValueAttr, std::max(value, 0.));
+  SetFloatingPointAttribute(html_names::kValueAttr, std::max(value, 0.));
 }
 
 double HTMLProgressElement::max() const {
-  double max = GetFloatingPointAttribute(kMaxAttr);
+  double max = GetFloatingPointAttribute(html_names::kMaxAttr);
   // Otherwise, if the element has no max attribute, or if it has one but
   // parsing it resulted in an error, or if the parsed value was less than or
   // equal to zero, then the maximum value of the progress bar is 1.0.
@@ -109,7 +107,7 @@
 void HTMLProgressElement::setMax(double max) {
   // FIXME: The specification says we should ignore the input value if it is
   // inferior or equal to 0.
-  SetFloatingPointAttribute(kMaxAttr, max > 0 ? max : 1);
+  SetFloatingPointAttribute(html_names::kMaxAttr, max > 0 ? max : 1);
 }
 
 double HTMLProgressElement::position() const {
@@ -119,7 +117,7 @@
 }
 
 bool HTMLProgressElement::IsDeterminate() const {
-  return FastHasAttribute(kValueAttr);
+  return FastHasAttribute(html_names::kValueAttr);
 }
 
 void HTMLProgressElement::DidElementStateChange() {
diff --git a/third_party/blink/renderer/core/html/html_quote_element.cc b/third_party/blink/renderer/core/html/html_quote_element.cc
index c284dfe..e85d6a1 100644
--- a/third_party/blink/renderer/core/html/html_quote_element.cc
+++ b/third_party/blink/renderer/core/html/html_quote_element.cc
@@ -27,25 +27,25 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLQuoteElement::HTMLQuoteElement(const QualifiedName& tag_name,
                                    Document& document)
     : HTMLElement(tag_name, document) {
-  DCHECK(HasTagName(kQTag) || HasTagName(kBlockquoteTag));
+  DCHECK(HasTagName(html_names::kQTag) ||
+         HasTagName(html_names::kBlockquoteTag));
 }
 
 bool HTMLQuoteElement::IsURLAttribute(const Attribute& attribute) const {
-  return attribute.GetName() == kCiteAttr ||
+  return attribute.GetName() == html_names::kCiteAttr ||
          HTMLElement::IsURLAttribute(attribute);
 }
 
 bool HTMLQuoteElement::HasLegalLinkAttribute(const QualifiedName& name) const {
-  return name == kCiteAttr || HTMLElement::HasLegalLinkAttribute(name);
+  return name == html_names::kCiteAttr ||
+         HTMLElement::HasLegalLinkAttribute(name);
 }
 
 const QualifiedName& HTMLQuoteElement::SubResourceAttributeName() const {
-  return kCiteAttr;
+  return html_names::kCiteAttr;
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/html_rt_element.cc b/third_party/blink/renderer/core/html/html_rt_element.cc
index 39d18246..fba2fe9 100644
--- a/third_party/blink/renderer/core/html/html_rt_element.cc
+++ b/third_party/blink/renderer/core/html/html_rt_element.cc
@@ -9,10 +9,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLRTElement::HTMLRTElement(Document& document)
-    : HTMLElement(kRtTag, document) {}
+    : HTMLElement(html_names::kRtTag, document) {}
 
 LayoutObject* HTMLRTElement::CreateLayoutObject(const ComputedStyle& style,
                                                 LegacyLayout legacy) {
diff --git a/third_party/blink/renderer/core/html/html_ruby_element.cc b/third_party/blink/renderer/core/html/html_ruby_element.cc
index 50aa3f9..c40fddf9 100644
--- a/third_party/blink/renderer/core/html/html_ruby_element.cc
+++ b/third_party/blink/renderer/core/html/html_ruby_element.cc
@@ -9,10 +9,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLRubyElement::HTMLRubyElement(Document& document)
-    : HTMLElement(kRubyTag, document) {}
+    : HTMLElement(html_names::kRubyTag, document) {}
 
 LayoutObject* HTMLRubyElement::CreateLayoutObject(const ComputedStyle& style,
                                                   LegacyLayout legacy) {
diff --git a/third_party/blink/renderer/core/html/html_script_element.cc b/third_party/blink/renderer/core/html/html_script_element.cc
index 0807c984..14e53c1 100644
--- a/third_party/blink/renderer/core/html/html_script_element.cc
+++ b/third_party/blink/renderer/core/html/html_script_element.cc
@@ -43,11 +43,9 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLScriptElement::HTMLScriptElement(Document& document,
                                      const CreateElementFlags flags)
-    : HTMLElement(kScriptTag, document),
+    : HTMLElement(html_names::kScriptTag, document),
       loader_(InitializeScriptLoader(flags.IsCreatedByParser(),
                                      flags.WasAlreadyStarted())) {}
 
@@ -59,16 +57,17 @@
 }
 
 bool HTMLScriptElement::IsURLAttribute(const Attribute& attribute) const {
-  return attribute.GetName() == kSrcAttr ||
+  return attribute.GetName() == html_names::kSrcAttr ||
          HTMLElement::IsURLAttribute(attribute);
 }
 
 bool HTMLScriptElement::HasLegalLinkAttribute(const QualifiedName& name) const {
-  return name == kSrcAttr || HTMLElement::HasLegalLinkAttribute(name);
+  return name == html_names::kSrcAttr ||
+         HTMLElement::HasLegalLinkAttribute(name);
 }
 
 const QualifiedName& HTMLScriptElement::SubResourceAttributeName() const {
-  return kSrcAttr;
+  return html_names::kSrcAttr;
 }
 
 void HTMLScriptElement::ChildrenChanged(const ChildrenChange& change) {
@@ -84,12 +83,12 @@
 
 void HTMLScriptElement::ParseAttribute(
     const AttributeModificationParams& params) {
-  if (params.name == kSrcAttr) {
+  if (params.name == html_names::kSrcAttr) {
     loader_->HandleSourceAttribute(params.new_value);
     LogUpdateAttributeIfIsolatedWorldAndInDocument("script", params);
-  } else if (params.name == kAsyncAttr) {
+  } else if (params.name == html_names::kAsyncAttr) {
     loader_->HandleAsyncAttribute();
-  } else if (params.name == kImportanceAttr &&
+  } else if (params.name == html_names::kImportanceAttr &&
              RuntimeEnabledFeatures::PriorityHintsEnabled(&GetDocument())) {
     // The only thing we need to do for the the importance attribute/Priority
     // Hints is count usage upon parsing. Processing the value happens when the
@@ -110,7 +109,7 @@
                       WebFeature::kScriptElementWithInvalidTypeHasSrc);
   }
   HTMLElement::InsertedInto(insertion_point);
-  LogAddElementIfIsolatedWorldAndInDocument("script", kSrcAttr);
+  LogAddElementIfIsolatedWorldAndInDocument("script", html_names::kSrcAttr);
 
   return kInsertionShouldCallDidNotifySubtreeInsertions;
 }
@@ -150,56 +149,56 @@
 }
 
 void HTMLScriptElement::setAsync(bool async) {
-  SetBooleanAttribute(kAsyncAttr, async);
+  SetBooleanAttribute(html_names::kAsyncAttr, async);
   loader_->HandleAsyncAttribute();
 }
 
 bool HTMLScriptElement::async() const {
-  return FastHasAttribute(kAsyncAttr) || loader_->IsNonBlocking();
+  return FastHasAttribute(html_names::kAsyncAttr) || loader_->IsNonBlocking();
 }
 
 String HTMLScriptElement::SourceAttributeValue() const {
-  return getAttribute(kSrcAttr).GetString();
+  return getAttribute(html_names::kSrcAttr).GetString();
 }
 
 String HTMLScriptElement::CharsetAttributeValue() const {
-  return getAttribute(kCharsetAttr).GetString();
+  return getAttribute(html_names::kCharsetAttr).GetString();
 }
 
 String HTMLScriptElement::TypeAttributeValue() const {
-  return getAttribute(kTypeAttr).GetString();
+  return getAttribute(html_names::kTypeAttr).GetString();
 }
 
 String HTMLScriptElement::LanguageAttributeValue() const {
-  return getAttribute(kLanguageAttr).GetString();
+  return getAttribute(html_names::kLanguageAttr).GetString();
 }
 
 bool HTMLScriptElement::NomoduleAttributeValue() const {
-  return FastHasAttribute(kNomoduleAttr);
+  return FastHasAttribute(html_names::kNomoduleAttr);
 }
 
 String HTMLScriptElement::ForAttributeValue() const {
-  return getAttribute(kForAttr).GetString();
+  return getAttribute(html_names::kForAttr).GetString();
 }
 
 String HTMLScriptElement::EventAttributeValue() const {
-  return getAttribute(kEventAttr).GetString();
+  return getAttribute(html_names::kEventAttr).GetString();
 }
 
 String HTMLScriptElement::CrossOriginAttributeValue() const {
-  return getAttribute(kCrossoriginAttr);
+  return getAttribute(html_names::kCrossoriginAttr);
 }
 
 String HTMLScriptElement::IntegrityAttributeValue() const {
-  return getAttribute(kIntegrityAttr);
+  return getAttribute(html_names::kIntegrityAttr);
 }
 
 String HTMLScriptElement::ReferrerPolicyAttributeValue() const {
-  return getAttribute(kReferrerpolicyAttr);
+  return getAttribute(html_names::kReferrerpolicyAttr);
 }
 
 String HTMLScriptElement::ImportanceAttributeValue() const {
-  return getAttribute(kImportanceAttr);
+  return getAttribute(html_names::kImportanceAttr);
 }
 
 String HTMLScriptElement::TextFromChildren() {
@@ -207,15 +206,15 @@
 }
 
 bool HTMLScriptElement::AsyncAttributeValue() const {
-  return FastHasAttribute(kAsyncAttr);
+  return FastHasAttribute(html_names::kAsyncAttr);
 }
 
 bool HTMLScriptElement::DeferAttributeValue() const {
-  return FastHasAttribute(kDeferAttr);
+  return FastHasAttribute(html_names::kDeferAttr);
 }
 
 bool HTMLScriptElement::HasSourceAttribute() const {
-  return FastHasAttribute(kSrcAttr);
+  return FastHasAttribute(html_names::kSrcAttr);
 }
 
 bool HTMLScriptElement::IsConnected() const {
diff --git a/third_party/blink/renderer/core/html/html_slot_element.cc b/third_party/blink/renderer/core/html/html_slot_element.cc
index e302289..cc364ad 100644
--- a/third_party/blink/renderer/core/html/html_slot_element.cc
+++ b/third_party/blink/renderer/core/html/html_slot_element.cc
@@ -51,8 +51,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 namespace {
 constexpr size_t kLCSTableSizeLimit = 16;
 }
@@ -60,19 +58,19 @@
 HTMLSlotElement* HTMLSlotElement::CreateUserAgentDefaultSlot(
     Document& document) {
   HTMLSlotElement* slot = MakeGarbageCollected<HTMLSlotElement>(document);
-  slot->setAttribute(kNameAttr, UserAgentDefaultSlotName());
+  slot->setAttribute(html_names::kNameAttr, UserAgentDefaultSlotName());
   return slot;
 }
 
 HTMLSlotElement* HTMLSlotElement::CreateUserAgentCustomAssignSlot(
     Document& document) {
   HTMLSlotElement* slot = MakeGarbageCollected<HTMLSlotElement>(document);
-  slot->setAttribute(kNameAttr, UserAgentCustomAssignSlotName());
+  slot->setAttribute(html_names::kNameAttr, UserAgentCustomAssignSlotName());
   return slot;
 }
 
 HTMLSlotElement::HTMLSlotElement(Document& document)
-    : HTMLElement(kSlotTag, document) {
+    : HTMLElement(html_names::kSlotTag, document) {
   UseCounter::Count(document, WebFeature::kHTMLSlotElement);
   if (!RuntimeEnabledFeatures::FlatTreeStyleRecalcEnabled())
     SetHasCustomStyleCallbacks();
@@ -248,7 +246,7 @@
 }
 
 AtomicString HTMLSlotElement::GetName() const {
-  return NormalizeSlotName(FastGetAttribute(kNameAttr));
+  return NormalizeSlotName(FastGetAttribute(html_names::kNameAttr));
 }
 
 void HTMLSlotElement::AttachLayoutTree(AttachContext& context) {
@@ -295,7 +293,7 @@
 
 void HTMLSlotElement::AttributeChanged(
     const AttributeModificationParams& params) {
-  if (params.name == kNameAttr) {
+  if (params.name == html_names::kNameAttr) {
     if (ShadowRoot* root = ContainingShadowRoot()) {
       if (root->IsV1() && params.old_value != params.new_value) {
         root->GetSlotAssignment().DidRenameSlot(
diff --git a/third_party/blink/renderer/core/html/html_source_element.cc b/third_party/blink/renderer/core/html/html_source_element.cc
index a8739e5..eb15428 100644
--- a/third_party/blink/renderer/core/html/html_source_element.cc
+++ b/third_party/blink/renderer/core/html/html_source_element.cc
@@ -40,8 +40,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 class HTMLSourceElement::Listener final : public MediaQueryListListener {
  public:
   explicit Listener(HTMLSourceElement* element) : element_(element) {}
@@ -61,7 +59,7 @@
 };
 
 HTMLSourceElement::HTMLSourceElement(Document& document)
-    : HTMLElement(kSourceTag, document),
+    : HTMLElement(html_names::kSourceTag, document),
       listener_(MakeGarbageCollected<Listener>(this)) {
   DVLOG(SOURCE_LOG_LEVEL) << "HTMLSourceElement - " << (void*)this;
 }
@@ -82,7 +80,7 @@
 }
 
 void HTMLSourceElement::DidMoveToNewDocument(Document& old_document) {
-  CreateMediaQueryList(FastGetAttribute(kMediaAttr));
+  CreateMediaQueryList(FastGetAttribute(html_names::kMediaAttr));
   HTMLElement::DidMoveToNewDocument(old_document);
 }
 
@@ -128,11 +126,11 @@
 }
 
 const AtomicString& HTMLSourceElement::type() const {
-  return getAttribute(kTypeAttr);
+  return getAttribute(html_names::kTypeAttr);
 }
 
 void HTMLSourceElement::setType(const AtomicString& type) {
-  setAttribute(kTypeAttr, type);
+  setAttribute(html_names::kTypeAttr, type);
 }
 
 void HTMLSourceElement::ScheduleErrorEvent() {
@@ -162,7 +160,7 @@
 }
 
 bool HTMLSourceElement::IsURLAttribute(const Attribute& attribute) const {
-  return attribute.GetName() == kSrcAttr ||
+  return attribute.GetName() == html_names::kSrcAttr ||
          HTMLElement::IsURLAttribute(attribute);
 }
 
@@ -170,10 +168,10 @@
     const AttributeModificationParams& params) {
   HTMLElement::ParseAttribute(params);
   const QualifiedName& name = params.name;
-  if (name == kMediaAttr)
+  if (name == html_names::kMediaAttr)
     CreateMediaQueryList(params.new_value);
-  if (name == kSrcsetAttr || name == kSizesAttr || name == kMediaAttr ||
-      name == kTypeAttr) {
+  if (name == html_names::kSrcsetAttr || name == html_names::kSizesAttr ||
+      name == html_names::kMediaAttr || name == html_names::kTypeAttr) {
     if (auto* picture = DynamicTo<HTMLPictureElement>(parentElement()))
       picture->SourceOrMediaChanged();
   }
diff --git a/third_party/blink/renderer/core/html/html_span_element.cc b/third_party/blink/renderer/core/html/html_span_element.cc
index bb37b49..6d6a7534 100644
--- a/third_party/blink/renderer/core/html/html_span_element.cc
+++ b/third_party/blink/renderer/core/html/html_span_element.cc
@@ -29,9 +29,7 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLSpanElement::HTMLSpanElement(Document& document)
-    : HTMLElement(kSpanTag, document) {}
+    : HTMLElement(html_names::kSpanTag, document) {}
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/html_style_element.cc b/third_party/blink/renderer/core/html/html_style_element.cc
index 7d060f23f..e57b102 100644
--- a/third_party/blink/renderer/core/html/html_style_element.cc
+++ b/third_party/blink/renderer/core/html/html_style_element.cc
@@ -34,11 +34,9 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLStyleElement::HTMLStyleElement(Document& document,
                                    const CreateElementFlags flags)
-    : HTMLElement(kStyleTag, document),
+    : HTMLElement(html_names::kStyleTag, document),
       StyleElement(&document, flags.IsCreatedByParser()),
       fired_load_(false),
       loaded_sheet_(false) {}
@@ -47,13 +45,13 @@
 
 void HTMLStyleElement::ParseAttribute(
     const AttributeModificationParams& params) {
-  if (params.name == kTitleAttr && sheet_ && IsInDocumentTree()) {
+  if (params.name == html_names::kTitleAttr && sheet_ && IsInDocumentTree()) {
     sheet_->SetTitle(params.new_value);
-  } else if (params.name == kMediaAttr && isConnected() &&
+  } else if (params.name == html_names::kMediaAttr && isConnected() &&
              GetDocument().IsActive() && sheet_) {
     sheet_->SetMediaQueries(MediaQuerySet::Create(params.new_value));
     GetDocument().GetStyleEngine().MediaQueriesChangedInScope(GetTreeScope());
-  } else if (params.name == kTypeAttr) {
+  } else if (params.name == html_names::kTypeAttr) {
     HTMLElement::ParseAttribute(params);
     StyleElement::ChildrenChanged(*this);
   } else {
@@ -97,11 +95,11 @@
 }
 
 const AtomicString& HTMLStyleElement::media() const {
-  return getAttribute(kMediaAttr);
+  return getAttribute(html_names::kMediaAttr);
 }
 
 const AtomicString& HTMLStyleElement::type() const {
-  return getAttribute(kTypeAttr);
+  return getAttribute(html_names::kTypeAttr);
 }
 
 void HTMLStyleElement::DispatchPendingEvent(
diff --git a/third_party/blink/renderer/core/html/html_summary_element.cc b/third_party/blink/renderer/core/html/html_summary_element.cc
index b7657c56..e1bfdd6 100644
--- a/third_party/blink/renderer/core/html/html_summary_element.cc
+++ b/third_party/blink/renderer/core/html/html_summary_element.cc
@@ -36,10 +36,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLSummaryElement::HTMLSummaryElement(Document& document)
-    : HTMLElement(kSummaryTag, document) {
+    : HTMLElement(html_names::kSummaryTag, document) {
   SetHasCustomStyleCallbacks();
   EnsureUserAgentShadowRoot();
 }
diff --git a/third_party/blink/renderer/core/html/html_table_caption_element.cc b/third_party/blink/renderer/core/html/html_table_caption_element.cc
index 2cb6b8b..768b2fa 100644
--- a/third_party/blink/renderer/core/html/html_table_caption_element.cc
+++ b/third_party/blink/renderer/core/html/html_table_caption_element.cc
@@ -29,16 +29,14 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLTableCaptionElement::HTMLTableCaptionElement(Document& document)
-    : HTMLElement(kCaptionTag, document) {}
+    : HTMLElement(html_names::kCaptionTag, document) {}
 
 void HTMLTableCaptionElement::CollectStyleForPresentationAttribute(
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kAlignAttr) {
+  if (name == html_names::kAlignAttr) {
     if (!value.IsEmpty()) {
       AddPropertyToPresentationAttributeStyle(
           style, CSSPropertyID::kCaptionSide, value);
diff --git a/third_party/blink/renderer/core/html/html_table_cell_element.cc b/third_party/blink/renderer/core/html/html_table_cell_element.cc
index 9ad7cbc..dcc3341 100644
--- a/third_party/blink/renderer/core/html/html_table_cell_element.cc
+++ b/third_party/blink/renderer/core/html/html_table_cell_element.cc
@@ -38,14 +38,13 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLTableCellElement::HTMLTableCellElement(const QualifiedName& tag_name,
                                            Document& document)
     : HTMLTablePartElement(tag_name, document) {}
 
 unsigned HTMLTableCellElement::colSpan() const {
-  const AtomicString& col_span_value = FastGetAttribute(kColspanAttr);
+  const AtomicString& col_span_value =
+      FastGetAttribute(html_names::kColspanAttr);
   unsigned value = 0;
   if (!ParseHTMLClampedNonNegativeInteger(col_span_value, kMinColSpan,
                                           kMaxColSpan, value))
@@ -63,7 +62,8 @@
 }
 
 unsigned HTMLTableCellElement::rowSpan() const {
-  const AtomicString& row_span_value = FastGetAttribute(kRowspanAttr);
+  const AtomicString& row_span_value =
+      FastGetAttribute(html_names::kRowspanAttr);
   unsigned value = 0;
   if (!ParseHTMLClampedNonNegativeInteger(row_span_value, kMinRowSpan,
                                           kMaxRowSpan, value))
@@ -87,7 +87,8 @@
 
 bool HTMLTableCellElement::IsPresentationAttribute(
     const QualifiedName& name) const {
-  if (name == kNowrapAttr || name == kWidthAttr || name == kHeightAttr)
+  if (name == html_names::kNowrapAttr || name == html_names::kWidthAttr ||
+      name == html_names::kHeightAttr)
     return true;
   return HTMLTablePartElement::IsPresentationAttribute(name);
 }
@@ -96,16 +97,16 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kNowrapAttr) {
+  if (name == html_names::kNowrapAttr) {
     AddPropertyToPresentationAttributeStyle(style, CSSPropertyID::kWhiteSpace,
                                             CSSValueID::kWebkitNowrap);
-  } else if (name == kWidthAttr) {
+  } else if (name == html_names::kWidthAttr) {
     if (!value.IsEmpty()) {
       int width_int = value.ToInt();
       if (width_int > 0)  // width="0" is ignored for compatibility with WinIE.
         AddHTMLLengthToStyle(style, CSSPropertyID::kWidth, value);
     }
-  } else if (name == kHeightAttr) {
+  } else if (name == html_names::kHeightAttr) {
     if (!value.IsEmpty()) {
       int height_int = value.ToInt();
       if (height_int >
@@ -120,7 +121,8 @@
 
 void HTMLTableCellElement::ParseAttribute(
     const AttributeModificationParams& params) {
-  if (params.name == kRowspanAttr || params.name == kColspanAttr) {
+  if (params.name == html_names::kRowspanAttr ||
+      params.name == html_names::kColspanAttr) {
     if (GetLayoutObject() && GetLayoutObject()->IsTableCell()) {
       ToInterface<LayoutNGTableCellInterface>(GetLayoutObject())
           ->ColSpanOrRowSpanChanged();
@@ -138,39 +140,41 @@
 }
 
 bool HTMLTableCellElement::IsURLAttribute(const Attribute& attribute) const {
-  return attribute.GetName() == kBackgroundAttr ||
+  return attribute.GetName() == html_names::kBackgroundAttr ||
          HTMLTablePartElement::IsURLAttribute(attribute);
 }
 
 bool HTMLTableCellElement::HasLegalLinkAttribute(
     const QualifiedName& name) const {
-  return (HasTagName(kTdTag) && name == kBackgroundAttr) ||
+  return (HasTagName(html_names::kTdTag) &&
+          name == html_names::kBackgroundAttr) ||
          HTMLTablePartElement::HasLegalLinkAttribute(name);
 }
 
 const QualifiedName& HTMLTableCellElement::SubResourceAttributeName() const {
-  return HasTagName(kTdTag) ? kBackgroundAttr
-                            : HTMLTablePartElement::SubResourceAttributeName();
+  return HasTagName(html_names::kTdTag)
+             ? html_names::kBackgroundAttr
+             : HTMLTablePartElement::SubResourceAttributeName();
 }
 
 const AtomicString& HTMLTableCellElement::Abbr() const {
-  return FastGetAttribute(kAbbrAttr);
+  return FastGetAttribute(html_names::kAbbrAttr);
 }
 
 const AtomicString& HTMLTableCellElement::Axis() const {
-  return FastGetAttribute(kAxisAttr);
+  return FastGetAttribute(html_names::kAxisAttr);
 }
 
 void HTMLTableCellElement::setColSpan(unsigned n) {
-  SetUnsignedIntegralAttribute(kColspanAttr, n, kDefaultColSpan);
+  SetUnsignedIntegralAttribute(html_names::kColspanAttr, n, kDefaultColSpan);
 }
 
 const AtomicString& HTMLTableCellElement::Headers() const {
-  return FastGetAttribute(kHeadersAttr);
+  return FastGetAttribute(html_names::kHeadersAttr);
 }
 
 void HTMLTableCellElement::setRowSpan(unsigned n) {
-  SetUnsignedIntegralAttribute(kRowspanAttr, n, kDefaultRowSpan);
+  SetUnsignedIntegralAttribute(html_names::kRowspanAttr, n, kDefaultRowSpan);
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/html_table_col_element.cc b/third_party/blink/renderer/core/html/html_table_col_element.cc
index 055f544..439dbe1 100644
--- a/third_party/blink/renderer/core/html/html_table_col_element.cc
+++ b/third_party/blink/renderer/core/html/html_table_col_element.cc
@@ -35,15 +35,13 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLTableColElement::HTMLTableColElement(const QualifiedName& tag_name,
                                          Document& document)
     : HTMLTablePartElement(tag_name, document), span_(kDefaultColSpan) {}
 
 bool HTMLTableColElement::IsPresentationAttribute(
     const QualifiedName& name) const {
-  if (name == kWidthAttr)
+  if (name == html_names::kWidthAttr)
     return true;
   return HTMLTablePartElement::IsPresentationAttribute(name);
 }
@@ -52,7 +50,7 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kWidthAttr)
+  if (name == html_names::kWidthAttr)
     AddHTMLLengthToStyle(style, CSSPropertyID::kWidth, value);
   else
     HTMLTablePartElement::CollectStyleForPresentationAttribute(name, value,
@@ -61,7 +59,7 @@
 
 void HTMLTableColElement::ParseAttribute(
     const AttributeModificationParams& params) {
-  if (params.name == kSpanAttr) {
+  if (params.name == html_names::kSpanAttr) {
     unsigned new_span = 0;
     if (!ParseHTMLClampedNonNegativeInteger(params.new_value, kMinColSpan,
                                             kMaxColSpan, new_span)) {
@@ -70,7 +68,7 @@
     span_ = new_span;
     if (GetLayoutObject() && GetLayoutObject()->IsLayoutTableCol())
       GetLayoutObject()->UpdateFromElement();
-  } else if (params.name == kWidthAttr) {
+  } else if (params.name == html_names::kWidthAttr) {
     if (!params.new_value.IsEmpty()) {
       if (GetLayoutObject() && GetLayoutObject()->IsLayoutTableCol()) {
         LayoutTableCol* col = ToLayoutTableCol(GetLayoutObject());
@@ -88,7 +86,7 @@
 
 const CSSPropertyValueSet*
 HTMLTableColElement::AdditionalPresentationAttributeStyle() {
-  if (!HasTagName(kColgroupTag))
+  if (!HasTagName(html_names::kColgroupTag))
     return nullptr;
   if (HTMLTableElement* table = FindParentTable())
     return table->AdditionalGroupStyle(false);
@@ -96,11 +94,11 @@
 }
 
 void HTMLTableColElement::setSpan(unsigned n) {
-  SetUnsignedIntegralAttribute(kSpanAttr, n, kDefaultColSpan);
+  SetUnsignedIntegralAttribute(html_names::kSpanAttr, n, kDefaultColSpan);
 }
 
 const AtomicString& HTMLTableColElement::Width() const {
-  return getAttribute(kWidthAttr);
+  return getAttribute(html_names::kWidthAttr);
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/html_table_element.cc b/third_party/blink/renderer/core/html/html_table_element.cc
index 5ba97a2..9948367 100644
--- a/third_party/blink/renderer/core/html/html_table_element.cc
+++ b/third_party/blink/renderer/core/html/html_table_element.cc
@@ -52,10 +52,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLTableElement::HTMLTableElement(Document& document)
-    : HTMLElement(kTableTag, document),
+    : HTMLElement(html_names::kTableTag, document),
       border_attr_(false),
       border_color_attr_(false),
       frame_attr_(false),
@@ -81,13 +79,13 @@
 }
 
 HTMLTableSectionElement* HTMLTableElement::tHead() const {
-  return ToHTMLTableSectionElement(
-      Traversal<HTMLElement>::FirstChild(*this, HasHTMLTagName(kTheadTag)));
+  return ToHTMLTableSectionElement(Traversal<HTMLElement>::FirstChild(
+      *this, HasHTMLTagName(html_names::kTheadTag)));
 }
 
 void HTMLTableElement::setTHead(HTMLTableSectionElement* new_head,
                                 ExceptionState& exception_state) {
-  if (new_head && !new_head->HasTagName(kTheadTag)) {
+  if (new_head && !new_head->HasTagName(html_names::kTheadTag)) {
     exception_state.ThrowDOMException(DOMExceptionCode::kHierarchyRequestError,
                                       "Not a thead element.");
     return;
@@ -100,7 +98,8 @@
   HTMLElement* child;
   for (child = Traversal<HTMLElement>::FirstChild(*this); child;
        child = Traversal<HTMLElement>::NextSibling(*child)) {
-    if (!child->HasTagName(kCaptionTag) && !child->HasTagName(kColgroupTag))
+    if (!child->HasTagName(html_names::kCaptionTag) &&
+        !child->HasTagName(html_names::kColgroupTag))
       break;
   }
 
@@ -108,13 +107,13 @@
 }
 
 HTMLTableSectionElement* HTMLTableElement::tFoot() const {
-  return ToHTMLTableSectionElement(
-      Traversal<HTMLElement>::FirstChild(*this, HasHTMLTagName(kTfootTag)));
+  return ToHTMLTableSectionElement(Traversal<HTMLElement>::FirstChild(
+      *this, HasHTMLTagName(html_names::kTfootTag)));
 }
 
 void HTMLTableElement::setTFoot(HTMLTableSectionElement* new_foot,
                                 ExceptionState& exception_state) {
-  if (new_foot && !new_foot->HasTagName(kTfootTag)) {
+  if (new_foot && !new_foot->HasTagName(html_names::kTfootTag)) {
     exception_state.ThrowDOMException(DOMExceptionCode::kHierarchyRequestError,
                                       "Not a tfoot element.");
     return;
@@ -129,8 +128,8 @@
 HTMLTableSectionElement* HTMLTableElement::createTHead() {
   if (HTMLTableSectionElement* existing_head = tHead())
     return existing_head;
-  auto* head =
-      MakeGarbageCollected<HTMLTableSectionElement>(kTheadTag, GetDocument());
+  auto* head = MakeGarbageCollected<HTMLTableSectionElement>(
+      html_names::kTheadTag, GetDocument());
   setTHead(head, IGNORE_EXCEPTION_FOR_TESTING);
   return head;
 }
@@ -142,8 +141,8 @@
 HTMLTableSectionElement* HTMLTableElement::createTFoot() {
   if (HTMLTableSectionElement* existing_foot = tFoot())
     return existing_foot;
-  auto* foot =
-      MakeGarbageCollected<HTMLTableSectionElement>(kTfootTag, GetDocument());
+  auto* foot = MakeGarbageCollected<HTMLTableSectionElement>(
+      html_names::kTfootTag, GetDocument());
   setTFoot(foot, IGNORE_EXCEPTION_FOR_TESTING);
   return foot;
 }
@@ -153,8 +152,8 @@
 }
 
 HTMLTableSectionElement* HTMLTableElement::createTBody() {
-  auto* body =
-      MakeGarbageCollected<HTMLTableSectionElement>(kTbodyTag, GetDocument());
+  auto* body = MakeGarbageCollected<HTMLTableSectionElement>(
+      html_names::kTbodyTag, GetDocument());
   Node* reference_element = LastBody() ? LastBody()->nextSibling() : nullptr;
 
   InsertBefore(body, reference_element);
@@ -174,8 +173,8 @@
 }
 
 HTMLTableSectionElement* HTMLTableElement::LastBody() const {
-  return ToHTMLTableSectionElement(
-      Traversal<HTMLElement>::LastChild(*this, HasHTMLTagName(kTbodyTag)));
+  return ToHTMLTableSectionElement(Traversal<HTMLElement>::LastChild(
+      *this, HasHTMLTagName(html_names::kTbodyTag)));
 }
 
 HTMLTableRowElement* HTMLTableElement::insertRow(
@@ -217,7 +216,7 @@
     parent = LastBody();
     if (!parent) {
       auto* new_body = MakeGarbageCollected<HTMLTableSectionElement>(
-          kTbodyTag, GetDocument());
+          html_names::kTbodyTag, GetDocument());
       auto* new_row = MakeGarbageCollected<HTMLTableRowElement>(GetDocument());
       new_body->AppendChild(new_row, exception_state);
       AppendChild(new_body, exception_state);
@@ -267,7 +266,7 @@
   while (element) {
     element->SetNeedsStyleRecalc(
         kLocalStyleChange,
-        StyleChangeReasonForTracing::FromAttribute(kRulesAttr));
+        StyleChangeReasonForTracing::FromAttribute(html_names::kRulesAttr));
     if (IsHTMLTableCellElement(*element))
       element = ElementTraversal::NextSkippingChildren(*element, this);
     else
@@ -309,20 +308,20 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kWidthAttr) {
+  if (name == html_names::kWidthAttr) {
     AddHTMLLengthToStyle(style, CSSPropertyID::kWidth, value);
-  } else if (name == kHeightAttr) {
+  } else if (name == html_names::kHeightAttr) {
     AddHTMLLengthToStyle(style, CSSPropertyID::kHeight, value);
-  } else if (name == kBorderAttr) {
+  } else if (name == html_names::kBorderAttr) {
     AddPropertyToPresentationAttributeStyle(
         style, CSSPropertyID::kBorderWidth, ParseBorderWidthAttribute(value),
         CSSPrimitiveValue::UnitType::kPixels);
-  } else if (name == kBordercolorAttr) {
+  } else if (name == html_names::kBordercolorAttr) {
     if (!value.IsEmpty())
       AddHTMLColorToStyle(style, CSSPropertyID::kBorderColor, value);
-  } else if (name == kBgcolorAttr) {
+  } else if (name == html_names::kBgcolorAttr) {
     AddHTMLColorToStyle(style, CSSPropertyID::kBackgroundColor, value);
-  } else if (name == kBackgroundAttr) {
+  } else if (name == html_names::kBackgroundAttr) {
     String url = StripLeadingAndTrailingHTMLSpaces(value);
     if (!url.IsEmpty()) {
       UseCounter::Count(
@@ -336,17 +335,17 @@
       style->SetProperty(
           CSSPropertyValue(GetCSSPropertyBackgroundImage(), *image_value));
     }
-  } else if (name == kValignAttr) {
+  } else if (name == html_names::kValignAttr) {
     if (!value.IsEmpty()) {
       AddPropertyToPresentationAttributeStyle(
           style, CSSPropertyID::kVerticalAlign, value);
     }
-  } else if (name == kCellspacingAttr) {
+  } else if (name == html_names::kCellspacingAttr) {
     if (!value.IsEmpty()) {
       AddHTMLLengthToStyle(style, CSSPropertyID::kBorderSpacing, value,
                            kDontAllowPercentageValues);
     }
-  } else if (name == kAlignAttr) {
+  } else if (name == html_names::kAlignAttr) {
     if (!value.IsEmpty()) {
       if (DeprecatedEqualIgnoringCase(value, "center")) {
         AddPropertyToPresentationAttributeStyle(
@@ -358,14 +357,14 @@
                                                 value);
       }
     }
-  } else if (name == kRulesAttr) {
+  } else if (name == html_names::kRulesAttr) {
     // The presence of a valid rules attribute causes border collapsing to be
     // enabled.
     if (rules_attr_ != kUnsetRules) {
       AddPropertyToPresentationAttributeStyle(
           style, CSSPropertyID::kBorderCollapse, CSSValueID::kCollapse);
     }
-  } else if (name == kFrameAttr) {
+  } else if (name == html_names::kFrameAttr) {
     bool border_top;
     bool border_right;
     bool border_bottom;
@@ -394,11 +393,13 @@
 
 bool HTMLTableElement::IsPresentationAttribute(
     const QualifiedName& name) const {
-  if (name == kWidthAttr || name == kHeightAttr || name == kBgcolorAttr ||
-      name == kBackgroundAttr || name == kValignAttr || name == kVspaceAttr ||
-      name == kHspaceAttr || name == kAlignAttr || name == kCellspacingAttr ||
-      name == kBorderAttr || name == kBordercolorAttr || name == kFrameAttr ||
-      name == kRulesAttr)
+  if (name == html_names::kWidthAttr || name == html_names::kHeightAttr ||
+      name == html_names::kBgcolorAttr || name == html_names::kBackgroundAttr ||
+      name == html_names::kValignAttr || name == html_names::kVspaceAttr ||
+      name == html_names::kHspaceAttr || name == html_names::kAlignAttr ||
+      name == html_names::kCellspacingAttr || name == html_names::kBorderAttr ||
+      name == html_names::kBordercolorAttr || name == html_names::kFrameAttr ||
+      name == html_names::kRulesAttr)
     return true;
   return HTMLElement::IsPresentationAttribute(name);
 }
@@ -409,12 +410,12 @@
   CellBorders borders_before = GetCellBorders();
   uint16_t old_padding = padding_;
 
-  if (name == kBorderAttr) {
+  if (name == html_names::kBorderAttr) {
     // FIXME: This attribute is a mess.
     border_attr_ = ParseBorderWidthAttribute(params.new_value);
-  } else if (name == kBordercolorAttr) {
+  } else if (name == html_names::kBordercolorAttr) {
     border_color_attr_ = !params.new_value.IsEmpty();
-  } else if (name == kFrameAttr) {
+  } else if (name == html_names::kFrameAttr) {
     // FIXME: This attribute is a mess.
     bool border_top;
     bool border_right;
@@ -422,7 +423,7 @@
     bool border_left;
     frame_attr_ = GetBordersFromFrameAttributeValue(
         params.new_value, border_top, border_right, border_bottom, border_left);
-  } else if (name == kRulesAttr) {
+  } else if (name == html_names::kRulesAttr) {
     rules_attr_ = kUnsetRules;
     if (DeprecatedEqualIgnoringCase(params.new_value, "none"))
       rules_attr_ = kNoneRules;
@@ -434,7 +435,7 @@
       rules_attr_ = kColsRules;
     else if (DeprecatedEqualIgnoringCase(params.new_value, "all"))
       rules_attr_ = kAllRules;
-  } else if (params.name == kCellpaddingAttr) {
+  } else if (params.name == html_names::kCellpaddingAttr) {
     if (!params.new_value.IsEmpty()) {
       padding_ =
           std::max(0, std::min((int32_t)std::numeric_limits<uint16_t>::max(),
@@ -442,7 +443,7 @@
     } else {
       padding_ = 1;
     }
-  } else if (params.name == kColsAttr) {
+  } else if (params.name == html_names::kColsAttr) {
     // ###
   } else {
     HTMLElement::ParseAttribute(params);
@@ -603,16 +604,17 @@
 }
 
 bool HTMLTableElement::IsURLAttribute(const Attribute& attribute) const {
-  return attribute.GetName() == kBackgroundAttr ||
+  return attribute.GetName() == html_names::kBackgroundAttr ||
          HTMLElement::IsURLAttribute(attribute);
 }
 
 bool HTMLTableElement::HasLegalLinkAttribute(const QualifiedName& name) const {
-  return name == kBackgroundAttr || HTMLElement::HasLegalLinkAttribute(name);
+  return name == html_names::kBackgroundAttr ||
+         HTMLElement::HasLegalLinkAttribute(name);
 }
 
 const QualifiedName& HTMLTableElement::SubResourceAttributeName() const {
-  return kBackgroundAttr;
+  return html_names::kBackgroundAttr;
 }
 
 HTMLTableRowsCollection* HTMLTableElement::rows() {
@@ -624,11 +626,11 @@
 }
 
 const AtomicString& HTMLTableElement::Rules() const {
-  return getAttribute(kRulesAttr);
+  return getAttribute(html_names::kRulesAttr);
 }
 
 const AtomicString& HTMLTableElement::Summary() const {
-  return getAttribute(kSummaryAttr);
+  return getAttribute(html_names::kSummaryAttr);
 }
 
 void HTMLTableElement::Trace(Visitor* visitor) {
diff --git a/third_party/blink/renderer/core/html/html_table_part_element.cc b/third_party/blink/renderer/core/html/html_table_part_element.cc
index a4c6b6b..fa6b910 100644
--- a/third_party/blink/renderer/core/html/html_table_part_element.cc
+++ b/third_party/blink/renderer/core/html/html_table_part_element.cc
@@ -39,12 +39,11 @@
 
 namespace blink {
 
-using namespace html_names;
-
 bool HTMLTablePartElement::IsPresentationAttribute(
     const QualifiedName& name) const {
-  if (name == kBgcolorAttr || name == kBackgroundAttr || name == kValignAttr ||
-      name == kAlignAttr || name == kHeightAttr)
+  if (name == html_names::kBgcolorAttr || name == html_names::kBackgroundAttr ||
+      name == html_names::kValignAttr || name == html_names::kAlignAttr ||
+      name == html_names::kHeightAttr)
     return true;
   return HTMLElement::IsPresentationAttribute(name);
 }
@@ -53,9 +52,9 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kBgcolorAttr) {
+  if (name == html_names::kBgcolorAttr) {
     AddHTMLColorToStyle(style, CSSPropertyID::kBackgroundColor, value);
-  } else if (name == kBackgroundAttr) {
+  } else if (name == html_names::kBackgroundAttr) {
     String url = StripLeadingAndTrailingHTMLSpaces(value);
     if (!url.IsEmpty()) {
       UseCounter::Count(
@@ -69,7 +68,7 @@
       style->SetProperty(
           CSSPropertyValue(GetCSSPropertyBackgroundImage(), *image_value));
     }
-  } else if (name == kValignAttr) {
+  } else if (name == html_names::kValignAttr) {
     if (DeprecatedEqualIgnoringCase(value, "top")) {
       AddPropertyToPresentationAttributeStyle(
           style, CSSPropertyID::kVerticalAlign, CSSValueID::kTop);
@@ -86,7 +85,7 @@
       AddPropertyToPresentationAttributeStyle(
           style, CSSPropertyID::kVerticalAlign, value);
     }
-  } else if (name == kAlignAttr) {
+  } else if (name == html_names::kAlignAttr) {
     if (DeprecatedEqualIgnoringCase(value, "middle") ||
         DeprecatedEqualIgnoringCase(value, "center")) {
       AddPropertyToPresentationAttributeStyle(style, CSSPropertyID::kTextAlign,
@@ -104,7 +103,7 @@
       AddPropertyToPresentationAttributeStyle(style, CSSPropertyID::kTextAlign,
                                               value);
     }
-  } else if (name == kHeightAttr) {
+  } else if (name == html_names::kHeightAttr) {
     if (!value.IsEmpty())
       AddHTMLLengthToStyle(style, CSSPropertyID::kHeight, value);
   } else {
diff --git a/third_party/blink/renderer/core/html/html_table_row_element.cc b/third_party/blink/renderer/core/html/html_table_row_element.cc
index e45dbf3..6160091 100644
--- a/third_party/blink/renderer/core/html/html_table_row_element.cc
+++ b/third_party/blink/renderer/core/html/html_table_row_element.cc
@@ -38,19 +38,17 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLTableRowElement::HTMLTableRowElement(Document& document)
-    : HTMLTablePartElement(kTrTag, document) {}
+    : HTMLTablePartElement(html_names::kTrTag, document) {}
 
 bool HTMLTableRowElement::HasLegalLinkAttribute(
     const QualifiedName& name) const {
-  return name == kBackgroundAttr ||
+  return name == html_names::kBackgroundAttr ||
          HTMLTablePartElement::HasLegalLinkAttribute(name);
 }
 
 const QualifiedName& HTMLTableRowElement::SubResourceAttributeName() const {
-  return kBackgroundAttr;
+  return html_names::kBackgroundAttr;
 }
 
 static int FindIndexInRowCollection(const HTMLCollection& rows,
@@ -101,8 +99,8 @@
     return nullptr;
   }
 
-  auto* cell =
-      MakeGarbageCollected<HTMLTableCellElement>(kTdTag, GetDocument());
+  auto* cell = MakeGarbageCollected<HTMLTableCellElement>(html_names::kTdTag,
+                                                          GetDocument());
   if (num_cells == index || index == -1)
     AppendChild(cell, exception_state);
   else
diff --git a/third_party/blink/renderer/core/html/html_table_rows_collection.cc b/third_party/blink/renderer/core/html/html_table_rows_collection.cc
index 8a72078..1f341263 100644
--- a/third_party/blink/renderer/core/html/html_table_rows_collection.cc
+++ b/third_party/blink/renderer/core/html/html_table_rows_collection.cc
@@ -35,8 +35,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 static inline bool IsInSection(HTMLTableRowElement& row,
                                const HTMLQualifiedName& section_tag) {
   // Because we know that the parent is a table or a section, it's safe to cast
@@ -61,10 +59,10 @@
   HTMLElement* child = nullptr;
   if (!previous)
     child = Traversal<HTMLElement>::FirstChild(table);
-  else if (IsInSection(*previous, kTheadTag))
+  else if (IsInSection(*previous, html_names::kTheadTag))
     child = Traversal<HTMLElement>::NextSibling(*previous->parentNode());
   for (; child; child = Traversal<HTMLElement>::NextSibling(*child)) {
-    if (child->HasTagName(kTheadTag)) {
+    if (child->HasTagName(html_names::kTheadTag)) {
       if (HTMLTableRowElement* row =
               Traversal<HTMLTableRowElement>::FirstChild(*child))
         return row;
@@ -73,16 +71,16 @@
 
   // If still looking at top level and bodies, find the next row in top level or
   // the first in the next body section.
-  if (!previous || IsInSection(*previous, kTheadTag))
+  if (!previous || IsInSection(*previous, html_names::kTheadTag))
     child = Traversal<HTMLElement>::FirstChild(table);
   else if (previous->parentNode() == table)
     child = Traversal<HTMLElement>::NextSibling(*previous);
-  else if (IsInSection(*previous, kTbodyTag))
+  else if (IsInSection(*previous, html_names::kTbodyTag))
     child = Traversal<HTMLElement>::NextSibling(*previous->parentNode());
   for (; child; child = Traversal<HTMLElement>::NextSibling(*child)) {
     if (auto* row = ToHTMLTableRowElementOrNull(child))
       return row;
-    if (child->HasTagName(kTbodyTag)) {
+    if (child->HasTagName(html_names::kTbodyTag)) {
       if (HTMLTableRowElement* row =
               Traversal<HTMLTableRowElement>::FirstChild(*child))
         return row;
@@ -90,12 +88,12 @@
   }
 
   // Find the first row in the next foot section.
-  if (!previous || !IsInSection(*previous, kTfootTag))
+  if (!previous || !IsInSection(*previous, html_names::kTfootTag))
     child = Traversal<HTMLElement>::FirstChild(table);
   else
     child = Traversal<HTMLElement>::NextSibling(*previous->parentNode());
   for (; child; child = Traversal<HTMLElement>::NextSibling(*child)) {
-    if (child->HasTagName(kTfootTag)) {
+    if (child->HasTagName(html_names::kTfootTag)) {
       if (HTMLTableRowElement* row =
               Traversal<HTMLTableRowElement>::FirstChild(*child))
         return row;
@@ -106,10 +104,10 @@
 }
 
 HTMLTableRowElement* HTMLTableRowsCollection::LastRow(HTMLTableElement& table) {
-  for (HTMLElement* tfoot =
-           Traversal<HTMLElement>::LastChild(table, HasHTMLTagName(kTfootTag));
+  for (HTMLElement* tfoot = Traversal<HTMLElement>::LastChild(
+           table, HasHTMLTagName(html_names::kTfootTag));
        tfoot; tfoot = Traversal<HTMLElement>::PreviousSibling(
-                  *tfoot, HasHTMLTagName(kTfootTag))) {
+                  *tfoot, HasHTMLTagName(html_names::kTfootTag))) {
     if (HTMLTableRowElement* last_row =
             Traversal<HTMLTableRowElement>::LastChild(*tfoot))
       return last_row;
@@ -119,17 +117,17 @@
        child = Traversal<HTMLElement>::PreviousSibling(*child)) {
     if (auto* row = ToHTMLTableRowElementOrNull(child))
       return row;
-    if (child->HasTagName(kTbodyTag)) {
+    if (child->HasTagName(html_names::kTbodyTag)) {
       if (HTMLTableRowElement* last_row =
               Traversal<HTMLTableRowElement>::LastChild(*child))
         return last_row;
     }
   }
 
-  for (HTMLElement* thead =
-           Traversal<HTMLElement>::LastChild(table, HasHTMLTagName(kTheadTag));
+  for (HTMLElement* thead = Traversal<HTMLElement>::LastChild(
+           table, HasHTMLTagName(html_names::kTheadTag));
        thead; thead = Traversal<HTMLElement>::PreviousSibling(
-                  *thead, HasHTMLTagName(kTheadTag))) {
+                  *thead, HasHTMLTagName(html_names::kTheadTag))) {
     if (HTMLTableRowElement* last_row =
             Traversal<HTMLTableRowElement>::LastChild(*thead))
       return last_row;
diff --git a/third_party/blink/renderer/core/html/html_template_element.cc b/third_party/blink/renderer/core/html/html_template_element.cc
index 7848160..8787c5d 100644
--- a/third_party/blink/renderer/core/html/html_template_element.cc
+++ b/third_party/blink/renderer/core/html/html_template_element.cc
@@ -38,10 +38,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLTemplateElement::HTMLTemplateElement(Document& document)
-    : HTMLElement(kTemplateTag, document) {
+    : HTMLElement(html_names::kTemplateTag, document) {
   UseCounter::Count(document, WebFeature::kHTMLTemplateElement);
 }
 
diff --git a/third_party/blink/renderer/core/html/html_title_element.cc b/third_party/blink/renderer/core/html/html_title_element.cc
index dd7a8aaa..68b30d3 100644
--- a/third_party/blink/renderer/core/html/html_title_element.cc
+++ b/third_party/blink/renderer/core/html/html_title_element.cc
@@ -32,10 +32,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLTitleElement::HTMLTitleElement(Document& document)
-    : HTMLElement(kTitleTag, document),
+    : HTMLElement(html_names::kTitleTag, document),
       ignore_title_updates_when_children_change_(false) {}
 
 Node::InsertionNotificationRequest HTMLTitleElement::InsertedInto(
diff --git a/third_party/blink/renderer/core/html/html_ulist_element.cc b/third_party/blink/renderer/core/html/html_ulist_element.cc
index 264c1e5..2314fcd 100644
--- a/third_party/blink/renderer/core/html/html_ulist_element.cc
+++ b/third_party/blink/renderer/core/html/html_ulist_element.cc
@@ -28,14 +28,12 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLUListElement::HTMLUListElement(Document& document)
-    : HTMLElement(kUlTag, document) {}
+    : HTMLElement(html_names::kUlTag, document) {}
 
 bool HTMLUListElement::IsPresentationAttribute(
     const QualifiedName& name) const {
-  if (name == kTypeAttr)
+  if (name == html_names::kTypeAttr)
     return true;
   return HTMLElement::IsPresentationAttribute(name);
 }
@@ -44,7 +42,7 @@
     const QualifiedName& name,
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  if (name == kTypeAttr) {
+  if (name == html_names::kTypeAttr) {
     if (DeprecatedEqualIgnoringCase(value, "disc")) {
       AddPropertyToPresentationAttributeStyle(
           style, CSSPropertyID::kListStyleType, CSSValueID::kDisc);
diff --git a/third_party/blink/renderer/core/html/html_view_source_document.cc b/third_party/blink/renderer/core/html/html_view_source_document.cc
index 2f969b8..1cf2992 100644
--- a/third_party/blink/renderer/core/html/html_view_source_document.cc
+++ b/third_party/blink/renderer/core/html/html_view_source_document.cc
@@ -42,8 +42,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLViewSourceDocument::HTMLViewSourceDocument(const DocumentInit& initializer,
                                                const String& mime_type)
     : HTMLDocument(initializer, kViewSourceDocumentClass), type_(mime_type) {
@@ -69,12 +67,13 @@
   // Create a line gutter div that can be used to make sure the gutter extends
   // down the height of the whole document.
   auto* div = MakeGarbageCollected<HTMLDivElement>(*this);
-  div->setAttribute(kClassAttr, "line-gutter-backdrop");
+  div->setAttribute(html_names::kClassAttr, "line-gutter-backdrop");
   body->ParserAppendChild(div);
 
   auto* table = MakeGarbageCollected<HTMLTableElement>(*this);
   body->ParserAppendChild(table);
-  tbody_ = MakeGarbageCollected<HTMLTableSectionElement>(kTbodyTag, *this);
+  tbody_ = MakeGarbageCollected<HTMLTableSectionElement>(html_names::kTbodyTag,
+                                                         *this);
   table->ParserAppendChild(tbody_);
   current_ = tbody_;
   line_number_ = 0;
@@ -146,21 +145,23 @@
     index = AddRange(source, index, iter->NameRange().end - token.StartIndex(),
                      "html-attribute-name");
 
-    if (tag_name == kBaseTag && name == kHrefAttr)
+    if (tag_name == html_names::kBaseTag && name == html_names::kHrefAttr)
       AddBase(value);
 
     index =
         AddRange(source, index, iter->ValueRange().start - token.StartIndex(),
                  g_empty_atom);
 
-    if (name == kSrcsetAttr) {
+    if (name == html_names::kSrcsetAttr) {
       index =
           AddSrcset(source, index, iter->ValueRange().end - token.StartIndex());
     } else {
-      bool is_link = name == kSrcAttr || name == kHrefAttr;
+      bool is_link =
+          name == html_names::kSrcAttr || name == html_names::kHrefAttr;
       index =
           AddRange(source, index, iter->ValueRange().end - token.StartIndex(),
-                   "html-attribute-value", is_link, tag_name == kATag, value);
+                   "html-attribute-value", is_link,
+                   tag_name == html_names::kATag, value);
     }
 
     ++iter;
@@ -188,7 +189,7 @@
   }
 
   auto* span = MakeGarbageCollected<HTMLSpanElement>(*this);
-  span->setAttribute(kClassAttr, class_name);
+  span->setAttribute(html_names::kClassAttr, class_name);
   current_->ParserAppendChild(span);
   return span;
 }
@@ -200,14 +201,15 @@
 
   // Create a cell that will hold the line number (it is generated in the
   // stylesheet using counters).
-  auto* td = MakeGarbageCollected<HTMLTableCellElement>(kTdTag, *this);
-  td->setAttribute(kClassAttr, "line-number");
-  td->SetIntegralAttribute(kValueAttr, ++line_number_);
+  auto* td =
+      MakeGarbageCollected<HTMLTableCellElement>(html_names::kTdTag, *this);
+  td->setAttribute(html_names::kClassAttr, "line-number");
+  td->SetIntegralAttribute(html_names::kValueAttr, ++line_number_);
   trow->ParserAppendChild(td);
 
   // Create a second cell for the line contents
-  td = MakeGarbageCollected<HTMLTableCellElement>(kTdTag, *this);
-  td->setAttribute(kClassAttr, "line-content");
+  td = MakeGarbageCollected<HTMLTableCellElement>(html_names::kTdTag, *this);
+  td->setAttribute(html_names::kClassAttr, "line-content");
   trow->ParserAppendChild(td);
   current_ = td_ = td;
 
@@ -281,7 +283,7 @@
 
 Element* HTMLViewSourceDocument::AddBase(const AtomicString& href) {
   auto* base = MakeGarbageCollected<HTMLBaseElement>(*this);
-  base->setAttribute(kHrefAttr, href);
+  base->setAttribute(html_names::kHrefAttr, href);
   current_->ParserAppendChild(base);
   return base;
 }
@@ -298,13 +300,13 @@
     class_value = "html-attribute-value html-external-link";
   else
     class_value = "html-attribute-value html-resource-link";
-  anchor->setAttribute(kClassAttr, class_value);
-  anchor->setAttribute(kTargetAttr, "_blank");
-  anchor->setAttribute(kHrefAttr, url);
-  anchor->setAttribute(kRelAttr, "noreferrer noopener");
+  anchor->setAttribute(html_names::kClassAttr, class_value);
+  anchor->setAttribute(html_names::kTargetAttr, "_blank");
+  anchor->setAttribute(html_names::kHrefAttr, url);
+  anchor->setAttribute(html_names::kRelAttr, "noreferrer noopener");
   // Disallow JavaScript hrefs. https://crbug.com/808407
   if (anchor->Url().ProtocolIsJavaScript())
-    anchor->setAttribute(kHrefAttr, "about:blank");
+    anchor->setAttribute(html_names::kHrefAttr, "about:blank");
   current_->ParserAppendChild(anchor);
   return anchor;
 }
diff --git a/third_party/blink/renderer/core/html/html_wbr_element.cc b/third_party/blink/renderer/core/html/html_wbr_element.cc
index 224484b..e09ec10 100644
--- a/third_party/blink/renderer/core/html/html_wbr_element.cc
+++ b/third_party/blink/renderer/core/html/html_wbr_element.cc
@@ -35,10 +35,8 @@
 
 namespace blink {
 
-using namespace html_names;
-
 HTMLWBRElement::HTMLWBRElement(Document& document)
-    : HTMLElement(kWbrTag, document) {}
+    : HTMLElement(html_names::kWbrTag, document) {}
 
 LayoutObject* HTMLWBRElement::CreateLayoutObject(const ComputedStyle& style,
                                                  LegacyLayout) {
diff --git a/third_party/blink/renderer/core/html/image_document.cc b/third_party/blink/renderer/core/html/image_document.cc
index 2b580f3..de80c76 100644
--- a/third_party/blink/renderer/core/html/image_document.cc
+++ b/third_party/blink/renderer/core/html/image_document.cc
@@ -60,8 +60,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 class ImageEventListener : public NativeEventListener {
  public:
   ImageEventListener(ImageDocument* document) : doc_(document) {}
@@ -227,20 +225,22 @@
 
   auto* head = MakeGarbageCollected<HTMLHeadElement>(*this);
   auto* meta = MakeGarbageCollected<HTMLMetaElement>(*this);
-  meta->setAttribute(kNameAttr, "viewport");
-  meta->setAttribute(kContentAttr, "width=device-width, minimum-scale=0.1");
+  meta->setAttribute(html_names::kNameAttr, "viewport");
+  meta->setAttribute(html_names::kContentAttr,
+                     "width=device-width, minimum-scale=0.1");
   head->AppendChild(meta);
 
   auto* body = MakeGarbageCollected<HTMLBodyElement>(*this);
 
   if (ShouldShrinkToFit()) {
     // Display the image prominently centered in the frame.
-    body->setAttribute(kStyleAttr, "margin: 0px; background: #0e0e0e;");
+    body->setAttribute(html_names::kStyleAttr,
+                       "margin: 0px; background: #0e0e0e;");
 
     // See w3c example on how to center an element:
     // https://www.w3.org/Style/Examples/007/center.en.html
     div_element_ = MakeGarbageCollected<HTMLDivElement>(*this);
-    div_element_->setAttribute(kStyleAttr,
+    div_element_->setAttribute(html_names::kStyleAttr,
                                "display: flex;"
                                "flex-direction: column;"
                                "align-items: flex-start;"
@@ -257,7 +257,7 @@
     ShadowRoot& shadow_root = body->EnsureUserAgentShadowRoot();
     shadow_root.AppendChild(div_element_);
   } else {
-    body->setAttribute(kStyleAttr, "margin: 0px;");
+    body->setAttribute(html_names::kStyleAttr, "margin: 0px;");
   }
 
   WillInsertBody();
@@ -265,7 +265,8 @@
   image_element_ = MakeGarbageCollected<HTMLImageElement>(*this);
   UpdateImageStyle();
   image_element_->SetLoadingImageDocument();
-  image_element_->setAttribute(kSrcAttr, AtomicString(Url().GetString()));
+  image_element_->setAttribute(html_names::kSrcAttr,
+                               AtomicString(Url().GetString()));
   body->AppendChild(image_element_.Get());
   if (Loader() && image_element_->CachedImageResourceForImageDocument()) {
     image_element_->CachedImageResourceForImageDocument()->ResponseReceived(
@@ -412,7 +413,8 @@
     }
   }
 
-  image_element_->setAttribute(kStyleAttr, image_style.ToAtomicString());
+  image_element_->setAttribute(html_names::kStyleAttr,
+                               image_style.ToAtomicString());
 }
 
 void ImageDocument::ImageUpdated() {
diff --git a/third_party/blink/renderer/core/html/link_style.cc b/third_party/blink/renderer/core/html/link_style.cc
index b802bd6..3e4c5c71 100644
--- a/third_party/blink/renderer/core/html/link_style.cc
+++ b/third_party/blink/renderer/core/html/link_style.cc
@@ -29,8 +29,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 static bool StyleSheetTypeIsSupported(const String& type) {
   String trimmed_type = ContentType(type).GetType();
   return trimmed_type.IsEmpty() ||
@@ -70,7 +68,7 @@
   // See the comment in pending_script.cc about why this check is necessary
   // here, instead of in the resource fetcher. https://crbug.com/500701.
   if ((!cached_style_sheet->ErrorOccurred() &&
-       !owner_->FastGetAttribute(kIntegrityAttr).IsEmpty() &&
+       !owner_->FastGetAttribute(html_names::kIntegrityAttr).IsEmpty() &&
        !cached_style_sheet->IntegrityMetadata().IsEmpty()) ||
       resource->IsLinkPreload()) {
     ResourceIntegrityDisposition disposition =
@@ -301,14 +299,15 @@
   DCHECK(owner_->ShouldProcessStyle());
   const LinkLoadParameters params(
       owner_->RelAttribute(),
-      GetCrossOriginAttributeValue(owner_->FastGetAttribute(kCrossoriginAttr)),
+      GetCrossOriginAttributeValue(
+          owner_->FastGetAttribute(html_names::kCrossoriginAttr)),
       owner_->TypeValue().DeprecatedLower(),
       owner_->AsValue().DeprecatedLower(), owner_->Media().DeprecatedLower(),
       owner_->nonce(), owner_->IntegrityValue(),
       owner_->ImportanceValue().LowerASCII(), owner_->GetReferrerPolicy(),
-      owner_->GetNonEmptyURLAttribute(kHrefAttr),
-      owner_->FastGetAttribute(kImagesrcsetAttr),
-      owner_->FastGetAttribute(kImagesizesAttr));
+      owner_->GetNonEmptyURLAttribute(html_names::kHrefAttr),
+      owner_->FastGetAttribute(html_names::kImagesrcsetAttr),
+      owner_->FastGetAttribute(html_names::kImagesizesAttr));
 
   WTF::TextEncoding charset = GetCharset();
 
@@ -348,7 +347,7 @@
   if (title.IsEmpty() || !IsUnset() || owner_->IsAlternate())
     return;
 
-  const KURL& href = owner_->GetNonEmptyURLAttribute(kHrefAttr);
+  const KURL& href = owner_->GetNonEmptyURLAttribute(html_names::kHrefAttr);
   if (href.IsValid() && !href.IsEmpty())
     GetDocument().GetStyleEngine().SetPreferredStylesheetSetNameIfNotSet(title);
 }
diff --git a/third_party/blink/renderer/core/html/plugin_document.cc b/third_party/blink/renderer/core/html/plugin_document.cc
index 8762ec5..8d4a499 100644
--- a/third_party/blink/renderer/core/html/plugin_document.cc
+++ b/third_party/blink/renderer/core/html/plugin_document.cc
@@ -49,8 +49,6 @@
 
 namespace blink {
 
-using namespace html_names;
-
 // FIXME: Share more code with MediaDocumentParser.
 class PluginDocumentParser : public RawDataDocumentParser {
  public:
@@ -107,7 +105,7 @@
     return;  // runScriptsAtDocumentElementAvailable can detach the frame.
 
   auto* body = MakeGarbageCollected<HTMLBodyElement>(*GetDocument());
-  body->setAttribute(kStyleAttr,
+  body->setAttribute(html_names::kStyleAttr,
                      "height: 100%; width: 100%; overflow: hidden; margin: 0");
   body->SetInlineStyleProperty(
       CSSPropertyID::kBackgroundColor,
@@ -120,13 +118,14 @@
   }
 
   embed_element_ = MakeGarbageCollected<HTMLEmbedElement>(*GetDocument());
-  embed_element_->setAttribute(kWidthAttr, "100%");
-  embed_element_->setAttribute(kHeightAttr, "100%");
-  embed_element_->setAttribute(kNameAttr, "plugin");
-  embed_element_->setAttribute(kIdAttr, "plugin");
-  embed_element_->setAttribute(kSrcAttr,
+  embed_element_->setAttribute(html_names::kWidthAttr, "100%");
+  embed_element_->setAttribute(html_names::kHeightAttr, "100%");
+  embed_element_->setAttribute(html_names::kNameAttr, "plugin");
+  embed_element_->setAttribute(html_names::kIdAttr, "plugin");
+  embed_element_->setAttribute(html_names::kSrcAttr,
                                AtomicString(GetDocument()->Url().GetString()));
-  embed_element_->setAttribute(kTypeAttr, GetDocument()->Loader()->MimeType());
+  embed_element_->setAttribute(html_names::kTypeAttr,
+                               GetDocument()->Loader()->MimeType());
   body->AppendChild(embed_element_);
   if (IsStopped()) {
     // Possibly detached by a mutation event listener installed in
diff --git a/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.cc b/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.cc
index 9269d3b..303c0fb4 100644
--- a/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.cc
+++ b/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.cc
@@ -297,13 +297,13 @@
 }
 
 void ImageBitmapFactories::ImageBitmapLoader::DidFinishLoading() {
-  auto data_handle = loader_->TakeDataHandle();
+  auto contents = loader_->TakeContents();
   loader_.reset();
-  if (!data_handle) {
+  if (!contents.IsValid()) {
     RejectPromise(kAllocationFailureImageBitmapRejectionReason);
     return;
   }
-  ScheduleAsyncImageBitmapDecoding(std::move(data_handle));
+  ScheduleAsyncImageBitmapDecoding(std::move(contents));
 }
 
 void ImageBitmapFactories::ImageBitmapLoader::DidFail(FileErrorCode) {
@@ -313,14 +313,14 @@
 namespace {
 void DecodeImageOnDecoderThread(
     scoped_refptr<base::SingleThreadTaskRunner> task_runner,
-    WTF::ArrayBufferContents::DataHandle data_handle,
+    WTF::ArrayBufferContents contents,
     ImageDecoder::AlphaOption alpha_option,
     ColorBehavior color_behavior,
     WTF::CrossThreadOnceFunction<void(sk_sp<SkImage>)> result_callback) {
   const bool data_complete = true;
   std::unique_ptr<ImageDecoder> decoder = ImageDecoder::Create(
-      SegmentReader::CreateFromSkData(SkData::MakeWithoutCopy(
-          data_handle.Data(), data_handle.DataLength())),
+      SegmentReader::CreateFromSkData(
+          SkData::MakeWithoutCopy(contents.Data(), contents.DataLength())),
       data_complete, alpha_option, ImageDecoder::kDefaultBitDepth,
       color_behavior);
   sk_sp<SkImage> frame;
@@ -334,7 +334,7 @@
 }  // namespace
 
 void ImageBitmapFactories::ImageBitmapLoader::ScheduleAsyncImageBitmapDecoding(
-    WTF::ArrayBufferContents::DataHandle data_handle) {
+    WTF::ArrayBufferContents contents) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   scoped_refptr<base::SingleThreadTaskRunner> task_runner =
       Thread::Current()->GetTaskRunner();
@@ -349,7 +349,7 @@
       FROM_HERE,
       CrossThreadBindOnce(
           DecodeImageOnDecoderThread, std::move(task_runner),
-          std::move(data_handle), alpha_option, color_behavior,
+          std::move(contents), alpha_option, color_behavior,
           CrossThreadBindOnce(&ImageBitmapFactories::ImageBitmapLoader::
                                   ResolvePromiseOnOriginalThread,
                               WrapCrossThreadWeakPersistent(this))));
diff --git a/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.h b/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.h
index 60bbce8..a8998db 100644
--- a/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.h
+++ b/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.h
@@ -138,7 +138,7 @@
 
     void RejectPromise(ImageBitmapRejectionReason);
 
-    void ScheduleAsyncImageBitmapDecoding(WTF::ArrayBufferContents::DataHandle);
+    void ScheduleAsyncImageBitmapDecoding(WTF::ArrayBufferContents);
     void ResolvePromiseOnOriginalThread(sk_sp<SkImage>);
 
     // ContextLifecycleObserver
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.cc
index 59ca155..ba9c96e 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.cc
@@ -464,7 +464,7 @@
   // TODO(yosin): This isn't correct for mixed Bidi. Fix it. Besides, we
   // should compute and store it during layout.
   // TODO(yosin): We should check direction of each container instead of line
-  // box. See also |NGPhysicalLineBoxFragment::LastLogicalLeaf()|.
+  // box.
   if (IsLtr(CurrentStyle().Direction())) {
     while (TryToMoveToFirstChild())
       continue;
@@ -485,7 +485,7 @@
   // TODO(yosin): This isn't correct for mixed Bidi. Fix it. Besides, we
   // should compute and store it during layout.
   // TODO(yosin): We should check direction of each container instead of line
-  // box. See also |NGPhysicalLineBoxFragment::LastLogicalLeaf()|.
+  // box.
   if (IsLtr(CurrentStyle().Direction())) {
     while (TryToMoveToLastChild())
       continue;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.cc
index 243d206..d26c13dd 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.cc
@@ -130,48 +130,6 @@
   return overflow;
 }
 
-const NGPhysicalFragment* NGPhysicalLineBoxFragment::FirstLogicalLeaf() const {
-  if (Children().empty())
-    return nullptr;
-  // TODO(xiaochengh): This isn't correct for mixed Bidi. Fix it. Besides, we
-  // should compute and store it during layout.
-  const TextDirection direction = Style().Direction();
-  const NGPhysicalFragment* runner = this;
-  while (const auto* runner_as_container =
-             DynamicTo<NGPhysicalContainerFragment>(runner)) {
-    if (runner->IsBlockFormattingContextRoot())
-      break;
-    if (runner_as_container->Children().empty())
-      break;
-    runner = direction == TextDirection::kLtr
-                 ? runner_as_container->Children().front().get()
-                 : runner_as_container->Children().back().get();
-  }
-  DCHECK_NE(runner, this);
-  return runner;
-}
-
-const NGPhysicalFragment* NGPhysicalLineBoxFragment::LastLogicalLeaf() const {
-  if (Children().empty())
-    return nullptr;
-  // TODO(xiaochengh): This isn't correct for mixed Bidi. Fix it. Besides, we
-  // should compute and store it during layout.
-  const TextDirection direction = Style().Direction();
-  const NGPhysicalFragment* runner = this;
-  while (const auto* runner_as_container =
-             DynamicTo<NGPhysicalContainerFragment>(runner)) {
-    if (runner->IsBlockFormattingContextRoot())
-      break;
-    if (runner_as_container->Children().empty())
-      break;
-    runner = direction == TextDirection::kLtr
-                 ? runner_as_container->Children().back().get()
-                 : runner_as_container->Children().front().get();
-  }
-  DCHECK_NE(runner, this);
-  return runner;
-}
-
 bool NGPhysicalLineBoxFragment::HasSoftWrapToNextLine() const {
   const auto& break_token = To<NGInlineBreakToken>(*BreakToken());
   return !break_token.IsFinished() && !break_token.IsForcedBreak();
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.h b/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.h
index 5fdbd94..df51cf17 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.h
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.h
@@ -64,11 +64,6 @@
                                   const ComputedStyle* container_style,
                                   PhysicalSize container_physical_size) const;
 
-  // Returns the first/last leaf fragment in the line in logical order. Returns
-  // nullptr if the line box is empty.
-  const NGPhysicalFragment* FirstLogicalLeaf() const;
-  const NGPhysicalFragment* LastLogicalLeaf() const;
-
   const LayoutObject* ClosestLeafChildForPoint(const PhysicalOffset&,
                                                bool only_editable_leaves) const;
 
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment_test.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment_test.cc
index 5316762..b52085d 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment_test.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment_test.cc
@@ -92,53 +92,4 @@
   EXPECT_TRUE(lines[1]->HasPropagatedDescendants());
 }
 
-TEST_F(NGPhysicalLineBoxFragmentTest, FirstLastLogicalLeafInSimpleText) {
-  SetBodyInnerHTML(
-      "<div id=root>"
-      "<span>foo</span>"
-      "<span>bar</span>"
-      "</div>");
-  EXPECT_TEXT_FRAGMENT("foo", GetLineBox()->FirstLogicalLeaf());
-  EXPECT_TEXT_FRAGMENT("bar", GetLineBox()->LastLogicalLeaf());
-}
-
-TEST_F(NGPhysicalLineBoxFragmentTest, FirstLastLogicalLeafInRtlText) {
-  SetBodyInnerHTML(
-      "<bdo id=root dir=rtl style='display: block'>"
-      "<span>foo</span>"
-      "<span>bar</span>"
-      "</bdo>");
-  EXPECT_TEXT_FRAGMENT("foo", GetLineBox()->FirstLogicalLeaf());
-  EXPECT_TEXT_FRAGMENT("bar", GetLineBox()->LastLogicalLeaf());
-}
-
-TEST_F(NGPhysicalLineBoxFragmentTest,
-       FirstLastLogicalLeafInTextAsDeepDescendants) {
-  SetBodyInnerHTML(
-      "<style>span {border: 1px solid black}</style>"
-      "<div id=root>"
-      "<span><span>f</span>oo</span>"
-      "<span>ba<span>r</span></span>"
-      "</div>");
-  EXPECT_TEXT_FRAGMENT("f", GetLineBox()->FirstLogicalLeaf());
-  EXPECT_TEXT_FRAGMENT("r", GetLineBox()->LastLogicalLeaf());
-}
-
-TEST_F(NGPhysicalLineBoxFragmentTest, FirstLastLogicalLeafWithInlineBlock) {
-  SetBodyInnerHTML(
-      "<div id=root>"
-      "<span id=foo style='display: inline-block'>foo</span>"
-      "bar"
-      "<span id=baz style='display: inline-block'>baz</span>"
-      "</div>");
-  EXPECT_BOX_FRAGMENT("foo", GetLineBox()->FirstLogicalLeaf());
-  EXPECT_BOX_FRAGMENT("baz", GetLineBox()->LastLogicalLeaf());
-}
-
-TEST_F(NGPhysicalLineBoxFragmentTest, FirstLastLogicalLeafWithImages) {
-  SetBodyInnerHTML("<div id=root><img id=img1>foo<img id=img2></div>");
-  EXPECT_BOX_FRAGMENT("img1", GetLineBox()->FirstLogicalLeaf());
-  EXPECT_BOX_FRAGMENT("img2", GetLineBox()->LastLogicalLeaf());
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/renderer/core/page/page.cc
index ae116d47..37a23f2 100644
--- a/third_party/blink/renderer/core/page/page.cc
+++ b/third_party/blink/renderer/core/page/page.cc
@@ -1019,21 +1019,6 @@
   SettingsChanged(SettingsDelegate::kColorSchemeChange);
 }
 
-static void (*g_internal_settings_prepare_for_leak_detection_callback)() =
-    nullptr;
-
-// static
-void Page::SetInternalSettingsPrepareForLeakDetectionCallback(
-    void (*callback)()) {
-  g_internal_settings_prepare_for_leak_detection_callback = callback;
-}
-
-// static
-void Page::PrepareForLeakDetection() {
-  if (!g_internal_settings_prepare_for_leak_detection_callback)
-    g_internal_settings_prepare_for_leak_detection_callback();
-}
-
 Page::PageClients::PageClients() : chrome_client(nullptr) {}
 
 Page::PageClients::~PageClients() = default;
diff --git a/third_party/blink/renderer/core/page/page.h b/third_party/blink/renderer/core/page/page.h
index 0411455b..f6da631 100644
--- a/third_party/blink/renderer/core/page/page.h
+++ b/third_party/blink/renderer/core/page/page.h
@@ -341,12 +341,6 @@
     return history_navigation_virtual_time_pauser_;
   }
 
-  // See InternalSettings::PrepareForLeakDetection(). The callback is to avoid
-  // dependency from production code to test-only code.
-  static void SetInternalSettingsPrepareForLeakDetectionCallback(
-      void (*callback)());
-  static void PrepareForLeakDetection();
-
  private:
   friend class ScopedPagePauser;
 
diff --git a/third_party/blink/renderer/core/testing/internal_settings.cc b/third_party/blink/renderer/core/testing/internal_settings.cc
index b4d88380..6bd20dd 100644
--- a/third_party/blink/renderer/core/testing/internal_settings.cc
+++ b/third_party/blink/renderer/core/testing/internal_settings.cc
@@ -122,10 +122,7 @@
 InternalSettings::InternalSettings(Page& page)
     : InternalSettingsGenerated(&page),
       Supplement<Page>(page),
-      backup_(&page.GetSettings()) {
-  Page::SetInternalSettingsPrepareForLeakDetectionCallback(
-      &PrepareForLeakDetection);
-}
+      backup_(&page.GetSettings()) {}
 
 void InternalSettings::ResetToConsistentState() {
   backup_.RestoreTo(GetSettings());
@@ -560,10 +557,8 @@
 }
 
 void InternalSettings::PrepareForLeakDetection() {
-  // Internal settings are ScriptWrappable and thus may retain documents
-  // depending on whether the garbage collector(s) are able to find the settings
-  // object through the Page supplement. Prepares for leak detection by
-  // removing all InternalSetting objects from Pages.
+  // Prepares for leak detection by removing all InternalSetting objects from
+  // Pages.
   for (Page* page : Page::OrdinaryPages()) {
     page->RemoveSupplement<InternalSettings>();
   }
diff --git a/third_party/blink/renderer/core/testing/internal_settings.h b/third_party/blink/renderer/core/testing/internal_settings.h
index c87f980..dd572cf 100644
--- a/third_party/blink/renderer/core/testing/internal_settings.h
+++ b/third_party/blink/renderer/core/testing/internal_settings.h
@@ -51,6 +51,8 @@
  public:
   static const char kSupplementName[];
 
+  static void PrepareForLeakDetection();
+
   class Backup {
     DISALLOW_NEW();
 
@@ -145,7 +147,6 @@
   void SetPreloadLogging(bool, ExceptionState&);
 
  private:
-  static void PrepareForLeakDetection();
   Settings* GetSettings() const;
   Page* GetPage() const { return GetSupplementable(); }
 
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc
index 6be853a..9337b5a 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -159,6 +159,7 @@
     {"feed", ax::mojom::Role::kFeed},
     {"figure", ax::mojom::Role::kFigure},
     {"form", ax::mojom::Role::kForm},
+    {"generic", ax::mojom::Role::kGenericContainer},
     // -------------------------------------------------
     // ARIA Graphics module roles:
     // https://rawgit.com/w3c/graphics-aam/master/
@@ -2078,8 +2079,8 @@
     case ax::mojom::Role::kAnnotationRevision:
     case ax::mojom::Role::kAnnotationSuggestion:
       UseCounter::Count(GetDocument(), WebFeature::kARIAAnnotationRoles);
-      if (!RuntimeEnabledFeatures::
-              AccessibilityExposeARIAAnnotationsEnabled()) {
+      if (!RuntimeEnabledFeatures::AccessibilityExposeARIAAnnotationsEnabled(
+              GetDocument())) {
         role = ax::mojom::Role::kGenericContainer;
       }
       break;
diff --git a/third_party/blink/renderer/modules/exported/BUILD.gn b/third_party/blink/renderer/modules/exported/BUILD.gn
index bcd3ab5..77551bb 100644
--- a/third_party/blink/renderer/modules/exported/BUILD.gn
+++ b/third_party/blink/renderer/modules/exported/BUILD.gn
@@ -23,8 +23,6 @@
 }
 
 static_library("test_support") {
-  testonly = true
-
   deps = [
     "//skia",
     "//third_party/blink/renderer/core:testing",
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.cc b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.cc
index de71c6e07..70da8a5 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.cc
@@ -577,6 +577,9 @@
   }
 
   webrtc::AudioProcessing::Config apm_config = audio_processing_->GetConfig();
+  apm_config.pipeline.experimental_multi_channel =
+      base::FeatureList::IsEnabled(features::kWebRtcEnableMultiChannelApm);
+
   base::Optional<double> gain_control_compression_gain_db;
   blink::PopulateApmConfig(&apm_config, properties,
                            audio_processing_platform_config_json,
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index f90fd50..4e48008 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -100,6 +100,7 @@
     },
     {
       name: "AccessibilityExposeARIAAnnotations",
+      origin_trial_feature_name: "AccessibilityExposeARIAAnnotations",
       status: "experimental",
     },
     {
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread.h b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread.h
index 8b7f6d3..6a382c2 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread.h
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread.h
@@ -6,7 +6,6 @@
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_MAIN_THREAD_MAIN_THREAD_H_
 
 #include "base/memory/scoped_refptr.h"
-#include "base/message_loop/message_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
diff --git a/third_party/blink/renderer/platform/scheduler/test/web_fake_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/test/web_fake_thread_scheduler.cc
index 1cc63847..3678e79 100644
--- a/third_party/blink/renderer/platform/scheduler/test/web_fake_thread_scheduler.cc
+++ b/third_party/blink/renderer/platform/scheduler/test/web_fake_thread_scheduler.cc
@@ -4,7 +4,6 @@
 
 #include "third_party/blink/public/platform/scheduler/test/web_fake_thread_scheduler.h"
 
-#include "base/message_loop/message_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
diff --git a/third_party/blink/renderer/platform/scheduler/worker/worker_thread.h b/third_party/blink/renderer/platform/scheduler/worker/worker_thread.h
index 108f1be..993e797 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/worker_thread.h
+++ b/third_party/blink/renderer/platform/scheduler/worker/worker_thread.h
@@ -6,7 +6,6 @@
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_WORKER_WORKER_THREAD_H_
 
 #include "base/callback_forward.h"
-#include "base/message_loop/message_loop.h"
 #include "base/message_loop/message_loop_current.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
diff --git a/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.cc b/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.cc
index 53c28e8..8cd9b21 100644
--- a/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.cc
+++ b/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.cc
@@ -80,6 +80,10 @@
   holder_ = nullptr;
 }
 
+void ArrayBufferContents::Reset() {
+  holder_ = base::MakeRefCounted<DataHolder>();
+}
+
 void ArrayBufferContents::Transfer(ArrayBufferContents& other) {
   DCHECK(!IsShared());
   DCHECK(!other.holder_->Data());
diff --git a/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.h b/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.h
index 6d19799..841e87c 100644
--- a/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.h
+++ b/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.h
@@ -128,6 +128,9 @@
 
   void Detach();
 
+  // Resets the internal memory so that the ArrayBufferContents is empty.
+  void Reset();
+
   void* Data() const {
     DCHECK(!IsShared());
     return DataMaybeShared();
@@ -139,6 +142,7 @@
   void* DataMaybeShared() const { return holder_ ? holder_->Data() : nullptr; }
   size_t DataLength() const { return holder_ ? holder_->DataLength() : 0; }
   bool IsShared() const { return holder_ ? holder_->IsShared() : false; }
+  bool IsValid() const { return holder_->Data(); }
 
   void Transfer(ArrayBufferContents& other);
   void ShareWith(ArrayBufferContents& other);
@@ -185,9 +189,9 @@
 };
 
 template <>
-struct CrossThreadCopier<ArrayBufferContents::DataHandle> {
+struct CrossThreadCopier<ArrayBufferContents> {
   STATIC_ONLY(CrossThreadCopier);
-  using Type = ArrayBufferContents::DataHandle;
+  using Type = ArrayBufferContents;
   static Type Copy(Type handle) {
     return handle;  // This is in fact a move.
   }
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index d2991dbf..40ec7eb9 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -4454,8 +4454,6 @@
 crbug.com/772411 virtual/audio-service/http/tests/media/autoplay-crossorigin.html [ Timeout Failure Pass ]
 crbug.com/777222 http/tests/devtools/inspect-iframe-from-different-domain.js [ Pass Failure Timeout ]
 
-crbug.com/778745 http/tests/inspector-protocol/cachestorage/read-cached-response.js [ Pass Failure ]
-
 # Sheriff failures 2017-10-24
 crbug.com/773122 crbug.com/777813 [ Win ] fast/text/font-ascent-mac.html [ Failure Pass ]
 
@@ -5736,7 +5734,6 @@
 crbug.com/1015187 [ Linux Mac ] virtual/cross-origin-embedder-policy/external/wpt/html/cross-origin-embedder-policy/none.https.html [ Pass Failure ]
 
 # Sheriff 2019-10-18
-crbug.com/1015254 [ Mac ] external/wpt/pointerevents/extension/pointerevent_coalesced_events_attributes.html [ Pass Failure ]
 crbug.com/1015859 [ Linux ] http/tests/devtools/a11y-axe-core/performance/landing-page-a11y-test.js [ Pass Failure ]
 crbug.com/1015975 media/video-currentTime.html [ Pass Failure ]
 crbug.com/1015975 virtual/audio-service/media/video-currentTime.html [ Pass Failure ]
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
index 7440bdf0..c67bfa3 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
@@ -171664,6 +171664,9 @@
    "tools/ci/azure/cleanup_win10.yml": [
     []
    ],
+   "tools/ci/azure/com.apple.Safari.plist": [
+    []
+   ],
    "tools/ci/azure/fyi_hook.yml": [
     []
    ],
@@ -179326,9 +179329,6 @@
    "webxr/OWNERS": [
     []
    ],
-   "webxr/ar-module/idlharness.https.window-expected.txt": [
-    []
-   ],
    "webxr/idlharness.https.window-expected.txt": [
     []
    ],
@@ -361182,7 +361182,7 @@
    "testharness"
   ],
   "css/css-align/distribution-values/space-evenly-001.html": [
-   "74cf543ba9d6a87b5e99fb520e6cecaf09f94146",
+   "fd16f33b5e936d239124443630b2c79fa05e13f1",
    "reftest"
   ],
   "css/css-align/gaps/column-gap-animation-001.html": [
@@ -361434,7 +361434,7 @@
    "support"
   ],
   "css/css-align/reference/ttwf-reftest-alignContent-ref.html": [
-   "a94c1d5e9e85dfe0aec20145b25e55dc5b1a673d",
+   "e020cfc3e45200273f3106126a76efb2694dc0b0",
    "support"
   ],
   "css/css-align/resources/alignment-parsing-utils.js": [
@@ -361506,7 +361506,7 @@
    "testharness"
   ],
   "css/css-align/ttwf-reftest-alignContent.html": [
-   "d5737057284a603673e588a61997cf89d001cd6f",
+   "18c838e90de5135267227d2136abbfa64f4d1dff",
    "visual"
   ],
   "css/css-animations/AnimationEffect-getComputedTiming.tentative.html": [
@@ -382778,11 +382778,11 @@
    "testharness"
   ],
   "css/css-grid/grid-definition/grid-template-columns-fit-content-001-ref.html": [
-   "c4ec1ffb1b223f14ad84c7df788c2097b0bf8059",
+   "36619d1430e2799081e7b544dd7eeedb419d36f7",
    "support"
   ],
   "css/css-grid/grid-definition/grid-template-columns-fit-content-001.html": [
-   "1da3fe5c866e4fb5bd1726e7eda27dcbbdef2f4b",
+   "da31354e79536fc2adb6fa678f3af260baab9d6a",
    "reftest"
   ],
   "css/css-grid/grid-definition/grid-template-columns-rows-resolved-values-001.html": [
@@ -384330,23 +384330,23 @@
    "support"
   ],
   "css/css-images/css-image-fallbacks-and-annotations.html": [
-   "a03d5bee57f33eaf3f00910087e1ea2da627717f",
+   "7c576624cd0f005febcc62027e87bcb8d7cca162",
    "reftest"
   ],
   "css/css-images/css-image-fallbacks-and-annotations002.html": [
-   "043acf25939893ce4623e38fcbf941020f9e4ae0",
+   "ed5578aaf3c3dd9331d2dc51d651a90982561399",
    "reftest"
   ],
   "css/css-images/css-image-fallbacks-and-annotations003.html": [
-   "f992af30b3dae970737e063c1dcb4477e8c79af2",
+   "11f0844bbc898a7134ac60eb72024a647d983845",
    "reftest"
   ],
   "css/css-images/css-image-fallbacks-and-annotations004.html": [
-   "8e3137d1dc928bbe45add4463b5110529e113e2d",
+   "32ebd3edd4b881cc43bc3b15fd914325e4dab3b7",
    "reftest"
   ],
   "css/css-images/css-image-fallbacks-and-annotations005.html": [
-   "8b93c597483f6a4310c030ce2378aee2814f8190",
+   "6d3c7f9bea00677137dafc7da96393c39396ea5f",
    "reftest"
   ],
   "css/css-images/gradient-border-box-ref.html": [
@@ -384402,7 +384402,7 @@
    "support"
   ],
   "css/css-images/gradients-with-transparent.html": [
-   "e4505bc282ec08a0d6ff42dbb9f8999185136cec",
+   "204bc760bd82414851e9447c75d521932141e939",
    "reftest"
   ],
   "css/css-images/idlharness-expected.txt": [
@@ -384414,11 +384414,11 @@
    "testharness"
   ],
   "css/css-images/image-fit-001.xht": [
-   "a3d632551b63ee0be0e47df2ca9da8177ee331a8",
+   "b6c1d5d0a84db855bc2aeb635c63750881be7734",
    "visual"
   ],
   "css/css-images/image-fit-006.xht": [
-   "8b1d10766a3293e2503ff5cb838618f542e186f9",
+   "6947515f7e4634fc3f240ffda91c6f5bdac862ce",
    "visual"
   ],
   "css/css-images/inheritance.html": [
@@ -385762,11 +385762,11 @@
    "reftest"
   ],
   "css/css-lists/list-style-type-armenian-002.xht": [
-   "02e06b707f709870b30e810e4b1a4ec330ada296",
+   "fa7b47d7358de7fdf0dcc467075c90f6d81b796d",
    "visual"
   ],
   "css/css-lists/list-style-type-armenian-003.xht": [
-   "4852e423273efe6ee99a832b141f943e7a3c4bca",
+   "422be2304c891fbd0c4f256bc3b87514d935fc81",
    "visual"
   ],
   "css/css-lists/list-style-type-string-002-ref.html": [
@@ -391466,19 +391466,19 @@
    "testharness"
   ],
   "css/css-pseudo/first-letter-001-ref.html": [
-   "d832a308ef93d85437ea23fccc70447b0c2a339f",
+   "f5af1227aa2e90fe0782c320060c5e448a529420",
    "support"
   ],
   "css/css-pseudo/first-letter-001.html": [
-   "aaa76e048a63c7d7050bdcfdc6fa36dba08f730f",
+   "afe1f9b60391b5fb8ca0b222345b869c899208a1",
    "reftest"
   ],
   "css/css-pseudo/first-letter-002.html": [
-   "6123dfe11e63365315464009235681c8ad4c4298",
+   "02cc92058f8b6da9e9a338abf16ab47e6572b1e4",
    "reftest"
   ],
   "css/css-pseudo/first-letter-003.html": [
-   "b292d50aca4b702ef0c50c895c47777d26849308",
+   "9c6f87a59d224ce709f17292134dcc98ea8e57e9",
    "reftest"
   ],
   "css/css-pseudo/first-letter-004-ref.html": [
@@ -391554,11 +391554,11 @@
    "testharness"
   ],
   "css/css-pseudo/first-letter-width-ref.html": [
-   "4a556189ccef81c03eb2a79a5035ab501416b26b",
+   "8ebb00b9dcc10f43df0efea20991af653f5cb691",
    "support"
   ],
   "css/css-pseudo/first-letter-width.html": [
-   "a912e764ef25a7dabae353af7c39056f67d288a6",
+   "fedf917c62a1c34c054b7484594ced16960c4c17",
    "reftest"
   ],
   "css/css-pseudo/first-line-and-placeholder-ref.html": [
@@ -391894,11 +391894,11 @@
    "support"
   ],
   "css/css-scoping/css-scoping-shadow-assigned-node-with-before-after.html": [
-   "fddb36b6c0d9b4596305bc1fd10c294a17b9c07a",
+   "b926540ae94034ce1acadad02fc3cf4cb7d20580",
    "reftest"
   ],
   "css/css-scoping/css-scoping-shadow-assigned-node-with-rules.html": [
-   "3e6a8dde0977f8af5d60ba9018b96316a4aa816f",
+   "e981eae0557bdf98101c474cd7ae5ffe031d16b3",
    "reftest"
   ],
   "css/css-scoping/css-scoping-shadow-host-functional-rule.html": [
@@ -391910,15 +391910,15 @@
    "reftest"
   ],
   "css/css-scoping/css-scoping-shadow-host-rule.html": [
-   "40233f2edf566b7287171586bc1f80b39d5c5407",
+   "ef70b9017cdf3d8a5ca04b5da57f491d9b8dffb5",
    "reftest"
   ],
   "css/css-scoping/css-scoping-shadow-host-with-before-after.html": [
-   "e343784c2ecbfd721dcf6bddd4ff09551479bf1b",
+   "c32d8a9e87855b1131851c7e423b3da5de71d916",
    "reftest"
   ],
   "css/css-scoping/css-scoping-shadow-invisible-slot.html": [
-   "4e35a3e611ed3f7e25558e6a181171f47ff2d046",
+   "be9f308fc40a9107c708aa15facf8d2c455f288a",
    "reftest"
   ],
   "css/css-scoping/css-scoping-shadow-nested-slot-display-override.html": [
@@ -391926,11 +391926,11 @@
    "reftest"
   ],
   "css/css-scoping/css-scoping-shadow-root-hides-children.html": [
-   "3351847ccdf8892e5d75ec661c0eb23d15793b32",
+   "bc526059dcafa63267a9a4abbcf4e120ea738374",
    "reftest"
   ],
   "css/css-scoping/css-scoping-shadow-slot-display-override.html": [
-   "c930faad0c356ad7482c096d4f4877da3fd0be43",
+   "9338a25be6fe21089f359da72b8fe118ac593bdc",
    "reftest"
   ],
   "css/css-scoping/css-scoping-shadow-slot-fallback.html": [
@@ -391938,31 +391938,31 @@
    "reftest"
   ],
   "css/css-scoping/css-scoping-shadow-slot-style.html": [
-   "dfee90ac5dd49232ae138b03baaeaae35b8a0124",
+   "e3f37c33c848d45133717e79ed333afd52219493",
    "reftest"
   ],
   "css/css-scoping/css-scoping-shadow-slot.html": [
-   "7c177b8f80bade852221d9ef8e863b40a0ed6f27",
+   "2b588d622e12dff9f146150b25edae0e76b31356",
    "reftest"
   ],
   "css/css-scoping/css-scoping-shadow-slotted-nested.html": [
-   "357bc78532b4d1d370da6626cd55c23af82f820f",
+   "5f930e2e8777e7c4bb84aa19789e54b588122214",
    "reftest"
   ],
   "css/css-scoping/css-scoping-shadow-slotted-rule.html": [
-   "6c70581e85432cafade9a68443755ee1cd1d5f6d",
+   "9771c5d1dfb6d9139ecd76f7db3c0363b2c5d0c9",
    "reftest"
   ],
   "css/css-scoping/css-scoping-shadow-with-outside-rules.html": [
-   "3dd267873d96a5300d058fb67d6b4fa7e06e2296",
+   "c725752cba54234c632d385d2ca1d9b0547da3f6",
    "reftest"
   ],
   "css/css-scoping/css-scoping-shadow-with-rules-no-style-leak.html": [
-   "e9fd52a6eeb2dda3e4f7be9904f03e9666733d79",
+   "e4d1d15b7be7c20dff2d6fe66d86161e885c82c9",
    "reftest"
   ],
   "css/css-scoping/css-scoping-shadow-with-rules.html": [
-   "59787f048370401e80542ba7dbb0affcaed06c2f",
+   "3338ecbf72f028cdb657bacc2a176ebd2658333b",
    "reftest"
   ],
   "css/css-scoping/host-context-specificity-001.html": [
@@ -392938,7 +392938,7 @@
    "testharness"
   ],
   "css/css-shapes/shape-outside-invalid-001.html": [
-   "c6c7400f7d177bde46ad1a35a6bd77f6ff27d71b",
+   "167a9163c20a8a0d74b2179d96f1a50a547231e1",
    "testharness"
   ],
   "css/css-shapes/shape-outside-invalid-circle-000.html": [
@@ -392950,11 +392950,11 @@
    "testharness"
   ],
   "css/css-shapes/shape-outside-invalid-circle-002.html": [
-   "f3464ac412b867d012eee4612557b83858a4274c",
+   "0cec392d3a962490f40c71f1cee3cfed3ad89a11",
    "testharness"
   ],
   "css/css-shapes/shape-outside-invalid-circle-003.html": [
-   "28cbb0cf8da802ec51aa63258fbda22b7adbd9e9",
+   "e8ccf762742ab5496acb88fca151aadfedd2dfd3",
    "testharness"
   ],
   "css/css-shapes/shape-outside-invalid-ellipse-001.html": [
@@ -392970,15 +392970,15 @@
    "testharness"
   ],
   "css/css-shapes/shape-outside-invalid-ellipse-004.html": [
-   "8be7f23d84a9ad54ccead9d24fc585c5f60e65c1",
+   "66c434921d6cf5f0ba2418524f6235ed033c935f",
    "testharness"
   ],
   "css/css-shapes/shape-outside-invalid-ellipse-005.html": [
-   "c90e8dcc239409223db706a55bdea63b77d85290",
+   "e7dfd4d5f9fbc45b88295103e0f65c89ff4d001c",
    "testharness"
   ],
   "css/css-shapes/shape-outside-invalid-ellipse-006.html": [
-   "8aff3cb8cab6bb0baf8506e8872b00a495768fc0",
+   "c77505945dcaab80cf5e57b90870a55b55b0c403",
    "testharness"
   ],
   "css/css-shapes/shape-outside-invalid-inset-001.html": [
@@ -394018,7 +394018,7 @@
    "support"
   ],
   "css/css-shapes/spec-examples/support/rounded-triangle.svg": [
-   "ca0c2681c656a9bc1cb5100e8c66bfd23fd6259f",
+   "68d87d11d01ac834cc663467121830e15e88f4f1",
    "support"
   ],
   "css/css-shapes/spec-examples/support/spec-example-utils.js": [
@@ -408662,7 +408662,7 @@
    "support"
   ],
   "css/css-transitions/support/vendorPrefix.js": [
-   "16a78a5b975576c48626d4c9dfebffb8e491e8e0",
+   "1e7eed04818a06e4723fb8d1f2df2e258ab5df8b",
    "support"
   ],
   "css/css-transitions/transition-001.html": [
@@ -414310,11 +414310,11 @@
    "support"
   ],
   "css/css-variables/reference/vars-background-shorthand-001-ref.html": [
-   "89ef2851ea12667ed19d43a6de3afc16111daeca",
+   "93561fd6147f2435a10f79e07022c0e4dfc5f639",
    "support"
   ],
   "css/css-variables/reference/vars-font-shorthand-001-ref.html": [
-   "febe23ed127dd69938dcee9ee6dfac6454161fc2",
+   "39cb4da9bc3e758bf630b9e6b793c7e8415c44d1",
    "support"
   ],
   "css/css-variables/resources/variable-reference-refresh-iframe.css": [
@@ -414534,7 +414534,7 @@
    "testharness"
   ],
   "css/css-variables/vars-background-shorthand-001.html": [
-   "0865f476e4b77ed33c2c7b91c8bd98feca9dede6",
+   "741e2cc021d7a7bafff697e3b92db011ac3157c7",
    "reftest"
   ],
   "css/css-variables/vars-border-shorthand-serialize.html": [
@@ -414542,7 +414542,7 @@
    "testharness"
   ],
   "css/css-variables/vars-font-shorthand-001.html": [
-   "e10aa87c4947c6d99ae7d331c7e42aa23e496d31",
+   "69f091bcca09ba0f8295453b6621967741bf2928",
    "reftest"
   ],
   "css/css-variables/wide-keyword-fallback-ref.html": [
@@ -421510,11 +421510,11 @@
    "testharness"
   ],
   "css/cssom-view/scroll-behavior-element.html": [
-   "9f60ca771121c82237f2be2097d089f582918fe5",
+   "c598d97b331c193989042289285617f832bb7fcc",
    "testharness"
   ],
   "css/cssom-view/scroll-behavior-main-frame-root.html": [
-   "7ef0a4aa0da74a724a851cb1b2f16305712f7b7f",
+   "8aef86977476fead47e93a0cc737d81238f933dd",
    "testharness"
   ],
   "css/cssom-view/scroll-behavior-main-frame-window.html": [
@@ -421526,7 +421526,7 @@
    "testharness"
   ],
   "css/cssom-view/scroll-behavior-smooth-positions.html": [
-   "14e4c94886ae0383e4420a2ff916f8a7a0a4e3ef",
+   "97905bb708134107e95731a1c9e38108f41bfe47",
    "testharness"
   ],
   "css/cssom-view/scroll-behavior-smooth.html": [
@@ -421534,7 +421534,7 @@
    "testharness"
   ],
   "css/cssom-view/scroll-behavior-subframe-root.html": [
-   "32de1b62038e0db017b7416554fbf5e92485d3ea",
+   "050817d416f1095a2933758404d0b0c2ef69cbcf",
    "testharness"
   ],
   "css/cssom-view/scroll-behavior-subframe-window.html": [
@@ -431578,7 +431578,7 @@
    "support"
   ],
   "custom-elements/CustomElementRegistry.html": [
-   "2f7cf572b682deae9e734e9c9856f621a9451a53",
+   "368044df3c9373b4ea966bd1b7e9080581b91293",
    "testharness"
   ],
   "custom-elements/Document-createElement-svg.svg": [
@@ -431990,7 +431990,7 @@
    "testharness"
   ],
   "custom-elements/reactions/resources/reactions.js": [
-   "87510ceee164ffb331808d1c0a026af43fde1fbc",
+   "5ed32a4fa48c816f57b2cd0f6df5e7deda95000b",
    "support"
   ],
   "custom-elements/reactions/with-exceptions.html": [
@@ -432014,11 +432014,11 @@
    "support"
   ],
   "custom-elements/throw-on-dynamic-markup-insertion-counter-construct.html": [
-   "5582bca4bb3a5396bd245031df4ddf8f2b7d1d91",
+   "5938a0aeb9f2af389ec7da1131d8965c0216cfca",
    "testharness"
   ],
   "custom-elements/throw-on-dynamic-markup-insertion-counter-reactions.html": [
-   "9dccd4ca24df3c2cae5fef4ee209ab195546192f",
+   "b9f9f55c705e9ca4f04b783657c7f30bbd7b34ac",
    "testharness"
   ],
   "custom-elements/upgrading.html": [
@@ -464238,7 +464238,7 @@
    "support"
   ],
   "interfaces/web-nfc.idl": [
-   "b917d5e2c11c5b34344638e2d0a2c2526c76137b",
+   "b13d047c551db4c74bb8467dda287d5e004d8cb3",
    "support"
   ],
   "interfaces/web-share.idl": [
@@ -464294,7 +464294,7 @@
    "support"
   ],
   "interfaces/webxr-ar-module.idl": [
-   "61fcd6a730f7c3846a8639075a0b2c2a3b755e0c",
+   "c5899d657b297261125902773e854c18bdf0df2a",
    "support"
   ],
   "interfaces/webxr-gamepads-module.idl": [
@@ -464302,7 +464302,7 @@
    "support"
   ],
   "interfaces/webxr.idl": [
-   "012b67cf246dc4c7641e819bbc8e4b39d190d078",
+   "262fa2423afbe2ebb80a0db33994c8520c0d6c52",
    "support"
   ],
   "interfaces/worklets.idl": [
@@ -464950,7 +464950,7 @@
    "testharness"
   ],
   "lint.whitelist": [
-   "4226727ec2a167db7853e170f997c1b3590650db",
+   "ac2d30427cfe37ad479c50d15db14dc6d2d63a07",
    "support"
   ],
   "loading/lazyload/common.js": [
@@ -478658,7 +478658,7 @@
    "testharness"
   ],
   "pointerevents/extension/pointerevent_constructor.html": [
-   "6971dcecfdebf3a113ef4ef9c9e8bd7bdf88ea02",
+   "60b579050a18270fa67d633476eb90803ca16a93",
    "testharness"
   ],
   "pointerevents/extension/pointerevent_getCoalescedEvents_when_pointerlocked.html": [
@@ -478678,7 +478678,7 @@
    "manual"
   ],
   "pointerevents/extension/pointerevent_predicted_events_attributes-manual.html": [
-   "220a4b82850598c404699e4cf1a1c5a10738b137",
+   "fdfcae1fc8efeaa57927147ef0f72340738b003f",
    "manual"
   ],
   "pointerevents/extension/pointerevent_touch-action-pan-down-css_touch.html": [
@@ -478702,7 +478702,7 @@
    "testharness"
   ],
   "pointerevents/html/pointerevent_drag_interaction-manual.html": [
-   "0ac911fd576d98e897b1aa19ec27236b20f92e43",
+   "b316ba917eca417c4ac09be64b53876734859f5c",
    "manual"
   ],
   "pointerevents/idlharness.window-expected.txt": [
@@ -478826,7 +478826,7 @@
    "testharness"
   ],
   "pointerevents/pointerevent_pointerleave_pen-manual.html": [
-   "bb6dcc4236b0cc5183855275d85208db6460a5cb",
+   "d0d8dd3682513fa44659573f02aa3eb9044c5605",
    "manual"
   ],
   "pointerevents/pointerevent_pointermove.html": [
@@ -478866,7 +478866,7 @@
    "testharness"
   ],
   "pointerevents/pointerevent_releasepointercapture_onpointerup_mouse.html": [
-   "23c28b4bf755e493d747f7814a21aa598f4f0d8c",
+   "f37c7cfd1440b49766a4c7b92a12ef2126849ce7",
    "testharness"
   ],
   "pointerevents/pointerevent_root_computed_style.html": [
@@ -478998,7 +478998,7 @@
    "testharness"
   ],
   "pointerevents/pointerevent_touch-action-verification.html": [
-   "f42d9f6bd6703b962058b79faae413fbed0757cc",
+   "80d61e0a6697208d65e4fc74e0289a0218f5aea1",
    "testharness"
   ],
   "pointerevents/pointerlock/pointerevent_coordinates_when_locked.html": [
@@ -479026,7 +479026,7 @@
    "testharness"
   ],
   "pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html": [
-   "a6f238cbee127353fdab9982fe8a9a75d67b23f7",
+   "2421b1c1ce0d083fd6f9c84edcd6eaa909b67379",
    "testharness"
   ],
   "pointerevents/pointerlock/resources/pointerevent_movementxy-iframe.html": [
@@ -497406,7 +497406,7 @@
    "testharness"
   ],
   "shadow-dom/event-inside-slotted-node.html": [
-   "56773142ba6f5904af86696e9801aaf4c6f74a9a",
+   "5f8d3b93c6b41fb5046a0f69b105df9a3855b373",
    "testharness"
   ],
   "shadow-dom/event-post-dispatch.html": [
@@ -497442,7 +497442,7 @@
    "support"
   ],
   "shadow-dom/focus/focus-method-delegatesFocus.html": [
-   "462542e3f7be18bc609b3e6d2c9d9e6ecde30a9f",
+   "babe1760c70fcc4faeba096d7640165e4d0ccab8",
    "testharness"
   ],
   "shadow-dom/focus/focus-selector-delegatesFocus-expected.txt": [
@@ -502317,6 +502317,10 @@
    "195cdee8edfb3bd8cd58ac2dc132b63bcb7d531a",
    "support"
   ],
+  "tools/ci/azure/com.apple.Safari.plist": [
+   "122080972c9f63410062ee8d33d0ed0286af8f11",
+   "support"
+  ],
   "tools/ci/azure/fyi_hook.yml": [
    "f02f3cd8224e0b3eb4f478318f0437f5a475f4e5",
    "support"
@@ -502346,7 +502350,7 @@
    "support"
   ],
   "tools/ci/azure/install_safari.yml": [
-   "d454f516e7a55ac0a667aa588386d438b3714b80",
+   "10466e3278f97a143004d62d775ae158167508cc",
    "support"
   ],
   "tools/ci/azure/pip_install.yml": [
@@ -513302,7 +513306,7 @@
    "testharness"
   ],
   "webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-scheduling.html": [
-   "27ac0984a79ef276f6f6e32dc9814131487de31a",
+   "8c627f90f22ca322daf890b9f2482fe0daad2176",
    "testharness"
   ],
   "webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html": [
@@ -513322,7 +513326,7 @@
    "testharness"
   ],
   "webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html": [
-   "2df5d03ac076557f6b2fb833efed333e243a320a",
+   "02caea667bba2de523488174053aa251892eeec2",
    "testharness"
   ],
   "webaudio/the-audio-api/the-audionode-interface/audionode-connect-order.html": [
@@ -513358,7 +513362,7 @@
    "testharness"
   ],
   "webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal.html": [
-   "517d64f3dbb69e610a5ed17475c45f530f749a42",
+   "b0455f86bc0f9880980c1e83fe729d5b6d698f13",
    "testharness"
   ],
   "webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html": [
@@ -513446,15 +513450,15 @@
    "testharness"
   ],
   "webaudio/the-audio-api/the-audioparam-interface/retrospective-exponentialRampToValueAtTime.html": [
-   "978aeb9733bb2589b44193ed23d9ce153a72bb2b",
+   "c81c3ad23eb9c10f5cf6499bada9ed58bca68b24",
    "testharness"
   ],
   "webaudio/the-audio-api/the-audioparam-interface/retrospective-linearRampToValueAtTime.html": [
-   "42af6a71b3a73c4d480a6ea5ec1966034c1865ab",
+   "9f5e55fe55fec3be2af3b9b468cc329dd62e9616",
    "testharness"
   ],
   "webaudio/the-audio-api/the-audioparam-interface/retrospective-setTargetAtTime.html": [
-   "53427901e3d0759212d540ec82a35ed0df8ef0c4",
+   "41a37bdb913efbf7a9c392b1130cc0bd9a65c251",
    "testharness"
   ],
   "webaudio/the-audio-api/the-audioparam-interface/retrospective-setValueAtTime.html": [
@@ -513834,7 +513838,7 @@
    "testharness"
   ],
   "webaudio/the-audio-api/the-gainnode-interface/gain.html": [
-   "c1ee0240cb9f87bc05fb4f5fb076d01b2de45899",
+   "c41f4c908056aba804bc691c335e528fd1e2f44f",
    "testharness"
   ],
   "webaudio/the-audio-api/the-gainnode-interface/no-dezippering.html": [
@@ -521509,10 +521513,6 @@
    "cb7f47252d5746f61f1c9df2d981d47ef35940c5",
    "support"
   ],
-  "webxr/ar-module/idlharness.https.window-expected.txt": [
-   "6f3159746fe0aeeb8a20bcee5e803b2dcbf07a7e",
-   "support"
-  ],
   "webxr/ar-module/idlharness.https.window.js": [
    "1268f4ea2a5eb228fb49a6f06d8905f8d9480ae7",
    "testharness"
diff --git a/third_party/blink/web_tests/external/wpt/css/css-align/distribution-values/space-evenly-001.html b/third_party/blink/web_tests/external/wpt/css/css-align/distribution-values/space-evenly-001.html
index 74cf543..fd16f33 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-align/distribution-values/space-evenly-001.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-align/distribution-values/space-evenly-001.html
@@ -11,22 +11,22 @@
   <link rel=help href="https://drafts.csswg.org/css-flexbox-1/#justify-content-property">
 <style>
 .red {
-	position: absolute;
-	z-index: -1;
-	width: 100px;
-	height: 100px;
-	background: red;
+  position: absolute;
+  z-index: -1;
+  width: 100px;
+  height: 100px;
+  background: red;
 }
 .container {
-	margin-left: -100px;
-	width: 300px;
-	display: flex;
-	justify-content: space-evenly;
+  margin-left: -100px;
+  width: 300px;
+  display: flex;
+  justify-content: space-evenly;
 }
 .container div {
-	width: 100px;
-	height: 100px;
-	background: green;
+  width: 100px;
+  height: 100px;
+  background: green;
 }
 </style>
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-align/reference/ttwf-reftest-alignContent-ref.html b/third_party/blink/web_tests/external/wpt/css/css-align/reference/ttwf-reftest-alignContent-ref.html
index a94c1d5..e020cfc 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-align/reference/ttwf-reftest-alignContent-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-align/reference/ttwf-reftest-alignContent-ref.html
@@ -5,33 +5,33 @@
     <link rel="author" title="Heechang Kang" href="mailto:hckang80@gmail.com">
     <link rel="help" href="http://www.w3.org/TR/css3-align/#align-content">
     <style type="text/css">
-		#main{
-			display:table;
-			position:relative;
-			font-size:0;
-			width:70px;
-			border:1px solid #c3c3c3;
-		}
-		#main .sample{
-			position:absolute;
-			left:0;
-			top:50%;
-			z-index:-1;
-			margin:-35px 0 0;
-		}
-		#main > span{
-			display:inline-block;
-			width:70px;
-			height:70px;
-			margin:50px 0;
-		}
+        #main{
+            display:table;
+            position:relative;
+            font-size:0;
+            width:70px;
+            border:1px solid #c3c3c3;
+        }
+        #main .sample{
+            position:absolute;
+            left:0;
+            top:50%;
+            z-index:-1;
+            margin:-35px 0 0;
+        }
+        #main > span{
+            display:inline-block;
+            width:70px;
+            height:70px;
+            margin:50px 0;
+        }
     </style>
 </head>
 <body>
 <p>PASS if there is no red box.</p>
 <div id="main">
-	<span class="sample" style="background-color:red;"></span>
-	<span style="background-color:green;"></span>
+    <span class="sample" style="background-color:red;"></span>
+    <span style="background-color:green;"></span>
 </div>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-align/ttwf-reftest-alignContent.html b/third_party/blink/web_tests/external/wpt/css/css-align/ttwf-reftest-alignContent.html
index d573705..18c838e 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-align/ttwf-reftest-alignContent.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-align/ttwf-reftest-alignContent.html
@@ -5,35 +5,35 @@
     <link rel="author" title="Heechang Kang" href="mailto:hckang80@gmail.com">
     <link rel="help" href="http://www.w3.org/TR/css3-align/#content-distribution">
     <style type="text/css">
-		#main{
-			display:flex;
-			flex-flow:row wrap;
-			align-content:space-around;
-			position:relative;
-			width:70px;
-			height:170px;
-			border:1px solid #c3c3c3;
-		}
-		#main .sample{
-			position:absolute;
-			left:0;
-			top:50%;
-			z-index:-1;
-			margin:-35px 0 0;
-		}
-		#main > span{
-			display:inline-block;
-			width:70px;
-			height:70px;
-			vertical-align:middle;
-		}
+        #main{
+            display:flex;
+            flex-flow:row wrap;
+            align-content:space-around;
+            position:relative;
+            width:70px;
+            height:170px;
+            border:1px solid #c3c3c3;
+        }
+        #main .sample{
+            position:absolute;
+            left:0;
+            top:50%;
+            z-index:-1;
+            margin:-35px 0 0;
+        }
+        #main > span{
+            display:inline-block;
+            width:70px;
+            height:70px;
+            vertical-align:middle;
+        }
     </style>
 </head>
 <body>
 <p>PASS if there is no red box.</p>
 <div id="main">
-	<span class="sample" style="background-color:red;"></span>
-	<span style="background-color:green;"></span>
+    <span class="sample" style="background-color:red;"></span>
+    <span style="background-color:green;"></span>
 </div>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-template-columns-fit-content-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-template-columns-fit-content-001-ref.html
index c4ec1ff..36619d1 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-template-columns-fit-content-001-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-template-columns-fit-content-001-ref.html
@@ -49,71 +49,71 @@
 <div class="floatLeft">
   <h3>Only fit-content() and with fixed size tracks.</h3>
   <div class="grid">
-	<div class="item">XXX</div>
-	<div class="test autoRowFirstColumn"></div>
+    <div class="item">XXX</div>
+    <div class="test autoRowFirstColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 30px 0px;">
-	<div class="item">XXX</div>
-	<div class="spanningItem">XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item">XXX</div>
+    <div class="spanningItem">XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 40px;">
-	<div class="item">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
+    <div class="item">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: auto auto;">
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 40px auto;">
-	<div class="item">XXX XXX</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item">XXX XXX</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 80px;">
-	<div class="item">XXX XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
+    <div class="item">XXX XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: auto auto;">
-	<div class="spanningItem">XXX XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 25px 70px;">
-	<div class="item autoRowSecondColumn">XXX XXX XXX</div>
-	<div class="spanningItem">XXX XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item autoRowSecondColumn">XXX XXX XXX</div>
+    <div class="spanningItem">XXX XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 20px 50px;">
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 40px 40px;">
-	<div class="item">XXXXX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item">XXXXX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 15px 80px;">
-	<div class="item autoRowSecondColumn">XXXXX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item autoRowSecondColumn">XXXXX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
 </div>
@@ -121,139 +121,139 @@
 <div class="floatLeft">
   <h3>fit-content() with other content-sized tracks.</h3>
   <div class="grid" style="grid-template-columns: 12.5px 82.5px;">
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 50px 45px;">
-	<div class="item">XXXXX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item">XXXXX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 0px 95px;">
-	<div class="item autoRowSecondColumn">XXXXX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item autoRowSecondColumn">XXXXX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 12.5px 40px;">
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 50px 40px;">
-	<div class="item">XXXXX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item">XXXXX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 0px 50px;">
-	<div class="item autoRowSecondColumn">XXXXX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item autoRowSecondColumn">XXXXX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: auto min-content max-content">
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
-	<div class="test autoRowThirdColumn"></div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
+    <div class="test autoRowThirdColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: min-content auto max-content">
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
-	<div class="test autoRowThirdColumn"></div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
+    <div class="test autoRowThirdColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: min-content max-content auto">
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
-	<div class="test autoRowThirdColumn"></div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
+    <div class="test autoRowThirdColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 30px 0px 60px;">
-	<div class="item" style="grid-column: 1">XXX XX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
-	<div class="test autoRowThirdColumn"></div>
+    <div class="item" style="grid-column: 1">XXX XX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
+    <div class="test autoRowThirdColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 30px 0px 60px;">
-	<div class="item" style="grid-column: 1">XXX XX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
-	<div class="test autoRowThirdColumn"></div>
+    <div class="item" style="grid-column: 1">XXX XX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
+    <div class="test autoRowThirdColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 0px 90px 0px;">
-	<div class="item" style="grid-column: 2">XXX XX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
-	<div class="test autoRowThirdColumn"></div>
+    <div class="item" style="grid-column: 2">XXX XX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
+    <div class="test autoRowThirdColumn"></div>
   </div>
 </div>
 
 <div class="floatLeft">
   <h3>fit-content() with percentage arguments.</h3>
   <div class="grid" style="grid-template-columns: 30px;">
-	<div class="item">XXX</div>
-	<div class="test autoRowFirstColumn"></div>
+    <div class="item">XXX</div>
+    <div class="test autoRowFirstColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 30px 0px;">
-	<div class="item">XXX</div>
-	<div class="spanningItem">XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item">XXX</div>
+    <div class="spanningItem">XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 30px;">
-	<div class="item">XX XX</div>
-	<div class="test autoRowFirstColumn"></div>
+    <div class="item">XX XX</div>
+    <div class="test autoRowFirstColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 30px 30px;">
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 30px 30px;">
-	<div class="item autoRowSecondColumn">X X X</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item autoRowSecondColumn">X X X</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 90px;">
-	<div class="item">XXX XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
+    <div class="item">XXX XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 47.5px 47.5px;">
-	<div class="spanningItem">XXX XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 15px 80px;">
-	<div class="item autoRowSecondColumn">XXX XXX XXX</div>
-	<div class="spanningItem">XXX XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item autoRowSecondColumn">XXX XXX XXX</div>
+    <div class="spanningItem">XXX XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 </div>
 
@@ -261,71 +261,71 @@
   <h3>max-content &lt; fit-content() argument.</h3>
 
   <div class="grid" style="grid-template-columns: 70px;">
-	<div class="item">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
+    <div class="item">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 32.5px 32.5px;">
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 70px 0px;">
-	<div class="item">XXX XXX</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item">XXX XXX</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 32.5px 32.5px;">
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 45px 20px;">
-	<div class="item autoRowSecondColumn">XX</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item autoRowSecondColumn">XX</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 92.5px 12.5px;">
-	<div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: 82.5px 12.5px;">
     <div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: max-content auto max-content;">
-	<div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
     <div class="test autoRowThirdColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: min-content auto min-content;">
-	<div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
     <div class="test autoRowThirdColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: auto auto auto;">
-	<div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
     <div class="test autoRowThirdColumn"></div>
   </div>
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-template-columns-fit-content-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-template-columns-fit-content-001.html
index 1da3fe5..da31354e 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-template-columns-fit-content-001.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-template-columns-fit-content-001.html
@@ -73,71 +73,71 @@
 <div class="floatLeft">
   <h3>Only fit-content() and with fixed size tracks.</h3>
   <div class="grid fc0">
-	<div class="item">XXX</div>
-	<div class="test autoRowFirstColumn"></div>
+    <div class="item">XXX</div>
+    <div class="test autoRowFirstColumn"></div>
   </div>
 
   <div class="grid fc0x2">
-	<div class="item">XXX</div>
-	<div class="spanningItem">XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item">XXX</div>
+    <div class="spanningItem">XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid fc40">
-	<div class="item">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
+    <div class="item">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
   </div>
 
   <div class="grid fc40x2">
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid fc40x2">
-	<div class="item">XXX XXX</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item">XXX XXX</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid fc80">
-	<div class="item">XXX XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
+    <div class="item">XXX XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
   </div>
 
   <div class="grid fc80x2">
-	<div class="spanningItem">XXX XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid fc80x2">
-	<div class="item autoRowSecondColumn">XXX XXX XXX</div>
-	<div class="spanningItem">XXX XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item autoRowSecondColumn">XXX XXX XXX</div>
+    <div class="spanningItem">XXX XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: fit-content(20px) 50%;">
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: minmax(10px, 40px) fit-content(40px);">
-	<div class="item">XXXXX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item">XXXXX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: fit-content(40px) minmax(10%, 200px);">
-	<div class="item autoRowSecondColumn">XXXXX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item autoRowSecondColumn">XXXXX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
 </div>
@@ -145,139 +145,139 @@
 <div class="floatLeft">
   <h3>fit-content() with other content-sized tracks.</h3>
   <div class="grid" style="grid-template-columns: fit-content(40px) max-content;">
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: fit-content(40px) max-content;">
-	<div class="item">XXXXX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item">XXXXX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: fit-content(40px) max-content;">
-	<div class="item autoRowSecondColumn">XXXXX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item autoRowSecondColumn">XXXXX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: min-content fit-content(40px);">
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: min-content fit-content(40px);">
-	<div class="item">XXXXX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item">XXXXX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: min-content fit-content(40px);">
-	<div class="item autoRowSecondColumn">XXXXX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item autoRowSecondColumn">XXXXX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: fit-content(30px) min-content max-content">
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
-	<div class="test autoRowThirdColumn"></div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
+    <div class="test autoRowThirdColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: min-content fit-content(30px) max-content">
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
-	<div class="test autoRowThirdColumn"></div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
+    <div class="test autoRowThirdColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: min-content max-content fit-content(30px)">
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
-	<div class="test autoRowThirdColumn"></div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
+    <div class="test autoRowThirdColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: fit-content(30px) min-content max-content">
-	<div class="item" style="grid-column: 1">XXX XX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
-	<div class="test autoRowThirdColumn"></div>
+    <div class="item" style="grid-column: 1">XXX XX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
+    <div class="test autoRowThirdColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: min-content fit-content(30px) max-content">
-	<div class="item" style="grid-column: 1">XXX XX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
-	<div class="test autoRowThirdColumn"></div>
+    <div class="item" style="grid-column: 1">XXX XX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
+    <div class="test autoRowThirdColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: min-content max-content fit-content(30px)">
-	<div class="item" style="grid-column: 2">XXX XX</div>
-	<div class="spanningItem">XXX XX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
-	<div class="test autoRowThirdColumn"></div>
+    <div class="item" style="grid-column: 2">XXX XX</div>
+    <div class="spanningItem">XXX XX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
+    <div class="test autoRowThirdColumn"></div>
   </div>
 </div>
 
 <div class="floatLeft">
   <h3>fit-content() with percentage arguments.</h3>
   <div class="grid fc0p">
-	<div class="item">XXX</div>
-	<div class="test autoRowFirstColumn"></div>
+    <div class="item">XXX</div>
+    <div class="test autoRowFirstColumn"></div>
   </div>
 
   <div class="grid fc0px2">
-	<div class="item">XXX</div>
-	<div class="spanningItem">XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item">XXX</div>
+    <div class="spanningItem">XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid fc30p">
-	<div class="item">XX XX</div>
-	<div class="test autoRowFirstColumn"></div>
+    <div class="item">XX XX</div>
+    <div class="test autoRowFirstColumn"></div>
   </div>
 
   <div class="grid fc30px2">
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid fc30px2">
-	<div class="item autoRowSecondColumn">X X X</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item autoRowSecondColumn">X X X</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid fc90p">
-	<div class="item">XXX XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
+    <div class="item">XXX XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
   </div>
 
   <div class="grid fc90px2">
-	<div class="spanningItem">XXX XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid fc90px2">
-	<div class="item autoRowSecondColumn">XXX XXX XXX</div>
-	<div class="spanningItem">XXX XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item autoRowSecondColumn">XXX XXX XXX</div>
+    <div class="spanningItem">XXX XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 </div>
 
@@ -285,71 +285,71 @@
   <h3>max-content &lt; fit-content() argument.</h3>
 
   <div class="grid fc110">
-	<div class="item">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
+    <div class="item">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
   </div>
 
   <div class="grid fc110x2">
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid fc110x2">
-	<div class="item">XXX XXX</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item">XXX XXX</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: fit-content(110px) fit-content(40px);">
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: fit-content(110px) fit-content(40px);">
-	<div class="item autoRowSecondColumn">XX</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="item autoRowSecondColumn">XX</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: max-content fit-content(110px);">
-	<div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: fit-content(110px) min-content;">
-	<div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: max-content fit-content(110px) max-content;">
-	<div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
     <div class="test autoRowThirdColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: min-content fit-content(110px) min-content;">
-	<div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
     <div class="test autoRowThirdColumn"></div>
   </div>
 
   <div class="grid" style="grid-template-columns: auto fit-content(110px) auto;">
-	<div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
-	<div class="spanningItem">XXX XXX</div>
-	<div class="test autoRowFirstColumn"></div>
-	<div class="test autoRowSecondColumn"></div>
+    <div class="spanningItem" style="grid-row: 1;">XX XX XX XX</div>
+    <div class="spanningItem">XXX XXX</div>
+    <div class="test autoRowFirstColumn"></div>
+    <div class="test autoRowSecondColumn"></div>
     <div class="test autoRowThirdColumn"></div>
   </div>
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations.html b/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations.html
index a03d5bee..7c57662 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations.html
@@ -4,15 +4,15 @@
     <title>CSS Image Fallbacks and Annotations: the 'image()' notation</title>
     <link rel="author" title="Hirokazu Egashira" href="mailto:yo9ega@aol.com">
     <link rel="help" href="http://www.w3.org/TR/css3-images/#image-notation">
-	<link rel="match" href="css-image-fallbacks-and-annotations-ref.html">
-	<meta name="assert" content="When the image doesn't load, the background color is still there to ensure that the white text is readable.">
+    <link rel="match" href="css-image-fallbacks-and-annotations-ref.html">
+    <meta name="assert" content="When the image doesn't load, the background color is still there to ensure that the white text is readable.">
     <style type="text/css">
- 		.square{
- 			width: 200px;
- 			height: 200px;
- 			background-color: red;
- 			background: image("green.png", green);
- 		}
+        .square{
+            width: 200px;
+            height: 200px;
+            background-color: red;
+            background: image("green.png", green);
+        }
     </style>
 </head>
 <body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations002.html b/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations002.html
index 043acf25..ed5578a 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations002.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations002.html
@@ -4,16 +4,16 @@
     <title>CSS Image Fallbacks and Annotations: the 'image()' notation</title>
     <link rel="author" title="Hirokazu Egashira" href="mailto:yo9ega@aol.com">
     <link rel="help" href="http://www.w3.org/TR/css3-images/#image-notation">
-	<link rel="match" href="css-image-fallbacks-and-annotations-ref.html">
-	<meta name="assert" content="The 'image()' function load the image.">
+    <link rel="match" href="css-image-fallbacks-and-annotations-ref.html">
+    <meta name="assert" content="The 'image()' function load the image.">
     <style type="text/css">
- 		.square{
- 			width: 200px;
- 			height: 200px;
- 			color: white;
- 			background-color: red;
- 			background-image: image("support/1x1-green.png");
- 		}
+        .square{
+            width: 200px;
+            height: 200px;
+            color: white;
+            background-color: red;
+            background-image: image("support/1x1-green.png");
+        }
     </style>
 </head>
 <body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations003.html b/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations003.html
index f992af3..11f0844 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations003.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations003.html
@@ -4,15 +4,15 @@
     <title>CSS Image Fallbacks and Annotations: the 'image()' notation</title>
     <link rel="author" title="Hirokazu Egashira" href="mailto:yo9ega@aol.com">
     <link rel="help" href="http://www.w3.org/TR/css3-images/#image-notation">
-	<link rel="match" href="css-image-fallbacks-and-annotations-ref.html">
-	<meta name="assert" content="The rule below would tell the UA to load The first file if it can; failing that to load The second file; failing that to display The third file.">
+    <link rel="match" href="css-image-fallbacks-and-annotations-ref.html">
+    <meta name="assert" content="The rule below would tell the UA to load The first file if it can; failing that to load The second file; failing that to display The third file.">
     <style type="text/css">
- 		.square{
- 			width: 200px;
- 			height: 200px;
- 			background-color: red;
- 			background-image: image("1x1-green.svg", "support/1x1-green.png","support/1x1-green.gif");
- 		}
+        .square{
+            width: 200px;
+            height: 200px;
+            background-color: red;
+            background-image: image("1x1-green.svg", "support/1x1-green.png","support/1x1-green.gif");
+        }
     </style>
 </head>
 <body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations004.html b/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations004.html
index 8e3137d..32ebd3ed 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations004.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations004.html
@@ -4,15 +4,15 @@
     <title>CSS Image Fallbacks and Annotations: the 'image()' notation</title>
     <link rel="author" title="Hirokazu Egashira" href="mailto:yo9ega@aol.com">
     <link rel="help" href="http://www.w3.org/TR/css3-images/#image-notation">
-	<link rel="match" href="css-image-fallbacks-and-annotations-ref.html">
-	<meta name="assert" content="The rule below would tell the UA to load The first file if it can; failing that to load The second file.">
+    <link rel="match" href="css-image-fallbacks-and-annotations-ref.html">
+    <meta name="assert" content="The rule below would tell the UA to load The first file if it can; failing that to load The second file.">
     <style type="text/css">
- 		.square{
- 			width: 200px;
- 			height: 200px;
- 			background-color: red;
- 			background-image: image("1x1-green.svg", "1x1-green.png", "support/1x1-green.gif");
- 		}
+        .square{
+            width: 200px;
+            height: 200px;
+            background-color: red;
+            background-image: image("1x1-green.svg", "1x1-green.png", "support/1x1-green.gif");
+        }
     </style>
 </head>
 <body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations005.html b/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations005.html
index 8b93c59..6d3c7f9b 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations005.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-images/css-image-fallbacks-and-annotations005.html
@@ -4,15 +4,15 @@
     <title>CSS Image Fallbacks and Annotations: the 'image()' notation</title>
     <link rel="author" title="Hirokazu Egashira" href="mailto:yo9ega@aol.com">
     <link rel="help" href="http://www.w3.org/TR/css3-images/#image-notation">
-	<link rel="match" href="css-image-fallbacks-and-annotations-ref.html">
-	<meta name="assert" content="The 'image()' function specifies only a color without any URLs, the function immediately falls back to representing a solid-color image of the chosen color.">
+    <link rel="match" href="css-image-fallbacks-and-annotations-ref.html">
+    <meta name="assert" content="The 'image()' function specifies only a color without any URLs, the function immediately falls back to representing a solid-color image of the chosen color.">
     <style type="text/css">
- 		.square{
- 			width: 200px;
- 			height: 200px;
- 			background-color: red;
- 			background-image: image(rgba(0,0,255,0.5)), url("support/1x1-green.png");
- 		}
+        .square{
+            width: 200px;
+            height: 200px;
+            background-color: red;
+            background-image: image(rgba(0,0,255,0.5)), url("support/1x1-green.png");
+        }
     </style>
 </head>
 <body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-images/gradients-with-transparent.html b/third_party/blink/web_tests/external/wpt/css/css-images/gradients-with-transparent.html
index e4505bc..204bc760b 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-images/gradients-with-transparent.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-images/gradients-with-transparent.html
@@ -18,9 +18,9 @@
     }
 </style>
 <body>
-	<p>Gradient using 'transparent'</p>
+    <p>Gradient using 'transparent'</p>
     <div id="gradient1" class="test"></div>
     <br />
-	<p>Gradient using rgba(0,0,255,0)</p>
+    <p>Gradient using rgba(0,0,255,0)</p>
     <div id="gradient2" class="test"></div>
 </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-images/image-fit-001.xht b/third_party/blink/web_tests/external/wpt/css/css-images/image-fit-001.xht
index a3d6325..b6c1d5d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-images/image-fit-001.xht
+++ b/third_party/blink/web_tests/external/wpt/css/css-images/image-fit-001.xht
@@ -7,14 +7,14 @@
   <meta name="assert" content="The initial value of the 'object-fit' property is 'fill'."/>
   <style type="text/css"><![CDATA[
    img {
-   		background: red;
-		height: 100px;
-		width: 50px;
-	}
+    background: red;
+    height: 100px;
+    width: 50px;
+   }
   ]]></style>
  </head>
  <body>
- 	<div>A green block appears below. There must be no red on the page.</div>
-	<div><img src="support/swatch-green.png" alt="Failed: image missing"/></div>
+  <div>A green block appears below. There must be no red on the page.</div>
+  <div><img src="support/swatch-green.png" alt="Failed: image missing"/></div>
  </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-images/image-fit-006.xht b/third_party/blink/web_tests/external/wpt/css/css-images/image-fit-006.xht
index 8b1d10766..6947515 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-images/image-fit-006.xht
+++ b/third_party/blink/web_tests/external/wpt/css/css-images/image-fit-006.xht
@@ -8,16 +8,16 @@
   <meta name="assert" content="The 'fill' value of the 'image-scaling' property scales the content height and width independently so that the edges of the content just meet the edges of the box established by the used 'height' and 'width'."/>
   <style type="text/css"><![CDATA[
    img {
-   		border: 5px solid blue;
-		height: 50px;
-		width: 100px;
-		object-fit: fill;
-		background: red;
-	}
+    border: 5px solid blue;
+    height: 50px;
+    width: 100px;
+    object-fit: fill;
+    background: red;
+   }
   ]]></style>
  </head>
  <body>
- 	<div>The image below should fill the blue border with no red between the border and the image.</div>
-	<div><img src="support/intrinsic-size.jpg" alt="Failed: image missing" /></div>
+  <div>The image below should fill the blue border with no red between the border and the image.</div>
+  <div><img src="support/intrinsic-size.jpg" alt="Failed: image missing" /></div>
  </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-type-armenian-002.xht b/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-type-armenian-002.xht
index 02e06b7..fa7b47d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-type-armenian-002.xht
+++ b/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-type-armenian-002.xht
@@ -24,78 +24,78 @@
 
 
 <div class="test">
-			<ol class="armenian">
-				<li title="1">Ա</li>
-				<li title="2">Բ</li>
-				<li title="3">Գ</li>
-				<li title="4">Դ</li>
-				<li title="5">Ե</li>
-				<li title="6">Զ</li>
-				<li title="7">Է</li>
-				<li title="8">Ը</li>
-				<li title="9">Թ</li>
-				<li title="10">Ժ</li>
-				<li title="11">ԺԱ</li>
-				<li title="12">ԺԲ</li>
-			</ol>
-			<ol class="armenian" start="43">
-				<li title="43">ԽԳ</li>
-			</ol>
-			<ol class="armenian" start="77">
-				<li title="77">ՀԷ</li>
-			</ol>
-			<ol class="armenian" start="80">
-				<li title="80">Ձ</li>
-			</ol>
-			<ol class="armenian" start="99">
-				<li title="99">ՂԹ</li>
-				<li title="100">Ճ</li>
-				<li title="101">ՃԱ</li>
-			</ol>
-			<ol class="armenian" start="222">
-				<li title="222">ՄԻԲ</li>
-			</ol>
-			<ol class="armenian" start="540">
-				<li title="540">ՇԽ</li>
-			</ol>
-			<ol class="armenian" start="999">
-				<li title="999">ՋՂԹ</li>
-				<li title="1000">Ռ</li>
-			</ol>
-			<ol class="armenian" start="1005">
-				<li title="1005">ՌԵ</li>
-			</ol>
-			<ol class="armenian" start="1060">
-				<li title="1060">ՌԿ</li>
-			</ol>
-			<ol class="armenian" start="1065">
-				<li title="1065">ՌԿԵ</li>
-			</ol>
-			<ol class="armenian" start="1800">
-				<li title="1800">ՌՊ</li>
-			</ol>
-			<ol class="armenian" start="1860">
-				<li title="1860">ՌՊԿ</li>
-			</ol>
-			<ol class="armenian" start="1865">
-				<li title="1865">ՌՊԿԵ</li>
-			</ol>
-			<ol class="armenian" start="5865">
-				<li title="5865">ՐՊԿԵ</li>
-			</ol>
-			<ol class="armenian" start="7005">
-				<li title="7005">ՈՒԵ</li>
-			</ol>
-			<ol class="armenian" start="7800">
-				<li title="7800">ՈՒՊ</li>
-			</ol>
-			<ol class="armenian" start="7865">
-				<li title="7865">ՈՒՊԿԵ</li>
-			</ol>
-			<ol class="armenian" start="9999">
-				<li title="9999">ՔՋՂԹ</li>
-			</ol>
-		</div>
+  <ol class="armenian">
+    <li title="1">Ա</li>
+    <li title="2">Բ</li>
+    <li title="3">Գ</li>
+    <li title="4">Դ</li>
+    <li title="5">Ե</li>
+    <li title="6">Զ</li>
+    <li title="7">Է</li>
+    <li title="8">Ը</li>
+    <li title="9">Թ</li>
+    <li title="10">Ժ</li>
+    <li title="11">ԺԱ</li>
+    <li title="12">ԺԲ</li>
+  </ol>
+  <ol class="armenian" start="43">
+    <li title="43">ԽԳ</li>
+  </ol>
+  <ol class="armenian" start="77">
+    <li title="77">ՀԷ</li>
+  </ol>
+  <ol class="armenian" start="80">
+    <li title="80">Ձ</li>
+  </ol>
+  <ol class="armenian" start="99">
+    <li title="99">ՂԹ</li>
+    <li title="100">Ճ</li>
+    <li title="101">ՃԱ</li>
+  </ol>
+  <ol class="armenian" start="222">
+    <li title="222">ՄԻԲ</li>
+  </ol>
+  <ol class="armenian" start="540">
+    <li title="540">ՇԽ</li>
+  </ol>
+  <ol class="armenian" start="999">
+    <li title="999">ՋՂԹ</li>
+    <li title="1000">Ռ</li>
+  </ol>
+  <ol class="armenian" start="1005">
+    <li title="1005">ՌԵ</li>
+  </ol>
+  <ol class="armenian" start="1060">
+    <li title="1060">ՌԿ</li>
+  </ol>
+  <ol class="armenian" start="1065">
+    <li title="1065">ՌԿԵ</li>
+  </ol>
+  <ol class="armenian" start="1800">
+    <li title="1800">ՌՊ</li>
+  </ol>
+  <ol class="armenian" start="1860">
+    <li title="1860">ՌՊԿ</li>
+  </ol>
+  <ol class="armenian" start="1865">
+    <li title="1865">ՌՊԿԵ</li>
+  </ol>
+  <ol class="armenian" start="5865">
+    <li title="5865">ՐՊԿԵ</li>
+  </ol>
+  <ol class="armenian" start="7005">
+    <li title="7005">ՈՒԵ</li>
+  </ol>
+  <ol class="armenian" start="7800">
+    <li title="7800">ՈՒՊ</li>
+  </ol>
+  <ol class="armenian" start="7865">
+    <li title="7865">ՈՒՊԿԵ</li>
+  </ol>
+  <ol class="armenian" start="9999">
+    <li title="9999">ՔՋՂԹ</li>
+  </ol>
+</div>
 
 
 <!--p class="notes">Notes: <br />CSS2.1 CR specifies an armenian property, but does not specify in any detail the mechanism for implementing it. Expectations for behavior in these tests are based on the descriptions of lower-armenian and upper-armenian in the version of the CSS3 Lists module current at the time this test was last updated.</p><p class="notes">The test uses the start attribute to reduce the size of the list.  This attribute is deprecated or unavailable in some formats, causing the test page not to validate, but appears to be supported in major browsers anyway (and will be reinstated in HTML5).</p><p class="notes">Both upper and lowercase variants are shown here because the test is about the generative mechanism. The case is tested elsewhere.</p-->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-type-armenian-003.xht b/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-type-armenian-003.xht
index 4852e42..422be23 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-type-armenian-003.xht
+++ b/third_party/blink/web_tests/external/wpt/css/css-lists/list-style-type-armenian-003.xht
@@ -24,17 +24,17 @@
 
 
 <div class="test">
-			<ol class="armenian" start="10000">
-				<li title="10,000">Ա̂</li>
-				<li title="10,001">Ա̂Ա</li>
-			</ol>
-			<ol class="armenian" start="55465">
-				<li title="55,465">Ե̂ՐՆԿԵ</li>
-			</ol>
-			<ol class="armenian" start="655465">
-				<li title="655,465">Կ̂Ե̂ՐՆԿԵ</li>
-			</ol>
-		</div>
+  <ol class="armenian" start="10000">
+    <li title="10,000">Ա̂</li>
+    <li title="10,001">Ա̂Ա</li>
+  </ol>
+  <ol class="armenian" start="55465">
+    <li title="55,465">Ե̂ՐՆԿԵ</li>
+  </ol>
+  <ol class="armenian" start="655465">
+    <li title="655,465">Կ̂Ե̂ՐՆԿԵ</li>
+  </ol>
+</div>
 
 
 <!--p class="notes">Notes: <br />CSS2.1 CR specifies an armenian property, but does not specify in any detail the mechanism for implementing it. Expectations for behavior in these tests are based on the descriptions of lower-armenian and upper-armenian in the version of the CSS3 Lists module current at the time this test was last updated.</p><p class="notes">The test uses the start attribute to reduce the size of the list.  This attribute is deprecated or unavailable in some formats, causing the test page not to validate, but appears to be supported in major browsers anyway (and will be reinstated in HTML5).</p><p class="notes">Both upper and lowercase variants are shown here because the test is about the generative mechanism. The case is tested elsewhere.</p-->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-001-ref.html
index d832a30..f5af1227 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-001-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-001-ref.html
@@ -1,25 +1,25 @@
 <!doctype html>
 <html>
 <head>
-	<meta charset="utf-8">
-	<title>CSS Reference File</title>
-	<link rel="author" title="Florian Rivoal" href="mailto:florian@rivoal.net">
-	<style>
-	div {
-		font-size: 50px;
-		position: absolute;
-		left: 30px;
-		top: 50px;
-	}
-	div span {
-		color: green;
-		background: green;
-		float: left;
-	}
-	</style>
+  <meta charset="utf-8">
+  <title>CSS Reference File</title>
+  <link rel="author" title="Florian Rivoal" href="mailto:florian@rivoal.net">
+  <style>
+  div {
+    font-size: 50px;
+    position: absolute;
+    left: 30px;
+    top: 50px;
+  }
+  div span {
+    color: green;
+    background: green;
+    float: left;
+  }
+  </style>
 </head>
 <body>
-	<p>Test passes if there is a <strong>filled green rectangle</strong> and <strong>no red</strong>.</p>
-	<div><span>a</span></div>
+  <p>Test passes if there is a <strong>filled green rectangle</strong> and <strong>no red</strong>.</p>
+  <div><span>a</span></div>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-001.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-001.html
index aaa76e04..afe1f9b6 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-001.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-001.html
@@ -1,33 +1,33 @@
 <!doctype html>
 <html>
 <head>
-	<meta charset="utf-8">
-	<title>CSS Test: ::first-letter formatting</title>
-	<link rel="author" title="Florian Rivoal" href="mailto:florian@rivoal.net">
-	<link rel="match" href="first-letter-001-ref.html">
-	<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-letter-styling">
-	<meta name="flags" content="">
-	<meta name="assert" content="Test checks that a floated ::first-letter follows the usual formating rules for floats.">
-	<style>
-	div {
-		font-size: 50px;
-		position: absolute;
-		left: 30px;
-		top: 50px;
-		background: red;
-	}
-	span {
-		background : white;
-	}
-	div::first-letter {
-		color: green;
-		background: green;
-		float: left;
-	}
-	</style>
+  <meta charset="utf-8">
+  <title>CSS Test: ::first-letter formatting</title>
+  <link rel="author" title="Florian Rivoal" href="mailto:florian@rivoal.net">
+  <link rel="match" href="first-letter-001-ref.html">
+  <link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-letter-styling">
+  <meta name="flags" content="">
+  <meta name="assert" content="Test checks that a floated ::first-letter follows the usual formating rules for floats.">
+  <style>
+  div {
+    font-size: 50px;
+    position: absolute;
+    left: 30px;
+    top: 50px;
+    background: red;
+  }
+  span {
+    background : white;
+  }
+  div::first-letter {
+    color: green;
+    background: green;
+    float: left;
+  }
+  </style>
 </head>
 <body>
-	<p>Test passes if there is a <strong>filled green rectangle</strong> and <strong>no red</strong>.</p>
-	<div>a<span>&nbsp;</span></div>
+  <p>Test passes if there is a <strong>filled green rectangle</strong> and <strong>no red</strong>.</p>
+  <div>a<span>&nbsp;</span></div>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-002.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-002.html
index 6123dfe..02cc920 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-002.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-002.html
@@ -1,35 +1,35 @@
 <!doctype html>
 <html>
 <head>
-	<meta charset="utf-8">
-	<title>CSS Test: ::first-letter formatting</title>
-	<link rel="author" title="Florian Rivoal" href="mailto:florian@rivoal.net">
-	<link rel="match" href="first-letter-001-ref.html">
-	<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-letter-styling">
-	<meta name="flags" content="">
-	<meta name="assert" content="Test checks that a floated ::first-letter is formatted identically to a floated non-pseudo element with the same content.">
-	<style>
-	div {
-		font-size: 50px;
-		position: absolute;
-		left: 30px;
-		top: 50px;
-	}
-	#d1 span {
-		color: red;
-		background: red;
-		float: left;
-	}
-	#d2::first-letter {
-		color: green;
-		background: green;
-		float: left;
-	}
-	</style>
+  <meta charset="utf-8">
+  <title>CSS Test: ::first-letter formatting</title>
+  <link rel="author" title="Florian Rivoal" href="mailto:florian@rivoal.net">
+  <link rel="match" href="first-letter-001-ref.html">
+  <link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-letter-styling">
+  <meta name="flags" content="">
+  <meta name="assert" content="Test checks that a floated ::first-letter is formatted identically to a floated non-pseudo element with the same content.">
+  <style>
+  div {
+    font-size: 50px;
+    position: absolute;
+    left: 30px;
+    top: 50px;
+  }
+  #d1 span {
+    color: red;
+    background: red;
+    float: left;
+  }
+  #d2::first-letter {
+    color: green;
+    background: green;
+    float: left;
+  }
+  </style>
 </head>
 <body>
-	<p>Test passes if there is a <strong>filled green rectangle</strong> and <strong>no red</strong>.</p>
-	<div id="d1"><span>a</span></div>
-	<div id="d2">a</div>
+  <p>Test passes if there is a <strong>filled green rectangle</strong> and <strong>no red</strong>.</p>
+  <div id="d1"><span>a</span></div>
+  <div id="d2">a</div>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-003.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-003.html
index b292d50..9c6f87a 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-003.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-003.html
@@ -1,35 +1,35 @@
 <!doctype html>
 <html>
 <head>
-	<meta charset="utf-8">
-	<title>CSS Test: ::first-letter formatting</title>
-	<link rel="author" title="Florian Rivoal" href="mailto:florian@rivoal.net">
-	<link rel="match" href="first-letter-001-ref.html">
-	<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-letter-styling">
-	<meta name="flags" content="">
-	<meta name="assert" content="Test checks that a floated ::first-letter is formatted identically to a floated non-pseudo element with the same content.">
-	<style>
-	div {
-		font-size: 50px;
-		position: absolute;
-		left: 30px;
-		top: 50px;
-	}
-	#d1::first-letter {
-		color: red;
-		background: red;
-		float: left;
-	}
-	#d2 span {
-		color: green;
-		background: green;
-		float: left;
-	}
-	</style>
+  <meta charset="utf-8">
+  <title>CSS Test: ::first-letter formatting</title>
+  <link rel="author" title="Florian Rivoal" href="mailto:florian@rivoal.net">
+  <link rel="match" href="first-letter-001-ref.html">
+  <link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-letter-styling">
+  <meta name="flags" content="">
+  <meta name="assert" content="Test checks that a floated ::first-letter is formatted identically to a floated non-pseudo element with the same content.">
+  <style>
+  div {
+    font-size: 50px;
+    position: absolute;
+    left: 30px;
+    top: 50px;
+  }
+  #d1::first-letter {
+    color: red;
+    background: red;
+    float: left;
+  }
+  #d2 span {
+    color: green;
+    background: green;
+    float: left;
+  }
+  </style>
 </head>
 <body>
-	<p>Test passes if there is a <strong>filled green rectangle</strong> and <strong>no red</strong>.</p>
-	<div id="d1">a</div>
-	<div id="d2"><span>a</span></div>
+  <p>Test passes if there is a <strong>filled green rectangle</strong> and <strong>no red</strong>.</p>
+  <div id="d1">a</div>
+  <div id="d2"><span>a</span></div>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-width-ref.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-width-ref.html
index 4a556189..8ebb00b 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-width-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-width-ref.html
@@ -2,19 +2,19 @@
 <meta charset="utf-8">
 <html lang="en">
 <head>
-	<title>initial-letter width test</title>
-	<style>
-		span {
-			position: absolute;
-			color: transparent;
-		}
-		#control {
-			background-color: green;
-		}
-	</style>
+  <title>initial-letter width test</title>
+  <style>
+    span {
+      position: absolute;
+      color: transparent;
+    }
+    #control {
+      background-color: green;
+    }
+  </style>
 </head>
 <body>
-	<p>There should be no red</p>
-	<span id="control">Test.</span>
+  <p>There should be no red</p>
+  <span id="control">Test.</span>
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-width.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-width.html
index a912e76..fedf917c 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-width.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-letter-width.html
@@ -2,37 +2,37 @@
 <meta charset="utf-8">
 <html lang="en">
 <head>
-	<title>initial-letter width test</title>
-	<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=362880">
-	<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-letter-styling">
-	<link rel="match" href="first-letter-width-ref.html">
-	<meta name="assert" content="The width of an element with first-letter styling should render correctly.">
-	<style>
-		div {
-			position: relative;
-		}
-		span {
-			position: absolute;
-			color: transparent;
-		}
-		#control {
-			background-color: green;
-		}
-		#test {
-			background-color: red;
-			line-height: 1;
-			top: 1px;
-		}
-		#test::first-letter {
-			text-transform: uppercase;
-		}
-	</style>
+  <title>initial-letter width test</title>
+  <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=362880">
+  <link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-letter-styling">
+  <link rel="match" href="first-letter-width-ref.html">
+  <meta name="assert" content="The width of an element with first-letter styling should render correctly.">
+  <style>
+    div {
+      position: relative;
+    }
+    span {
+      position: absolute;
+      color: transparent;
+    }
+    #control {
+      background-color: green;
+    }
+    #test {
+      background-color: red;
+      line-height: 1;
+      top: 1px;
+    }
+    #test::first-letter {
+      text-transform: uppercase;
+    }
+  </style>
 </head>
 <body>
-	<p>There should be no red</p>
-	<div>
-	<span id="test">Test</span>
-	<span id="control">Test.</span>
-	</div>
+  <p>There should be no red</p>
+  <div>
+  <span id="test">Test</span>
+  <span id="control">Test.</span>
+  </div>
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-assigned-node-with-before-after.html b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-assigned-node-with-before-after.html
index fddb36b..b926540 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-assigned-node-with-before-after.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-assigned-node-with-before-after.html
@@ -37,7 +37,7 @@
             background: yellow;
         }
     </style>
-    <p>Test passes if you see a single 100px by 100px green box below.</p> 
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
     <my-host>
         <div slot="foo"></div>
         <div slot="bar"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-assigned-node-with-rules.html b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-assigned-node-with-rules.html
index 3e6a8dde..e981eae 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-assigned-node-with-rules.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-assigned-node-with-rules.html
@@ -26,7 +26,7 @@
         color: red;
     }
     </style>
-    <p>Test passes if you see a single 100px by 100px green box below.</p> 
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
     <my-host>
         <div class="red">FAIL</div>
         <div class="green" slot="green">FAIL</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-host-rule.html b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-host-rule.html
index 40233f2e..ef70b90 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-host-rule.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-host-rule.html
@@ -25,7 +25,7 @@
             color: green;
         }
     </style>
-    <p>Test passes if you see a single 100px by 100px green box below.</p> 
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
     <my-host>
         <div>FAIL</div>
     </my-host>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-host-with-before-after.html b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-host-with-before-after.html
index e343784..c32d8a9 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-host-with-before-after.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-host-with-before-after.html
@@ -29,7 +29,7 @@
             background: green;
         }
     </style>
-    <p>Test passes if you see a single 100px by 100px green box below.</p> 
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
     <my-host>
         <div>FAIL</div>
     </my-host>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-invisible-slot.html b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-invisible-slot.html
index 4e35a3e..be9f308f 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-invisible-slot.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-invisible-slot.html
@@ -19,7 +19,7 @@
         height: 50%;
     }
     </style>
-    <p>Test passes if you see a single 100px by 100px green box below.</p> 
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
     <my-host>
         <div slot="green" style="background: green;"></div>
         <div style="background: red;">FAIL</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-root-hides-children.html b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-root-hides-children.html
index 3351847c..bc52605 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-root-hides-children.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-root-hides-children.html
@@ -17,7 +17,7 @@
         width: 100%; height: 100%; background: red;
     }
     </style>
-    <p>Test passes if you see a single 100px by 100px green box below.</p> 
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
     <my-host>
         <div>FAIL</div>
     </my-host>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slot-display-override.html b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slot-display-override.html
index c930faa..9338a25 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slot-display-override.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slot-display-override.html
@@ -20,7 +20,7 @@
             background: green;
         }
     </style>
-    <p>Test passes if you see a single 100px by 100px green box below.</p> 
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
     <my-host>
         <div></div>
     </my-host>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slot-style.html b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slot-style.html
index dfee90ac..e3f37c33 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slot-style.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slot-style.html
@@ -21,7 +21,7 @@
         height: 50%;
     }
     </style>
-    <p>Test passes if you see a single 100px by 100px green box below.</p> 
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
     <my-host>
         <div slot="green" style="background: green;">FAIL</div>
         <div slot="green" style="background: inherit;">FAIL</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slot.html b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slot.html
index 7c177b8f..2b588d622 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slot.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slot.html
@@ -19,7 +19,7 @@
         height: 50%;
     }
     </style>
-    <p>Test passes if you see a single 100px by 100px green box below.</p> 
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
     <my-host>
         <div slot="green" style="background: green;"></div>
         <div style="background: red;">FAIL</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slotted-nested.html b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slotted-nested.html
index 357bc785..5f930e2 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slotted-nested.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slotted-nested.html
@@ -20,7 +20,7 @@
             height: 25px;
         }
     </style>
-    <p>Test passes if you see a single 100px by 100px green box below.</p> 
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
     <outer-host>
         <span slot="outer">FAIL1</span>
         <span slot="inner">FAIL2</span>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slotted-rule.html b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slotted-rule.html
index 6c70581e..9771c5d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slotted-rule.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-slotted-rule.html
@@ -21,7 +21,7 @@
             height: 25px;
         }
     </style>
-    <p>Test passes if you see a single 100px by 100px green box below.</p> 
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
     <my-host>
         <div class="green">FAIL1</div>
         <myelem><span>FAIL2</span></myelem>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-with-outside-rules.html b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-with-outside-rules.html
index 3dd2678..c725752 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-with-outside-rules.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-with-outside-rules.html
@@ -24,7 +24,7 @@
         }
 
     </style>
-    <p>Test passes if you see a single 100px by 100px green box below.</p> 
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
     <my-host>
         <div>FAIL</div>
     </my-host>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-with-rules-no-style-leak.html b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-with-rules-no-style-leak.html
index e9fd52a..e4d1d15 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-with-rules-no-style-leak.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-with-rules-no-style-leak.html
@@ -18,7 +18,7 @@
         color:green;
     }
     </style>
-    <p>Test passes if you see a single 100px by 100px green box below.</p> 
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
     <my-host>
     </my-host>
     <div>FAIL</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-with-rules.html b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-with-rules.html
index 59787f0..3338ecb 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-with-rules.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-scoping/css-scoping-shadow-with-rules.html
@@ -17,7 +17,7 @@
         width: 100%; height: 100%; background: red;
     }
     </style>
-    <p>Test passes if you see a single 100px by 100px green box below.</p> 
+    <p>Test passes if you see a single 100px by 100px green box below.</p>
     <my-host>
         <div>FAIL</div>
     </my-host>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-001.html b/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-001.html
index c6c7400..167a916 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-001.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-001.html
@@ -1,35 +1,35 @@
 <!DOCTYPE HTML>
 <html>
 <head>
-	<meta charset="UTF-8">
-	<meta name="flags" content="dom">
+    <meta charset="UTF-8">
+    <meta name="flags" content="dom">
     <meta name="assert" content="shape-outside declaration is invalid if shape is invalid">
-	<title>CSS Shapes Test - shape-outside invalid shape</title>
-	<link rel="author" title="noonnightstorm" href="mailto:noonnightstorm@gmail.com">
-	<link rel="reviewer" title="Alan Stearns" href="mailto:stearns@adobe.com">
-	<link rel="help" href="http://www.w3.org/TR/css-shapes-1/#supported-basic-shapes">
-	<script src="/resources/testharness.js"></script>
-	<script src="/resources/testharnessreport.js"></script>
+    <title>CSS Shapes Test - shape-outside invalid shape</title>
+    <link rel="author" title="noonnightstorm" href="mailto:noonnightstorm@gmail.com">
+    <link rel="reviewer" title="Alan Stearns" href="mailto:stearns@adobe.com">
+    <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#supported-basic-shapes">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
 
-	<style>
+    <style>
 #shape{
-	width: 300px;
-	height: 300px;
-	shape-outside: invalid(50px,50px,50px,50px);
+    width: 300px;
+    height: 300px;
+    shape-outside: invalid(50px,50px,50px,50px);
 }
-	</style>
+    </style>
 </head>
 <body>
 
-	<div id="log"></div>
+    <div id="log"></div>
 
-	<div id="shape"></div>
+    <div id="shape"></div>
 
-	<script>
-	var obj = document.getElementById('shape');
-	var shapeOutside = getComputedStyle(obj).shapeOutside;
-	test(function() {assert_equals(shapeOutside, "none", "declaration should be Invalid")});
-	</script>
+    <script>
+    var obj = document.getElementById('shape');
+    var shapeOutside = getComputedStyle(obj).shapeOutside;
+    test(function() {assert_equals(shapeOutside, "none", "declaration should be Invalid")});
+    </script>
 
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-circle-002.html b/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-circle-002.html
index f3464ac..0cec392 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-circle-002.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-circle-002.html
@@ -1,36 +1,36 @@
 <!DOCTYPE HTML>
 <html>
 <head>
-	<meta charset="UTF-8">
-	<meta name="flags" content="dom">
+    <meta charset="UTF-8">
+    <meta name="flags" content="dom">
     <meta name="assert" content="shape-outside declaration is invalid if cy for circle function is invalid">
-	<title>CSS Shapes Test - Circle - invalid cy value</title>
-	<link rel="author" title="noonnightstorm" href="mailto:noonnightstorm@gmail.com">
-	<link rel="reviewer" title="Alan Stearns" href="mailto:stearns@adobe.com">
-	<link rel="help" href="http://www.w3.org/TR/css-shapes-1/#supported-basic-shapes">
-	<link rel="help" href="http://www.w3.org/TR/css-shapes-1/#funcdef-circle">
-	<script src="/resources/testharness.js"></script>
-	<script src="/resources/testharnessreport.js"></script>
+    <title>CSS Shapes Test - Circle - invalid cy value</title>
+    <link rel="author" title="noonnightstorm" href="mailto:noonnightstorm@gmail.com">
+    <link rel="reviewer" title="Alan Stearns" href="mailto:stearns@adobe.com">
+    <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#supported-basic-shapes">
+    <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#funcdef-circle">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
 
-	<style>
+    <style>
 #shape{
-	width: 300px;
-	height: 300px;
-	shape-outside: circle(50% at 50% 50);
+    width: 300px;
+    height: 300px;
+    shape-outside: circle(50% at 50% 50);
 }
-	</style>
+    </style>
 </head>
 <body>
 
-	<div id="log"></div>
+    <div id="log"></div>
 
-	<div id="shape"></div>
+    <div id="shape"></div>
 
-	<script>
-	var obj = document.getElementById('shape');
-	var cy = getComputedStyle(obj).shapeOutside;
-	test(function() {assert_equals(cy, "none", "declaration should be Invalid")});
-	</script>
+    <script>
+    var obj = document.getElementById('shape');
+    var cy = getComputedStyle(obj).shapeOutside;
+    test(function() {assert_equals(cy, "none", "declaration should be Invalid")});
+    </script>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-circle-003.html b/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-circle-003.html
index 28cbb0cf..e8ccf762 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-circle-003.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-circle-003.html
@@ -1,36 +1,36 @@
 <!doctype html>
 <html>
 <head>
-	<meta charset="UTF-8">
-	<meta name="flags" content="dom">
+    <meta charset="UTF-8">
+    <meta name="flags" content="dom">
     <meta name="assert" content="shape-outside declaration is invalid if circle shape function has an invalid cx param">
-	<title>CSS Shapes Test: Circle - invalid cx value</title>
-	<link rel="author" title="Sherlock Zhong" href="mailto:sherlock.z0917@gmail.com">
-	<link rel="reviewer" title="Alan Stearns" href="mailto:stearns@adobe.com"> <!-- 11-09-2013 TestTWF Shenzhen -->
-	<link rel="help" href="http://www.w3.org/TR/css-shapes-1/#supported-basic-shapes">
-	<link rel="help" href="http://www.w3.org/TR/css-shapes-1/#funcdef-ellipse">
-	<link rel="help" href="http://www.w3.org/TR/css-shapes-1/#funcdef-circle">
-	<script src="/resources/testharness.js"></script>
-	<script src="/resources/testharnessreport.js"></script>
-	<style>
+    <title>CSS Shapes Test: Circle - invalid cx value</title>
+    <link rel="author" title="Sherlock Zhong" href="mailto:sherlock.z0917@gmail.com">
+    <link rel="reviewer" title="Alan Stearns" href="mailto:stearns@adobe.com"> <!-- 11-09-2013 TestTWF Shenzhen -->
+    <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#supported-basic-shapes">
+    <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#funcdef-ellipse">
+    <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#funcdef-circle">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <style>
 #shape{
-	width: 300px;
-	height: 300px;
-	shape-outside: circle(50, 50%);
+    width: 300px;
+    height: 300px;
+    shape-outside: circle(50, 50%);
 }
-	</style>
+    </style>
 </head>
 <body>
 
-	<div id="log"></div>
+    <div id="log"></div>
 
-	<div id="shape"></div>
+    <div id="shape"></div>
 
-	<script>
-	var obj = document.getElementById('shape');
-	var cx = getComputedStyle(obj).shapeOutside;
-	test(function() {assert_equals(cx, "none", "declaration should be invalid")});
-	</script>
+    <script>
+    var obj = document.getElementById('shape');
+    var cx = getComputedStyle(obj).shapeOutside;
+    test(function() {assert_equals(cx, "none", "declaration should be invalid")});
+    </script>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-ellipse-004.html b/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-ellipse-004.html
index 8be7f23..66c4349 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-ellipse-004.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-ellipse-004.html
@@ -1,35 +1,35 @@
 <!DOCTYPE HTML>
 <html>
 <head>
-	<meta charset="UTF-8">
-	<meta name="flags" content="dom">
+    <meta charset="UTF-8">
+    <meta name="flags" content="dom">
     <meta name="assert" content="shape-outside declaration is invalid if ellipse function has one invalid argument">
-	<title>CSS Shapes Test - Ellipse - invalid 1 arg</title>
-	<link rel="author" title="noonnightstorm" href="mailto:noonnightstorm@gmail.com">
-	<link rel="reviewer" title="Alan Stearns" href="mailto:stearns@adobe.com">
-	<link rel="help" href="http://www.w3.org/TR/css-shapes-1/#supported-basic-shapes">
-	<script src="/resources/testharness.js"></script>
-	<script src="/resources/testharnessreport.js"></script>
+    <title>CSS Shapes Test - Ellipse - invalid 1 arg</title>
+    <link rel="author" title="noonnightstorm" href="mailto:noonnightstorm@gmail.com">
+    <link rel="reviewer" title="Alan Stearns" href="mailto:stearns@adobe.com">
+    <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#supported-basic-shapes">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
 
-	<style>
+    <style>
 #shape{
-	width: 300px;
-	height: 300px;
-	shape-outside: ellipse(50);
+    width: 300px;
+    height: 300px;
+    shape-outside: ellipse(50);
 }
-	</style>
+    </style>
 </head>
 <body>
 
-	<div id="log"></div>
+    <div id="log"></div>
 
-	<div id="shape"></div>
+    <div id="shape"></div>
 
-	<script>
-	var obj = document.getElementById('shape');
-	var ellipse = getComputedStyle(obj).shapeOutside;
-	test(function() {assert_equals(ellipse, "none", "declaration should be Invalid")});
-	</script>
+    <script>
+    var obj = document.getElementById('shape');
+    var ellipse = getComputedStyle(obj).shapeOutside;
+    test(function() {assert_equals(ellipse, "none", "declaration should be Invalid")});
+    </script>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-ellipse-005.html b/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-ellipse-005.html
index c90e8dc..e7dfd4d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-ellipse-005.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-ellipse-005.html
@@ -1,35 +1,35 @@
 <!DOCTYPE HTML>
 <html>
 <head>
-	<meta charset="UTF-8">
-	<meta name="flags" content="dom">
+    <meta charset="UTF-8">
+    <meta name="flags" content="dom">
     <meta name="assert" content="shape-outside declaration is invalid if cy in ellipse function is invalid">
-	<title>CSS Shapes Test - Ellipse - invalid cy value</title>
-	<link rel="author" title="noonnightstorm" href="mailto:noonnightstorm@gmail.com">
-	<link rel="reviewer" title="Alan Stearns" href="mailto:stearns@adobe.com">
-	<link rel="help" href="http://www.w3.org/TR/css-shapes-1/#supported-basic-shapes">
-	<script src="/resources/testharness.js"></script>
-	<script src="/resources/testharnessreport.js"></script>
+    <title>CSS Shapes Test - Ellipse - invalid cy value</title>
+    <link rel="author" title="noonnightstorm" href="mailto:noonnightstorm@gmail.com">
+    <link rel="reviewer" title="Alan Stearns" href="mailto:stearns@adobe.com">
+    <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#supported-basic-shapes">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
 
-	<style>
+    <style>
 #shape{
-	width: 300px;
-	height: 300px;
-	shape-outside: ellipse(50%, 50, 50%, 50%);
+    width: 300px;
+    height: 300px;
+    shape-outside: ellipse(50%, 50, 50%, 50%);
 }
-	</style>
+    </style>
 </head>
 <body>
 
-	<div id="log"></div>
+    <div id="log"></div>
 
-	<div id="shape"></div>
+    <div id="shape"></div>
 
-	<script>
-	var obj = document.getElementById('shape');
-	var ellipse = getComputedStyle(obj).shapeOutside;
-	test(function() {assert_equals(ellipse, "none", "declaration should be Invalid")});
-	</script>
+    <script>
+    var obj = document.getElementById('shape');
+    var ellipse = getComputedStyle(obj).shapeOutside;
+    test(function() {assert_equals(ellipse, "none", "declaration should be Invalid")});
+    </script>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-ellipse-006.html b/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-ellipse-006.html
index 8aff3cb..c775059 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-ellipse-006.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-outside-invalid-ellipse-006.html
@@ -1,35 +1,35 @@
 <!DOCTYPE HTML>
 <html>
 <head>
-	<meta charset="UTF-8">
-	<meta name="flags" content="dom">
+    <meta charset="UTF-8">
+    <meta name="flags" content="dom">
     <meta name="assert" content="shape-outside declaration is invalid if cx in ellipse function is invalid">
-	<title>CSS Shapes Test - Ellipse - invalid cx value</title>
-	<link rel="author" title="noonnightstorm" href="mailto:noonnightstorm@gmail.com">
-	<link rel="reviewer" title="Alan Stearns" href="mailto:stearns@adobe.com">
-	<link rel="help" href="http://www.w3.org/TR/css-shapes-1/#supported-basic-shapes">
-	<script src="/resources/testharness.js"></script>
-	<script src="/resources/testharnessreport.js"></script>
+    <title>CSS Shapes Test - Ellipse - invalid cx value</title>
+    <link rel="author" title="noonnightstorm" href="mailto:noonnightstorm@gmail.com">
+    <link rel="reviewer" title="Alan Stearns" href="mailto:stearns@adobe.com">
+    <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#supported-basic-shapes">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
 
-	<style>
+    <style>
 #shape{
-	width: 300px;
-	height: 300px;
-	shape-outside: ellipse(50, 50%, 50%, 50%);
+    width: 300px;
+    height: 300px;
+    shape-outside: ellipse(50, 50%, 50%, 50%);
 }
-	</style>
+    </style>
 </head>
 <body>
 
-	<div id="log"></div>
+    <div id="log"></div>
 
-	<div id="shape"></div>
+    <div id="shape"></div>
 
-	<script>
-	var obj = document.getElementById('shape');
-	var ellipse = getComputedStyle(obj).shapeOutside;
-	test(function() {assert_equals(ellipse, "none", "declaration should be Invalid")});
-	</script>
+    <script>
+    var obj = document.getElementById('shape');
+    var ellipse = getComputedStyle(obj).shapeOutside;
+    test(function() {assert_equals(ellipse, "none", "declaration should be Invalid")});
+    </script>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-shapes/spec-examples/support/rounded-triangle.svg b/third_party/blink/web_tests/external/wpt/css/css-shapes/spec-examples/support/rounded-triangle.svg
index ca0c268..68d87d11 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-shapes/spec-examples/support/rounded-triangle.svg
+++ b/third_party/blink/web_tests/external/wpt/css/css-shapes/spec-examples/support/rounded-triangle.svg
@@ -1,6 +1,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200px" height="200px">
 <g>
-	<path fill="#AED8E6" d="M167.405,164.386C186.707,183.974,180,200,152.5,200H50c-27.5,0-50-22.5-50-50V44.5
-		C0,17,15.792,10.526,35.094,30.114L167.405,164.386z"/>
+ <path fill="#AED8E6" d="M167.405,164.386C186.707,183.974,180,200,152.5,200H50c-27.5,0-50-22.5-50-50V44.5
+                         C0,17,15.792,10.526,35.094,30.114L167.405,164.386z"/>
 </g>
 </svg>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transitions/support/vendorPrefix.js b/third_party/blink/web_tests/external/wpt/css/css-transitions/support/vendorPrefix.js
index 16a78a5..1e7eed0 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-transitions/support/vendorPrefix.js
+++ b/third_party/blink/web_tests/external/wpt/css/css-transitions/support/vendorPrefix.js
@@ -9,9 +9,9 @@
 
 // convert "foo-bar" to "fooBar"
 function camelCase(str) {
-	return str.replace(/\-(\w)/g, function(match, letter){
-		return letter.toUpperCase();
-	});
+    return str.replace(/\-(\w)/g, function(match, letter){
+        return letter.toUpperCase();
+    });
 }
 
 // vendor-prefix a css property
diff --git a/third_party/blink/web_tests/external/wpt/css/css-variables/reference/vars-background-shorthand-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-variables/reference/vars-background-shorthand-001-ref.html
index 89ef2851..93561fd 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-variables/reference/vars-background-shorthand-001-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-variables/reference/vars-background-shorthand-001-ref.html
@@ -3,12 +3,12 @@
 <link rel="author" title="Lea Verou" href="mailto:lea@verou.me">
 <style>
 div {
-	width: 50px;
-	height: 50px;
-	padding: 50px;
-	margin: 10px;
-	display: inline-block;
-	background: green;
+    width: 50px;
+    height: 50px;
+    padding: 50px;
+    margin: 10px;
+    display: inline-block;
+    background: green;
 }
 </style>
 <p>Test passes if you see four green squares, and no red.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-variables/reference/vars-font-shorthand-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-variables/reference/vars-font-shorthand-001-ref.html
index febe23ed..39cb4da 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-variables/reference/vars-font-shorthand-001-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-variables/reference/vars-font-shorthand-001-ref.html
@@ -2,19 +2,19 @@
 <title>CSS Variables 1: Test variables in @font-face, font-family, font shorthand.</title>
 <link rel="author" title="Lea Verou" href="mailto:lea@verou.me">
 <style>
- 
+
 
 
 div {
-	width: 150px;
-	height: 150px;
-	margin: 10px;
-	display: inline-block;
-	vertical-align: middle;
-	background: green;
-	text-align: center;
-	color: green;
-	overflow: hidden;
+    width: 150px;
+    height: 150px;
+    margin: 10px;
+    display: inline-block;
+    vertical-align: middle;
+    background: green;
+    text-align: center;
+    color: green;
+    overflow: hidden;
 }
 
 </style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-variables/vars-background-shorthand-001.html b/third_party/blink/web_tests/external/wpt/css/css-variables/vars-background-shorthand-001.html
index 0865f476..741e2cc 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-variables/vars-background-shorthand-001.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-variables/vars-background-shorthand-001.html
@@ -5,32 +5,32 @@
 <link rel="match" href="reference/vars-background-shorthand-001-ref.html">
 <style>
 div {
-	width: 50px;
-	height: 50px;
-	padding: 50px;
-	margin: 10px;
-	display: inline-block;
-	background: red;
+    width: 50px;
+    height: 50px;
+    padding: 50px;
+    margin: 10px;
+    display: inline-block;
+    background: red;
 }
 
 div#d1 {
-	--foo: green;
-	background: var(--foo);
+    --foo: green;
+    background: var(--foo);
 }
 
 div#d2 {
-	--foo: green, green;
-	background: linear-gradient(var(--foo));
+    --foo: green, green;
+    background: linear-gradient(var(--foo));
 }
 
 div#d3 {
-	--foo: linear-gradient(green, green);
-	background: var(--foo);
+    --foo: linear-gradient(green, green);
+    background: var(--foo);
 }
 
 div#d4 {
-	--foo: center / 0 0;
-	background: green linear-gradient(red, red) var(--foo, );
+    --foo: center / 0 0;
+    background: green linear-gradient(red, red) var(--foo, );
 }
 </style>
 <p>Test passes if you see four green squares, and no red.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-variables/vars-font-shorthand-001.html b/third_party/blink/web_tests/external/wpt/css/css-variables/vars-font-shorthand-001.html
index e10aa87..69f091b 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-variables/vars-font-shorthand-001.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-variables/vars-font-shorthand-001.html
@@ -8,49 +8,49 @@
 <style>
 
 div {
-	width: 150px;
-	height: 150px;
-	margin: 10px;
-	display: inline-block;
-	vertical-align: middle;
-	background: red;
-	text-align: center;
-	color: green;
-	overflow: hidden;
+    width: 150px;
+    height: 150px;
+    margin: 10px;
+    display: inline-block;
+    vertical-align: middle;
+    background: red;
+    text-align: center;
+    color: green;
+    overflow: hidden;
 }
 
 div#d1 {
-	--foo: Ahem;
-	font-family: var(--foo);
-	font-size: 150px;
-	line-height: 1;
+    --foo: Ahem;
+    font-family: var(--foo);
+    font-size: 150px;
+    line-height: 1;
 }
 
 div#d2 {
-	--foo: 0 Ahem;
-	font: var(--foo);
-	font-size: 150px;
-	line-height: 150px;
+    --foo: 0 Ahem;
+    font: var(--foo);
+    font-size: 150px;
+    line-height: 150px;
 }
 
 div#d3 {
-	--foo: Ahem, sans-serif;
-	font: 150px/1 var(--foo);
+    --foo: Ahem, sans-serif;
+    font: 150px/1 var(--foo);
 }
 
 div#d4 {
-	--foo: Ahem;
-	font: 150px/1 var(--foo), sans-serif;
+    --foo: Ahem;
+    font: 150px/1 var(--foo), sans-serif;
 }
 
 div#d5 {
-	--foo: 1 Ahem;
-	font: 150px/var(--foo);
+    --foo: 1 Ahem;
+    font: 150px/var(--foo);
 }
 
 div#d6 {
-	--foo: 150px/1 Ahem;
-	font: var(--foo);
+    --foo: 150px/1 Ahem;
+    font: var(--foo);
 }
 </style>
 <p>Test passes if you see six green squares, and no red.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-element.html b/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-element.html
index 9f60ca7..c598d97b 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-element.html
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-element.html
@@ -135,6 +135,32 @@
    }, `Element with smooth scroll-behavior ; ${scrollFunction}() with smooth behavior`);
   });
 
+  [{scrollAttribute: "scrollLeft", scrollValue: elementToRevealLeft}, {scrollAttribute: "scrollTop", scrollValue: elementToRevealTop}].forEach((attributeTest) => {
+    promise_test(() => {
+      resetScroll(scrollingElement);
+      setScrollBehavior(styledElement, "autoBehavior");
+      assert_equals(scrollingElement.scrollLeft, 0);
+      assert_equals(scrollingElement.scrollTop, 0);
+      var expectedValue = Number(attributeTest.scrollValue);
+      scrollingElement[attributeTest.scrollAttribute] = expectedValue;
+      assert_equals( scrollingElement[attributeTest.scrollAttribute], expectedValue, "Should set scroll attribute immediately");
+      return new Promise((resolve) => { resolve(); });
+    }, `Set ${attributeTest.scrollAttribute} to element with auto scroll-behavior`);
+
+    promise_test(() => {
+      resetScroll(scrollingElement);
+      setScrollBehavior(styledElement, "smoothBehavior");
+      assert_equals(scrollingElement.scrollLeft, 0);
+      assert_equals(scrollingElement.scrollTop, 0);
+      var expectedValue = Number(attributeTest.scrollValue);
+      scrollingElement[attributeTest.scrollAttribute] = expectedValue;
+      assert_less_than(scrollingElement[attributeTest.scrollAttribute], expectedValue, "Shouldn't set scroll attribute immediately");
+      return waitForScrollEnd(scrollingElement).then(() => {
+        assert_equals(scrollingElement[attributeTest.scrollAttribute], expectedValue, "Final value of scroll attribute");
+      });
+    }, `Set ${attributeTest.scrollAttribute} to element with smooth scroll-behavior`);
+  });
+
   promise_test(() => {
     resetScroll(scrollingElement);
     setScrollBehavior(styledElement, "smoothBehavior");
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-main-frame-root.html b/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-main-frame-root.html
index 7ef0a4a..8aef869 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-main-frame-root.html
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-main-frame-root.html
@@ -140,6 +140,32 @@
      }, `Main frame with smooth scroll-behavior ; ${scrollFunction}() with smooth behavior`);
     });
 
+    [{scrollAttribute: "scrollLeft", scrollValue: elementToRevealLeft}, {scrollAttribute: "scrollTop", scrollValue: elementToRevealTop}].forEach((attributeTest) => {
+      promise_test(() => {
+        resetScroll(scrollingElement);
+        setScrollBehavior(styledElement, "autoBehavior");
+        assert_equals(scrollingElement.scrollLeft, 0);
+        assert_equals(scrollingElement.scrollTop, 0);
+        var expectedValue = Number(attributeTest.scrollValue);
+        scrollingElement[attributeTest.scrollAttribute] = expectedValue;
+        assert_equals( scrollingElement[attributeTest.scrollAttribute], expectedValue, "Should set scroll attribute immediately");
+        return new Promise((resolve) => { resolve(); });
+      }, `Set ${attributeTest.scrollAttribute} to frame with auto scroll-behavior`);
+
+      promise_test(() => {
+        resetScroll(scrollingElement);
+        setScrollBehavior(styledElement, "smoothBehavior");
+        assert_equals(scrollingElement.scrollLeft, 0);
+        assert_equals(scrollingElement.scrollTop, 0);
+        var expectedValue = Number(attributeTest.scrollValue);
+        scrollingElement[attributeTest.scrollAttribute] = expectedValue;
+        assert_less_than(scrollingElement[attributeTest.scrollAttribute], expectedValue, "Shouldn't set scroll attribute immediately");
+        return waitForScrollEnd(scrollingElement).then(() => {
+          assert_equals(scrollingElement[attributeTest.scrollAttribute], expectedValue, "Final value of scroll attribute");
+        });
+      }, `Set ${attributeTest.scrollAttribute} to frame with smooth scroll-behavior`);
+    });
+
     promise_test(() => {
       resetScroll(scrollingElement);
       setScrollBehavior(styledElement, "smoothBehavior");
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-smooth-positions.html b/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-smooth-positions.html
index 14e4c94..97905bb7 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-smooth-positions.html
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-smooth-positions.html
@@ -62,6 +62,34 @@
     });
   });
 
+  [{scrollAttribute: "scrollLeft", scrollValue: 500}, {scrollAttribute: "scrollTop", scrollValue: 250}].forEach(function(scrollTest) {
+    var initialPosition = Number(scrollTest.scrollValue) * 2;
+    [0, initialPosition].forEach((initial) => {
+      promise_test(() => {
+        return new Promise(function(resolve, reject) {
+          scrollNode(overflowNode, "scroll", "instant", initial, initial);
+          var oldValue = overflowNode[scrollTest.scrollAttribute];
+          assert_equals(oldValue, initial, `${scrollTest.scrollAttribute} should be at initial position`);
+          var expectedValue = Number(scrollTest.scrollValue);
+          overflowNode[scrollTest.scrollAttribute] = expectedValue;
+          observeScrolling(overflowNode, function(done) {
+            try {
+              var newValue = overflowNode[scrollTest.scrollAttribute];
+              assert_less_than_equal(Math.abs(expectedValue - newValue), Math.abs(expectedValue - oldValue), "Scroll position should move towards the final position");
+              if (done)
+                assert_equals(newValue, expectedValue, `${scrollTest.scrollAttribute} should reach final position`);
+              oldValue = newValue;
+            } catch(e) {
+              reject(e);
+            }
+            if (done)
+              resolve();
+          });
+        });
+      }, `Scroll positions when performing smooth scrolling from ${initial} to ${scrollTest.scrollValue} by setting ${scrollTest.scrollAttribute} `);
+    });
+  });
+
   promise_test(() => {
     return new Promise(function(resolve, reject) {
       resetScroll(overflowNode);
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-subframe-root.html b/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-subframe-root.html
index 32de1b6..050817d 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-subframe-root.html
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-subframe-root.html
@@ -141,6 +141,32 @@
      }, `Subframe with smooth scroll-behavior ; ${scrollFunction}() with smooth behavior`);
     });
 
+    [{scrollAttribute: "scrollLeft", scrollValue: elementToRevealLeft}, {scrollAttribute: "scrollTop", scrollValue: elementToRevealTop}].forEach((attributeTest) => {
+      promise_test(() => {
+        resetScroll(scrollingElement);
+        setScrollBehavior(styledElement, "autoBehavior");
+        assert_equals(scrollingElement.scrollLeft, 0);
+        assert_equals(scrollingElement.scrollTop, 0);
+        var expectedValue = Number(attributeTest.scrollValue);
+        scrollingElement[attributeTest.scrollAttribute] = expectedValue;
+        assert_equals(scrollingElement[attributeTest.scrollAttribute], expectedValue, `Should set ${attributeTest.scrollAttribute} immediately`);
+        return new Promise((resolve) => { resolve(); });
+      }, `Subframe setting ${attributeTest.scrollAttribute} with auto scroll-behavior`);
+
+      promise_test(() => {
+        resetScroll(scrollingElement);
+        setScrollBehavior(styledElement, "smoothBehavior");
+        assert_equals(scrollingElement.scrollLeft, 0);
+        assert_equals(scrollingElement.scrollTop, 0);
+        var expectedValue = Number(attributeTest.scrollValue);
+        scrollingElement[attributeTest.scrollAttribute] = expectedValue;
+        assert_less_than(scrollingElement[attributeTest.scrollAttribute], expectedValue, `Should not set ${attributeTest.scrollAttribute} immediately`);
+        return waitForScrollEnd(scrollingElement).then(() => {
+          assert_equals(scrollingElement[attributeTest.scrollAttribute], expectedValue, `Final value of ${attributeTest.scrollAttribute}`);
+        });
+     }, `Subframe setting ${attributeTest.scrollAttribute} with smooth scroll-behavior`);
+    });
+
     promise_test(() => {
       resetScroll(scrollingElement);
       setScrollBehavior(styledElement, "smoothBehavior");
@@ -164,7 +190,7 @@
       return waitForScrollEnd(scrollingElement).then(() => {
         assert_equals(scrollingElement.scrollLeft, 0, "Final value of scrollLeft");
         assert_equals(scrollingElement.scrollTop, 0, "Final value of scrollTop");
-    });
-  }, "Aborting an ongoing smooth scrolling on a subframe with an instant scrolling");
+      });
+    }, "Aborting an ongoing smooth scrolling on a subframe with an instant scrolling");
   }));
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/custom-elements/CustomElementRegistry.html b/third_party/blink/web_tests/external/wpt/custom-elements/CustomElementRegistry.html
index 2f7cf57..368044df 100644
--- a/third_party/blink/web_tests/external/wpt/custom-elements/CustomElementRegistry.html
+++ b/third_party/blink/web_tests/external/wpt/custom-elements/CustomElementRegistry.html
@@ -313,7 +313,7 @@
         get: function (target, name) {
             if (name == 'prototype' || name == 'observedAttributes')
                 throw 'Unexpected access to observedAttributes';
-            prototypeCalls.push(callOrder++);    
+            prototypeCalls.push(callOrder++);
             prototypeCalls.push(name);
             return target[name];
         }
@@ -321,7 +321,7 @@
     var constructorCalls = [];
     var proxy = new Proxy(constructor, {
         get: function (target, name) {
-            constructorCalls.push(callOrder++);    
+            constructorCalls.push(callOrder++);
             constructorCalls.push(name);
             return target[name];
         }
@@ -627,7 +627,7 @@
     return Promise.resolve().then(function () {
         assert_false(resolved, 'The promise returned by "whenDefined" must not be resolved until a custom element is defined');
         assert_false(rejected, 'The promise returned by "whenDefined" must not be rejected until a custom element is defined');
-    });    
+    });
 }, 'customElements.whenDefined must return an unresolved promise when the registry does not contain the entry with the given name')
 
 promise_test(function () {
diff --git a/third_party/blink/web_tests/external/wpt/custom-elements/reactions/resources/reactions.js b/third_party/blink/web_tests/external/wpt/custom-elements/reactions/resources/reactions.js
index 87510ce..5ed32a4f 100644
--- a/third_party/blink/web_tests/external/wpt/custom-elements/reactions/resources/reactions.js
+++ b/third_party/blink/web_tests/external/wpt/custom-elements/reactions/resources/reactions.js
@@ -32,7 +32,7 @@
     let container = document.createElement('div');
     container.appendChild(document.createElement('div'));
     document.body.appendChild(container);
- 
+
     test(function () {
         var element = define_new_custom_element();
         var instance = document.createElement(element.name);
diff --git a/third_party/blink/web_tests/external/wpt/custom-elements/throw-on-dynamic-markup-insertion-counter-construct.html b/third_party/blink/web_tests/external/wpt/custom-elements/throw-on-dynamic-markup-insertion-counter-construct.html
index 5582bca..5938a0ae 100644
--- a/third_party/blink/web_tests/external/wpt/custom-elements/throw-on-dynamic-markup-insertion-counter-construct.html
+++ b/third_party/blink/web_tests/external/wpt/custom-elements/throw-on-dynamic-markup-insertion-counter-construct.html
@@ -13,14 +13,14 @@
  <body>
  <div id="log"></div>
  <script>
- 
+
  async function construct_custom_element_in_parser(test, call_function)
  {
      const window = await create_window_in_test(test);
      const document = window.document;
- 
+
      document.open();
- 
+
      let executed = false;
      let exception = null;
      class CustomElement extends window.HTMLElement {
@@ -35,24 +35,24 @@
          }
      }
      window.customElements.define('some-element', CustomElement);
- 
+
      document.write('<!DOCTYPE html><html><body><some-element></some-element></body></html>');
      document.close();
- 
+
      assert_true(executed, 'Must synchronously instantiate a custom element');
      return {window, document, exception};
  }
- 
+
  promise_test(async function () {
      const result = await construct_custom_element_in_parser(this, (document) => document.open());
      assert_throws('InvalidStateError', () => { throw result.exception; }, 'Must throw an InvalidStateError');
  }, 'document.open() must throw an InvalidStateError when synchronously constructing a custom element');
- 
+
  promise_test(async function () {
      const result = await construct_custom_element_in_parser(this, (document) => document.open('text/html'));
      assert_throws('InvalidStateError', () => { throw result.exception; }, 'Must throw an InvalidStateError');
  }, 'document.open("text/html") must throw an InvalidStateError when synchronously constructing a custom element');
- 
+
  // https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-open-window
  promise_test(async function () {
      let load_promise = new Promise((resolve) => window.onmessage = (event) => resolve(event.data));
@@ -60,58 +60,58 @@
      assert_equals(result.exception, null);
      assert_equals(await load_promise, 'didNavigate');
  }, 'document.open(URL) must NOT throw an InvalidStateError when synchronously constructing a custom element');
- 
+
  promise_test(async function () {
      const result = await construct_custom_element_in_parser(this, (document) => document.close());
      assert_throws('InvalidStateError', () => { throw result.exception; }, 'Must throw an InvalidStateError');
  }, 'document.close() must throw an InvalidStateError when synchronously constructing a custom element');
- 
+
  promise_test(async function () {
      const result = await construct_custom_element_in_parser(this, (document) => document.write('<b>some text</b>'));
      assert_throws('InvalidStateError', () => { throw result.exception; }, 'Must throw an InvalidStateError');
      assert_equals(result.document.querySelector('b'), null, 'Must not insert new content');
      assert_false(result.document.documentElement.innerHTML.includes('some text'), 'Must not insert new content');
  }, 'document.write must throw an InvalidStateError when synchronously constructing a custom element');
- 
+
  promise_test(async function () {
      const result = await construct_custom_element_in_parser(this, (document) => document.writeln('<b>some text</b>'));
      assert_throws('InvalidStateError', () => { throw result.exception; }, 'Must throw an InvalidStateError');
      assert_equals(result.document.querySelector('b'), null, 'Must not insert new content');
      assert_false(result.document.documentElement.innerHTML.includes('some text'), 'Must not insert new content');
  }, 'document.writeln must throw an InvalidStateError when synchronously constructing a custom element');
- 
+
  promise_test(async function () {
      const another_window = await create_window_in_test(this);
      const result = await construct_custom_element_in_parser(this, (document) => another_window.document.open());
      assert_equals(result.exception, null);
  }, 'document.open() of another document must not throw an InvalidStateError when synchronously constructing a custom element');
- 
+
  promise_test(async function () {
      const another_window = await create_window_in_test(this);
      const result = await construct_custom_element_in_parser(this, (document) => another_window.document.open('text/html'));
      assert_equals(result.exception, null);
  }, 'document.open("text/html") of another document must not throw an InvalidStateError when synchronously constructing a custom element');
- 
+
  promise_test(async function () {
      const another_window = await create_window_in_test(this);
      const result = await construct_custom_element_in_parser(this, (document) => another_window.document.close());
      assert_equals(result.exception, null);
  }, 'document.close() of another document must not throw an InvalidStateError when synchronously constructing a custom element');
- 
+
  promise_test(async function () {
      const another_window = await create_window_in_test(this);
      const result = await construct_custom_element_in_parser(this, (document) => another_window.document.write('<b>some text</b>'));
      assert_equals(result.exception, null);
      assert_equals(another_window.document.querySelector('b').outerHTML, '<b>some text</b>');
  }, 'document.write of another document must not throw an InvalidStateError when synchronously constructing a custom element');
- 
+
  promise_test(async function () {
      const another_window = await create_window_in_test(this);
      const result = await construct_custom_element_in_parser(this, (document) => another_window.document.writeln('<b>some text</b>'));
      assert_equals(result.exception, null);
      assert_equals(another_window.document.querySelector('b').outerHTML, '<b>some text</b>');
  }, 'document.writeln of another document must not throw an InvalidStateError when synchronously constructing a custom element');
- 
+
  </script>
  </body>
  </html>
diff --git a/third_party/blink/web_tests/external/wpt/custom-elements/throw-on-dynamic-markup-insertion-counter-reactions.html b/third_party/blink/web_tests/external/wpt/custom-elements/throw-on-dynamic-markup-insertion-counter-reactions.html
index 9dccd4c..b9f9f55 100644
--- a/third_party/blink/web_tests/external/wpt/custom-elements/throw-on-dynamic-markup-insertion-counter-reactions.html
+++ b/third_party/blink/web_tests/external/wpt/custom-elements/throw-on-dynamic-markup-insertion-counter-reactions.html
@@ -20,7 +20,7 @@
     const document = window.document;
 
     document.open();
- 
+
     let executed = false;
     let exception = null;
     class CustomElement extends window.HTMLElement {
@@ -35,7 +35,7 @@
     }
     CustomElement.observedAttributes = ['title'];
     window.customElements.define('some-element', CustomElement);
- 
+
     document.write('<!DOCTYPE html><html><body><some-element title="some title"></some-element></body></html>');
     document.close();
 
@@ -47,12 +47,12 @@
     const result = await custom_element_reactions_in_parser(this, (document) => document.open());
     assert_throws('InvalidStateError', () => { throw result.exception; }, 'Must throw an InvalidStateError');
 }, 'document.open() must throw an InvalidStateError when processing custom element reactions for a synchronous constructed custom element');
- 
+
 promise_test(async function () {
     const result = await custom_element_reactions_in_parser(this, (document) => document.open('text/html'));
     assert_throws('InvalidStateError', () => { throw result.exception; }, 'Must throw an InvalidStateError');
 }, 'document.open("text/html") must throw an InvalidStateError when processing custom element reactions for a synchronous constructed custom element');
- 
+
 // https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-open-window
 promise_test(async function () {
     let load_promise = new Promise((resolve) => window.onmessage = (event) => resolve(event.data));
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/web-nfc.idl b/third_party/blink/web_tests/external/wpt/interfaces/web-nfc.idl
index b917d5e..b13d047c 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/web-nfc.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/web-nfc.idl
@@ -1,7 +1,7 @@
 // GENERATED CONTENT - DO NOT EDIT
 // Content was automatically extracted by Reffy into reffy-reports
 // (https://github.com/tidoust/reffy-reports)
-// Source: Web NFC API (https://w3c.github.io/web-nfc/)
+// Source: Web NFC (https://w3c.github.io/web-nfc/)
 
 [Exposed=Window]
 interface NDEFMessage {
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/webxr-ar-module.idl b/third_party/blink/web_tests/external/wpt/interfaces/webxr-ar-module.idl
index 61fcd6a..c5899d6 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/webxr-ar-module.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/webxr-ar-module.idl
@@ -3,12 +3,6 @@
 // (https://github.com/tidoust/reffy-reports)
 // Source: WebXR Augmented Reality Module - Level 1 (https://immersive-web.github.io/webxr-ar-module/)
 
-enum XRSessionMode {
-  "inline",
-  "immersive-vr",
-  "immersive-ar"
-};
-
 enum XREnvironmentBlendMode {
   "opaque",
   "alpha-blend",
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/webxr.idl b/third_party/blink/web_tests/external/wpt/interfaces/webxr.idl
index 012b67c..262fa24 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/webxr.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/webxr.idl
@@ -18,7 +18,8 @@
 
 enum XRSessionMode {
   "inline",
-  "immersive-vr"
+  "immersive-vr",
+  "immersive-ar"
 };
 
 dictionary XRSessionInit {
diff --git a/third_party/blink/web_tests/external/wpt/lint.whitelist b/third_party/blink/web_tests/external/wpt/lint.whitelist
index 4226727..ac2d304 100644
--- a/third_party/blink/web_tests/external/wpt/lint.whitelist
+++ b/third_party/blink/web_tests/external/wpt/lint.whitelist
@@ -13,15 +13,7 @@
 TRAILING WHITESPACE: 2dcontext/tools/current-work-canvas.xhtml
 TRAILING WHITESPACE: conformance-checkers/*
 TRAILING WHITESPACE: content-security-policy/*
-TRAILING WHITESPACE: custom-elements/*
-TRAILING WHITESPACE: html-longdesc/*
-TRAILING WHITESPACE: old-tests/*
-TRAILING WHITESPACE: pointerevents/*
-TRAILING WHITESPACE: shadow-dom/*
-TRAILING WHITESPACE: webaudio/*
-TRAILING WHITESPACE: WebIDL/*
-TRAILING WHITESPACE: webvtt/*
-TRAILING WHITESPACE: server-timing/resources/parsing/*.sub.headers
+TRAILING WHITESPACE: WebIDL/valid/*
 
 ## File types that should never be checked ##
 
@@ -54,10 +46,6 @@
 TRAILING WHITESPACE, INDENT TABS, CR AT EOL: *.bmp
 TRAILING WHITESPACE, INDENT TABS, CR AT EOL: *.sxg
 
-## Whitespace needed for testing
-
-TRAILING WHITESPACE: xhr/resources/headers-some-are-empty.asis
-
 ## .gitignore
 W3C-TEST.ORG: .gitignore
 
@@ -103,6 +91,12 @@
 INDENT TABS: webvtt/parsing/file-parsing/tests/support/header-tab.vtt
 INDENT TABS: webvtt/parsing/file-parsing/tests/support/whitespace-chars.vtt
 
+## Intentional use of trailing whitespace
+TRAILING WHITESPACE: server-timing/resources/parsing/*
+TRAILING WHITESPACE: webvtt/parsing/file-parsing/support/*.vtt
+TRAILING WHITESPACE: webvtt/parsing/file-parsing/tests/support/*.vtt
+TRAILING WHITESPACE: xhr/resources/headers-some-are-empty.asis
+
 # Intentional use of print statements
 PRINT STATEMENT: dom/nodes/Document-createElement-namespace-tests/generate.py
 PRINT STATEMENT: encrypted-media/polyfill/make-polyfill-tests.py
@@ -398,31 +392,22 @@
 ## Whitespace rules that we can't enforce yet
 INDENT TABS: css/compositing/*
 INDENT TABS: css/CSS2/*
-INDENT TABS: css/css-align/*
 INDENT TABS: css/css-backgrounds/*
 INDENT TABS: css/css-color/*
 INDENT TABS: css/css-conditional/*
-INDENT TABS: css/css-counter-styles/*
 INDENT TABS: css/css-flexbox/*
 INDENT TABS: css/css-fonts/*
-INDENT TABS: css/css-grid/*
-INDENT TABS: css/css-images/*
-INDENT TABS: css/css-lists/*
+INDENT TABS: css/css-images/support/1x1-green.svg
 INDENT TABS: css/css-masking/*
 INDENT TABS: css/css-multicol/*
 INDENT TABS: css/css-page/*
-INDENT TABS: css/css-pseudo/*
 INDENT TABS: css/css-regions/*
 INDENT TABS: css/css-round-display/*
-INDENT TABS: css/css-shapes/*
-INDENT TABS: css/css-speech/*
 INDENT TABS: css/css-text/*
 INDENT TABS: css/css-text-decor/*
 INDENT TABS: css/css-transforms/*
-INDENT TABS: css/css-transitions/*
 INDENT TABS: css/css-ui/*
 INDENT TABS: css/css-values/*
-INDENT TABS: css/css-variables/*
 INDENT TABS: css/css-writing-modes/*
 INDENT TABS: css/filter-effects/*
 INDENT TABS: css/mediaqueries/*
@@ -443,25 +428,7 @@
 CONSOLE: css/css-writing-modes/tools/generators/gulpfile.js
 CONSOLE: css/css-writing-modes/tools/generators/text-orientation-generator.js
 
-TRAILING WHITESPACE: css/CSS2/generated-content/before-after-positioned-002.html
-TRAILING WHITESPACE: css/CSS2/generated-content/before-after-positioned-003.html
-TRAILING WHITESPACE: css/CSS2/generated-content/before-after-positioned-004.html
 TRAILING WHITESPACE: css/css-fonts/support/fonts/gsubtest-lookup3.ufo/features.fea
-TRAILING WHITESPACE: css/css-scoping/css-scoping-shadow-assigned-node-with-before-after.html
-TRAILING WHITESPACE: css/css-scoping/css-scoping-shadow-assigned-node-with-rules.html
-TRAILING WHITESPACE: css/css-scoping/css-scoping-shadow-host-rule.html
-TRAILING WHITESPACE: css/css-scoping/css-scoping-shadow-host-with-before-after.html
-TRAILING WHITESPACE: css/css-scoping/css-scoping-shadow-invisible-slot.html
-TRAILING WHITESPACE: css/css-scoping/css-scoping-shadow-root-hides-children.html
-TRAILING WHITESPACE: css/css-scoping/css-scoping-shadow-slot-display-override.html
-TRAILING WHITESPACE: css/css-scoping/css-scoping-shadow-slot.html
-TRAILING WHITESPACE: css/css-scoping/css-scoping-shadow-slot-style.html
-TRAILING WHITESPACE: css/css-scoping/css-scoping-shadow-slotted-nested.html
-TRAILING WHITESPACE: css/css-scoping/css-scoping-shadow-slotted-rule.html
-TRAILING WHITESPACE: css/css-scoping/css-scoping-shadow-with-outside-rules.html
-TRAILING WHITESPACE: css/css-scoping/css-scoping-shadow-with-rules.html
-TRAILING WHITESPACE: css/css-scoping/css-scoping-shadow-with-rules-no-style-leak.html
-TRAILING WHITESPACE: css/css-variables/reference/vars-font-shorthand-001-ref.html
 TRAILING WHITESPACE: css/vendor-imports/mozilla/mozilla-central-reftests/css21/pagination/moz-css21-float-page-break-inside-avoid-7.html
 TRAILING WHITESPACE: css/vendor-imports/mozilla/mozilla-central-reftests/css21/pagination/moz-css21-float-page-break-inside-avoid-7-ref.html
 TRAILING WHITESPACE: css/vendor-imports/mozilla/mozilla-central-reftests/css21/pagination/moz-css21-float-page-break-inside-avoid-8.html
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/extension/pointerevent_constructor.html b/third_party/blink/web_tests/external/wpt/pointerevents/extension/pointerevent_constructor.html
index 6971dce..60b5790 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/extension/pointerevent_constructor.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/extension/pointerevent_constructor.html
@@ -81,7 +81,7 @@
                   isPrimary: true,
                   clientX: 300,
                 };
-                
+
                 var p1 = new PointerEvent("pointermove", pointerEventInitDict);
                 pointerEventInitDict.clientX += 10;
                 var p2 = new PointerEvent("pointermove", pointerEventInitDict);
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/extension/pointerevent_predicted_events_attributes-manual.html b/third_party/blink/web_tests/external/wpt/pointerevents/extension/pointerevent_predicted_events_attributes-manual.html
index 220a4b82..fdfcae1f 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/extension/pointerevent_predicted_events_attributes-manual.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/extension/pointerevent_predicted_events_attributes-manual.html
@@ -30,7 +30,7 @@
             function expect_no_predicted_events(event, eventName) {
                 test(function () {
                     assert_equals(event.getPredictedEvents().length, 0, eventName + ' should not have any predicted events');
-                }, expectedPointerType + ' ' + eventName + ' should not have any predicted events'); 
+                }, expectedPointerType + ' ' + eventName + ' should not have any predicted events');
             }
             function run() {
                 var test_pointerEvent = setup_pointerevent_test("predicted events attributes in pointerevents", ['touch']);
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/html/pointerevent_drag_interaction-manual.html b/third_party/blink/web_tests/external/wpt/pointerevents/html/pointerevent_drag_interaction-manual.html
index 0ac911f..b316ba9 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/html/pointerevent_drag_interaction-manual.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/html/pointerevent_drag_interaction-manual.html
@@ -9,7 +9,7 @@
         <script type="text/javascript" src="../pointerevent_support.js"></script>
         <script>
            var eventList = ['pointerdown', 'pointerup', 'pointercancel', 'gotpointercapture', 'lostpointercapture', 'dragstart'];
-        
+
            PhaseEnum = {
               DndWithoutCapture:   0,
               DndWithCapture:      1,
@@ -18,7 +18,7 @@
             };
             var phase = PhaseEnum.DndWithoutCapture;
             var received_events = [];
-        
+
             function resetTestState() {
                 phase = PhaseEnum.DndWithoutCapture;
             }
@@ -28,7 +28,7 @@
 
                 var target0 = document.querySelector('#target0');
                 var target1 = document.querySelector('#target1');
-                
+
                 function handleEvent(e) {
                     if (e.type == 'pointerdown') {
                        received_events = [];
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_pointerleave_pen-manual.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_pointerleave_pen-manual.html
index bb6dcc42..d0d8dd36 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_pointerleave_pen-manual.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_pointerleave_pen-manual.html
@@ -57,7 +57,7 @@
         <h1>Pointer Event: Dispatch pointerleave (pen)</h1>
         <h4>
             Test Description:
-            When a pointing device that supports hover (pen stylus) leaves the range of the digitizer while over an element, the pointerleave event must be dispatched. In addition, all the pointer events' isPrimary should always be true when the pointing device leaves and enters the range of the digitizer again. 
+            When a pointing device that supports hover (pen stylus) leaves the range of the digitizer while over an element, the pointerleave event must be dispatched. In addition, all the pointer events' isPrimary should always be true when the pointing device leaves and enters the range of the digitizer again.
         </h4>
         <br />
         <div id="target0">
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_releasepointercapture_onpointerup_mouse.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_releasepointercapture_onpointerup_mouse.html
index 23c28b4b..f37c7cf 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_releasepointercapture_onpointerup_mouse.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_releasepointercapture_onpointerup_mouse.html
@@ -58,7 +58,7 @@
 
                 // If the setPointerCapture method has been invoked on the pointer specified by pointerId,
                 // and the releasePointerCapture method has not been invoked,a lostpointercapture event must be
-                // dispatched to the element on which the setPointerCapture method was invoked. Furthermore, 
+                // dispatched to the element on which the setPointerCapture method was invoked. Furthermore,
                 // subsequent events for the specified pointer must follow normal hit testing mechanisms for
                 // determining the event target.
                 // TA: 3.7
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-verification.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-verification.html
index f42d9f6..80d61e0a 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-verification.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_touch-action-verification.html
@@ -3,7 +3,7 @@
     <head>
         <title>touch-action: basic verification</title>
         <meta name="assert" content="TA15.20 - The touch-action CSS property determines whether touch input MAY trigger default behavior supplied by the user agent.
-        auto: The user agent MAY determine any permitted touch behaviors, such as panning and zooming manipulations of the viewport, for touches that begin on the element. 
+        auto: The user agent MAY determine any permitted touch behaviors, such as panning and zooming manipulations of the viewport, for touches that begin on the element.
         none: Touches that begin on the element MUST NOT trigger default touch behaviors.
         pan-x: The user agent MAY consider touches that begin on the element only for the purposes of horizontally scrolling the element's nearest ancestor with horizontally scrollable content.
         pan-y: The user agent MAY consider touches that begin on the element only for the purposes of vertically scrolling the element's nearest ancestor with vertically scrollable content.
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html
index a6f238cb..2421b1c 100644
--- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html
@@ -78,7 +78,7 @@
                     }
                 });
                 on_event(document, 'pointerlockchange', function(event) {
-                    if (document.pointerLockElement == target0) 
+                    if (document.pointerLockElement == target0)
                         pointer_locked = true;
                     else
                         pointer_locked = false;
diff --git a/third_party/blink/web_tests/external/wpt/shadow-dom/event-inside-slotted-node.html b/third_party/blink/web_tests/external/wpt/shadow-dom/event-inside-slotted-node.html
index 5677314..5f8d3b9 100644
--- a/third_party/blink/web_tests/external/wpt/shadow-dom/event-inside-slotted-node.html
+++ b/third_party/blink/web_tests/external/wpt/shadow-dom/event-inside-slotted-node.html
@@ -220,7 +220,7 @@
         function testEventInsideNestedShadowsUnderAnotherShadow(outerUpperMode, outerLowerMode, innerMode) {
             test(function () {
                 var shadow = createNestedShadowTreesWithSlots(innerMode, outerUpperMode, outerLowerMode);
-                shadow.deepestNodeInLightDOM = shadow.target; // Needed for dispatchEventWithLog to attach event listeners. 
+                shadow.deepestNodeInLightDOM = shadow.target; // Needed for dispatchEventWithLog to attach event listeners.
                 shadow.target = shadow.innerSlot;
 
                 log = dispatchEventWithLog(shadow, new Event('foo', {bubbles: true, composed: true}));
diff --git a/third_party/blink/web_tests/external/wpt/shadow-dom/focus/focus-method-delegatesFocus.html b/third_party/blink/web_tests/external/wpt/shadow-dom/focus/focus-method-delegatesFocus.html
index 462542e..babe176 100644
--- a/third_party/blink/web_tests/external/wpt/shadow-dom/focus/focus-method-delegatesFocus.html
+++ b/third_party/blink/web_tests/external/wpt/shadow-dom/focus/focus-method-delegatesFocus.html
@@ -208,7 +208,7 @@
   assert_equals(shadowRoot.activeElement, aboveSlots);
   assert_equals(document.activeElement, host);
 }, "focus() on host with delegatesFocus & tabindex=0, #aboveSlots with tabindex=0 and #belowSlots with tabindex=1");
-  
+
 test(() => {
   resetTabIndexAndFocus();
   setTabIndex([host, slottedToFirstSlot, slottedToSecondSlot, belowSlots], 0);
diff --git a/third_party/blink/web_tests/external/wpt/tools/ci/azure/com.apple.Safari.plist b/third_party/blink/web_tests/external/wpt/tools/ci/azure/com.apple.Safari.plist
new file mode 100644
index 0000000..1220809
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/tools/ci/azure/com.apple.Safari.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>AllowRemoteAutomation</key>
+	<true/>
+</dict>
+</plist>
diff --git a/third_party/blink/web_tests/external/wpt/tools/ci/azure/install_safari.yml b/third_party/blink/web_tests/external/wpt/tools/ci/azure/install_safari.yml
index d454f51..10466e3 100644
--- a/third_party/blink/web_tests/external/wpt/tools/ci/azure/install_safari.yml
+++ b/third_party/blink/web_tests/external/wpt/tools/ci/azure/install_safari.yml
@@ -12,6 +12,9 @@
     displayName: 'Install Safari Technology Preview'
 - ${{ if eq(parameters.channel, 'stable') }}:
   - script: |
-      sudo safaridriver --enable
+      # Workaround for `sudo safardriver --enable` not working:
+      # https://github.com/web-platform-tests/wpt/issues/19845
+      mkdir -p ~/Library/WebDriver/
+      cp tools/ci/azure/com.apple.Safari.plist ~/Library/WebDriver/
       defaults write com.apple.Safari WebKitJavaScriptCanOpenWindowsAutomatically 1
     displayName: 'Configure Safari'
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-scheduling.html b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-scheduling.html
index 27ac098..8c627f90 100644
--- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-scheduling.html
+++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-scheduling.html
@@ -75,7 +75,7 @@
               // be interpolated correctly after the start frame.  The
               // absoluteThreshold below is currently set for Chrome which does
               // linear interpolation.  This needs to be updated eventually if
-              // other browsers do not user interpolation. 
+              // other browsers do not user interpolation.
               should(
                   output0.slice(0, startFrame + 1), `output0[0:${startFrame}]`)
                   .beConstantValueOf(0);
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html
index 2df5d03a..02caea6 100644
--- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html
+++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html
@@ -93,7 +93,7 @@
 
         // MediaStreamAudioDestinationNode has no output so it connect method
         // chaining isn't possible.
-        
+
         // MediaStreamSourceNode requires 'stream' object to be constructed,
         // which is a part of MediaStreamDestinationNode.
         let streamDestination = context.createMediaStreamDestination();
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal.html b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal.html
index 517d64f..b0455f86 100644
--- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal.html
+++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<!-- 
+<!--
 Tests that an audio-rate signal (AudioNode output) can be connected to an
 AudioParam.  Specifically, this tests that an audio-rate signal coming from an
 AudioBufferSourceNode playing an AudioBuffer containing a specific curve can be
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/retrospective-exponentialRampToValueAtTime.html b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/retrospective-exponentialRampToValueAtTime.html
index 978aeb9..c81c3ad2 100644
--- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/retrospective-exponentialRampToValueAtTime.html
+++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/retrospective-exponentialRampToValueAtTime.html
@@ -67,4 +67,4 @@
       audit.run();
     </script>
   </body>
-</html>       
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/retrospective-linearRampToValueAtTime.html b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/retrospective-linearRampToValueAtTime.html
index 42af6a7..9f5e55f 100644
--- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/retrospective-linearRampToValueAtTime.html
+++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/retrospective-linearRampToValueAtTime.html
@@ -67,4 +67,4 @@
       audit.run();
     </script>
   </body>
-</html>       
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/retrospective-setTargetAtTime.html b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/retrospective-setTargetAtTime.html
index 53427901..41a37bdb 100644
--- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/retrospective-setTargetAtTime.html
+++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/retrospective-setTargetAtTime.html
@@ -8,7 +8,7 @@
     <script src="/webaudio/resources/audit-util.js"></script>
     <script src="/webaudio/resources/audit.js"></script>
   </head>
-  <body>    
+  <body>
     <script>
       let audit = Audit.createTaskRunner();
 
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-gainnode-interface/gain.html b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-gainnode-interface/gain.html
index c1ee024..c41f4c9 100644
--- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-gainnode-interface/gain.html
+++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-gainnode-interface/gain.html
@@ -2,7 +2,7 @@
 <html>
   <head>
     <title>
-      Basic GainNode Functionality 
+      Basic GainNode Functionality
     </title>
     <script src="/resources/testharness.js"></script>
     <script src="/resources/testharnessreport.js"></script>
@@ -30,7 +30,7 @@
       // duration.
       let noteSilence = Math.floor(0.020 * sampleRate) / sampleRate;
       let noteSpacing = bufferDurationSeconds + noteSilence;
-          
+
       let lengthInSeconds = numberOfNotes * noteSpacing;
 
       let context = 0;
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/cachestorage/read-cached-response.js b/third_party/blink/web_tests/http/tests/inspector-protocol/cachestorage/read-cached-response.js
index d638797d..2aa40191 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/cachestorage/read-cached-response.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/cachestorage/read-cached-response.js
@@ -4,7 +4,7 @@
       `Tests reading cached response from the protocol.`);
 
   async function dumpResponse(cacheId, entry) {
-    var {error, result} = await dp.CacheStorage.requestCachedResponse({cacheId, requestURL: entry ? entry.requestURL : null});
+    var {error, result} = await dp.CacheStorage.requestCachedResponse({cacheId, requestURL: entry ? entry.requestURL : null, requestHeaders: []});
     if (error) {
       testRunner.log(`Error: ${error.message} ${error.data || ""}`);
       return;
diff --git a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-display-locked-expected.txt b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-display-locked-expected.txt
index 520f39936..38282be 100644
--- a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-display-locked-expected.txt
+++ b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-display-locked-expected.txt
@@ -1,23 +1,23 @@
 Tests accessibility values of display locked nodes
 
 WebArea
-  GenericContainer
-    GenericContainer
+  generic
+    generic
       text "locked"
-      GenericContainer
+      generic
         text "child"
-        GenericContainer
+        generic
           text "grandChild"
         text
       text
-      GenericContainer
+      generic
         text "invisible"
       text
-      GenericContainer
+      generic
         text "nested"
       text "text"
-    GenericContainer
-    GenericContainer
+    generic
+    generic
       text "normal text"
         InlineTextBox
 
diff --git a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-expected.txt b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-expected.txt
index b8d61a92..c55b5b9 100644
--- a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-expected.txt
+++ b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-expected.txt
@@ -1,8 +1,8 @@
 Tests Accessibility.getFullAXTree
 
 WebArea
-  GenericContainer
-    GenericContainer
+  generic
+    generic
       text "Some text in a div, also a"
         InlineTextBox
       link "link"
diff --git a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-ignoredNodes-expected.txt b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-ignoredNodes-expected.txt
index 4ffe30d..7d262ad 100644
--- a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-ignoredNodes-expected.txt
+++ b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-ignoredNodes-expected.txt
@@ -166,14 +166,14 @@
 }
 
 WebArea
-  *GenericContainer
+  *generic
     text "Div in list isn't presentational"
 {
   "nodeId": "<string>",
   "ignored": false,
   "role": {
-    "type": "internalRole",
-    "value": "GenericContainer"
+    "type": "role",
+    "value": "generic"
   },
   "name": {
     "type": "computedString",
@@ -508,14 +508,14 @@
 }
 
 WebArea
-  *GenericContainer "span with ARIA label"
+  *generic "span with ARIA label"
     text "should not be ignored"
 {
   "nodeId": "<string>",
   "ignored": false,
   "role": {
-    "type": "internalRole",
-    "value": "GenericContainer"
+    "type": "role",
+    "value": "generic"
   },
   "name": {
     "type": "computedString",
@@ -570,14 +570,14 @@
 }
 
 WebArea
-  *GenericContainer
+  *generic
     text "summary element without details parent is ignored"
 {
   "nodeId": "<string>",
   "ignored": false,
   "role": {
-    "type": "internalRole",
-    "value": "GenericContainer"
+    "type": "role",
+    "value": "generic"
   },
   "name": {
     "type": "computedString",
diff --git a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-ignoredNodesModal-expected.txt b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-ignoredNodesModal-expected.txt
index 45429f6..e8bdab9b 100644
--- a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-ignoredNodesModal-expected.txt
+++ b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-ignoredNodesModal-expected.txt
@@ -61,8 +61,8 @@
   "nodeId": "<string>",
   "ignored": false,
   "role": {
-    "type": "internalRole",
-    "value": "GenericContainer"
+    "type": "role",
+    "value": "generic"
   },
   "name": {
     "type": "computedString",
diff --git a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-nameSources-labelledby-expected.txt b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-nameSources-labelledby-expected.txt
index 65c8322..8d3775c 100644
--- a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-nameSources-labelledby-expected.txt
+++ b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-nameSources-labelledby-expected.txt
@@ -3,8 +3,8 @@
   "nodeId": "<string>",
   "ignored": false,
   "role": {
-    "type": "internalRole",
-    "value": "GenericContainer"
+    "type": "role",
+    "value": "generic"
   },
   "name": {
     "type": "computedString",
diff --git a/third_party/blink/web_tests/external/wpt/webxr/ar-module/idlharness.https.window-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.10/external/wpt/webxr/ar-module/idlharness.https.window-expected.txt
similarity index 100%
rename from third_party/blink/web_tests/external/wpt/webxr/ar-module/idlharness.https.window-expected.txt
rename to third_party/blink/web_tests/platform/mac-mac10.10/external/wpt/webxr/ar-module/idlharness.https.window-expected.txt
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/pointerevents/extension/pointerevent_coalesced_events_attributes-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/pointerevents/extension/pointerevent_coalesced_events_attributes-expected.txt
index 379ff10..e9ecdaa 100644
--- a/third_party/blink/web_tests/platform/mac/external/wpt/pointerevents/extension/pointerevent_coalesced_events_attributes-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/external/wpt/pointerevents/extension/pointerevent_coalesced_events_attributes-expected.txt
@@ -4,7 +4,7 @@
 PASS touch pointerover should not have any coalesced events
 PASS touch pointerenter should not have any coalesced events
 PASS touch pointerdown should not have any coalesced events
-PASS touch pointermove should have >2 coalesced events as main thread is busy.
+FAIL touch pointermove should have >2 coalesced events as main thread is busy. assert_greater_than: pointermove should have at least 2 coalesced events. expected a number greater than 1 but got 1
 PASS touch pointermove coalesced events should all be marked as trusted.
 PASS touch time stamps of coalesced events must be ascending.
 PASS touch pointermove coalesced events should all bubbles and cancelable as false.
diff --git a/third_party/blink/web_tests/scrollbars/custom-scrollbar-empty-rule-expected.html b/third_party/blink/web_tests/scrollbars/custom-scrollbar-empty-rule-expected.html
new file mode 100644
index 0000000..3b2b870
--- /dev/null
+++ b/third_party/blink/web_tests/scrollbars/custom-scrollbar-empty-rule-expected.html
@@ -0,0 +1,2 @@
+<!doctype html>
+<body style="overflow:scroll">You should see scrollbars.</body>
diff --git a/third_party/blink/web_tests/scrollbars/custom-scrollbar-empty-rule.html b/third_party/blink/web_tests/scrollbars/custom-scrollbar-empty-rule.html
new file mode 100644
index 0000000..503005e
--- /dev/null
+++ b/third_party/blink/web_tests/scrollbars/custom-scrollbar-empty-rule.html
@@ -0,0 +1,3 @@
+<!doctype html>
+<link rel="stylesheet" href="data:text/css,body::-webkit-scrollbar{}">
+<body style="overflow:scroll">You should see scrollbars.</body>
diff --git a/third_party/blink/web_tests/virtual/at-property/external/wpt/css/css-properties-values-api/idlharness-expected.txt b/third_party/blink/web_tests/virtual/at-property/external/wpt/css/css-properties-values-api/idlharness-expected.txt
index 87fb499..27e9ef0 100644
--- a/third_party/blink/web_tests/virtual/at-property/external/wpt/css/css-properties-values-api/idlharness-expected.txt
+++ b/third_party/blink/web_tests/virtual/at-property/external/wpt/css/css-properties-values-api/idlharness-expected.txt
@@ -15,8 +15,8 @@
 FAIL CSSPropertyRule interface: attribute syntax assert_true: The prototype object must have a property "syntax" expected true got false
 FAIL CSSPropertyRule interface: attribute inherits assert_true: The prototype object must have a property "inherits" expected true got false
 FAIL CSSPropertyRule interface: attribute initialValue assert_true: The prototype object must have a property "initialValue" expected true got false
-FAIL CSSRule interface: constant PROPERTY_RULE on interface object assert_equals: property has wrong value expected 18 but got 1001
-FAIL CSSRule interface: constant PROPERTY_RULE on interface prototype object assert_equals: property has wrong value expected 18 but got 1001
+PASS CSSRule interface: constant PROPERTY_RULE on interface object
+PASS CSSRule interface: constant PROPERTY_RULE on interface prototype object
 PASS CSS namespace: operation escape(CSSOMString)
 PASS CSS namespace: operation registerProperty(PropertyDefinition)
 Harness: the test ran to completion.
diff --git a/tools/grit/OWNERS b/tools/grit/OWNERS
index e94bc00d..6a8f447 100644
--- a/tools/grit/OWNERS
+++ b/tools/grit/OWNERS
@@ -2,3 +2,7 @@
 flackr@chromium.org
 thakis@chromium.org
 thestig@chromium.org
+
+# Admin policy related grit tools.
+per-file *policy*=file://components/policy/tools/OWNERS
+per-file *admin_template*=file://components/policy/tools/OWNERS
diff --git a/tools/gritsettings/resource_ids b/tools/gritsettings/resource_ids
index 60aa21e9..c1d08ab 100644
--- a/tools/gritsettings/resource_ids
+++ b/tools/gritsettings/resource_ids
@@ -201,9 +201,12 @@
   "chromeos/chromeos_strings.grd": {
     "messages": [14530],
   },
-  "chromeos/resources/chromeos_resources.grd": {
+  "chromeos/components/help_app_ui/resources/help_app_resources.grd": {
     "includes": [14580],
   },
+  "chromeos/resources/chromeos_resources.grd": {
+    "includes": [14680],
+  },
   # END chromeos/ section.
 
   # START components/ section.
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index f5d5e24..2a0c91e 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -5075,7 +5075,7 @@
   <int value="117" label="BDH_INVALID_REFCOUNT_OPERATION"/>
   <int value="118" label="BDH_INVALID_URL_OPERATION"/>
   <int value="119" label="OBSOLETE_IDBDH_INVALID_ORIGIN"/>
-  <int value="120" label="RFH_FAIL_PROVISIONAL_LOAD_NO_HANDLE"/>
+  <int value="120" label="OBSOLETE_RFH_FAIL_PROVISIONAL_LOAD_NO_HANDLE"/>
   <int value="121" label="OBSOLETE_RFH_FAIL_PROVISIONAL_LOAD_NO_ERROR"/>
   <int value="122" label="NI_IN_PAGE_NAVIGATION"/>
   <int value="123" label="RPH_MOJO_PROCESS_ERROR"/>
@@ -36542,6 +36542,7 @@
   <int value="-496119023" label="WebXR:enabled"/>
   <int value="-495585885" label="enable-spdy-proxy-dev-auth-origin"/>
   <int value="-494722408" label="ContentSuggestionsLargeThumbnail:enabled"/>
+  <int value="-493716471" label="WebRtcEnableMultiChannelApm:enabled"/>
   <int value="-493551777" label="StaleWhileRevalidate2:disabled"/>
   <int value="-492864618" label="NTPForeignSessionsSuggestions:disabled"/>
   <int value="-491131428" label="OmniboxNewAnswerLayout:disabled"/>
@@ -37337,12 +37338,14 @@
   <int value="584541349" label="ContextualSearchSingleActions:disabled"/>
   <int value="586021329" label="VibrateRequiresUserGesture:enabled"/>
   <int value="588333474" label="OfflineIndicator:disabled"/>
+  <int value="589924262" label="CryptAuthV2DeviceActivityStatus:enabled"/>
   <int value="592050831" label="disable-slimming-paint"/>
   <int value="593707592" label="disable-network-portal-notification"/>
   <int value="594756372" label="MyFilesVolume:disabled"/>
   <int value="595168244" label="NotificationExpansionAnimation:enabled"/>
   <int value="595371145" label="OmniboxRichEntitySuggestions:disabled"/>
   <int value="596106994" label="CustomFeedbackUi:enabled"/>
+  <int value="596108787" label="WebRtcEnableMultiChannelApm:disabled"/>
   <int value="598827460" label="enable-roboto-font-ui"/>
   <int value="598926697" label="VrLaunchIntent:disabled"/>
   <int value="600037637" label="AndroidSigninPromos:enabled"/>
@@ -38157,6 +38160,7 @@
   <int value="1670161209" label="ClickToOpenPDFPlaceholder:enabled"/>
   <int value="1670799163" label="ChromeHomeShowGoogleGWhenUrlCleared:enabled"/>
   <int value="1671021713" label="AutofillImportDynamicForms:disabled"/>
+  <int value="1673199712" label="enable-use-hdr-transfer-function"/>
   <int value="1673427566" label="ChromeHomeExpandButton:disabled"/>
   <int value="1677167062" label="AutomaticPasswordGeneration:enabled"/>
   <int value="1677258310" label="DragAppsInTabletMode:disabled"/>
@@ -38518,6 +38522,7 @@
   <int value="2129184006" label="NTPOfflinePageDownloadSuggestions:enabled"/>
   <int value="2129929643" label="enable-use-zoom-for-dsf"/>
   <int value="2132595171" label="OmniboxSearchEngineLogo:enabled"/>
+  <int value="2133594095" label="CryptAuthV2DeviceActivityStatus:disabled"/>
   <int value="2134480727" label="MediaSessionAccelerators:disabled"/>
   <int value="2135408204" label="OverscrollHistoryNavigation:disabled"/>
   <int value="2137113620"
@@ -46139,6 +46144,11 @@
   <int value="3" label="Model for target not available on client">
     The model for the optimization target not available on the client.
   </int>
+  <int value="4" label="In model prediction holdback">
+    The page load is part of a model prediction holdback where all decisions
+    will return false in an attempt to not taint the data in order to understand
+    the production recall of the model.
+  </int>
 </enum>
 
 <enum name="OptimizationGuideOptimizationTypeDecision">
@@ -56016,6 +56026,18 @@
   <int value="2" label="From TWA manage space activity"/>
 </enum>
 
+<enum name="SettingsPageInteractions">
+  <int value="0" label="PRIVACY_SYNC_AND_GOOGLE_SERVICES"/>
+  <int value="1" label="PRIVACY_CHROME_SIGN_IN"/>
+  <int value="2" label="PRIVACY_DO_NOT_TRACK"/>
+  <int value="3" label="PRIVACY_PAYMENT_METHOD"/>
+  <int value="4" label="PRIVACY_NETWORK_PREDICTION"/>
+  <int value="5" label="PRIVACY_MANAGE_CERTIFICATES"/>
+  <int value="6" label="PRIVACY_SECURITY_KEYS"/>
+  <int value="7" label="PRIVACY_SITE_SETTINGS"/>
+  <int value="8" label="PRIVACY_CLEAR_BROWSING_DATA"/>
+</enum>
+
 <enum name="SettingsResetPromptConfigError">
   <int value="1" label="Config Ok"/>
   <int value="2" label="Missing domain_hashes param"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 674cf6b..cb215d7 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -133831,6 +133831,16 @@
   </summary>
 </histogram>
 
+<histogram name="SettingsPage.SettingsPageInteractions"
+    enum="SettingsPageInteractions" expires_after="M83">
+  <owner>harrisonsean@chromium.org</owner>
+  <owner>msramek@chromium.org</owner>
+  <summary>
+    Which settings a user interacted with. Recorded every time a user interacts
+    with a setting.
+  </summary>
+</histogram>
+
 <histogram name="SettingsResetBubble.NumNoThanksPerReset" units="units">
   <owner>mad@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/rappor/rappor.xml b/tools/metrics/rappor/rappor.xml
index 83371ae..abe899a 100644
--- a/tools/metrics/rappor/rappor.xml
+++ b/tools/metrics/rappor/rappor.xml
@@ -101,24 +101,6 @@
 <!-- Rappor metric definitions -->
 
 <rappor-metrics>
-<rappor-metric name="Android.ExternalNavigationNotChosen"
-    type="UMA_RAPPOR_TYPE">
-  <owner>mariakhomenko@chromium.org</owner>
-  <summary>
-    The package name of an application that was given as an alternative choice
-    to handling a URL in Chrome, but wasn't chosen.
-  </summary>
-</rappor-metric>
-
-<rappor-metric name="Android.PageLoadDueToExternalApp" type="UMA_RAPPOR_TYPE">
-  <owner>mariakhomenko@chromium.org</owner>
-  <summary>
-    The package name of an application that sent an intent to Chrome. The name
-    is taken from EXTRA_APPLICATION_ID passed to Chrome in the intent by the
-    application.
-  </summary>
-</rappor-metric>
-
 <rappor-metric name="AppBanner.NativeApp.Dismissed" type="ETLD_PLUS_ONE">
   <owner>dfalcantara@chromium.org</owner>
   <summary>
diff --git a/ui/base/ime/win/on_screen_keyboard_display_manager_unittest.cc b/ui/base/ime/win/on_screen_keyboard_display_manager_unittest.cc
index 0bff39d..8ec37c6 100644
--- a/ui/base/ime/win/on_screen_keyboard_display_manager_unittest.cc
+++ b/ui/base/ime/win/on_screen_keyboard_display_manager_unittest.cc
@@ -8,7 +8,6 @@
 #include "base/files/file_util.h"
 #include "base/logging.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/strings/string16.h"
 #include "base/test/task_environment.h"
 #include "base/win/windows_version.h"
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc
index ba864403..6d693ce 100644
--- a/ui/compositor/compositor.cc
+++ b/ui/compositor/compositor.cc
@@ -430,6 +430,15 @@
   }
 
   output_color_space_ = output_color_space;
+  // TODO(crbug.com/1012846): Remove this flag and provision when HDR is fully
+  // supported on ChromeOS.
+#if defined(OS_CHROMEOS)
+  if (output_color_space_.IsHDR() &&
+      !base::CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kEnableUseHDRTransferFunction)) {
+    output_color_space_ = gfx::ColorSpace::CreateSRGB();
+  }
+#endif
   sdr_white_level_ = sdr_white_level;
   host_->SetRasterColorSpace(output_color_space_.GetRasterColorSpace());
   // Always force the ui::Compositor to re-draw all layers, because damage
diff --git a/ui/display/display_switches.cc b/ui/display/display_switches.cc
index f2c0f56..806109c 100644
--- a/ui/display/display_switches.cc
+++ b/ui/display/display_switches.cc
@@ -56,6 +56,9 @@
 #if defined(OS_CHROMEOS)
 // Enables unified desktop mode.
 const char kEnableUnifiedDesktop[] = "ash-enable-unified-desktop";
+
+// Enables using HDR transfer function if the monitor says it supports it.
+const char kEnableUseHDRTransferFunction[] = "enable-use-hdr-transfer-function";
 #endif
 
 }  // namespace switches
diff --git a/ui/display/display_switches.h b/ui/display/display_switches.h
index ff76d74..78b2af3c 100644
--- a/ui/display/display_switches.h
+++ b/ui/display/display_switches.h
@@ -26,6 +26,7 @@
 
 #if defined(OS_CHROMEOS)
 DISPLAY_EXPORT extern const char kEnableUnifiedDesktop[];
+DISPLAY_EXPORT extern const char kEnableUseHDRTransferFunction[];
 #endif
 
 }  // namespace switches
diff --git a/ui/gfx/animation/animation.cc b/ui/gfx/animation/animation.cc
index f2f8063..a8ebad6 100644
--- a/ui/gfx/animation/animation.cc
+++ b/ui/gfx/animation/animation.cc
@@ -7,7 +7,6 @@
 #include <memory>
 
 #include "base/command_line.h"
-#include "base/message_loop/message_loop.h"
 #include "build/build_config.h"
 #include "ui/gfx/animation/animation_container.h"
 #include "ui/gfx/animation/animation_delegate.h"
diff --git a/ui/gfx/animation/animation_win.cc b/ui/gfx/animation/animation_win.cc
index 54811480..c8fdc6d 100644
--- a/ui/gfx/animation/animation_win.cc
+++ b/ui/gfx/animation/animation_win.cc
@@ -6,7 +6,6 @@
 
 #include <windows.h>
 
-#include "base/message_loop/message_loop.h"
 #include "base/win/win_util.h"
 
 namespace gfx {
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc
index a8f27625..c5b4aef9 100644
--- a/ui/gfx/render_text_unittest.cc
+++ b/ui/gfx/render_text_unittest.cc
@@ -906,41 +906,60 @@
   render_text->Draw(canvas());
 }
 
-TEST_F(RenderTextTest, ItemizeTextToRuns) {
-  struct {
-    const wchar_t* text;
-    const char* expected_structure;
-  } cases[] = {
-      {L"abc", "[0->2]"},
-      {L"ښڛڜ", "[2<-0]"},
-      {L"abcښڛڜdef", "[0->2][5<-3][6->8]"},
-      {L"abcऔकखdefڜ", "[0->2][3->5][6->8][9]"},
-      {L"1-(800)-xxx-xxxx", "[0->1][2][3->5][6][7][8->10][11][12->15]"},
-      {L"क\u200Bख", "[0][1][2]"},
-      {L"1 2 3 4", "[0->6]"},
-      {L"1\u200C2\u200C3\u200C4", "[0][1][2][3][4][5][6]"},
-      {L"a\u0300e\u0301", "[0->3]"},
-      {L"\u0065\u0308\u0435\u0308", "[0->1][2->3]"},
-      {L"☞☛test☚☜", "[0->1][2->5][6->7]"},
-      {L"☺☺☺!", "[0->2][3]"},
-      {L"☺☺☺ښ", "[3][2<-0]"},
-      {L"(☾☹☽)", "[0][1->3][4]"},
-      {L"\U0001F6281234", "[0->1][2->5]"},      // http://crbug.com/530021
-      {L"▶Feel goods", "[0][1->4][5][6->10]"},  // http://crbug.com/278913
-      {L"ぬ「シ」ほ", "[0][1][2][3][4]"},       // http://crbug.com/396776
-      {L"國哲(c)1", "[0->1][2][3][4][5]"},      // http://crbug.com/125792
-  };
+struct RunListCase {
+  const char* test_name;
+  const wchar_t* text;
+  const char* expected;
+};
 
-  for (const auto& test : cases) {
-    SCOPED_TRACE(base::StringPrintf("Testing cases '%ls' -> '%s'", test.text,
-                                    test.expected_structure));
-    RenderTextHarfBuzz* render_text = GetRenderText();
-    render_text->SetText(WideToUTF16(test.text));
-    test_api()->EnsureLayout();
-    EXPECT_EQ(test.expected_structure, GetRunListStructureString());
+class RenderTextTestWithRunListCase
+    : public RenderTextTest,
+      public ::testing::WithParamInterface<RunListCase> {
+ public:
+  static std::string ParamInfoToString(
+      ::testing::TestParamInfo<RunListCase> param_info) {
+    return param_info.param.test_name;
   }
+};
+
+TEST_P(RenderTextTestWithRunListCase, ItemizeTextToRuns) {
+  RunListCase param = GetParam();
+  RenderTextHarfBuzz* render_text = GetRenderText();
+  render_text->SetText(WideToUTF16(param.text));
+  test_api()->EnsureLayout();
+  EXPECT_EQ(param.expected, GetRunListStructureString());
 }
 
+const RunListCase kBasicsRunListCases[] = {
+    {"simpleLTR", L"abc", "[0->2]"},
+    {"simpleRTL", L"ښڛڜ", "[2<-0]"},
+    {"asc_arb", L"abcښڛڜdef", "[0->2][5<-3][6->8]"},
+    {"asc_dev_asc", L"abcऔकखdefڜ", "[0->2][3->5][6->8][9]"},
+    {"phone", L"1-(800)-xxx-xxxx", "[0->1][2][3->5][6][7][8->10][11][12->15]"},
+    {"dev_ZWS", L"क\u200Bख", "[0][1][2]"},
+    {"numeric", L"1 2 3 4", "[0->6]"},
+    {"joiners", L"1\u200C2\u200C3\u200C4", "[0][1][2][3][4][5][6]"},
+    {"combining_accents1", L"a\u0300e\u0301", "[0->3]"},
+    {"combining_accents2", L"\u0065\u0308\u0435\u0308", "[0->1][2->3]"},
+    {"picto_title", L"☞☛test☚☜", "[0->1][2->5][6->7]"},
+    {"picto_LTR", L"☺☺☺!", "[0->2][3]"},
+    {"picto_RTL", L"☺☺☺ښ", "[3][2<-0]"},
+    {"paren_picto", L"(☾☹☽)", "[0][1->3][4]"},
+    {"emoji_asc", L"\U0001F6281234",
+     "[0->1][2->5]"},  // http://crbug.com/530021
+    {"emoji_title", L"▶Feel goods",
+     "[0][1->4][5][6->10]"},  // http://crbug.com/278913
+    {"jap_paren1", L"ぬ「シ」ほ",
+     "[0][1][2][3][4]"},  // http://crbug.com/396776
+    {"jap_paren2", L"國哲(c)1",
+     "[0->1][2][3][4][5]"},  // http://crbug.com/125792
+};
+
+INSTANTIATE_TEST_SUITE_P(ItemizeTextToRunsBasics,
+                         RenderTextTestWithRunListCase,
+                         ::testing::ValuesIn(kBasicsRunListCases),
+                         RenderTextTestWithRunListCase::ParamInfoToString);
+
 TEST_F(RenderTextTest, ElidedText) {
   // TODO(skanuj) : Add more test cases for following
   // - RenderText styles.
diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc
index 4907bd1b..a9499a2a 100644
--- a/ui/gl/gl_surface_egl.cc
+++ b/ui/gl/gl_surface_egl.cc
@@ -82,6 +82,7 @@
 #define EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE 0x3209
 #define EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE 0x320A
 #define EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE 0x345E
+#define EGL_PLATFORM_ANGLE_DEVICE_TYPE_SWIFTSHADER_ANGLE 0x3487
 #endif /* EGL_ANGLE_platform_angle */
 
 #ifndef EGL_ANGLE_platform_angle_d3d
@@ -298,28 +299,12 @@
     EGLenum platform_type,
     const std::vector<std::string>& enabled_features,
     const std::vector<std::string>& disabled_features,
-    bool warpDevice = false,
-    bool nullDevice = false,
-    bool D3D11on12Device = false) {
-  std::vector<EGLAttrib> display_attribs;
+    const std::vector<EGLAttrib>& extra_display_attribs) {
+  std::vector<EGLAttrib> display_attribs(extra_display_attribs);
 
   display_attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE);
   display_attribs.push_back(static_cast<EGLAttrib>(platform_type));
 
-  if (warpDevice) {
-    DCHECK(!nullDevice);
-    display_attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE);
-    display_attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_WARP_ANGLE);
-  } else if (nullDevice) {
-    DCHECK(!warpDevice);
-    display_attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE);
-    display_attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE);
-  } else if (D3D11on12Device) {
-    DCHECK(!nullDevice);
-    display_attribs.push_back(EGL_PLATFORM_ANGLE_D3D11ON12_ANGLE);
-    display_attribs.push_back(EGL_TRUE);
-  }
-
 #if defined(USE_X11)
   // ANGLE_NULL doesn't use the visual, and may run without X11 where we can't
   // get it anyway.
@@ -363,6 +348,7 @@
     EGLNativeDisplayType native_display,
     const std::vector<std::string>& enabled_angle_features,
     const std::vector<std::string>& disabled_angle_features) {
+  std::vector<EGLAttrib> extra_display_attribs;
   switch (display_type) {
     case DEFAULT:
     case SWIFT_SHADER:
@@ -370,52 +356,80 @@
     case ANGLE_D3D9:
       return GetPlatformANGLEDisplay(
           native_display, EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE,
-          enabled_angle_features, disabled_angle_features);
+          enabled_angle_features, disabled_angle_features,
+          extra_display_attribs);
     case ANGLE_D3D11:
       return GetPlatformANGLEDisplay(
           native_display, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE,
-          enabled_angle_features, disabled_angle_features);
+          enabled_angle_features, disabled_angle_features,
+          extra_display_attribs);
     case ANGLE_D3D11_NULL:
+      extra_display_attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE);
+      extra_display_attribs.push_back(
+          EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE);
       return GetPlatformANGLEDisplay(
           native_display, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE,
-          enabled_angle_features, disabled_angle_features, /*warpDevice=*/false,
-          /*nullDevice=*/true);
+          enabled_angle_features, disabled_angle_features,
+          extra_display_attribs);
     case ANGLE_OPENGL:
       return GetPlatformANGLEDisplay(
           native_display, EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE,
-          enabled_angle_features, disabled_angle_features);
+          enabled_angle_features, disabled_angle_features,
+          extra_display_attribs);
     case ANGLE_OPENGL_NULL:
+      extra_display_attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE);
+      extra_display_attribs.push_back(
+          EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE);
       return GetPlatformANGLEDisplay(
           native_display, EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE,
-          enabled_angle_features, disabled_angle_features, /*warpDevice=*/false,
-          /*nullDevice=*/true);
+          enabled_angle_features, disabled_angle_features,
+          extra_display_attribs);
     case ANGLE_OPENGLES:
       return GetPlatformANGLEDisplay(
           native_display, EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE,
-          enabled_angle_features, disabled_angle_features);
+          enabled_angle_features, disabled_angle_features,
+          extra_display_attribs);
     case ANGLE_OPENGLES_NULL:
+      extra_display_attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE);
+      extra_display_attribs.push_back(
+          EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE);
       return GetPlatformANGLEDisplay(
           native_display, EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE,
-          enabled_angle_features, disabled_angle_features, /*warpDevice=*/false,
-          /*nullDevice=*/true);
+          enabled_angle_features, disabled_angle_features,
+          extra_display_attribs);
     case ANGLE_NULL:
       return GetPlatformANGLEDisplay(
           native_display, EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE,
-          enabled_angle_features, disabled_angle_features);
+          enabled_angle_features, disabled_angle_features,
+          extra_display_attribs);
     case ANGLE_VULKAN:
       return GetPlatformANGLEDisplay(
           native_display, EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE,
-          enabled_angle_features, disabled_angle_features);
+          enabled_angle_features, disabled_angle_features,
+          extra_display_attribs);
     case ANGLE_VULKAN_NULL:
+      extra_display_attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE);
+      extra_display_attribs.push_back(
+          EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE);
       return GetPlatformANGLEDisplay(
           native_display, EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE,
-          enabled_angle_features, disabled_angle_features, /*warpDevice=*/false,
-          /*nullDevice=*/true);
+          enabled_angle_features, disabled_angle_features,
+          extra_display_attribs);
     case ANGLE_D3D11on12:
+      extra_display_attribs.push_back(EGL_PLATFORM_ANGLE_D3D11ON12_ANGLE);
+      extra_display_attribs.push_back(EGL_TRUE);
       return GetPlatformANGLEDisplay(
           native_display, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE,
-          enabled_angle_features, disabled_angle_features, /*warpDevice=*/false,
-          /*nullDevice=*/false, /*D3D11on12Device=*/true);
+          enabled_angle_features, disabled_angle_features,
+          extra_display_attribs);
+    case ANGLE_SWIFTSHADER:
+      extra_display_attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE);
+      extra_display_attribs.push_back(
+          EGL_PLATFORM_ANGLE_DEVICE_TYPE_SWIFTSHADER_ANGLE);
+      return GetPlatformANGLEDisplay(
+          native_display, EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE,
+          enabled_angle_features, disabled_angle_features,
+          extra_display_attribs);
     default:
       NOTREACHED();
       return EGL_NO_DISPLAY;
@@ -450,6 +464,8 @@
       return "VulkanNull";
     case ANGLE_D3D11on12:
       return "D3D11on12";
+    case ANGLE_SWIFTSHADER:
+      return "SwiftShader";
     default:
       NOTREACHED();
       return "Err";
@@ -677,6 +693,7 @@
                         bool supports_angle_opengl,
                         bool supports_angle_null,
                         bool supports_angle_vulkan,
+                        bool supports_angle_swiftshader,
                         const base::CommandLine* command_line,
                         std::vector<DisplayType>* init_displays) {
   // SwiftShader does not use the platform extensions
@@ -763,6 +780,12 @@
     }
   }
 
+  if (supports_angle_swiftshader) {
+    if (requested_renderer == kANGLEImplementationSwiftShaderName) {
+      AddInitDisplay(init_displays, ANGLE_SWIFTSHADER);
+    }
+  }
+
   // If no displays are available due to missing angle extensions or invalid
   // flags, request the default display.
   if (init_displays->empty()) {
@@ -1061,6 +1084,7 @@
   bool supports_angle_opengl = false;
   bool supports_angle_null = false;
   bool supports_angle_vulkan = false;
+  bool supports_angle_swiftshader = false;
   // Check for availability of ANGLE extensions.
   if (client_extensions &&
       ExtensionsContain(client_extensions, "EGL_ANGLE_platform_angle")) {
@@ -1072,6 +1096,8 @@
         ExtensionsContain(client_extensions, "EGL_ANGLE_platform_angle_null");
     supports_angle_vulkan =
         ExtensionsContain(client_extensions, "EGL_ANGLE_platform_angle_vulkan");
+    supports_angle_swiftshader = ExtensionsContain(
+        client_extensions, "EGL_ANGLE_platform_angle_device_type_swiftshader");
   }
 
   if (client_extensions) {
@@ -1082,8 +1108,8 @@
   std::vector<DisplayType> init_displays;
   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
   GetEGLInitDisplays(supports_angle_d3d, supports_angle_opengl,
-                     supports_angle_null, supports_angle_vulkan, command_line,
-                     &init_displays);
+                     supports_angle_null, supports_angle_vulkan,
+                     supports_angle_swiftshader, command_line, &init_displays);
 
   std::vector<std::string> enabled_angle_features =
       GetStringVectorFromCommandLine(command_line,
diff --git a/ui/gl/gl_surface_egl.h b/ui/gl/gl_surface_egl.h
index 19bedbda..9d8c119 100644
--- a/ui/gl/gl_surface_egl.h
+++ b/ui/gl/gl_surface_egl.h
@@ -49,13 +49,15 @@
   ANGLE_VULKAN = 11,
   ANGLE_VULKAN_NULL = 12,
   ANGLE_D3D11on12 = 13,
-  DISPLAY_TYPE_MAX = 14,
+  ANGLE_SWIFTSHADER = 14,
+  DISPLAY_TYPE_MAX = 15,
 };
 
 GL_EXPORT void GetEGLInitDisplays(bool supports_angle_d3d,
                                   bool supports_angle_opengl,
                                   bool supports_angle_null,
                                   bool supports_angle_vulkan,
+                                  bool supports_angle_swiftshader,
                                   const base::CommandLine* command_line,
                                   std::vector<DisplayType>* init_displays);
 
diff --git a/ui/gl/gl_switches.cc b/ui/gl/gl_switches.cc
index d2e41f9..c72f7c0 100644
--- a/ui/gl/gl_switches.cc
+++ b/ui/gl/gl_switches.cc
@@ -26,6 +26,7 @@
 const char kANGLEImplementationOpenGLESName[] = "gles";
 const char kANGLEImplementationNullName[] = "null";
 const char kANGLEImplementationVulkanName[] = "vulkan";
+const char kANGLEImplementationSwiftShaderName[] = "swiftshader";
 
 // Special switches for "NULL"/stub driver implementations.
 const char kANGLEImplementationD3D11NULLName[] = "d3d11-null";
diff --git a/ui/gl/gl_switches.h b/ui/gl/gl_switches.h
index df32939f..a1fd2c23 100644
--- a/ui/gl/gl_switches.h
+++ b/ui/gl/gl_switches.h
@@ -31,6 +31,7 @@
 GL_EXPORT extern const char kANGLEImplementationOpenGLESName[];
 GL_EXPORT extern const char kANGLEImplementationNullName[];
 GL_EXPORT extern const char kANGLEImplementationVulkanName[];
+GL_EXPORT extern const char kANGLEImplementationSwiftShaderName[];
 
 GL_EXPORT extern const char kANGLEImplementationD3D11NULLName[];
 GL_EXPORT extern const char kANGLEImplementationOpenGLNULLName[];
diff --git a/ui/gl/test/egl_initialization_displays_unittest.cc b/ui/gl/test/egl_initialization_displays_unittest.cc
index 847d583..1699a3e 100644
--- a/ui/gl/test/egl_initialization_displays_unittest.cc
+++ b/ui/gl/test/egl_initialization_displays_unittest.cc
@@ -17,7 +17,8 @@
   // using --disable-d3d11 with the default --use-angle should never return
   // D3D11.
   command_line->AppendSwitch(switches::kDisableD3D11);
-  GetEGLInitDisplays(true, true, true, true, command_line.get(), &displays);
+  GetEGLInitDisplays(true, true, true, true, true, command_line.get(),
+                     &displays);
   EXPECT_FALSE(base::Contains(displays, gl::ANGLE_D3D11));
 
   // Specifically requesting D3D11 should always return it if the extension is
@@ -25,14 +26,16 @@
   command_line->AppendSwitchASCII(switches::kUseANGLE,
                                   gl::kANGLEImplementationD3D11Name);
   displays.clear();
-  GetEGLInitDisplays(true, true, true, true, command_line.get(), &displays);
+  GetEGLInitDisplays(true, true, true, true, true, command_line.get(),
+                     &displays);
   EXPECT_TRUE(base::Contains(displays, gl::ANGLE_D3D11));
   EXPECT_EQ(displays.size(), 1u);
 
   // Specifically requesting D3D11 should not return D3D11 if the extension is
   // not available
   displays.clear();
-  GetEGLInitDisplays(false, true, true, true, command_line.get(), &displays);
+  GetEGLInitDisplays(false, true, true, true, true, command_line.get(),
+                     &displays);
   EXPECT_FALSE(base::Contains(displays, gl::ANGLE_D3D11));
 }
 
@@ -46,7 +49,8 @@
   command_line->AppendSwitchASCII(switches::kUseGL,
                                   gl::kGLImplementationSwiftShaderForWebGLName);
   displays.clear();
-  GetEGLInitDisplays(true, true, true, true, command_line.get(), &displays);
+  GetEGLInitDisplays(true, true, true, true, true, command_line.get(),
+                     &displays);
   EXPECT_TRUE(base::Contains(displays, gl::SWIFT_SHADER));
   EXPECT_EQ(displays.size(), 1u);
 
@@ -54,7 +58,8 @@
   command_line->AppendSwitchASCII(switches::kUseANGLE,
                                   gl::kANGLEImplementationD3D11Name);
   displays.clear();
-  GetEGLInitDisplays(true, true, true, true, command_line.get(), &displays);
+  GetEGLInitDisplays(true, true, true, true, true, command_line.get(),
+                     &displays);
   EXPECT_TRUE(base::Contains(displays, gl::SWIFT_SHADER));
   EXPECT_EQ(displays.size(), 1u);
 }
@@ -65,7 +70,7 @@
 
   // Default without --use-angle flag
   std::vector<gl::DisplayType> default_no_flag_displays;
-  GetEGLInitDisplays(true, true, true, true, command_line.get(),
+  GetEGLInitDisplays(true, true, true, true, true, command_line.get(),
                      &default_no_flag_displays);
   EXPECT_FALSE(default_no_flag_displays.empty());
 
@@ -73,7 +78,7 @@
   command_line->AppendSwitchASCII(switches::kUseANGLE,
                                   gl::kANGLEImplementationDefaultName);
   std::vector<gl::DisplayType> default_with_flag_displays;
-  GetEGLInitDisplays(true, true, true, true, command_line.get(),
+  GetEGLInitDisplays(true, true, true, true, true, command_line.get(),
                      &default_with_flag_displays);
   EXPECT_FALSE(default_with_flag_displays.empty());
 
@@ -91,7 +96,8 @@
   command_line->AppendSwitchASCII(switches::kUseANGLE,
                                   gl::kANGLEImplementationOpenGLName);
   displays.clear();
-  GetEGLInitDisplays(true, true, true, true, command_line.get(), &displays);
+  GetEGLInitDisplays(true, true, true, true, true, command_line.get(),
+                     &displays);
   EXPECT_TRUE(base::Contains(displays, gl::ANGLE_OPENGL));
   EXPECT_EQ(displays.size(), 1u);
 
@@ -99,7 +105,8 @@
   command_line->AppendSwitchASCII(switches::kUseANGLE,
                                   gl::kANGLEImplementationOpenGLESName);
   displays.clear();
-  GetEGLInitDisplays(true, true, true, true, command_line.get(), &displays);
+  GetEGLInitDisplays(true, true, true, true, true, command_line.get(),
+                     &displays);
   EXPECT_TRUE(base::Contains(displays, gl::ANGLE_OPENGLES));
   EXPECT_EQ(displays.size(), 1u);
 
@@ -107,7 +114,8 @@
   command_line->AppendSwitchASCII(switches::kUseANGLE,
                                   gl::kANGLEImplementationNullName);
   displays.clear();
-  GetEGLInitDisplays(true, true, true, true, command_line.get(), &displays);
+  GetEGLInitDisplays(true, true, true, true, true, command_line.get(),
+                     &displays);
   EXPECT_TRUE(base::Contains(displays, gl::ANGLE_NULL));
   EXPECT_EQ(displays.size(), 1u);
 
@@ -115,9 +123,19 @@
   command_line->AppendSwitchASCII(switches::kUseANGLE,
                                   gl::kANGLEImplementationVulkanName);
   displays.clear();
-  GetEGLInitDisplays(true, true, true, true, command_line.get(), &displays);
+  GetEGLInitDisplays(true, true, true, true, true, command_line.get(),
+                     &displays);
   EXPECT_TRUE(base::Contains(displays, gl::ANGLE_VULKAN));
   EXPECT_EQ(displays.size(), 1u);
+
+  // Vulkan/SwiftShader
+  command_line->AppendSwitchASCII(switches::kUseANGLE,
+                                  gl::kANGLEImplementationSwiftShaderName);
+  displays.clear();
+  GetEGLInitDisplays(true, true, true, true, true, command_line.get(),
+                     &displays);
+  EXPECT_TRUE(base::Contains(displays, gl::ANGLE_SWIFTSHADER));
+  EXPECT_EQ(displays.size(), 1u);
 }
 
 TEST(EGLInitializationDisplaysTest, NoExtensions) {
@@ -126,7 +144,8 @@
 
   // With no angle platform extensions, only DEFAULT should be available
   std::vector<gl::DisplayType> displays;
-  GetEGLInitDisplays(false, false, false, false, command_line.get(), &displays);
+  GetEGLInitDisplays(false, false, false, false, false, command_line.get(),
+                     &displays);
   EXPECT_TRUE(base::Contains(displays, gl::DEFAULT));
   EXPECT_EQ(displays.size(), 1u);
 }
diff --git a/ui/ozone/platform/drm/gpu/drm_device.cc b/ui/ozone/platform/drm/gpu/drm_device.cc
index 9931859..9e049a8 100644
--- a/ui/ozone/platform/drm/gpu/drm_device.cc
+++ b/ui/ozone/platform/drm/gpu/drm_device.cc
@@ -16,7 +16,6 @@
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/memory/free_deleter.h"
-#include "base/message_loop/message_loop.h"
 #include "base/message_loop/message_loop_current.h"
 #include "base/message_loop/message_pump_for_io.h"
 #include "base/task_runner.h"
diff --git a/ui/ozone/platform/wayland/test/wayland_test.h b/ui/ozone/platform/wayland/test/wayland_test.h
index ce5a64b5..e759bf84 100644
--- a/ui/ozone/platform/wayland/test/wayland_test.h
+++ b/ui/ozone/platform/wayland/test/wayland_test.h
@@ -7,7 +7,6 @@
 
 #include <memory>
 
-#include "base/message_loop/message_loop.h"
 #include "base/test/task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/buildflags.h"
diff --git a/ui/shell_dialogs/select_file_dialog_win.cc b/ui/shell_dialogs/select_file_dialog_win.cc
index 6740efa..d36de17 100644
--- a/ui/shell_dialogs/select_file_dialog_win.cc
+++ b/ui/shell_dialogs/select_file_dialog_win.cc
@@ -13,7 +13,6 @@
 #include "base/i18n/case_conversion.h"
 #include "base/logging.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/task_runner_util.h"
 #include "base/threading/thread_task_runner_handle.h"
diff --git a/ui/views/controls/editable_combobox/editable_combobox.cc b/ui/views/controls/editable_combobox/editable_combobox.cc
index 63ae577..b347881c 100644
--- a/ui/views/controls/editable_combobox/editable_combobox.cc
+++ b/ui/views/controls/editable_combobox/editable_combobox.cc
@@ -277,7 +277,7 @@
   // ui::EventHandler overrides.
   void OnMouseEvent(ui::MouseEvent* event) override {
     if (event->type() == ui::ET_MOUSE_PRESSED &&
-        event->flags() == event->changed_button_flags())
+        event->button_flags() == event->changed_button_flags())
       HandlePressEvent(event->root_location());
   }
 
diff --git a/ui/views/controls/editable_combobox/editable_combobox_unittest.cc b/ui/views/controls/editable_combobox/editable_combobox_unittest.cc
index 7cadbff..97966f3 100644
--- a/ui/views/controls/editable_combobox/editable_combobox_unittest.cc
+++ b/ui/views/controls/editable_combobox/editable_combobox_unittest.cc
@@ -249,9 +249,9 @@
 void EditableComboboxTest::PerformMouseEvent(Widget* widget,
                                              const gfx::Point& point,
                                              const ui::EventType type) {
-  ui::MouseEvent event =
-      ui::MouseEvent(type, point, point, ui::EventTimeForNow(),
-                     ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON);
+  ui::MouseEvent event = ui::MouseEvent(
+      type, point, point, ui::EventTimeForNow(),
+      ui::EF_LEFT_MOUSE_BUTTON | ui::EF_NUM_LOCK_ON, ui::EF_LEFT_MOUSE_BUTTON);
   widget->OnMouseEvent(&event);
 }